]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - render.h
honor ent->shadertime in all material handling (tcmod, etc)
[xonotic/darkplaces.git] / render.h
index 7cc1ae22b889bb64eef97295bd71969a7762a684..b354034aa42b39e721fb5317ac1bd3312dd29a36 100644 (file)
--- a/render.h
+++ b/render.h
@@ -101,6 +101,7 @@ void R_Mesh_AddBrushMeshFromPlanes(rmesh_t *mesh, int numplanes, mplane_t *plane
 extern cvar_t r_nearclip;
 
 // forces all rendering to draw triangle outlines
+extern cvar_t r_showoverdraw;
 extern cvar_t r_showtris;
 extern cvar_t r_shownormals;
 extern cvar_t r_showlighting;
@@ -114,6 +115,8 @@ extern cvar_t r_showdisabledepthtest;
 // view origin
 //
 extern cvar_t r_drawentities;
+extern cvar_t r_draw2d;
+extern qboolean r_draw2d_force;
 extern cvar_t r_drawviewmodel;
 extern cvar_t r_drawworld;
 extern cvar_t r_speeds;
@@ -141,7 +144,7 @@ void R_SkinFrame_Purge(void);
 skinframe_t *R_SkinFrame_FindNextByName( skinframe_t *last, const char *name );
 skinframe_t *R_SkinFrame_Find(const char *name, int textureflags, int comparewidth, int compareheight, int comparecrc, qboolean add);
 skinframe_t *R_SkinFrame_LoadExternal(const char *name, int textureflags, qboolean complain);
-skinframe_t *R_SkinFrame_LoadInternalBGRA(const char *name, int textureflags, const unsigned char *skindata, int width, int height);
+skinframe_t *R_SkinFrame_LoadInternalBGRA(const char *name, int textureflags, const unsigned char *skindata, int width, int height, qboolean sRGB);
 skinframe_t *R_SkinFrame_LoadInternalQuake(const char *name, int textureflags, int loadpantsandshirt, int loadglowtexture, const unsigned char *skindata, int width, int height);
 skinframe_t *R_SkinFrame_LoadInternal8bit(const char *name, int textureflags, const unsigned char *skindata, int width, int height, const unsigned int *palette, const unsigned int *alphapalette);
 skinframe_t *R_SkinFrame_LoadMissing(void);
@@ -163,11 +166,12 @@ int R_CullBoxCustomPlanes(const vec3_t mins, const vec3_t maxs, int numplanes, c
 
 #include "meshqueue.h"
 
-extern qboolean r_framedata_failed;
 void R_FrameData_Reset(void);
 void R_FrameData_NewFrame(void);
 void *R_FrameData_Alloc(size_t size);
 void *R_FrameData_Store(size_t size, void *data);
+void R_FrameData_SetMark(void);
+void R_FrameData_ReturnToMark(void);
 
 void R_AnimCache_Free(void);
 void R_AnimCache_ClearCache(void);
@@ -196,12 +200,6 @@ extern cvar_t r_smoothnormals_areaweighting;
 
 extern cvar_t r_test;
 
-extern cvar_t r_texture_convertsRGB_2d;
-extern cvar_t r_texture_convertsRGB_skin;
-extern cvar_t r_texture_convertsRGB_cubemap;
-extern cvar_t r_texture_convertsRGB_skybox;
-extern cvar_t r_texture_convertsRGB_particles;
-
 #include "gl_backend.h"
 
 extern rtexture_t *r_texture_blanknormalmap;
@@ -218,7 +216,7 @@ extern unsigned int r_queries[MAX_OCCLUSION_QUERIES];
 extern unsigned int r_numqueries;
 extern unsigned int r_maxqueries;
 
-void R_TimeReport(char *name);
+void R_TimeReport(const char *name);
 
 // r_stain
 void R_Stain(const vec3_t origin, float radius, int cr1, int cg1, int cb1, int ca1, int cr2, int cg2, int cb2, int ca2);
@@ -230,28 +228,6 @@ extern mempool_t *r_main_mempool;
 
 typedef struct rsurfacestate_s
 {
-       // software processing buffers
-       int                         array_size;
-       unsigned char              *array_base;
-       r_vertexmesh_t             *array_modelvertexmesh;
-       r_vertexmesh_t             *array_batchvertexmesh;
-       r_vertexposition_t         *array_modelvertexposition;
-       r_vertexposition_t         *array_batchvertexposition;
-       float                      *array_modelvertex3f;
-       float                      *array_modelsvector3f;
-       float                      *array_modeltvector3f;
-       float                      *array_modelnormal3f;
-       float                      *array_batchvertex3f;
-       float                      *array_batchsvector3f;
-       float                      *array_batchtvector3f;
-       float                      *array_batchnormal3f;
-       float                      *array_batchlightmapcolor4f;
-       float                      *array_batchtexcoordtexture2f;
-       float                      *array_batchtexcoordlightmap2f;
-       float                      *array_passcolor4f;
-       int                        *array_batchelement3i;
-       unsigned short             *array_batchelement3s;
-
        // current model array pointers
        // these may point to processing buffers if model is animated,
        // otherwise they point to static data.
@@ -267,38 +243,37 @@ typedef struct rsurfacestate_s
        // this indicates the model* arrays are pointed at array_model* buffers
        // (in other words, the model has been animated in software)
        qboolean                    modelgeneratedvertex;
-       const float                *modelvertex3f;
+       float                      *modelvertex3f;
        const r_meshbuffer_t       *modelvertex3f_vertexbuffer;
        size_t                      modelvertex3f_bufferoffset;
-       const float                *modelsvector3f;
+       float                      *modelsvector3f;
        const r_meshbuffer_t       *modelsvector3f_vertexbuffer;
        size_t                      modelsvector3f_bufferoffset;
-       const float                *modeltvector3f;
+       float                      *modeltvector3f;
        const r_meshbuffer_t       *modeltvector3f_vertexbuffer;
        size_t                      modeltvector3f_bufferoffset;
-       const float                *modelnormal3f;
+       float                      *modelnormal3f;
        const r_meshbuffer_t       *modelnormal3f_vertexbuffer;
        size_t                      modelnormal3f_bufferoffset;
-       const float                *modellightmapcolor4f;
+       float                      *modellightmapcolor4f;
        const r_meshbuffer_t       *modellightmapcolor4f_vertexbuffer;
        size_t                      modellightmapcolor4f_bufferoffset;
-       const float                *modeltexcoordtexture2f;
+       float                      *modeltexcoordtexture2f;
        const r_meshbuffer_t       *modeltexcoordtexture2f_vertexbuffer;
        size_t                      modeltexcoordtexture2f_bufferoffset;
-       const float                *modeltexcoordlightmap2f;
+       float                      *modeltexcoordlightmap2f;
        const r_meshbuffer_t       *modeltexcoordlightmap2f_vertexbuffer;
        size_t                      modeltexcoordlightmap2f_bufferoffset;
-       const r_vertexmesh_t       *modelvertexmesh;
+       r_vertexmesh_t             *modelvertexmesh;
        const r_meshbuffer_t       *modelvertexmeshbuffer;
-       const r_vertexposition_t   *modelvertexposition;
-       const r_meshbuffer_t       *modelvertexpositionbuffer;
-       const int                  *modelelement3i;
+       const r_meshbuffer_t       *modelvertex3fbuffer;
+       int                        *modelelement3i;
        const r_meshbuffer_t       *modelelement3i_indexbuffer;
        size_t                      modelelement3i_bufferoffset;
-       const unsigned short       *modelelement3s;
+       unsigned short             *modelelement3s;
        const r_meshbuffer_t       *modelelement3s_indexbuffer;
        size_t                      modelelement3s_bufferoffset;
-       const int                  *modellightmapoffsets;
+       int                        *modellightmapoffsets;
        int                         modelnumvertices;
        int                         modelnumtriangles;
        const msurface_t           *modelsurfaces;
@@ -313,39 +288,38 @@ typedef struct rsurfacestate_s
        int                         batchnumvertices;
        int                         batchfirsttriangle;
        int                         batchnumtriangles;
-       const r_vertexmesh_t       *batchvertexmesh;
+       r_vertexmesh_t             *batchvertexmesh;
        const r_meshbuffer_t       *batchvertexmeshbuffer;
-       const r_vertexposition_t   *batchvertexposition;
-       const r_meshbuffer_t       *batchvertexpositionbuffer;
-       const float                *batchvertex3f;
+       const r_meshbuffer_t       *batchvertex3fbuffer;
+       float                      *batchvertex3f;
        const r_meshbuffer_t       *batchvertex3f_vertexbuffer;
        size_t                      batchvertex3f_bufferoffset;
-       const float                *batchsvector3f;
+       float                      *batchsvector3f;
        const r_meshbuffer_t       *batchsvector3f_vertexbuffer;
        size_t                      batchsvector3f_bufferoffset;
-       const float                *batchtvector3f;
+       float                      *batchtvector3f;
        const r_meshbuffer_t       *batchtvector3f_vertexbuffer;
        size_t                      batchtvector3f_bufferoffset;
-       const float                *batchnormal3f;
+       float                      *batchnormal3f;
        const r_meshbuffer_t       *batchnormal3f_vertexbuffer;
        size_t                      batchnormal3f_bufferoffset;
-       const float                *batchlightmapcolor4f;
+       float                      *batchlightmapcolor4f;
        const r_meshbuffer_t       *batchlightmapcolor4f_vertexbuffer;
        size_t                      batchlightmapcolor4f_bufferoffset;
-       const float                *batchtexcoordtexture2f;
+       float                      *batchtexcoordtexture2f;
        const r_meshbuffer_t       *batchtexcoordtexture2f_vertexbuffer;
        size_t                      batchtexcoordtexture2f_bufferoffset;
-       const float                *batchtexcoordlightmap2f;
+       float                      *batchtexcoordlightmap2f;
        const r_meshbuffer_t       *batchtexcoordlightmap2f_vertexbuffer;
        size_t                      batchtexcoordlightmap2f_bufferoffset;
-       const int                  *batchelement3i;
+       int                        *batchelement3i;
        const r_meshbuffer_t       *batchelement3i_indexbuffer;
        size_t                      batchelement3i_bufferoffset;
-       const unsigned short       *batchelement3s;
+       unsigned short             *batchelement3s;
        const r_meshbuffer_t       *batchelement3s_indexbuffer;
        size_t                      batchelement3s_bufferoffset;
        // rendering pass processing arrays in GL11 and GL13 paths
-       const float                *passcolor4f;
+       float                      *passcolor4f;
        const r_meshbuffer_t       *passcolor4f_vertexbuffer;
        size_t                      passcolor4f_bufferoffset;
 
@@ -353,8 +327,8 @@ typedef struct rsurfacestate_s
        int ent_skinnum;
        int ent_qwskin;
        int ent_flags;
-       float ent_shadertime;
        int ent_alttextures; // used by q1bsp animated textures (pressed buttons)
+       double shadertime; // r_refdef.scene.time - ent->shadertime
        // transform matrices to render this entity and effects on this entity
        matrix4x4_t matrix;
        matrix4x4_t inversematrix;
@@ -422,6 +396,8 @@ rsurfacestate_t;
 
 extern rsurfacestate_t rsurface;
 
+void R_HDR_UpdateIrisAdaptation(const vec3_t point);
+
 void RSurf_ActiveWorldEntity(void);
 void RSurf_ActiveModelEntity(const entity_render_t *ent, qboolean wantnormals, qboolean wanttangents, qboolean prepass);
 void RSurf_ActiveCustomEntity(const matrix4x4_t *matrix, const matrix4x4_t *inversematrix, int entflags, double shadertime, float r, float g, float b, float a, int numvertices, const float *vertex3f, const float *texcoord2f, const float *normal3f, const float *svector3f, const float *tvector3f, const float *color4f, int numtriangles, const int *element3i, const unsigned short *element3s, qboolean wantnormals, qboolean wanttangents);
@@ -436,7 +412,6 @@ void R_AddWaterPlanes(entity_render_t *ent);
 void R_DrawCustomSurface(skinframe_t *skinframe, const matrix4x4_t *texmatrix, int materialflags, int firstvertex, int numvertices, int firsttriangle, int numtriangles, qboolean writedepth, qboolean prepass);
 void R_DrawCustomSurface_Texture(texture_t *texture, const matrix4x4_t *texmatrix, int materialflags, int firstvertex, int numvertices, int firsttriangle, int numtriangles, qboolean writedepth, qboolean prepass);
 
-#define BATCHNEED_VERTEXPOSITION         (1<< 0) // set up rsurface.batchvertexposition
 #define BATCHNEED_VERTEXMESH_VERTEX      (1<< 1) // set up rsurface.batchvertexmesh
 #define BATCHNEED_VERTEXMESH_NORMAL      (1<< 2) // set up normals in rsurface.batchvertexmesh if BATCHNEED_MESH, set up rsurface.batchnormal3f if BATCHNEED_ARRAYS
 #define BATCHNEED_VERTEXMESH_VECTOR      (1<< 3) // set up vectors in rsurface.batchvertexmesh if BATCHNEED_MESH, set up rsurface.batchsvector3f and rsurface.batchtvector3f if BATCHNEED_ARRAYS
@@ -460,68 +435,14 @@ typedef enum rsurfacepass_e
        RSURFPASS_BASE,
        RSURFPASS_BACKGROUND,
        RSURFPASS_RTLIGHT,
-       RSURFPASS_DEFERREDGEOMETRY,
+       RSURFPASS_DEFERREDGEOMETRY
 }
 rsurfacepass_t;
 
-typedef enum gl20_texunit_e
-{
-       // postprocess shaders, and generic shaders:
-       GL20TU_FIRST = 0,
-       GL20TU_SECOND = 1,
-       GL20TU_GAMMARAMPS = 2,
-       // standard material properties
-       GL20TU_NORMAL = 0,
-       GL20TU_COLOR = 1,
-       GL20TU_GLOSS = 2,
-       GL20TU_GLOW = 3,
-       // material properties for a second material
-       GL20TU_SECONDARY_NORMAL = 4,
-       GL20TU_SECONDARY_COLOR = 5,
-       GL20TU_SECONDARY_GLOSS = 6,
-       GL20TU_SECONDARY_GLOW = 7,
-       // material properties for a colormapped material
-       // conflicts with secondary material
-       GL20TU_PANTS = 4,
-       GL20TU_SHIRT = 7,
-       // fog fade in the distance
-       GL20TU_FOGMASK = 8,
-       // compiled ambient lightmap and deluxemap
-       GL20TU_LIGHTMAP = 9,
-       GL20TU_DELUXEMAP = 10,
-       // refraction, used by water shaders
-       GL20TU_REFRACTION = 3,
-       // reflection, used by water shaders, also with normal material rendering
-       // conflicts with secondary material
-       GL20TU_REFLECTION = 7,
-       // rtlight attenuation (distance fade) and cubemap filter (projection texturing)
-       // conflicts with lightmap/deluxemap
-       GL20TU_ATTENUATION = 9,
-       GL20TU_CUBE = 10,
-       GL20TU_SHADOWMAPRECT = 11,
-       GL20TU_SHADOWMAPCUBE = 11,
-       GL20TU_SHADOWMAP2D = 11,
-       GL20TU_CUBEPROJECTION = 12,
-       // orthographic-projection shadowmapping
-       GL20TU_SHADOWMAPORTHORECT = 15,
-       GL20TU_SHADOWMAPORTHO2D = 15,
-       // rtlight prepass data (screenspace depth and normalmap)
-       GL20TU_SCREENDEPTH = 13,
-       GL20TU_SCREENNORMALMAP = 14,
-       // lightmap prepass data (screenspace diffuse and specular from lights)
-       GL20TU_SCREENDIFFUSE = 11,
-       GL20TU_SCREENSPECULAR = 12,
-       // fake reflections
-       GL20TU_REFLECTMASK = 5,
-       GL20TU_REFLECTCUBE = 6,
-       GL20TU_FOGHEIGHTTEXTURE = 14
-}
-gl20_texunit;
-
 void R_SetupShader_Generic(rtexture_t *first, rtexture_t *second, int texturemode, int rgbscale);
 void R_SetupShader_DepthOrShadow(void);
 void R_SetupShader_ShowDepth(void);
-void R_SetupShader_Surface(const vec3_t lightcolorbase, qboolean modellighting, float ambientscale, float diffusescale, float specularscale, rsurfacepass_t rsurfacepass, int texturenumsurfaces, const msurface_t **texturesurfacelist);
+void R_SetupShader_Surface(const vec3_t lightcolorbase, qboolean modellighting, float ambientscale, float diffusescale, float specularscale, rsurfacepass_t rsurfacepass, int texturenumsurfaces, const msurface_t **texturesurfacelist, void *waterplane);
 void R_SetupShader_DeferredLight(const rtlight_t *rtlight);
 
 typedef struct r_waterstate_waterplane_s
@@ -534,6 +455,7 @@ typedef struct r_waterstate_waterplane_s
        unsigned char pvsbits[(MAX_MAP_LEAFS+7)>>3]; // FIXME: buffer overflow on huge maps
        qboolean pvsvalid;
        int camera_entity;
+       vec3_t mins, maxs;
 }
 r_waterstate_waterplane_t;