// 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;
}
rtlight_t;
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;
// 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;
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 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;