#include "matrixlib.h"
#include "snd_main.h"
+// NOTE: r_stat_name[] must match this indexing
+typedef enum r_stat_e
+{
+ r_stat_timedelta,
+ r_stat_quality,
+ r_stat_renders,
+ r_stat_entities,
+ r_stat_entities_surfaces,
+ r_stat_entities_triangles,
+ r_stat_world_leafs,
+ r_stat_world_portals,
+ r_stat_world_surfaces,
+ r_stat_world_triangles,
+ r_stat_lightmapupdates,
+ r_stat_lightmapupdatepixels,
+ r_stat_particles,
+ r_stat_drawndecals,
+ r_stat_totaldecals,
+ r_stat_draws,
+ r_stat_draws_vertices,
+ r_stat_draws_elements,
+ r_stat_lights,
+ r_stat_lights_clears,
+ r_stat_lights_scissored,
+ r_stat_lights_lighttriangles,
+ r_stat_lights_shadowtriangles,
+ r_stat_lights_dynamicshadowtriangles,
+ r_stat_bouncegrid_lights,
+ r_stat_bouncegrid_particles,
+ r_stat_bouncegrid_traces,
+ r_stat_bouncegrid_hits,
+ r_stat_bouncegrid_splats,
+ r_stat_bouncegrid_bounces,
+ r_stat_photoncache_animated,
+ r_stat_photoncache_cached,
+ r_stat_photoncache_traced,
+ r_stat_bloom,
+ r_stat_bloom_copypixels,
+ r_stat_bloom_drawpixels,
+ r_stat_indexbufferuploadcount,
+ r_stat_indexbufferuploadsize,
+ r_stat_vertexbufferuploadcount,
+ r_stat_vertexbufferuploadsize,
+ r_stat_framedatacurrent,
+ r_stat_framedatasize,
+ r_stat_animcache_vertexmesh_count,
+ r_stat_animcache_vertexmesh_vertices,
+ r_stat_animcache_vertexmesh_maxvertices,
+ r_stat_animcache_skeletal_count,
+ r_stat_animcache_skeletal_bones,
+ r_stat_animcache_skeletal_maxbones,
+ r_stat_animcache_shade_count,
+ r_stat_animcache_shade_vertices,
+ r_stat_animcache_shade_maxvertices,
+ r_stat_animcache_shape_count,
+ r_stat_animcache_shape_vertices,
+ r_stat_animcache_shape_maxvertices,
+ r_stat_batch_batches,
+ r_stat_batch_withgaps,
+ r_stat_batch_surfaces,
+ r_stat_batch_vertices,
+ r_stat_batch_triangles,
+ r_stat_batch_fast_batches,
+ r_stat_batch_fast_surfaces,
+ r_stat_batch_fast_vertices,
+ r_stat_batch_fast_triangles,
+ r_stat_batch_copytriangles_batches,
+ r_stat_batch_copytriangles_surfaces,
+ r_stat_batch_copytriangles_vertices,
+ r_stat_batch_copytriangles_triangles,
+ r_stat_batch_dynamic_batches,
+ r_stat_batch_dynamic_surfaces,
+ r_stat_batch_dynamic_vertices,
+ r_stat_batch_dynamic_triangles,
+ r_stat_batch_dynamicskeletal_batches,
+ r_stat_batch_dynamicskeletal_surfaces,
+ r_stat_batch_dynamicskeletal_vertices,
+ r_stat_batch_dynamicskeletal_triangles,
+ r_stat_batch_dynamic_batches_because_cvar,
+ r_stat_batch_dynamic_surfaces_because_cvar,
+ r_stat_batch_dynamic_vertices_because_cvar,
+ r_stat_batch_dynamic_triangles_because_cvar,
+ r_stat_batch_dynamic_batches_because_lightmapvertex,
+ r_stat_batch_dynamic_surfaces_because_lightmapvertex,
+ r_stat_batch_dynamic_vertices_because_lightmapvertex,
+ r_stat_batch_dynamic_triangles_because_lightmapvertex,
+ r_stat_batch_dynamic_batches_because_deformvertexes_autosprite,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_autosprite,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_autosprite,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_autosprite,
+ r_stat_batch_dynamic_batches_because_deformvertexes_autosprite2,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_autosprite2,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_autosprite2,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_autosprite2,
+ r_stat_batch_dynamic_batches_because_deformvertexes_normal,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_normal,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_normal,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_normal,
+ r_stat_batch_dynamic_batches_because_deformvertexes_wave,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_wave,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_wave,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_wave,
+ r_stat_batch_dynamic_batches_because_deformvertexes_bulge,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_bulge,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_bulge,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_bulge,
+ r_stat_batch_dynamic_batches_because_deformvertexes_move,
+ r_stat_batch_dynamic_surfaces_because_deformvertexes_move,
+ r_stat_batch_dynamic_vertices_because_deformvertexes_move,
+ r_stat_batch_dynamic_triangles_because_deformvertexes_move,
+ r_stat_batch_dynamic_batches_because_tcgen_lightmap,
+ r_stat_batch_dynamic_surfaces_because_tcgen_lightmap,
+ r_stat_batch_dynamic_vertices_because_tcgen_lightmap,
+ r_stat_batch_dynamic_triangles_because_tcgen_lightmap,
+ r_stat_batch_dynamic_batches_because_tcgen_vector,
+ r_stat_batch_dynamic_surfaces_because_tcgen_vector,
+ r_stat_batch_dynamic_vertices_because_tcgen_vector,
+ r_stat_batch_dynamic_triangles_because_tcgen_vector,
+ r_stat_batch_dynamic_batches_because_tcgen_environment,
+ r_stat_batch_dynamic_surfaces_because_tcgen_environment,
+ r_stat_batch_dynamic_vertices_because_tcgen_environment,
+ r_stat_batch_dynamic_triangles_because_tcgen_environment,
+ r_stat_batch_dynamic_batches_because_tcmod_turbulent,
+ r_stat_batch_dynamic_surfaces_because_tcmod_turbulent,
+ r_stat_batch_dynamic_vertices_because_tcmod_turbulent,
+ r_stat_batch_dynamic_triangles_because_tcmod_turbulent,
+ r_stat_batch_dynamic_batches_because_interleavedarrays,
+ r_stat_batch_dynamic_surfaces_because_interleavedarrays,
+ r_stat_batch_dynamic_vertices_because_interleavedarrays,
+ r_stat_batch_dynamic_triangles_because_interleavedarrays,
+ r_stat_batch_dynamic_batches_because_nogaps,
+ r_stat_batch_dynamic_surfaces_because_nogaps,
+ r_stat_batch_dynamic_vertices_because_nogaps,
+ r_stat_batch_dynamic_triangles_because_nogaps,
+ r_stat_batch_dynamic_batches_because_derived,
+ r_stat_batch_dynamic_surfaces_because_derived,
+ r_stat_batch_dynamic_vertices_because_derived,
+ r_stat_batch_dynamic_triangles_because_derived,
+ r_stat_batch_entitycache_count,
+ r_stat_batch_entitycache_surfaces,
+ r_stat_batch_entitycache_vertices,
+ r_stat_batch_entitycache_triangles,
+ r_stat_batch_entityanimate_count,
+ r_stat_batch_entityanimate_surfaces,
+ r_stat_batch_entityanimate_vertices,
+ r_stat_batch_entityanimate_triangles,
+ r_stat_batch_entityskeletal_count,
+ r_stat_batch_entityskeletal_surfaces,
+ r_stat_batch_entityskeletal_vertices,
+ r_stat_batch_entityskeletal_triangles,
+ r_stat_batch_entitystatic_count,
+ r_stat_batch_entitystatic_surfaces,
+ r_stat_batch_entitystatic_vertices,
+ r_stat_batch_entitystatic_triangles,
+ r_stat_batch_entitycustom_count,
+ r_stat_batch_entitycustom_surfaces,
+ r_stat_batch_entitycustom_vertices,
+ r_stat_batch_entitycustom_triangles,
+ r_stat_count // size of array
+}
+r_stat_t;
+
// flags for rtlight rendering
#define LIGHTFLAG_NORMALMODE 1
#define LIGHTFLAG_REALTIMEMODE 2
r_meshbuffer_t *animcache_vertex3fbuffer;
r_vertexmesh_t *animcache_vertexmesh;
r_meshbuffer_t *animcache_vertexmeshbuffer;
+ // gpu-skinning shader needs transforms in a certain format
+ // if this is not NULL, the other animcache variables are NULL
+ float *animcache_skeletaltransform3x4;
// current lighting from map (updated ONLY by client code, not renderer)
vec3_t modellight_ambient;
double last_trace_visibility;
// user wavefunc parameters (from csqc)
- float userwavefunc_param[Q3WAVEFUNC_USER_COUNT];
+ vec_t userwavefunc_param[Q3WAVEFUNC_USER_COUNT];
}
entity_render_t;
typedef struct entity_persistent_s
{
- vec3_t trail_origin;
-
- // particle trail
- float trail_time;
+ vec3_t trail_origin; // previous position for particle trail spawning
+ vec3_t oldorigin; // lerp
+ vec3_t oldangles; // lerp
+ vec3_t neworigin; // lerp
+ vec3_t newangles; // lerp
+ vec_t lerpstarttime; // lerp
+ vec_t lerpdeltatime; // lerp
+ float muzzleflash; // muzzleflash intensity, fades over time
+ float trail_time; // residual error accumulation for particle trail spawning (to keep spacing across frames)
qboolean trail_allowed; // set to false by teleports, true by update code, prevents bad lerps
-
- // muzzleflash fading
- float muzzleflash;
-
- // interpolated movement
-
- // start time of move
- float lerpstarttime;
- // time difference from start to end of move
- float lerpdeltatime;
- // the move itself, start and end
- float oldorigin[3];
- float oldangles[3];
- float neworigin[3];
- float newangles[3];
}
entity_persistent_t;
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)
+
+ // don't write-then-read csprogs.dat (useful for demo playback)
+ unsigned char *caughtcsprogsdata;
+ fs_offset_t caughtcsprogsdatasize;
+
+ int r_speeds_graph_length;
+ int r_speeds_graph_current;
+ int *r_speeds_graph_data;
+
+ // graph scales
+ int r_speeds_graph_datamin[r_stat_count];
+ int r_speeds_graph_datamax[r_stat_count];
}
client_static_t;
float bob2_smooth;
float bobfall_speed;
float bobfall_swing;
+ double calcrefdef_prevtime;
// don't change view angle, full screen, etc
int intermission;
void V_StopPitchDrift (void);
void V_Init (void);
-float V_CalcRoll (vec3_t angles, vec3_t velocity);
+float V_CalcRoll (const vec3_t angles, const vec3_t velocity);
void V_UpdateBlends (void);
void V_ParseDamage (void);
float RSurf_FogVertex(const vec3_t p);
float RSurf_FogPoint(const vec3_t p);
-typedef struct r_refdef_stats_s
-{
- int renders;
- int entities;
- int entities_surfaces;
- int entities_triangles;
- int world_leafs;
- int world_portals;
- int world_surfaces;
- int world_triangles;
- int lightmapupdates;
- int lightmapupdatepixels;
- int particles;
- int drawndecals;
- int totaldecals;
- 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 indexbufferuploadcount;
- int indexbufferuploadsize;
- int vertexbufferuploadcount;
- int vertexbufferuploadsize;
- int framedatacurrent;
- int framedatasize;
-}
-r_refdef_stats_t;
-
typedef enum r_viewport_type_e
{
R_VIEWPORTTYPE_ORTHO,
// rendering stats for r_speeds display
// (these are incremented in many places)
- r_refdef_stats_t stats;
+ int stats[r_stat_count];
}
r_refdef_t;
typedef struct cl_clientmovement_state_s
{
+ // entity to be ignored for movement
+ struct prvm_edict_s *self;
// position
vec3_t origin;
vec3_t velocity;
void V_DriftPitch(void);
void V_FadeViewFlashs(void);
void V_CalcViewBlend(void);
-void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission);
+void V_CalcRefdefUsing (const matrix4x4_t *entrendermatrix, const vec3_t clviewangles, qboolean teleported, qboolean clonground, qboolean clcmdjump, float clstatsviewheight, qboolean cldead, qboolean clintermission, const vec3_t clvelocity);
void V_CalcRefdef(void);
void CL_Locs_Reload_f(void);