]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
this patch adds a number of stereo viewing modes (shutter glasses and video glasses...
[xonotic/darkplaces.git] / client.h
index 578cd68443b99772f5172e0fa75b4981d864706a..8e040c95ce365473a4a9a27240d2a79032d80f5d 100644 (file)
--- a/client.h
+++ b/client.h
@@ -70,20 +70,122 @@ typedef struct
 }
 beam_t;
 
-typedef struct
+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];
+       // whether light should render shadows
+       int shadow;
+       // intensity of corona to render
+       vec_t corona;
+       // light style to monitor for brightness
+       int style;
+       
+       // 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
 {
+       // destroy light after this time
+       // (dlight only)
+       vec_t die;
+       // the entity that owns this light (can be NULL)
+       // (dlight only)
+       struct entity_render_s *ent;
        // location
-       vec3_t  origin;
-       // stop lighting after this time
-       float   die;
+       // (worldlight: saved to .rtlights file)
+       vec3_t origin;
+       // worldlight orientation
+       // (worldlight only)
+       // (worldlight: saved to .rtlights file)
+       vec3_t angles;
+       // dlight orientation/scaling/location
+       // (dlight only)
+       matrix4x4_t matrix;
        // color of light
-       vec3_t  color;
+       // (worldlight: saved to .rtlights file)
+       vec3_t color;
+       // cubemap number to use on this light
+       // (dlight only)
+       int cubemapnum;
+       // cubemap name to use on this light
+       // (worldlight only)
+       // (worldlight: saved to .rtlights file)
+       char cubemapname[64];
+       // make light flash while selected
+       // (worldlight only)
+       int selected;
        // brightness (not really radius anymore)
-       float   radius;
-       // drop this each second
-       float   decay;
-       // the entity that owns this light (can be NULL)
-       struct entity_render_s *ent;
+       // (worldlight: saved to .rtlights file)
+       vec_t radius;
+       // drop radius this much each second
+       // (dlight only)
+       vec_t decay;
+       // light style which controls intensity of this light
+       // (worldlight: saved to .rtlights file)
+       int style;
+       // cast shadows
+       // (worldlight: saved to .rtlights file)
+       int shadow;
+       // corona intensity
+       // (worldlight: saved to .rtlights file)
+       vec_t corona;
+       // linked list of world lights
+       // (worldlight only)
+       struct dlight_s *next;
+       // embedded rtlight struct for renderer
+       // (renderer only)      
+       rtlight_t rtlight;
 }
 dlight_t;
 
@@ -267,6 +369,8 @@ typedef struct
        int demonum;
        // list of demos in loop
        char demos[MAX_DEMOS][MAX_DEMONAME];
+       // the actively playing demo (set by CL_PlayDemo_f)
+       char demoname[64];
 
 // demo recording info must be here, because record is started before
 // entering a map (and clearing client_state_t)
@@ -282,6 +386,10 @@ typedef struct
        int td_startframe;
        // realtime at second frame of timedemo (LordHavoc: changed to double)
        double td_starttime;
+       // LordHavoc: for measuring maxfps
+       double td_minframetime;
+       // LordHavoc: for measuring minfps
+       double td_maxframetime;
        // LordHavoc: pausedemo
        qboolean demopaused;
 
@@ -444,6 +552,7 @@ extern mempool_t *cl_scores_mempool;
 //
 extern cvar_t cl_name;
 extern cvar_t cl_color;
+extern cvar_t cl_rate;
 extern cvar_t cl_pmodel;
 
 extern cvar_t cl_upspeed;
@@ -478,6 +587,11 @@ extern cvar_t m_side;
 extern cvar_t r_draweffects;
 
 extern cvar_t cl_explosions;
+extern cvar_t cl_explosions_alpha_start;
+extern cvar_t cl_explosions_alpha_end;
+extern cvar_t cl_explosions_size_start;
+extern cvar_t cl_explosions_size_end;
+extern cvar_t cl_explosions_lifetime;
 extern cvar_t cl_stainmaps;
 
 // these are updated by CL_ClearState
@@ -499,7 +613,7 @@ extern lightstyle_t *cl_lightstyle;
 
 extern client_state_t cl;
 
-extern void CL_AllocDlight (entity_render_t *ent, vec3_t org, float radius, float red, float green, float blue, float decay, float lifetime);
+extern void CL_AllocDlight (entity_render_t *ent, matrix4x4_t *matrix, float radius, float red, float green, float blue, float decay, float lifetime, int cubemapnum, int style, int shadowenable, vec_t corona);
 extern void CL_DecayLights (void);
 
 //=============================================================================
@@ -557,7 +671,7 @@ void CL_BaseMove (usercmd_t *cmd);
 
 
 float CL_KeyState (kbutton_t *key);
-char *Key_KeynumToString (int keynum);
+const char *Key_KeynumToString (int keynum);
 
 //
 // cl_demo.c
@@ -640,6 +754,9 @@ typedef struct
        // view transform
        matrix4x4_t viewentitymatrix;
 
+       // which color components to allow (for anaglyph glasses)
+       int colormask[4];
+
        // fullscreen color blend
        float viewblend[4];
 
@@ -659,7 +776,5 @@ extern mempool_t *cl_refdef_mempool;
 
 #include "cgamevm.h"
 
-void Host_PerformSpawnServerAndLoadGame(void);
-
 #endif