X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=client.h;h=f9b16e3910876fc25b50e56a42bb4814f6642a0d;hb=e7b5029b4590cf57fdc7a6d7b288b102efb06400;hp=dfa11cbe48d46b3dcec3b3c3ecaabb367a35ba7a;hpb=2e220ac2a9e220560821a03f66c2fcdfa6232f16;p=xonotic%2Fdarkplaces.git diff --git a/client.h b/client.h index dfa11cbe..f9b16e39 100644 --- a/client.h +++ b/client.h @@ -259,8 +259,6 @@ typedef struct entity_render_s // calculated by the renderer (but not persistent) - // if visframe == r_framecount, it is visible - int visframe; // calculated during R_AddModelEntities vec3_t mins, maxs; // 4 frame numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use frame instead @@ -476,6 +474,9 @@ typedef struct client_static_s // 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; // current file download buffer (only saved when file is completed) char qw_downloadname[MAX_QPATH]; @@ -679,6 +680,8 @@ typedef struct client_state_s client_movementqueue_t movement_queue[64]; int movesequence; int servermovesequence; + // whether the replay should allow a jump at the first sequence + qboolean movement_replay_canjump; // pitch drifting vars float idealpitch; @@ -994,6 +997,7 @@ void CL_Effect(vec3_t org, int modelindex, int startframe, int framecount, float void CL_ClearState (void); void CL_ExpandEntities(int num); +void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet); int CL_ReadFromServer (void); @@ -1131,21 +1135,47 @@ void R_NewExplosion(const vec3_t org); #define NUMCROSSHAIRS 32 extern cachepic_t *r_crosshairs[NUMCROSSHAIRS+1]; -typedef struct refdef_s +#define FOGTABLEWIDTH 1024 +extern int fogtableindex; +#define VERTEXFOGTABLE(dist) (fogtableindex = (int)((dist) * r_refdef.fogtabledistmultiplier), r_refdef.fogtable[bound(0, fogtableindex, FOGTABLEWIDTH - 1)]) + +typedef struct r_refdef_stats_s { - // area to render in - int x, y, width, height; - float frustum_x, frustum_y; + int entities; + int entities_surfaces; + int entities_triangles; + int world_leafs; + int world_portals; + int particles; + int meshes; + int meshes_elements; + int lights; + int lights_clears; + int lights_scissored; + int lights_lighttriangles; + int lights_shadowtriangles; + int lights_dynamicshadowtriangles; + int bloom; + int bloom_copypixels; + int bloom_drawpixels; +} +r_refdef_stats_t; + +typedef struct r_refdef_s +{ + // these fields define the basic rendering information for the world + // but not the view, which could change multiple times in one rendered + // frame (for example when rendering textures for certain effects) // these are set for water warping before // frustum_x/frustum_y are calculated float frustumscale_x, frustumscale_y; - // view transform - matrix4x4_t viewentitymatrix; - - // which color components to allow (for anaglyph glasses) - int colormask[4]; + // minimum visible distance (pixels closer than this disappear) + double nearclip; + // maximum visible distance (pixels further than this disappear in 16bpp modes, + // in 32bpp an infinite-farclip matrix is used instead) + double farclip; // fullscreen color blend float viewblend[4]; @@ -1175,11 +1205,99 @@ typedef struct refdef_s // controls intensity of dynamic lights and lightmap layers unsigned short lightstylevalue[256]; // 8.8 fraction of base light value + vec3_t fogcolor; + vec_t fogrange; + vec_t fograngerecip; + vec_t fogtabledistmultiplier; + float fogtable[FOGTABLEWIDTH]; + float fog_density; + float fog_red; + float fog_green; + float fog_blue; + qboolean fogenabled; + qboolean oldgl_fogenable; + qboolean draw2dstage; + + // true during envmap command capture + qboolean envmap; + + // brightness of world lightmaps and related lighting + // (often reduced when world rtlights are enabled) + float lightmapintensity; + // whether to draw world lights realtime, dlights realtime, and their shadows + qboolean rtworld; + qboolean rtworldshadows; + qboolean rtdlight; + qboolean rtdlightshadows; + float polygonfactor; + float polygonoffset; + float shadowpolygonfactor; + float shadowpolygonoffset; + + // rendering stats for r_speeds display + // (these are incremented in many places) + r_refdef_stats_t stats; +} +r_refdef_t; + +typedef struct r_view_s +{ + // view information (changes multiple times per frame) + // if any of these variables change then r_viewcache must be regenerated + // by calling R_View_Update + // (which also updates viewport, scissor, colormask) + + // it is safe and expected to copy this into a structure on the stack and + // call the renderer recursively, then restore from the stack afterward + // (as long as R_View_Update is called) + + // eye position information + matrix4x4_t matrix; + vec3_t origin; + vec3_t forward; + vec3_t left; + vec3_t right; + vec3_t up; + mplane_t frustum[5]; + float frustum_x, frustum_y; + + // screen area to render in + int x; + int y; + int z; + int width; + int height; + int depth; + + // which color components to allow (for anaglyph glasses) + int colormask[4]; +} +r_view_t; + +typedef struct r_viewcache_s +{ + // these properties are generated by R_View_Update() + + // which entities are currently visible for this viewpoint + // (the used range is 0...r_refdef.numentities) + unsigned char entityvisible[MAX_EDICTS]; + // flag arrays used for visibility checking on world model + // (all other entities have no per-surface/per-leaf visibility checks) + // TODO: dynamic resize according to r_refdef.worldmodel->brush.num_clusters + unsigned char world_pvsbits[(32768+7)>>3]; + // TODO: dynamic resize according to r_refdef.worldmodel->brush.num_leafs + unsigned char world_leafvisible[32768]; + // TODO: dynamic resize according to r_refdef.worldmodel->num_surfaces + unsigned char world_surfacevisible[262144]; + // if true, the view is currently in a leaf without pvs data + qboolean world_novis; } -refdef_t; +r_viewcache_t; -extern refdef_t r_refdef; +extern r_refdef_t r_refdef; +extern r_view_t r_view; +extern r_viewcache_t r_viewcache; #endif