+typedef struct rtlight_s
+{
+ // shadow volumes are done entirely in model space, so there are no matrices for dealing with them... they just use the origin
+
+ // note that the world to light matrices are inversely scaled (divided) by lightradius
+
+ // core properties
+ // matrix for transforming world coordinates to light filter coordinates
+ matrix4x4_t matrix_worldtolight;
+ // based on worldtolight this transforms -1 to +1 to 0 to 1 for purposes
+ // of attenuation texturing in full 3D (Z result often ignored)
+ matrix4x4_t matrix_worldtoattenuationxyz;
+ // this transforms only the Z to S, and T is always 0.5
+ matrix4x4_t matrix_worldtoattenuationz;
+ // typically 1 1 1, can be lower (dim) or higher (overbright)
+ vec3_t color;
+ // size of the light (remove?)
+ vec_t radius;
+ // light filter
+ char cubemapname[64];
+ // light style to monitor for brightness
+ int style;
+ // whether light should render shadows
+ int shadow;
+ // intensity of corona to render
+ vec_t corona;
+ // radius scale of corona to render (1.0 means same as light radius)
+ vec_t coronasizescale;
+ // ambient intensity to render
+ vec_t ambientscale;
+ // diffuse intensity to render
+ vec_t diffusescale;
+ // specular intensity to render
+ vec_t specularscale;
+ // LIGHTFLAG_* flags
+ int flags;
+
+ // generated properties
+ // used only for shadow volumes
+ vec3_t shadoworigin;
+ // culling
+ vec3_t cullmins;
+ vec3_t cullmaxs;
+ // culling
+ //vec_t cullradius;
+ // squared cullradius
+ //vec_t cullradius2;
+
+ // lightmap renderer stuff (remove someday!)
+ // the size of the light
+ vec_t lightmap_cullradius;
+ // the size of the light, squared
+ vec_t lightmap_cullradius2;
+ // the brightness of the light
+ vec3_t lightmap_light;
+ // to avoid sudden brightness change at cullradius, subtract this
+ vec_t lightmap_subtract;
+
+ // static light info
+ // true if this light should be compiled as a static light
+ int isstatic;
+ // true if this is a compiled world light, cleared if the light changes
+ int compiled;
+ // premade shadow volumes and lit surfaces to render for world entity
+ shadowmesh_t *static_meshchain_shadow;
+ shadowmesh_t *static_meshchain_light;
+ // used for visibility testing (more exact than bbox)
+ int static_numclusters;
+ int static_numclusterpvsbytes;
+ int *static_clusterlist;
+ qbyte *static_clusterpvs;
+}
+rtlight_t;
+
+typedef struct dlight_s