-typedef struct
-{
- float vecs[2][4];
- texture_t *texture;
- int flags;
-}
-mtexinfo_t;
-
-struct q3deffect_s;
-typedef struct msurface_s
-{
- // bounding box for onscreen checks
- vec3_t mins;
- vec3_t maxs;
- // the texture to use on the surface
- texture_t *texture;
- // the lightmap texture fragment to use on the rendering mesh
- rtexture_t *lightmaptexture;
- // mesh for rendering
- surfmesh_t mesh;
- // index into model->brush.shadowmesh
- int num_firstshadowmeshtriangle;
-
- // the node plane this is on, backwards if SURF_PLANEBACK flag set
- //mplane_t *plane; // q1bsp
- // SURF_ flags
- //int flags; // q1bsp
- // texture mapping properties used by this surface
- mtexinfo_t *texinfo; // q1bsp
- // index into d_lightstylevalue array, 255 means not used (black)
- qbyte styles[MAXLIGHTMAPS]; // q1bsp
- // RGB lighting data [numstyles][height][width][3]
- qbyte *samples; // q1bsp
- // stain to apply on lightmap (soot/dirt/blood/whatever)
- qbyte *stainsamples; // q1bsp
- // the stride when building lightmaps to comply with fragment update
- int lightmaptexturestride; // q1bsp
- int texturemins[2]; // q1bsp
- int extents[2]; // q1bsp
- // if lightmap settings changed, this forces update
- int cached_dlight; // q1bsp
- // if this == r_framecount there are dynamic lights on the surface
- int dlightframe; // q1bsp
- // which dynamic lights are touching this surface
- // (only access this if dlightframe is current)
- int dlightbits[8]; // q1bsp
-
- struct q3deffect_s *effect; // q3bsp
- // FIXME: collisionmarkframe should be kept in a separate array
- int collisionmarkframe; // q3bsp // don't collide twice in one trace
-}
-msurface_t;