#ifndef _3DSURF_H_INCLUDED_
#define _3DSURF_H_INCLUDED_

//              Флаги - допустимость / управляющие для элементов сетки
#define         SURF_NORMALS                    1
#define         SURF_COLORS                     2
#define         SURF_TEXCOORDS                  4
#define         SURF_FACENORMALS                8

struct          surface_t
{
  //            Эти поля являются общими для всех объектов - сеток =======
  //            Количество вершин, нормалей и цветов
  int           nvertices;
  //            Вершины
  vector_t      *vertex;
  //            Нормали к вершинам (закраска Гуро)
  vector_t      *normal;
  //            Цвета вершин (материал сетки один)
  rgb_t         *color;
  //            Координаты текстуры (текстур. не вып. в тек. версии)
  texcoord_t    *texcoord;
  //            Эти поля являются специфичными для данного объекта =======
  //            Следующая вершина - счетчик используется при добавлении
  int           __nextvtx;
  //            Допустимые (уже обсчитанные) поля
  int           __validfields;
  //            Поля, для которых необходимо выполнить отрисовку
  int           __drawfields;
  //            Размер сетки - число строк и столбцов
  int           k;
  int           l;
  //            Нормали к граням (плоская закраска, промежут. вычисления)
  vector_t      *facenormal;
  //            32 - битовое поле, использование зависит от контекста
  int           Data32;
};

DECLSPEC        surfNew(struct surface_t *surf,int k,int l);
DECLSPEC        surfDelete(struct surface_t *surf);
DECLSPEC        surfAddVtx(struct surface_t *surf,vector_t *vtx,
                           vector_t *nrm,rgb_t *clr,texcoord_t *txc);
//              Это не проверено. Не используйте !!!
DECLSPEC        surfGenerateFaceNorms(struct surface_t *surf);
//              Проверено. НЕ РАБОТАЕТ !!! Не используйте !!!
DECLSPEC        surfGenerateNorms(struct surface_t *surf);
//              Это не проверено. Не используйте !!!
DECLSPEC        surfNormalizeFNorms(struct surface_t *surf);
//              Это не проверено. Не используйте !!!
DECLSPEC        surfNormalizeNorms(struct surface_t *surf);
//              Это не проверено. Не используйте !!!
DECLSPEC        surfCalculateNormals(struct surface_t *surf);
DECLSPEC        surfGetBBox(struct surface_t *surf,
                            vector_t *min,vector_t *max);
DECLSPEC        surfSetBBox(struct surface_t *surf,vector_t *min,
                            vector_t *max);
DECLSPEC        surfTranslate(struct surface_t *surf,vector_t *tr);
DECLSPEC        surfScale(struct surface_t *surf,vector_t *sc);

#endif

