]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - client.h
implemented occlusion query support on corona rendering, this enables
[xonotic/darkplaces.git] / client.h
index 0401a27735690b0307e95c0aae219ef4600b95c9..d75c5e2ff4011079eb2ca7d7eaa60c8acb3d3617 100644 (file)
--- a/client.h
+++ b/client.h
@@ -109,6 +109,10 @@ typedef struct rtlight_s
        // rendering properties, updated each time a light is rendered
        // this is rtlight->color * d_lightstylevalue
        vec3_t currentcolor;
+       // used by corona updates, due to occlusion query
+       float corona_visibility;
+       unsigned int corona_queryindex_visiblepixels;
+       unsigned int corona_queryindex_allpixels;
        // this is R_Shadow_Cubemap(rtlight->cubemapname)
        rtexture_t *currentcubemap;
 
@@ -247,7 +251,7 @@ typedef struct entity_render_s
        float scale;
 
        // NULL = no model
-       model_t *model;
+       dp_model_t *model;
        // number of the entity represents, or 0 for non-network entities
        int entitynumber;
        // literal colormap colors for renderer, if both are 0 0 0 it is not colormapped
@@ -355,8 +359,9 @@ typedef struct usercmd_s
        vec_t   cursor_fraction;
        int             cursor_entitynumber;
 
-       double time;
-       double receivetime;
+       double time; // time the move is executed for (cl_movement: clienttime, non-cl_movement: receivetime)
+       double receivetime; // time the move was received at
+       double clienttime; // time to which server state the move corresponds to
        int msec; // for predicted moves
        int buttons;
        int impulse;
@@ -396,7 +401,8 @@ typedef struct scoreboard_s
 typedef struct cshift_s
 {
        float   destcolor[3];
-       float   percent;                // 0-256
+       float   percent;                // 0-255
+       float   alphafade;      // (any speed)
 } cshift_t;
 
 #define        CSHIFT_CONTENTS 0
@@ -459,10 +465,12 @@ typedef struct capturevideostate_s
        fs_offset_t videofile_ix_master_video_inuse_offset;
        fs_offset_t videofile_ix_master_video_start_offset;
        fs_offset_t videofile_ix_movistart;
+       fs_offset_t position;
        qfile_t *videofile;
        qboolean active;
        qboolean realtime;
        qboolean error;
+       qboolean canseek;
        capturevideoformat_t format;
        int soundrate;
        int frame;
@@ -475,6 +483,8 @@ typedef struct capturevideostate_s
        sizebuf_t riffindexbuffer;
        int riffstacklevel;
        fs_offset_t riffstackstartoffset[4];
+       fs_offset_t riffstacksizehint[4];
+       const char *riffstackfourcc[4];
        short rgbtoyuvscaletable[3][3][256];
        unsigned char yuvnormalizetable[3][256];
        char basename[64];
@@ -516,11 +526,13 @@ typedef struct client_static_s
        // list of demos in loop
        char demos[MAX_DEMOS][MAX_DEMONAME];
        // the actively playing demo (set by CL_PlayDemo_f)
-       char demoname[64];
+       char demoname[MAX_QPATH];
 
 // demo recording info must be here, because record is started before
 // entering a map (and clearing client_state_t)
        qboolean demorecording;
+       fs_offset_t demo_lastcsprogssize;
+       int demo_lastcsprogscrc;
        qboolean demoplayback;
        qboolean timedemo;
        // -1 = use normal cd track
@@ -585,6 +597,7 @@ typedef struct client_static_s
        double qw_downloadspeedtime;
        int qw_downloadspeedcount;
        int qw_downloadspeedrate;
+       qboolean qw_download_deflate;
 
        // current file upload buffer (for uploading screenshots to server)
        unsigned char *qw_uploaddata;
@@ -629,7 +642,8 @@ typedef enum
        PARTICLE_BILLBOARD = 0,
        PARTICLE_SPARK = 1,
        PARTICLE_ORIENTED_DOUBLESIDED = 2,
-       PARTICLE_BEAM = 3
+       PARTICLE_BEAM = 3,
+       PARTICLE_INVALID = -1
 }
 porientation_t;
 
@@ -637,7 +651,8 @@ typedef enum
 {
        PBLEND_ALPHA = 0,
        PBLEND_ADD = 1,
-       PBLEND_MOD = 2
+       PBLEND_INVMOD = 2,
+       PBLEND_INVALID = -1
 }
 pblend_t;
 
@@ -670,7 +685,7 @@ typedef struct decal_s
        // fields not used by rendering: (36 bytes in 32bit, 40 bytes in 64bit)
        float                   time2; // used for decal fade
        unsigned int    owner; // decal stuck to this entity
-       model_t                 *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
+       dp_model_t                      *ownermodel; // model the decal is stuck to (used to make sure the entity is still alive)
        vec3_t                  relativeorigin; // decal at this location in entity's coordinate space
        vec3_t                  relativenormal; // decal oriented this way relative to entity's coordinate space
 }
@@ -679,14 +694,17 @@ decal_t;
 typedef struct particle_s
 {
        // fields used by rendering: (40 bytes)
-       unsigned short  typeindex;
-       unsigned short  texnum;
+       unsigned char   typeindex;
+       pblend_t   blendmode;
+       porientation_t   orientation;
+       unsigned char   texnum;
        vec3_t                  org;
        vec3_t                  vel; // velocity of particle, or orientation of decal, or end point of beam
        float                   size;
        float                   alpha; // 0-255
        unsigned char   color[3];
        unsigned char   qualityreduction; // enables skipping of this particle according to r_refdef.view.qualityreduction
+       float           stretch; // only for sparks
 
        // fields not used by rendering:  (40 bytes)
        float                   sizeincrease; // rate of size change per second
@@ -878,10 +896,10 @@ typedef struct client_state_s
        int gametype;
 
        // models and sounds used by engine code (particularly cl_parse.c)
-       model_t *model_bolt;
-       model_t *model_bolt2;
-       model_t *model_bolt3;
-       model_t *model_beam;
+       dp_model_t *model_bolt;
+       dp_model_t *model_bolt2;
+       dp_model_t *model_bolt3;
+       dp_model_t *model_beam;
        sfx_t *sfx_wizhit;
        sfx_t *sfx_knighthit;
        sfx_t *sfx_tink1;
@@ -1180,7 +1198,7 @@ void CL_ValidateState(entity_state_t *s);
 void CL_MoveLerpEntityStates(entity_t *ent);
 void CL_LerpUpdate(entity_t *e);
 void CL_ParseTEnt (void);
-void CL_NewBeam (int ent, vec3_t start, vec3_t end, model_t *m, int lightning);
+void CL_NewBeam (int ent, vec3_t start, vec3_t end, dp_model_t *m, int lightning);
 void CL_RelinkBeams (void);
 void CL_Beam_CalculatePositions (const beam_t *b, vec3_t start, vec3_t end);
 void CL_ClientMovement_Replay(void);
@@ -1212,6 +1230,9 @@ void CL_StopPlayback(void);
 void CL_ReadDemoMessage(void);
 void CL_WriteDemoMessage(sizebuf_t *mesage);
 
+void CL_CutDemo(unsigned char **buf, fs_offset_t *filesize);
+void CL_PasteDemo(unsigned char **buf, fs_offset_t *filesize);
+
 void CL_NextDemo(void);
 void CL_Stop_f(void);
 void CL_Record_f(void);
@@ -1458,7 +1479,7 @@ typedef struct r_refdef_scene_s {
        entity_render_t *worldentity;
 
        // same as worldentity->model
-       model_t *worldmodel;
+       dp_model_t *worldmodel;
 
        // renderable entities (excluding world)
        entity_render_t **entities;