r_stat_vertexbufferuploadsize,
r_stat_framedatacurrent,
r_stat_framedatasize,
+ r_stat_bufferdatacurrent_vertex, // R_BUFFERDATA_ types are added to this index
+ r_stat_bufferdatacurrent_index16,
+ r_stat_bufferdatacurrent_index32,
+ r_stat_bufferdatacurrent_uniform,
+ r_stat_bufferdatasize_vertex, // R_BUFFERDATA_ types are added to this index
+ r_stat_bufferdatasize_index16,
+ r_stat_bufferdatasize_index32,
+ r_stat_bufferdatasize_uniform,
r_stat_animcache_vertexmesh_count,
r_stat_animcache_vertexmesh_vertices,
r_stat_animcache_vertexmesh_maxvertices,
// for visibility culling
int surfaceindex;
// old decals are killed to obey cl_decals_max
- int decalsequence;
+ unsigned int decalsequence;
}
tridecal_t;
// animation cache (pointers allocated using R_FrameData_Alloc)
// ONLY valid during R_RenderView! may be NULL (not cached)
- float *animcache_vertex3f;
- float *animcache_normal3f;
- float *animcache_svector3f;
- float *animcache_tvector3f;
+ float *animcache_vertex3f;
+ r_meshbuffer_t *animcache_vertex3f_vertexbuffer;
+ int animcache_vertex3f_bufferoffset;
+ float *animcache_normal3f;
+ r_meshbuffer_t *animcache_normal3f_vertexbuffer;
+ int animcache_normal3f_bufferoffset;
+ float *animcache_svector3f;
+ r_meshbuffer_t *animcache_svector3f_vertexbuffer;
+ int animcache_svector3f_bufferoffset;
+ float *animcache_tvector3f;
+ r_meshbuffer_t *animcache_tvector3f_vertexbuffer;
+ int animcache_tvector3f_bufferoffset;
// interleaved arrays for rendering and dynamic vertex buffers for them
- r_meshbuffer_t *animcache_vertex3fbuffer;
r_vertexmesh_t *animcache_vertexmesh;
- r_meshbuffer_t *animcache_vertexmeshbuffer;
- // gpu-skinning shader needs transforms in a certain format
+ r_meshbuffer_t *animcache_vertexmesh_vertexbuffer;
+ int animcache_vertexmesh_bufferoffset;
+ // gpu-skinning shader needs transforms in a certain format, we have to
+ // upload this to a uniform buffer for the shader to use, and also keep a
+ // backup copy in system memory for the dynamic batch fallback code
// if this is not NULL, the other animcache variables are NULL
float *animcache_skeletaltransform3x4;
+ r_meshbuffer_t *animcache_skeletaltransform3x4buffer;
+ int animcache_skeletaltransform3x4offset;
+ int animcache_skeletaltransform3x4size;
// current lighting from map (updated ONLY by client code, not renderer)
vec3_t modellight_ambient;
int msec; // for predicted moves
int buttons;
int impulse;
- int sequence;
+ unsigned int sequence;
qboolean applied; // if false we're still accumulating a move
qboolean predicted; // if true the sequence should be sent as 0
double connect_nextsendtime;
lhnetsocket_t *connect_mysocket;
lhnetaddress_t connect_address;
+ lhnetaddress_t rcon_address;
// protocol version of the server we're connected to
// (kept outside client_state_t because it's used between levels)
protocolversion_t protocol;
cl_downloadack_t dp_downloadack[CL_MAX_DOWNLOADACKS];
// input sequence numbers are not reset on level change, only connect
- int movesequence;
- int servermovesequence;
+ unsigned int servermovesequence;
// quakeworld stuff below
// value of "qport" cvar at time of connection
int qw_qport;
// copied from cls.netcon->qw. variables every time they change, or set by demos (which have no cls.netcon)
- int qw_incoming_sequence;
- int qw_outgoing_sequence;
+ unsigned int qw_incoming_sequence;
+ unsigned int qw_outgoing_sequence;
// current file download buffer (only saved when file is completed)
char qw_downloadname[MAX_QPATH];
extern client_static_t cls;
-typedef struct client_movementqueue_s
-{
- double time;
- float frametime;
- int sequence;
- float viewangles[3];
- float move[3];
- qboolean jump;
- qboolean crouch;
- qboolean canjump;
-}
-client_movementqueue_t;
-
//[515]: csqc
typedef struct
{
// fields used by rendering: (44 bytes)
unsigned short typeindex;
unsigned short texnum;
- int decalsequence;
+ unsigned int decalsequence;
vec3_t org;
vec3_t normal;
float size;
#define LATESTFRAMENUMS 32
int latestframenumsposition;
int latestframenums[LATESTFRAMENUMS];
- int latestsendnums[LATESTFRAMENUMS];
+ unsigned int latestsendnums[LATESTFRAMENUMS];
entityframe_database_t *entitydatabase;
entityframe4_database_t *entitydatabase4;
entityframeqw_database_t *entitydatabaseqw;
vec3_t playercrouchmaxs;
// old decals are killed based on this
- int decalsequence;
+ unsigned int decalsequence;
int max_entities;
int max_csqcrenderentities;
float qw_weaponkick;
- int qw_validsequence;
+ unsigned int qw_validsequence;
- int qw_deltasequence[QW_UPDATE_BACKUP];
+ unsigned int qw_deltasequence[QW_UPDATE_BACKUP];
// csqc stuff:
// server entity number corresponding to a clientside entity
extern cvar_t cl_name;
extern cvar_t cl_color;
extern cvar_t cl_rate;
+extern cvar_t cl_rate_burstsize;
extern cvar_t cl_pmodel;
extern cvar_t cl_playermodel;
extern cvar_t cl_playerskin;
int CL_ParticleEffectIndexForName(const char *name);
const char *CL_ParticleEffectNameForIndex(int i);
void CL_ParticleEffect(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor);
-void CL_ParticleTrail(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles, float tintmins[4], float tintmaxs[4]);
+void CL_ParticleTrail(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles, float tintmins[4], float tintmaxs[4], float fade);
+void CL_ParticleBox(int effectindex, float pcount, const vec3_t originmins, const vec3_t originmaxs, const vec3_t velocitymins, const vec3_t velocitymaxs, entity_t *ent, int palettecolor, qboolean spawndlight, qboolean spawnparticles, float tintmins[4], float tintmaxs[4], float fade);
void CL_ParseParticleEffect (void);
void CL_ParticleCube (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, vec_t gravity, vec_t randomvel);
void CL_ParticleRain (const vec3_t mins, const vec3_t maxs, const vec3_t dir, int count, int colorbase, int type);