#define SURF_DRAWFULLBRIGHT 0x200
#define SURF_LIGHTBOTHSIDES 0x400
#define SURF_CLIPSOLID 0x800 // this polygon can obscure other polygons
+#define SURF_SHADOWCAST 0x1000 // this polygon can cast stencil shadows
+#define SURF_SHADOWLIGHT 0x2000 // this polygon can be lit by stencil shadowing
typedef struct
{
int numverts;
int numtriangles;
float *verts;
+ float *normals;
int *lightmapoffsets;
- float *st;
- float *uv;
- float *ab;
+ float *str;
+ float *uvw;
+ float *abc;
int *index;
+ int *triangleneighbors;
}
surfmesh_t;
float *poly_verts;
// bounding box for onscreen checks, and center for sorting
vec3_t poly_mins, poly_maxs, poly_center;
+ // bounding sphere radius (around poly_center)
+ float poly_radius, poly_radius2;
// these are regenerated every frame
// lighting info
}
mportal_t;
+typedef struct svbspmesh_s
+{
+ struct svbspmesh_s *next;
+ int numverts, maxverts;
+ int numtriangles, maxtriangles;
+ float *verts;
+ int *elements;
+}
+svbspmesh_t;
+
typedef struct mlight_s
{
// location of light
float distbias;
// light style controlling this light
int style;
- // used only for loading calculations, number of leafs this shines on
- //int numleafs;
+ // maximum extent of the light for various purposes
+ float cullradius;
+ float cullradius2;
+ // surfaces this shines on
+ int numsurfaces;
+ msurface_t **surfaces;
+ // lit area
+ vec3_t mins, maxs;
+ // precomputed shadow volume meshs
+ //svbspmesh_t *shadowvolume;
+ //vec3_t shadowvolumemins, shadowvolumemaxs;
+ shadowmesh_t *shadowvolume;
}
mlight_t;