// color and initial alpha value
float texcoord2f[3][2];
float vertex3f[3][3];
- unsigned char color4ub[3][4];
+ float color4f[3][4];
+ float plane[4]; // backface culling
// how long this decal has lived so far (the actual fade begins at cl_decals_time)
float lived;
// if >= 0 this indicates the decal should follow an animated triangle
}
beam_t;
+typedef struct rtlight_particle_s
+{
+ float origin[3];
+ float color[3];
+}
+rtlight_particle_t;
+
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
/// masks of all shadowmap sides that have any potential static receivers or casters
int static_shadowmap_receivers;
int static_shadowmap_casters;
+ /// particle-tracing cache for global illumination
+ int particlecache_numparticles;
+ int particlecache_maxparticles;
+ int particlecache_updateparticle;
+ rtlight_particle_t *particlecache_particles;
+
+ /// bouncegrid light info
+ float photoncolor[3];
+ float photons;
}
rtlight_t;
}
dlight_t;
-#define MAX_FRAMEGROUPBLENDS 4
-typedef struct framegroupblend_s
-{
- // animation number and blend factor
- // (for most models this is the frame number)
- int frame;
- float lerp;
- // time frame began playing (for framegroup animations)
- double start;
-}
-framegroupblend_t;
-
// this is derived from processing of the framegroupblend array
// note: technically each framegroupblend can produce two of these, but that
// never happens in practice because no one blends between more than 2
float *animcache_svector3f;
float *animcache_tvector3f;
// interleaved arrays for rendering and dynamic vertex buffers for them
- r_vertexposition_t *animcache_vertexposition;
- r_meshbuffer_t *animcache_vertexpositionbuffer;
+ r_meshbuffer_t *animcache_vertex3fbuffer;
r_vertexmesh_t *animcache_vertexmesh;
r_meshbuffer_t *animcache_vertexmeshbuffer;
// FIELDS UPDATED BY RENDERER:
// last time visible during trace culling
double last_trace_visibility;
+
+ // user wavefunc parameters (from csqc)
+ float userwavefunc_param[Q3WAVEFUNC_USER_COUNT];
}
entity_render_t;
typedef enum capturevideoformat_e
{
CAPTUREVIDEOFORMAT_AVI_I420,
- CAPTUREVIDEOFORMAT_OGG_VORBIS_THEORA,
+ CAPTUREVIDEOFORMAT_OGG_VORBIS_THEORA
}
capturevideoformat_t;
// password spectator name team skin topcolor bottomcolor rate noaim msg *ver *ip
char userinfo[MAX_USERINFO_STRING];
+ // extra user info for the "connect" command
+ char connect_userinfo[MAX_USERINFO_STRING];
+
// video capture stuff
capturevideostate_t capturevideo;
+
+ // crypto channel
+ crypto_t crypto;
+
+ // ProQuake compatibility stuff
+ int proquake_servermod; // 0 = not proquake, 1 = proquake
+ int proquake_serverversion; // actual proquake server version * 10 (3.40 = 34, etc)
+ int proquake_serverflags; // 0 (PQF_CHEATFREE not supported)
}
client_static_t;
qboolean oldonground;
double lastongroundtime;
double hitgroundtime;
+ float bob2_smooth;
+ float bobfall_speed;
+ float bobfall_swing;
// don't change view angle, full screen, etc
int intermission;
float movevars_maxairspeed;
float movevars_stepheight;
float movevars_airaccel_qw;
+ float movevars_airaccel_qw_stretchfactor;
float movevars_airaccel_sideways_friction;
float movevars_airstopaccelerate;
float movevars_airstrafeaccelerate;
float movevars_maxairstrafespeed;
+ float movevars_airstrafeaccel_qw;
float movevars_aircontrol;
float movevars_aircontrol_power;
+ float movevars_aircontrol_penalty;
float movevars_warsowbunny_airforwardaccel;
float movevars_warsowbunny_accel;
float movevars_warsowbunny_topspeed;
float movevars_warsowbunny_turnaccel;
float movevars_warsowbunny_backtosideratio;
float movevars_ticrate;
+ float movevars_airspeedlimit_nonqw;
// models used by qw protocol
int qw_modelindex_spike;
// server entity number corresponding to a clientside entity
unsigned short csqc_server2csqcentitynumber[MAX_EDICTS];
qboolean csqc_loaded;
- vec3_t csqc_origin;
- vec3_t csqc_angles;
+ vec3_t csqc_vieworigin;
+ vec3_t csqc_viewangles;
+ vec3_t csqc_vieworiginfromengine;
+ vec3_t csqc_viewanglesfromengine;
+ matrix4x4_t csqc_viewmodelmatrixfromengine;
qboolean csqc_usecsqclistener;
matrix4x4_t csqc_listenermatrix;
char csqc_printtextbuf[MAX_INPUTLINE];
// freed on each level change
size_t buildlightmapmemorysize;
unsigned char *buildlightmapmemory;
+
+ // used by EntityState5_ReadUpdate
+ skeleton_t *engineskeletonobjects;
}
client_state_t;
void CL_Shutdown (void);
void CL_Init (void);
-void CL_EstablishConnection(const char *host);
+void CL_EstablishConnection(const char *host, int firstarg);
void CL_Disconnect (void);
void CL_Disconnect_f (void);
int particles;
int drawndecals;
int totaldecals;
- int meshes;
- int meshes_elements;
+ int draws;
+ int draws_vertices;
+ int draws_elements;
int lights;
int lights_clears;
int lights_scissored;
int lights_lighttriangles;
int lights_shadowtriangles;
int lights_dynamicshadowtriangles;
+ int bouncegrid_lights;
+ int bouncegrid_particles;
+ int bouncegrid_traces;
+ int bouncegrid_hits;
+ int bouncegrid_splats;
+ int bouncegrid_bounces;
+ int collisioncache_animated;
+ int collisioncache_cached;
+ int collisioncache_traced;
int bloom;
int bloom_copypixels;
int bloom_drawpixels;
int indexbufferuploadsize;
int vertexbufferuploadcount;
int vertexbufferuploadsize;
+ int framedatacurrent;
+ int framedatasize;
}
r_refdef_stats_t;
int width;
int height;
int depth;
- r_viewport_t viewport;
+ r_viewport_t viewport; // note: if r_viewscale is used, the viewport.width and viewport.height may be less than width and height
// which color components to allow (for anaglyph glasses)
int colormask[4];
entity_render_t *tempentities;
int numtempentities;
int maxtempentities;
+ qboolean expandtempentities;
// renderable dynamic lights
rtlight_t *lights[MAX_DLIGHTS];
float fog_height_texcoordscale;
char fogheighttexturename[64]; // detects changes to active fog height texture
- qboolean draw2dstage;
+ int draw2dstage; // 0 = no, 1 = yes, other value = needs setting up again
// true during envmap command capture
qboolean envmap;
float shadowpolygonfactor;
float shadowpolygonoffset;
+ // how long R_RenderView took on the previous frame
+ double lastdrawscreentime;
+
// rendering stats for r_speeds display
// (these are incremented in many places)
r_refdef_stats_t stats;
extern r_refdef_t r_refdef;
+// warpzone prediction hack (CSQC builtin)
+void CL_RotateMoves(const matrix4x4_t *m);
+
#endif