typedef struct tridecal_s
{
// color and initial alpha value
- unsigned char colors[3][4];
+ float texcoord2f[3][2];
+ float vertex3f[3][3];
+ unsigned char color4ub[3][4];
// 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
int triangleindex;
+ // for visibility culling
+ int surfaceindex;
+ // old decals are killed to obey cl_decals_max
+ int decalsequence;
}
tridecal_t;
unsigned int corona_queryindex_allpixels;
/// this is R_Shadow_Cubemap(rtlight->cubemapname)
rtexture_t *currentcubemap;
+ /// set by R_Shadow_PrepareLight to decide whether R_Shadow_DrawLight should draw it
+ qboolean draw;
+ /// these fields are set by R_Shadow_PrepareLight for later drawing
+ int cached_numlightentities;
+ int cached_numlightentities_noselfshadow;
+ int cached_numshadowentities;
+ int cached_numshadowentities_noselfshadow;
+ int cached_numsurfaces;
+ struct entity_render_s **cached_lightentities;
+ struct entity_render_s **cached_lightentities_noselfshadow;
+ struct entity_render_s **cached_shadowentities;
+ struct entity_render_s **cached_shadowentities_noselfshadow;
+ unsigned char *cached_shadowtrispvs;
+ unsigned char *cached_lighttrispvs;
+ int *cached_surfacelist;
+ // reduced light cullbox from GetLightInfo
+ vec3_t cached_cullmins;
+ vec3_t cached_cullmaxs;
+ // current shadow-caster culling planes based on view
+ // (any geometry outside these planes can not contribute to the visible
+ // shadows in any way, and thus can be culled safely)
+ int cached_numfrustumplanes;
+ mplane_t cached_frustumplanes[5]; // see R_Shadow_ComputeShadowCasterCullingPlanes
/// static light info
/// true if this light should be compiled as a static light
vec3_t mins, maxs;
// subframe numbers (-1 if not used) and their blending scalers (0-1), if interpolation is not desired, use subframeblend[0].subframe
frameblend_t frameblend[MAX_FRAMEBLENDS];
+ // skeletal animation data (if skeleton.relativetransforms is not NULL, it overrides frameblend)
+ skeleton_t *skeleton;
- // animation cache index
- int animcacheindex;
+ // 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;
// current lighting from map (updated ONLY by client code, not renderer)
vec3_t modellight_ambient;
float qw_entertime;
int qw_ping;
int qw_packetloss;
+ int qw_movementloss;
int qw_spectator;
char qw_team[8];
char qw_skin[MAX_QPATH];
// fields used by rendering: (44 bytes)
unsigned short typeindex;
unsigned short texnum;
+ int decalsequence;
vec3_t org;
vec3_t normal;
float size;
vec3_t playercrouchmins;
vec3_t playercrouchmaxs;
+ // old decals are killed based on this
+ int decalsequence;
+
int max_entities;
+ int max_csqcrenderentities;
int max_static_entities;
int max_effects;
int max_beams;
int max_showlmps;
entity_t *entities;
+ entity_render_t *csqcrenderentities;
unsigned char *entities_active;
entity_t *static_entities;
cl_effect_t *effects;
void CL_ClearState (void);
void CL_ExpandEntities(int num);
+void CL_ExpandCSQCRenderEntities(int num);
void CL_SetInfo(const char *key, const char *value, qboolean send, qboolean allowstarkey, qboolean allowmodel, qboolean quiet);
int lightmapupdates;
int lightmapupdatepixels;
int particles;
- int decals;
+ int drawndecals;
+ int totaldecals;
int meshes;
int meshes_elements;
int lights;
typedef struct r_viewport_s
{
- double m[16];
+ float m[16];
matrix4x4_t cameramatrix; // from entity (transforms from camera entity to world)
matrix4x4_t viewmatrix; // actual matrix for rendering (transforms to viewspace)
matrix4x4_t projectmatrix; // actual projection matrix (transforms from viewspace to screen)
int height;
int depth;
r_viewport_type_t type;
+ float screentodepth[2]; // used by deferred renderer to calculate linear depth from device depth coordinates
}
r_viewport_t;