moved light matrix generation out of the render code and into the light creation...
[xonotic/darkplaces.git] / r_light.h
1
2 #ifndef R_LIGHT_H
3 #define R_LIGHT_H
4
5 typedef struct
6 {
7         vec3_t origin;
8         vec_t cullradius2; // only for culling comparisons, squared version
9         vec3_t light; // the brightness of the light
10         vec_t cullradius; // only for culling comparisons
11         vec_t subtract; // to avoid sudden brightness change at cullradius, subtract this
12         entity_render_t *ent; // owner of this light
13
14         matrix4x4_t matrix_lighttoworld;
15         matrix4x4_t matrix_worldtolight;
16         matrix4x4_t matrix_worldtoattenuationxyz;
17         matrix4x4_t matrix_worldtoattenuationz;
18
19         vec3_t color;
20         vec_t radius;
21         int cubemapnum;
22         int shadow;
23         vec_t corona;
24 }
25 rdlight_t;
26
27 extern int r_numdlights;
28 extern rdlight_t r_dlight[MAX_DLIGHTS];
29
30 void R_BuildLightList(void);
31 void R_AnimateLight(void);
32 void R_MarkLights(entity_render_t *ent);
33 void R_DrawCoronas(void);
34 void R_CompleteLightPoint(vec3_t ambientcolor, vec3_t diffusecolor, vec3_t diffusenormal, const vec3_t p, int dynamic, const mleaf_t *leaf);
35 int R_LightModel(float *ambient4f, float *diffusecolor, float *diffusenormal, const entity_render_t *ent, float colorr, float colorg, float colorb, float colora, int worldcoords);
36 void R_LightModel_CalcVertexColors(const float *ambientcolor4f, const float *diffusecolor, const float *diffusenormal, int numverts, const float *vertex3f, const float *normal3f, float *color4f);
37 void R_UpdateEntLights(entity_render_t *ent);
38
39 #endif
40