]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - render.h
Don't enable moncontrol if non-glibc on Linux. Fixes linking against musl
[xonotic/darkplaces.git] / render.h
index 3fbdcde1003da50ccdd872a445aa8e8035cc701a..8f387103fffa9af158a5acdda5bbf277c748c3f6 100644 (file)
--- a/render.h
+++ b/render.h
@@ -33,7 +33,10 @@ void FOG_clear(void);
 extern cvar_t r_sky;
 extern cvar_t r_skyscroll1;
 extern cvar_t r_skyscroll2;
+extern cvar_t r_sky_scissor;
+extern cvar_t r_q3bsp_renderskydepth;
 extern int skyrenderlater, skyrendermasked;
+extern int skyscissor[4];
 int R_SetSkyBox(const char *sky);
 void R_SkyStartFrame(void);
 void R_Sky(void);
@@ -55,6 +58,7 @@ extern cvar_t gl_flashblend;
 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;
@@ -91,7 +95,6 @@ rmesh_t;
 // useful functions for rendering
 void R_ModulateColors(float *in, float *out, int verts, float r, float g, float b);
 void R_FillColors(float *out, int verts, float r, float g, float b, float a);
-int R_Mesh_AddVertex3f(rmesh_t *mesh, const float *v);
 void R_Mesh_AddPolygon3f(rmesh_t *mesh, int numvertices, float *vertex3f);
 void R_Mesh_AddBrushMeshFromPlanes(rmesh_t *mesh, int numplanes, mplane_t *planes);
 
@@ -123,9 +126,8 @@ extern cvar_t r_fullbright;
 extern cvar_t r_wateralpha;
 extern cvar_t r_dynamic;
 
-void R_Init(void);
 void R_UpdateVariables(void); // must call after setting up most of r_refdef, but before calling R_RenderView
-void R_RenderView(void); // must set r_refdef and call R_UpdateVariables first
+void R_RenderView(void); // must set r_refdef and call R_UpdateVariables and CL_UpdateEntityShading first
 void R_RenderView_UpdateViewVectors(void); // just updates r_refdef.view.{forward,left,up,origin,right,inverse_matrix}
 
 typedef enum r_refdef_scene_type_s {
@@ -139,6 +141,7 @@ r_refdef_scene_t * R_GetScenePointer( r_refdef_scene_type_t scenetype );
 
 void R_SkinFrame_PrepareForPurge(void);
 void R_SkinFrame_MarkUsed(skinframe_t *skinframe);
+void R_SkinFrame_PurgeSkinFrame(skinframe_t *skinframe);
 void R_SkinFrame_Purge(void);
 // set last to NULL to start from the beginning
 skinframe_t *R_SkinFrame_FindNextByName( skinframe_t *last, const char *name );
@@ -161,6 +164,7 @@ void R_DrawExplosions(void);
 
 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"
 
@@ -180,7 +184,7 @@ void R_FrameData_SetMark(void);
 void R_FrameData_ReturnToMark(void);
 
 /// enum of the various types of hardware buffer object used in rendering
-/// note that the r_bufferdatasize[] array must be maintained to match this
+/// note that the r_buffermegs[] array must be maintained to match this
 typedef enum r_bufferdata_type_e
 {
        R_BUFFERDATA_VERTEX, /// vertex buffer
@@ -195,8 +199,8 @@ r_bufferdata_type_t;
 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, if allowfail is true it may return NULL if the growth limit has been reached, false will cause it to allocate additional memory despite this (warning: may run out of memory)
-r_meshbuffer_t *R_BufferData_Store(size_t size, void *data, r_bufferdata_type_t type, int *returnbufferoffset, qboolean allowfail);
+/// 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);
@@ -287,40 +291,40 @@ typedef struct rsurfacestate_s
        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;
@@ -340,41 +344,41 @@ typedef struct rsurfacestate_s
        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
@@ -383,7 +387,7 @@ typedef struct rsurfacestate_s
        // 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;
@@ -400,18 +404,6 @@ typedef struct rsurfacestate_s
        // animation blending state from entity
        frameblend_t frameblend[MAX_FRAMEBLENDS];
        skeleton_t *skeleton;
-       // directional model shading state from entity
-       vec3_t modellight_ambient;
-       vec3_t modellight_diffuse;
-       vec3_t modellight_lightdir;
-       // colormapping state from entity (these are black if colormapping is off)
-       vec3_t colormap_pantscolor;
-       vec3_t colormap_shirtcolor;
-       // special coloring of ambient/diffuse textures (gloss not affected)
-       // colormod[3] is the alpha of the entity
-       float colormod[4];
-       // special coloring of glow textures
-       float glowmod[3];
        // view location in model space
        vec3_t localvieworigin;
        // polygon offset data for submodels
@@ -450,8 +442,8 @@ typedef struct rsurfacestate_s
        float userwavefunc_param[Q3WAVEFUNC_USER_COUNT];
 
        // pointer to an entity_render_t used only by R_GetCurrentTexture and
-       // RSurf_ActiveWorldEntity/RSurf_ActiveModelEntity as a unique id within
-       // each frame (see r_frame also)
+       // RSurf_ActiveModelEntity as a unique id within each frame (see r_frame
+       // also)
        entity_render_t *entity;
 }
 rsurfacestate_t;
@@ -460,7 +452,6 @@ 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);
 void RSurf_SetupDepthAndCulling(void);
@@ -507,7 +498,7 @@ rsurfacepass_t;
 void R_SetupShader_Generic(rtexture_t *first, rtexture_t *second, int texturemode, int rgbscale, qboolean usegamma, qboolean notrippy, qboolean suppresstexalpha);
 void R_SetupShader_Generic_NoTexture(qboolean usegamma, qboolean notrippy);
 void R_SetupShader_DepthOrShadow(qboolean notrippy, qboolean depthrgb, qboolean skeletal);
-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, qboolean notrippy);
+void R_SetupShader_Surface(const float ambientcolor[3], const float diffusecolor[3], const float specularcolor[3], rsurfacepass_t rsurfacepass, int texturenumsurfaces, const msurface_t **texturesurfacelist, void *waterplane, qboolean notrippy);
 void R_SetupShader_DeferredLight(const rtlight_t *rtlight);
 
 typedef struct r_waterstate_waterplane_s
@@ -607,16 +598,13 @@ void R_Model_Sprite_Draw(entity_render_t *ent);
 
 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_Shadow_UpdateBounceGridTexture(void);
-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);