extern cvar_t r_novis;
extern cvar_t r_trippy;
+extern cvar_t r_fxaa;
extern cvar_t r_lerpsprites;
extern cvar_t r_lerpmodels;
int R_CullBox(const vec3_t mins, const vec3_t maxs);
int R_CullBoxCustomPlanes(const vec3_t mins, const vec3_t maxs, int numplanes, const mplane_t *planes);
+qboolean R_CanSeeBox(int numsamples, vec_t eyejitter, vec_t entboxenlarge, vec3_t eye, vec3_t entboxmins, vec3_t entboxmaxs);
#include "r_modules.h"
#include "meshqueue.h"
+/// free all R_FrameData memory
void R_FrameData_Reset(void);
+/// prepare for a new frame, recycles old buffers if a resize occurred previously
void R_FrameData_NewFrame(void);
+/// allocate some temporary memory for your purposes
void *R_FrameData_Alloc(size_t size);
+/// allocate some temporary memory and copy this data into it
void *R_FrameData_Store(size_t size, void *data);
+/// set a marker that allows you to discard the following temporary memory allocations
void R_FrameData_SetMark(void);
+/// discard recent memory allocations (rewind to marker)
void R_FrameData_ReturnToMark(void);
+/// enum of the various types of hardware buffer object used in rendering
+/// note that the r_buffermegs[] array must be maintained to match this
+typedef enum r_bufferdata_type_e
+{
+ R_BUFFERDATA_VERTEX, /// vertex buffer
+ R_BUFFERDATA_INDEX16, /// index buffer - 16bit (because D3D cares)
+ R_BUFFERDATA_INDEX32, /// index buffer - 32bit (because D3D cares)
+ R_BUFFERDATA_UNIFORM, /// uniform buffer
+ R_BUFFERDATA_COUNT /// how many kinds of buffer we have
+}
+r_bufferdata_type_t;
+
+/// free all dynamic vertex/index/uniform buffers
+void R_BufferData_Reset(void);
+/// begin a new frame (recycle old buffers)
+void R_BufferData_NewFrame(void);
+/// request space in a vertex/index/uniform buffer for the chosen data, returns the buffer pointer and offset, always successful
+r_meshbuffer_t *R_BufferData_Store(size_t size, const void *data, r_bufferdata_type_t type, int *returnbufferoffset);
+
+/// free all R_AnimCache memory
void R_AnimCache_Free(void);
+/// clear the animcache pointers on all known render entities
void R_AnimCache_ClearCache(void);
+/// get the skeletal data or cached animated mesh data for an entity (optionally with normals and tangents)
qboolean R_AnimCache_GetEntity(entity_render_t *ent, qboolean wantnormals, qboolean wanttangents);
+/// generate animcache data for all entities marked visible
void R_AnimCache_CacheVisibleEntities(void);
#include "r_lerpanim.h"
// variables
int entityskeletalnumtransforms; // how many transforms are used for this mesh
float *entityskeletaltransform3x4; // use gpu-skinning shader on this mesh
+ const r_meshbuffer_t *entityskeletaltransform3x4buffer; // uniform buffer
+ int entityskeletaltransform3x4offset;
+ int entityskeletaltransform3x4size;
float *modelvertex3f;
const r_meshbuffer_t *modelvertex3f_vertexbuffer;
- size_t modelvertex3f_bufferoffset;
+ int modelvertex3f_bufferoffset;
float *modelsvector3f;
const r_meshbuffer_t *modelsvector3f_vertexbuffer;
- size_t modelsvector3f_bufferoffset;
+ int modelsvector3f_bufferoffset;
float *modeltvector3f;
const r_meshbuffer_t *modeltvector3f_vertexbuffer;
- size_t modeltvector3f_bufferoffset;
+ int modeltvector3f_bufferoffset;
float *modelnormal3f;
const r_meshbuffer_t *modelnormal3f_vertexbuffer;
- size_t modelnormal3f_bufferoffset;
+ int modelnormal3f_bufferoffset;
float *modellightmapcolor4f;
const r_meshbuffer_t *modellightmapcolor4f_vertexbuffer;
- size_t modellightmapcolor4f_bufferoffset;
+ int modellightmapcolor4f_bufferoffset;
float *modeltexcoordtexture2f;
const r_meshbuffer_t *modeltexcoordtexture2f_vertexbuffer;
- size_t modeltexcoordtexture2f_bufferoffset;
+ int modeltexcoordtexture2f_bufferoffset;
float *modeltexcoordlightmap2f;
const r_meshbuffer_t *modeltexcoordlightmap2f_vertexbuffer;
- size_t modeltexcoordlightmap2f_bufferoffset;
+ int modeltexcoordlightmap2f_bufferoffset;
unsigned char *modelskeletalindex4ub;
const r_meshbuffer_t *modelskeletalindex4ub_vertexbuffer;
- size_t modelskeletalindex4ub_bufferoffset;
+ int modelskeletalindex4ub_bufferoffset;
unsigned char *modelskeletalweight4ub;
const r_meshbuffer_t *modelskeletalweight4ub_vertexbuffer;
- size_t modelskeletalweight4ub_bufferoffset;
+ int modelskeletalweight4ub_bufferoffset;
r_vertexmesh_t *modelvertexmesh;
- const r_meshbuffer_t *modelvertexmeshbuffer;
- const r_meshbuffer_t *modelvertex3fbuffer;
+ const r_meshbuffer_t *modelvertexmesh_vertexbuffer;
+ int modelvertexmesh_bufferoffset;
int *modelelement3i;
const r_meshbuffer_t *modelelement3i_indexbuffer;
- size_t modelelement3i_bufferoffset;
+ int modelelement3i_bufferoffset;
unsigned short *modelelement3s;
const r_meshbuffer_t *modelelement3s_indexbuffer;
- size_t modelelement3s_bufferoffset;
+ int modelelement3s_bufferoffset;
int *modellightmapoffsets;
int modelnumvertices;
int modelnumtriangles;
int batchfirsttriangle;
int batchnumtriangles;
r_vertexmesh_t *batchvertexmesh;
- const r_meshbuffer_t *batchvertexmeshbuffer;
- const r_meshbuffer_t *batchvertex3fbuffer;
+ const r_meshbuffer_t *batchvertexmesh_vertexbuffer;
+ int batchvertexmesh_bufferoffset;
float *batchvertex3f;
const r_meshbuffer_t *batchvertex3f_vertexbuffer;
- size_t batchvertex3f_bufferoffset;
+ int batchvertex3f_bufferoffset;
float *batchsvector3f;
const r_meshbuffer_t *batchsvector3f_vertexbuffer;
- size_t batchsvector3f_bufferoffset;
+ int batchsvector3f_bufferoffset;
float *batchtvector3f;
const r_meshbuffer_t *batchtvector3f_vertexbuffer;
- size_t batchtvector3f_bufferoffset;
+ int batchtvector3f_bufferoffset;
float *batchnormal3f;
const r_meshbuffer_t *batchnormal3f_vertexbuffer;
- size_t batchnormal3f_bufferoffset;
+ int batchnormal3f_bufferoffset;
float *batchlightmapcolor4f;
const r_meshbuffer_t *batchlightmapcolor4f_vertexbuffer;
- size_t batchlightmapcolor4f_bufferoffset;
+ int batchlightmapcolor4f_bufferoffset;
float *batchtexcoordtexture2f;
const r_meshbuffer_t *batchtexcoordtexture2f_vertexbuffer;
- size_t batchtexcoordtexture2f_bufferoffset;
+ int batchtexcoordtexture2f_bufferoffset;
float *batchtexcoordlightmap2f;
const r_meshbuffer_t *batchtexcoordlightmap2f_vertexbuffer;
- size_t batchtexcoordlightmap2f_bufferoffset;
+ int batchtexcoordlightmap2f_bufferoffset;
unsigned char *batchskeletalindex4ub;
const r_meshbuffer_t *batchskeletalindex4ub_vertexbuffer;
- size_t batchskeletalindex4ub_bufferoffset;
+ int batchskeletalindex4ub_bufferoffset;
unsigned char *batchskeletalweight4ub;
const r_meshbuffer_t *batchskeletalweight4ub_vertexbuffer;
- size_t batchskeletalweight4ub_bufferoffset;
+ int batchskeletalweight4ub_bufferoffset;
int *batchelement3i;
const r_meshbuffer_t *batchelement3i_indexbuffer;
- size_t batchelement3i_bufferoffset;
+ int batchelement3i_bufferoffset;
unsigned short *batchelement3s;
const r_meshbuffer_t *batchelement3s_indexbuffer;
- size_t batchelement3s_bufferoffset;
+ int batchelement3s_bufferoffset;
int batchskeletalnumtransforms;
float *batchskeletaltransform3x4;
+ const r_meshbuffer_t *batchskeletaltransform3x4buffer; // uniform buffer
+ int batchskeletaltransform3x4offset;
+ int batchskeletaltransform3x4size;
// rendering pass processing arrays in GL11 and GL13 paths
float *passcolor4f;
const r_meshbuffer_t *passcolor4f_vertexbuffer;
- size_t passcolor4f_bufferoffset;
+ int passcolor4f_bufferoffset;
// some important fields from the entity
int ent_skinnum;
struct prvm_prog_s;
void R_UpdateFog(void);
-qboolean CL_VM_UpdateView(void);
+qboolean CL_VM_UpdateView(double frametime);
void SCR_DrawConsole(void);
void R_Shadow_EditLights_DrawSelectedLightProperties(void);
void R_DecalSystem_Reset(decalsystem_t *decalsystem);
void R_DrawLightningBeams(void);
void VM_CL_AddPolygonsToMeshQueue(struct prvm_prog_s *prog);
void R_DrawPortals(void);
-void R_DrawModelShadows(int fbo, rtexture_t *depthtexture, rtexture_t *colortexture);
-void R_DrawModelShadowMaps(int fbo, rtexture_t *depthtexture, rtexture_t *colortexture);
void R_BuildLightMap(const entity_render_t *ent, msurface_t *surface);
void R_Water_AddWaterPlane(msurface_t *surface, int entno);
int R_Shadow_GetRTLightInfo(unsigned int lightindex, float *origin, float *radius, float *color);