-typedef struct
-{
- float vecs[2][4];
- texture_t *texture;
- int flags;
-}
-mtexinfo_t;
-
-typedef struct msurface_s
-{
- // bounding box for onscreen checks
- vec3_t poly_mins;
- vec3_t poly_maxs;
-
- // the node plane this is on, backwards if SURF_PLANEBACK flag set
- mplane_t *plane;
- // SURF_ flags
- int flags;
- // texture mapping properties used by this surface
- mtexinfo_t *texinfo;
-
- // the lightmap texture fragment to use on the rendering mesh
- rtexture_t *lightmaptexture;
- // mesh for rendering
- surfmesh_t mesh;
- // if lightmap settings changed, this forces update
- int cached_dlight;
-
- // surface number, to avoid having to do a divide to find the number of a surface from it's address
- int number;
-
- // center for sorting transparent meshes
- vec3_t poly_center;
-
- // index into d_lightstylevalue array, 255 means not used (black)
- qbyte styles[MAXLIGHTMAPS];
- // RGB lighting data [numstyles][height][width][3]
- qbyte *samples;
- // stain to apply on lightmap (soot/dirt/blood/whatever)
- qbyte *stainsamples;
- // the stride when building lightmaps to comply with fragment update
- int lightmaptexturestride;
- int texturemins[2];
- int extents[2];
-
- // if this == r_framecount there are dynamic lights on the surface
- int dlightframe;
- // which dynamic lights are touching this surface
- // (only access this if dlightframe is current)
- int dlightbits[8];
- // avoid redundent addition of dlights
- int lightframe;
-
- // avoid multiple collision traces with a surface polygon
- int colframe;
-
- // these are just 3D points defining the outline of the polygon,
- // no texcoord info (that can be generated from these)
- int poly_numverts;
- float *poly_verts;
-
- // index into model->brush.shadowmesh
- int num_firstshadowmeshtriangle;
-
- // neighboring surfaces (one per poly_numverts)
- //struct msurface_s **neighborsurfaces;
- // currently used only for generating static shadow volumes
- int lighttemp_castshadow;
-
- // avoid redundent surface shadows
- int shadowmark;
-}
-msurface_t;