- int visframe; // should be drawn when node is crossed
-
- mplane_t *plane;
- int flags;
-
- int firstedge; // look up in model->surfedges[], negative numbers
- int numedges; // are backwards edges
-
- short texturemins[2];
- short extents[2];
-
- int light_s, light_t; // gl lightmap coordinates
-
- glpoly_t *polys; // multiple if warped
- struct msurface_s *texturechain;
-
- mtexinfo_t *texinfo;
-
-// lighting info
- int dlightframe;
- int dlightbits[8];
+ // surface number, to avoid having to do a divide to find the number of a surface from it's address
+ int number;
+ // should be drawn if visframe == r_framecount (set by PrepareSurfaces)
+ int visframe;
+ // should be drawn if onscreen and not a backface (used for setting visframe)
+ //int pvsframe;
+ // chain of surfaces marked visible by pvs
+ //struct msurface_s *pvschain;
+
+ // the node plane this is on, backwards if SURF_PLANEBACK flag set
+ mplane_t *plane;
+ // SURF_ flags
+ int flags;
+ // rendering chain
+ struct msurface_s *texturechain;
+
+ // look up in model->surfedges[], negative numbers are backwards edges
+ int firstedge;
+ int numedges;
+
+ short texturemins[2];
+ short extents[2];
+
+ mtexinfo_t *texinfo;
+
+ // 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;
+
+ // these fields are generated during model loading
+ // the lightmap texture fragment to use on the surface
+ rtexture_t *lightmaptexture;
+ // the stride when building lightmaps to comply with fragment update
+ int lightmaptexturestride;
+ // mesh for rendering
+ surfmesh_t *mesh;
+
+ // 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;
+ // bounding box for onscreen checks, and center for sorting
+ vec3_t poly_mins, poly_maxs, poly_center;
+
+ // neighboring surfaces (one per poly_numverts)
+ struct msurface_s **neighborsurfaces;
+ // currently used only for generating static shadow volumes
+ int castshadow;
+
+ // these are regenerated every frame
+ // lighting info
+ int dlightframe;
+ int dlightbits[8];
+ // avoid redundent addition of dlights
+ int lightframe;
+ // only render each surface once
+ //int worldnodeframe;
+
+ // these cause lightmap updates if regenerated
+ // values currently used in lightmap
+ unsigned short cached_light[MAXLIGHTMAPS];
+ // if lightmap was lit by dynamic lights, force update on next frame
+ short cached_dlight;
+ // to cause lightmap to be rerendered when v_overbrightbits changes
+ short cached_lightmapscalebit;
+ // rerender lightmaps when r_ambient changes
+ float cached_ambient;
+}
+msurface_t;