27#include "../qcommon/q_shared.h"
28#include "../qcommon/qfiles.h"
29#include "../qcommon/qcommon.h"
30#include "../renderercommon/tr_public.h"
31#include "../renderercommon/tr_common.h"
32#include "tr_extratypes.h"
33#include "tr_extramath.h"
35#include "tr_postprocess.h"
36#include "../renderercommon/iqm.h"
37#include "../renderercommon/qgl.h"
40#define GLE(ret, name, ...) extern "C" name##proc * qgl##name;
42#define GLE(ret, name, ...) extern name##proc * qgl##name;
50QGL_ARB_occlusion_query_PROCS;
51QGL_ARB_framebuffer_object_PROCS;
52QGL_ARB_vertex_array_object_PROCS;
53QGL_EXT_direct_state_access_PROCS;
60#define GL_INDEX_TYPE GL_UNSIGNED_SHORT
61typedef unsigned short glIndex_t;
63typedef unsigned int vaoCacheGlIndex_t;
65#define BUFFER_OFFSET(i) ((char *)NULL + (i))
70#define SHADERNUM_BITS 14
71#define MAX_SHADERS (1<<SHADERNUM_BITS)
74#define MAX_VISCOUNTS 5
77#define MAX_CALC_PSHADOWS 64
78#define MAX_DRAWN_PSHADOWS 16
79#define PSHADOW_MAP_SIZE 512
85#define MAX_SPHERE_LIGHTS 512
86#define MAX_SPRITESURFS 0x8000
88#define MAX_SPRITE_DIST 16384.0f
89#define MAX_SPRITE_DIST_SQUARED (MAX_SPRITE_DIST * MAX_SPRITE_DIST)
96#define BUNDLE_ANIMATE_ONCE 1
101 char name[MAX_QPATH];
103 float parallaxRadius;
130 qboolean needDlights;
131 qboolean lightingCalculated;
134 vec3_t modelLightDir;
137 vec3_t directedLight;
144 float lodpercentage[2];
152 float modelMatrix[16];
153 float transformMatrix[16];
157#define VAO_MAX_ATTRIBS 16
178 char name[MAX_QPATH];
182 uint32_t vertexesVBO;
184 vaoAttrib_t attribs[VAO_MAX_ATTRIBS];
222#define MAX_SHADER_STAGES 8
244 DEFORM_PROJECTION_SHADOW,
274 DGEN_WAVE_INVERSE_SAWTOOTH,
287 AGEN_ONE_MINUS_ENTITY,
289 AGEN_ONE_MINUS_VERTEX,
290 AGEN_LIGHTING_SPECULAR,
305 AGEN_ONE_MINUS_SKYALPHA,
309 AGEN_ONE_MINUS_DIST_FADE,
311 AGEN_ONE_MINUS_TIKI_DIST_FADE,
313 AGEN_ONE_MINUS_DOT_VIEW,
319 CGEN_IDENTITY_LIGHTING,
322 CGEN_ONE_MINUS_ENTITY,
325 CGEN_EXACT_VERTEX_LIT,
327 CGEN_ONE_MINUS_VERTEX,
329 CGEN_LIGHTING_DIFFUSE,
337 CGEN_MULTIPLY_BY_WAVEFORM,
339 CGEN_LIGHTING_SPHERICAL,
354 TCGEN_ENVIRONMENT_MAPPED,
375#define TR_MAX_TEXMODS 4
385 TMOD_ENTITY_TRANSLATE
388#define MAX_SHADER_DEFORMS 3
390 deform_t deformation;
394 float deformationSpread;
431#define MAX_IMAGE_ANIMATIONS 64
435 image_t *image[MAX_IMAGE_ANIMATIONS];
436 int numImageAnimations;
437 float imageAnimationSpeed;
440 vec3_t tcGenVectors[2];
452 float imageAnimationPhase;
471 NUM_TEXTURE_BUNDLES = 7
480 ST_NORMALPARALLAXMAP,
496 byte constantColor[4];
500 acff_t adjustColorsForFog;
509 vec4_t specularScale;
540 image_t *outerbox[6], *innerbox[6];
545 float depthForOpaque;
555 SPRITE_PARALLEL_ORIENTED,
557 SPRITE_PARALLEL_UPRIGHT
568 char name[MAX_QPATH];
576 qboolean defaultShader;
582 qboolean explicitlyDefined;
587 qboolean entityMergable;
597 qboolean polygonOffset;
606 deformStage_t deforms[MAX_SHADER_DEFORMS];
608 int numUnfoggedPasses;
609 shaderStage_t *stages[MAX_SHADER_STAGES];
611 void (*optimalStageIteratorFunc)( void );
616 struct shader_s *remappedShader;
618 struct shader_s *next;
626 spriteParms_t sprite;
631 ATTR_INDEX_POSITION = 0,
632 ATTR_INDEX_TEXCOORD = 1,
633 ATTR_INDEX_LIGHTCOORD = 2,
634 ATTR_INDEX_TANGENT = 3,
635 ATTR_INDEX_NORMAL = 4,
636 ATTR_INDEX_COLOR = 5,
637 ATTR_INDEX_PAINTCOLOR = 6,
638 ATTR_INDEX_LIGHTDIRECTION = 7,
639 ATTR_INDEX_BONE_INDEXES = 8,
640 ATTR_INDEX_BONE_WEIGHTS = 9,
643 ATTR_INDEX_POSITION2 = 10,
644 ATTR_INDEX_TANGENT2 = 11,
645 ATTR_INDEX_NORMAL2 = 12,
647 ATTR_INDEX_COUNT = 13
652 ATTR_POSITION = 1 << ATTR_INDEX_POSITION,
653 ATTR_TEXCOORD = 1 << ATTR_INDEX_TEXCOORD,
654 ATTR_LIGHTCOORD = 1 << ATTR_INDEX_LIGHTCOORD,
655 ATTR_TANGENT = 1 << ATTR_INDEX_TANGENT,
656 ATTR_NORMAL = 1 << ATTR_INDEX_NORMAL,
657 ATTR_COLOR = 1 << ATTR_INDEX_COLOR,
658 ATTR_PAINTCOLOR = 1 << ATTR_INDEX_PAINTCOLOR,
659 ATTR_LIGHTDIRECTION = 1 << ATTR_INDEX_LIGHTDIRECTION,
660 ATTR_BONE_INDEXES = 1 << ATTR_INDEX_BONE_INDEXES,
661 ATTR_BONE_WEIGHTS = 1 << ATTR_INDEX_BONE_WEIGHTS,
664 ATTR_POSITION2 = 1 << ATTR_INDEX_POSITION2,
665 ATTR_TANGENT2 = 1 << ATTR_INDEX_TANGENT2,
666 ATTR_NORMAL2 = 1 << ATTR_INDEX_NORMAL2,
668 ATTR_DEFAULT = ATTR_POSITION,
669 ATTR_BITS = ATTR_POSITION |
676 ATTR_LIGHTDIRECTION |
686 GENERICDEF_USE_DEFORM_VERTEXES = 0x0001,
687 GENERICDEF_USE_TCGEN_AND_TCMOD = 0x0002,
688 GENERICDEF_USE_VERTEX_ANIMATION = 0x0004,
689 GENERICDEF_USE_FOG = 0x0008,
690 GENERICDEF_USE_RGBAGEN = 0x0010,
691 GENERICDEF_USE_BONE_ANIMATION = 0x0020,
692 GENERICDEF_ALL = 0x003F,
693 GENERICDEF_COUNT = 0x0040,
698 FOGDEF_USE_DEFORM_VERTEXES = 0x0001,
699 FOGDEF_USE_VERTEX_ANIMATION = 0x0002,
700 FOGDEF_USE_BONE_ANIMATION = 0x0004,
702 FOGDEF_COUNT = 0x0008,
707 DLIGHTDEF_USE_DEFORM_VERTEXES = 0x0001,
708 DLIGHTDEF_ALL = 0x0001,
709 DLIGHTDEF_COUNT = 0x0002,
714 LIGHTDEF_USE_LIGHTMAP = 0x0001,
715 LIGHTDEF_USE_LIGHT_VECTOR = 0x0002,
716 LIGHTDEF_USE_LIGHT_VERTEX = 0x0003,
717 LIGHTDEF_LIGHTTYPE_MASK = 0x0003,
718 LIGHTDEF_ENTITY_VERTEX_ANIMATION = 0x0004,
719 LIGHTDEF_USE_TCGEN_AND_TCMOD = 0x0008,
720 LIGHTDEF_USE_PARALLAXMAP = 0x0010,
721 LIGHTDEF_USE_SHADOWMAP = 0x0020,
722 LIGHTDEF_ENTITY_BONE_ANIMATION = 0x0040,
723 LIGHTDEF_ALL = 0x007F,
724 LIGHTDEF_COUNT = 0x0080
729 SHADOWMAPDEF_USE_VERTEX_ANIMATION = 0x0001,
730 SHADOWMAPDEF_USE_BONE_ANIMATION = 0x0002,
731 SHADOWMAPDEF_ALL = 0x0003,
732 SHADOWMAPDEF_COUNT = 0x0004
744 GLSL_MAT16_BONEMATRIX
749 UNIFORM_DIFFUSEMAP = 0,
759 UNIFORM_SCREENIMAGEMAP,
760 UNIFORM_SCREENDEPTHMAP,
772 UNIFORM_ENABLETEXTURES,
774 UNIFORM_DIFFUSETEXMATRIX0,
775 UNIFORM_DIFFUSETEXMATRIX1,
776 UNIFORM_DIFFUSETEXMATRIX2,
777 UNIFORM_DIFFUSETEXMATRIX3,
778 UNIFORM_DIFFUSETEXMATRIX4,
779 UNIFORM_DIFFUSETEXMATRIX5,
780 UNIFORM_DIFFUSETEXMATRIX6,
781 UNIFORM_DIFFUSETEXMATRIX7,
784 UNIFORM_TCGEN0VECTOR0,
785 UNIFORM_TCGEN0VECTOR1,
788 UNIFORM_DEFORMPARAMS,
797 UNIFORM_LIGHTFORWARD,
801 UNIFORM_MODELLIGHTDIR,
803 UNIFORM_AMBIENTLIGHT,
804 UNIFORM_DIRECTEDLIGHT,
811 UNIFORM_FOGCOLORMASK,
814 UNIFORM_MODELVIEWPROJECTIONMATRIX,
819 UNIFORM_SPECULARSCALE,
823 UNIFORM_LOCALVIEWORIGIN,
829 UNIFORM_AUTOEXPOSUREMINMAX,
830 UNIFORM_TONEMINAVGMAXLINEAR,
832 UNIFORM_PRIMARYLIGHTORIGIN,
833 UNIFORM_PRIMARYLIGHTCOLOR,
834 UNIFORM_PRIMARYLIGHTAMBIENT,
835 UNIFORM_PRIMARYLIGHTRADIUS,
850 char name[MAX_QPATH];
854 GLuint fragmentShader;
858 GLint uniforms[UNIFORM_COUNT];
859 short uniformBufferOffsets[UNIFORM_COUNT];
866 int x, y, width, height;
871 stereoFrame_t stereoFrame;
877 byte areamask[MAX_MAP_AREA_BYTES];
878 qboolean areamaskModified;
885 char text[MAX_RENDER_STRINGS][MAX_RENDER_STRING_LENGTH];
899 unsigned int dlightMask;
903 float sunShadowMvp[4][16];
908 float autoExposureMinMax[2];
909 float toneMinAvgMaxLinear[3];
928 int numStaticModelData;
929 unsigned char *staticModelData;
935 qboolean skybox_farplane;
936 qboolean render_terrain;
946#define MAX_SKIN_SURFACES 256
950 char name[MAX_QPATH];
955 char name[MAX_QPATH];
957 skinSurface_t *surfaces;
962 int originalBrushNumber;
989 VPF_NOVIEWMODEL = 0x01,
990 VPF_SHADOWMAP = 0x02,
991 VPF_DEPTHSHADOW = 0x04,
992 VPF_DEPTHCLAMP = 0x08,
993 VPF_ORTHOGRAPHIC = 0x10,
994 VPF_USESUNLIGHT = 0x20,
995 VPF_FARPLANEFRUSTUM = 0x40,
996 VPF_NOCUBEMAPS = 0x80
1005 viewParmFlags_t flags;
1008 cplane_t portalPlane;
1009 int viewportX, viewportY, viewportWidth, viewportHeight;
1012 int targetFboCubemapIndex;
1014 float projectionMatrix[16];
1015 cplane_t frustum[5];
1016 vec3_t visBounds[2];
1019 stereoFrame_t stereoFrame;
1025 qboolean isPortalSky;
1027 float farplane_distance;
1028 float farplane_bias;
1029 float farplane_color[3];
1030 qboolean farplane_cull;
1031 qboolean renderTerrain;
1042typedef byte color4ub_t[4];
1070 SF_NUM_SURFACE_TYPES,
1077 surfaceType_t *surface;
1080#define MAX_FACE_POINTS 64
1082#define MAX_PATCH_SIZE 32
1083#define MAX_GRID_SIZE 65
1088 surfaceType_t surfaceType;
1103 surfaceType_t surfaceType;
1116 int16_t lightdir[4];
1119#if DEBUG_OPTIMIZEVERTICES
1124#define srfVert_t_cleared(x) srfVert_t (x) = {{0, 0, 0}, {0, 0}, {0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}
1129 surfaceType_t surfaceType;
1136 vec3_t cullBounds[2];
1161 float *widthLodError;
1162 float *heightLodError;
1192 byte *influenceBlendIndexes;
1196 } influenceBlendWeights;
1201 int blendWeightsType;
1206 float *invBindJoints;
1216 surfaceType_t surfaceType;
1217 char name[MAX_QPATH];
1220 int first_vertex, num_vertexes;
1221 int first_triangle, num_triangles;
1222 int first_influence, num_influences;
1227 surfaceType_t surfaceType;
1242 surfaceType_t surfaceType;
1255extern void (*rb_surfaceTable[SF_NUM_SURFACE_TYPES])(
void *);
1294typedef float cube_entry_t[3][4];
1302 void(*TessFunction) (
unsigned char* dstColors);
1304 unsigned char level[4];
1308 reallightinfo_t light[MAX_REAL_LIGHTS];
1310 float cubemap[24][3][4];
1317 struct mnode_s* leaf;
1320 float spot_radiusbydistance;
1322 int reference_count;
1328 vec3_t flaredirection;
1329 char szFlareName[64];
1338typedef unsigned short terraInt;
1342 vec2_t texCoords[2];
1346 unsigned int uiDistRecalc;
1348 terraInt iVertArray;
1355 unsigned short iPt[3];
1357 unsigned int uiDistRecalc;
1358 struct cTerraPatchUnpacked_s* patch;
1359 varnodeUnpacked_t* varnode;
1366 terraInt iLeftChild;
1367 terraInt iRightChild;
1374 surfaceType_t surfaceType;
1378 terraInt iMergeHead;
1391 srfTerrain_t drawinfo;
1396 unsigned int uiDistRecalc;
1399 vec2_t texCoord[2][2];
1409 struct cTerraPatchUnpacked_s* pNextActive;
1410 varnodeUnpacked_t varTree[2][63];
1411 unsigned char heightmap[81];
1417 surfaceType_t surfaceType;
1418 struct cStaticModelUnpacked_s* parent;
1422 surfaceType_t surfaceType;
1429 qboolean useSpecialLighting;
1430 qboolean bLightGridCalculated;
1437 int firstVertexData;
1441 sphere_dlight_t dlights[MAX_DLIGHTS];
1446 float lodpercentage[2];
1450 surfaceType_t surftype;
1477 vec3_t entityOrigins[8];
1478 float entityRadiuses[8];
1483 vec3_t lightViewAxis[3];
1507#define CULLINFO_NONE 0
1508#define CULLINFO_BOX 1
1509#define CULLINFO_SPHERE 2
1510#define CULLINFO_PLANE 4
1525 cullinfo_t cullinfo;
1527 surfaceType_t *data;
1531#define CONTENTS_NODE -1
1535 int visCounts[MAX_VISCOUNTS];
1537 struct mnode_s *parent;
1541 struct mnode_s *children[2];
1547 int firstmarksurface;
1548 int nummarksurfaces;
1557 int firstTerraPatch;
1558 int numTerraPatches;
1559 int firstStaticModel;
1560 int numStaticModels;
1561 void** pFirstMarkFragment;
1562 int iNumMarkFragment;
1574 void** pFirstMarkFragment;
1575 int iNumMarkFragment;
1577 qboolean hasLightmap;
1581 char name[MAX_QPATH];
1582 char baseName[MAX_QPATH];
1596 int numDecisionNodes;
1599 int numWorldSurfaces;
1602 msurface_t *surfaces;
1603 int *surfacesViewCount;
1604 int *surfacesDlightBits;
1605 int *surfacesPshadowBits;
1607 int nummarksurfaces;
1613 vec3_t lightGridOrigin;
1614 vec3_t lightGridSize;
1615 vec3_t lightGridInverseSize;
1616 int lightGridBounds[3];
1617 byte *lightGridData;
1618 uint16_t *lightGrid16;
1626 char *entityParsePoint;
1632 unsigned short* lightGridOffsets;
1633 byte lightGridPalette[768];
1635 int numTerraPatches;
1639 int numVisTerraPatches;
1642 int numStaticModelData;
1643 byte* staticModelData;
1645 int numStaticModels;
1648 int numVisStaticModels;
1673 float localOrigin[3];
1685 char name[MAX_QPATH];
1702 surfaceType_t surfaceType;
1704 char name[MAX_QPATH];
1706 int numShaderIndexes;
1729 mdvSurface_t *surfaces;
1732 srfVaoMdvMesh_t *vaoSurfaces;
1755 char name[MAX_QPATH];
1761 mdvModel_t *mdv[MD3_MAX_LODS];
1771 qboolean serveronly;
1775#define MAX_MOD_KNOWN 1024
1777void R_ModelInit (
void);
1778model_t *R_GetModelByHandle( qhandle_t hModel );
1779int R_LerpTag(
orientation_t *tag, qhandle_t handle,
int startFrame,
int endFrame,
1780 float frac,
const char *tagName );
1781void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs );
1783void R_Modellist_f (
void);
1787#define MAX_DRAWIMAGES 2048
1788#define MAX_SKINS 1024
1791#define MAX_DRAWSURFS 0x10000
1792#define DRAWSURF_MASK (MAX_DRAWSURFS-1)
1825#define QSORT_FOGNUM_SHIFT 2
1826#define QSORT_REFENTITYNUM_SHIFT 4
1827#define QSORT_STATICMODEL_SHIFT (QSORT_REFENTITYNUM_SHIFT+REFENTITYNUM_BITS)
1828#define QSORT_SHADERNUM_SHIFT (QSORT_STATICMODEL_SHIFT+1)
1829#if (QSORT_SHADERNUM_SHIFT+SHADERNUM_BITS) > 32
1830 #error "Need to update sorting, too many bits."
1832#define QSORT_PSHADOW_SHIFT 1
1834extern int gl_filter_min, gl_filter_max;
1840 int c_sphere_cull_patch_in, c_sphere_cull_patch_clip, c_sphere_cull_patch_out;
1841 int c_box_cull_patch_in, c_box_cull_patch_clip, c_box_cull_patch_out;
1842 int c_sphere_cull_md3_in, c_sphere_cull_md3_clip, c_sphere_cull_md3_out;
1843 int c_box_cull_md3_in, c_box_cull_md3_clip, c_box_cull_md3_out;
1846 int c_dlightSurfaces;
1847 int c_dlightSurfacesCulled;
1850#define FOG_TABLE_SIZE 256
1851#define FUNCTABLE_SIZE 1024
1852#define FUNCTABLE_SIZE2 10
1853#define FUNCTABLE_MASK (FUNCTABLE_SIZE-1)
1858 qboolean finishCalled;
1862 uint32_t glStateBits;
1863 uint32_t storedGlState;
1864 float vertexAttribsInterpolation;
1865 qboolean vertexAnimation;
1867 mat4_t boneMatrix[IQM_MAX_JOINTS];
1868 uint32_t vertexAttribsEnabled;
1873 mat4_t modelviewProjection;
1886} textureCompressionRef_t;
1891 qboolean intelGraphics;
1893 qboolean occlusionQuery;
1894 GLenum occlusionQueryTarget;
1896 int glslMajorVersion;
1897 int glslMinorVersion;
1898 int glslMaxAnimatedBones;
1902 qboolean framebufferObject;
1903 int maxRenderbufferSize;
1904 int maxColorAttachments;
1906 qboolean textureFloat;
1907 textureCompressionRef_t textureCompression;
1908 qboolean swizzleNormalmap;
1910 qboolean framebufferMultisample;
1911 qboolean framebufferBlit;
1913 qboolean depthClamp;
1914 qboolean seamlessCubeMap;
1916 qboolean vertexArrayObject;
1917 qboolean directStateAccess;
1919 int maxVertexAttribs;
1920 qboolean gpuVertexAnimation;
1922 GLenum vaoCacheGlIndexType;
1923 size_t vaoCacheGlIndexSize;
1927 qboolean readStencil;
1928 qboolean shadowSamplers;
1929 qboolean standardDerivatives;
1934 int c_surfaces, c_shaders, c_vertexes, c_indexes, c_totalIndexes;
1942 int c_staticVaoDraws;
1943 int c_dynamicVaoDraws;
1945 int c_dlightVertexes;
1946 int c_dlightIndexes;
1952 int c_glslShaderBinds;
1954 int c_lightallDraws;
1964 int c_characterlights;
1974 qboolean isHyperspace;
1976 qboolean skyRenderedThisView;
1978 qboolean projection2D;
1980 qboolean vertexes2D;
1984 qboolean colorMask[4];
1991 unsigned short numSpheresUsed;
1996 float shaderStartTime;
2009 qboolean registered;
2012 int visClusters[MAX_VISCOUNTS];
2013 int visCounts[MAX_VISCOUNTS];
2022 qboolean worldMapLoaded;
2023 qboolean worldDeluxeMapping;
2024 vec2_t autoExposureMinMax;
2025 vec3_t toneMinAvgMaxLevel;
2028 const byte *externalVisData;
2030 image_t *defaultImage;
2031 image_t *scratchImage[32];
2033 image_t *dlightImage;
2034 image_t *flareImage;
2035 image_t *whiteImage;
2036 image_t *identityLightImage;
2038 image_t *shadowCubemaps[MAX_DLIGHTS];
2041 image_t *renderImage;
2042 image_t *sunRaysImage;
2043 image_t *renderDepthImage;
2044 image_t *pshadowMaps[MAX_DRAWN_PSHADOWS];
2045 image_t *screenScratchImage;
2046 image_t *textureScratchImage[2];
2047 image_t *quarterImage[2];
2048 image_t *calcLevelsImage;
2049 image_t *targetLevelsImage;
2050 image_t *fixedLevelsImage;
2051 image_t *sunShadowDepthImage[4];
2052 image_t *screenShadowImage;
2053 image_t *screenSsaoImage;
2054 image_t *hdrDepthImage;
2055 image_t *renderCubeImage;
2057 image_t *textureDepthImage;
2060 FBO_t *msaaResolveFbo;
2063 FBO_t *pshadowFbos[MAX_DRAWN_PSHADOWS];
2064 FBO_t *screenScratchFbo;
2065 FBO_t *textureScratchFbo[2];
2066 FBO_t *quarterFbo[2];
2067 FBO_t *calcLevelsFbo;
2068 FBO_t *targetLevelsFbo;
2069 FBO_t *sunShadowFbo[4];
2070 FBO_t *screenShadowFbo;
2071 FBO_t *screenSsaoFbo;
2073 FBO_t *renderCubeFbo;
2075 shader_t *defaultShader;
2076 shader_t *shadowShader;
2077 shader_t *projectionShadowShader;
2079 shader_t *flareShader;
2080 shader_t *sunShader;
2081 shader_t *sunFlareShader;
2085 image_t **lightmaps;
2086 image_t **deluxemaps;
2088 int fatLightmapCols;
2089 int fatLightmapRows;
2092 cubemap_t *cubemaps;
2096 int currentEntityNum;
2097 int shiftedEntityNum;
2098 model_t *currentModel;
2103 shaderProgram_t genericShader[GENERICDEF_COUNT];
2104 shaderProgram_t textureColorShader;
2105 shaderProgram_t fogShader[FOGDEF_COUNT];
2106 shaderProgram_t dlightShader[DLIGHTDEF_COUNT];
2107 shaderProgram_t lightallShader[LIGHTDEF_COUNT];
2108 shaderProgram_t shadowmapShader[SHADOWMAPDEF_COUNT];
2109 shaderProgram_t pshadowShader;
2110 shaderProgram_t down4xShader;
2111 shaderProgram_t bokehShader;
2112 shaderProgram_t tonemapShader;
2113 shaderProgram_t calclevels4xShader[2];
2114 shaderProgram_t shadowmaskShader;
2115 shaderProgram_t ssaoShader;
2116 shaderProgram_t depthBlurShader[4];
2117 shaderProgram_t testcubeShader;
2124 float identityLight;
2125 int identityLightByte;
2134 float sunShadowScale;
2136 qboolean sunShadows;
2138 vec3_t sunDirection;
2139 vec3_t lastCascadeSunDirection;
2140 float lastCascadeSunMvp[16];
2149 model_t *models[MAX_MOD_KNOWN];
2153 image_t *images[MAX_DRAWIMAGES];
2156 FBO_t *fbos[MAX_FBOS];
2159 vao_t *vaos[MAX_VAOS];
2165 shader_t *shaders[MAX_SHADERS];
2166 shader_t *sortedShaders[MAX_SHADERS];
2169 skin_t *skins[MAX_SKINS];
2171 GLuint sunFlareQuery[2];
2172 int sunFlareQueryIndex;
2173 qboolean sunFlareQueryActive[2];
2175 float sinTable[FUNCTABLE_SIZE];
2176 float squareTable[FUNCTABLE_SIZE];
2177 float triangleTable[FUNCTABLE_SIZE];
2178 float sawToothTable[FUNCTABLE_SIZE];
2179 float inverseSawToothTable[FUNCTABLE_SIZE];
2180 float fogTable[FOG_TABLE_SIZE];
2186 int currentSpriteNum;
2187 int shiftedIsStatic;
2189 int overbrightShift;
2190 float overbrightMult;
2193 qboolean skyRendered;
2194 qboolean portalRendered;
2196 spherel_t sSunLight;
2197 spherel_t sLights[1532];
2200 qboolean shadersParsed;
2201 int frame_skel_index;
2202 int skel_index[1024];
2203 fontheader_t* pFontDebugStrings;
2215extern cvar_t *r_flareSize;
2216extern cvar_t *r_flareFade;
2218#define FLARE_STDCOEFF "150"
2219extern cvar_t *r_flareCoeff;
2221extern cvar_t *r_railWidth;
2222extern cvar_t *r_railCoreWidth;
2223extern cvar_t *r_railSegmentLength;
2225extern cvar_t *r_ignore;
2226extern cvar_t *r_verbose;
2228extern cvar_t *r_znear;
2229extern cvar_t *r_zproj;
2230extern cvar_t *r_stereoSeparation;
2232extern cvar_t *r_measureOverdraw;
2234extern cvar_t *r_lodbias;
2235extern cvar_t *r_lodscale;
2237extern cvar_t *r_inGameVideo;
2238extern cvar_t *r_fastsky;
2239extern cvar_t *r_drawSun;
2240extern cvar_t *r_dynamiclight;
2241extern cvar_t *r_dlightBacks;
2243extern cvar_t *r_norefresh;
2244extern cvar_t *r_drawentities;
2245extern cvar_t *r_drawworld;
2246extern cvar_t *r_speeds;
2247extern cvar_t *r_detailTextures;
2248extern cvar_t *r_novis;
2249extern cvar_t *r_nocull;
2250extern cvar_t *r_facePlaneCull;
2251extern cvar_t *r_nocurves;
2252extern cvar_t *r_showcluster;
2254extern cvar_t *r_gamma;
2255extern cvar_t *r_displayRefresh;
2257extern cvar_t *r_ext_framebuffer_object;
2258extern cvar_t *r_ext_texture_float;
2259extern cvar_t *r_ext_framebuffer_multisample;
2260extern cvar_t *r_arb_seamless_cube_map;
2261extern cvar_t *r_arb_vertex_array_object;
2262extern cvar_t *r_ext_direct_state_access;
2264extern cvar_t *r_nobind;
2265extern cvar_t *r_singleShader;
2266extern cvar_t *r_roundImagesDown;
2267extern cvar_t *r_colorMipLevels;
2268extern cvar_t *r_picmip;
2269extern cvar_t *r_finish;
2270extern cvar_t *r_textureMode;
2271extern cvar_t *r_offsetFactor;
2272extern cvar_t *r_offsetUnits;
2274extern cvar_t *r_fullbright;
2275extern cvar_t *r_lightmap;
2276extern cvar_t *r_vertexLight;
2277extern cvar_t *r_uiFullScreen;
2279extern cvar_t *r_logFile;
2280extern cvar_t *r_showtris;
2281extern cvar_t *r_showsky;
2282extern cvar_t *r_shownormals;
2283extern cvar_t *r_clear;
2285extern cvar_t *r_shadows;
2286extern cvar_t *r_flares;
2288extern cvar_t *r_intensity;
2290extern cvar_t *r_lockpvs;
2291extern cvar_t *r_noportals;
2292extern cvar_t *r_portalOnly;
2294extern cvar_t *r_subdivisions;
2295extern cvar_t *r_lodCurveError;
2296extern cvar_t *r_skipBackEnd;
2298extern cvar_t *r_anaglyphMode;
2300extern cvar_t *r_externalGLSL;
2302extern cvar_t *r_hdr;
2303extern cvar_t *r_floatLightmap;
2304extern cvar_t *r_postProcess;
2306extern cvar_t *r_toneMap;
2307extern cvar_t *r_forceToneMap;
2308extern cvar_t *r_forceToneMapMin;
2309extern cvar_t *r_forceToneMapAvg;
2310extern cvar_t *r_forceToneMapMax;
2312extern cvar_t *r_autoExposure;
2313extern cvar_t *r_forceAutoExposure;
2314extern cvar_t *r_forceAutoExposureMin;
2315extern cvar_t *r_forceAutoExposureMax;
2317extern cvar_t *r_cameraExposure;
2319extern cvar_t *r_depthPrepass;
2320extern cvar_t *r_ssao;
2322extern cvar_t *r_normalMapping;
2323extern cvar_t *r_specularMapping;
2324extern cvar_t *r_deluxeMapping;
2325extern cvar_t *r_parallaxMapping;
2326extern cvar_t *r_parallaxMapOffset;
2327extern cvar_t *r_parallaxMapShadows;
2328extern cvar_t *r_cubeMapping;
2329extern cvar_t *r_cubemapSize;
2330extern cvar_t *r_deluxeSpecular;
2331extern cvar_t *r_pbr;
2332extern cvar_t *r_baseNormalX;
2333extern cvar_t *r_baseNormalY;
2334extern cvar_t *r_baseParallax;
2335extern cvar_t *r_baseSpecular;
2336extern cvar_t *r_baseGloss;
2337extern cvar_t *r_glossType;
2338extern cvar_t *r_dlightMode;
2339extern cvar_t *r_pshadowDist;
2340extern cvar_t *r_mergeLightmaps;
2341extern cvar_t *r_imageUpsample;
2342extern cvar_t *r_imageUpsampleMaxSize;
2343extern cvar_t *r_imageUpsampleType;
2344extern cvar_t *r_genNormalMaps;
2345extern cvar_t *r_forceSun;
2346extern cvar_t *r_forceSunLightScale;
2347extern cvar_t *r_forceSunAmbientScale;
2348extern cvar_t *r_sunlightMode;
2349extern cvar_t *r_drawSunRays;
2350extern cvar_t *r_sunShadows;
2351extern cvar_t *r_shadowFilter;
2352extern cvar_t *r_shadowBlur;
2353extern cvar_t *r_shadowMapSize;
2354extern cvar_t *r_shadowCascadeZNear;
2355extern cvar_t *r_shadowCascadeZFar;
2356extern cvar_t *r_shadowCascadeZBias;
2357extern cvar_t *r_ignoreDstAlpha;
2359extern cvar_t *r_greyscale;
2361extern cvar_t *r_ignoreGLErrors;
2363extern cvar_t *r_overBrightBits;
2364extern cvar_t *r_mapOverBrightBits;
2366extern cvar_t *r_debugSurface;
2367extern cvar_t *r_simpleMipMaps;
2369extern cvar_t *r_showImages;
2370extern cvar_t *r_debugSort;
2372extern cvar_t *r_printShaders;
2374extern cvar_t *r_marksOnTriangleMeshes;
2380extern int r_sequencenumber;
2384extern cvar_t *r_drawentitypoly;
2385extern cvar_t *r_drawstaticmodels;
2386extern cvar_t *r_drawstaticmodelpoly;
2387extern cvar_t *r_drawstaticdecals;
2388extern cvar_t *r_drawterrain;
2389extern cvar_t *r_drawsprites;
2390extern cvar_t *r_drawspherelights;
2392extern cvar_t *r_numdebuglines;
2393extern cvar_t *r_stipplelines;
2394extern cvar_t *r_debuglines_depthmask;
2396extern cvar_t *r_maxpolys;
2397extern int max_polys;
2398extern cvar_t *r_maxpolyverts;
2399extern int max_polyverts;
2400extern cvar_t* r_maxtermarks;
2401extern int max_termarks;
2403extern cvar_t* r_skyportal;
2404extern cvar_t* r_skyportal_origin;
2405extern cvar_t* r_farplane;
2406extern cvar_t* r_farplane_bias;
2407extern cvar_t* r_farplane_color;
2408extern cvar_t* r_farplane_nocull;
2409extern cvar_t* r_farplane_nofog;
2410extern cvar_t* r_skybox_farplane;
2411extern cvar_t* r_farclip;
2415extern cvar_t* r_lightcoronasize;
2416extern cvar_t *r_entlight_scale;
2417extern cvar_t *r_entlight_errbound;
2418extern cvar_t *r_entlight_cubelevel;
2419extern cvar_t *r_entlight_cubefraction;
2420extern cvar_t *r_entlight_maxcalc;
2421extern cvar_t *r_light_lines;
2422extern cvar_t *r_light_sun_line;
2423extern cvar_t *r_light_int_scale;
2424extern cvar_t *r_light_nolight;
2425extern cvar_t *r_light_showgrid;
2429extern cvar_t* r_staticlod;
2430extern cvar_t* r_lodscale;
2431extern cvar_t* r_lodcap;
2432extern cvar_t* r_lodviewmodelcap;
2434extern cvar_t* r_uselod;
2435extern cvar_t* lod_LOD;
2436extern cvar_t* lod_minLOD;
2437extern cvar_t* lod_maxLOD;
2438extern cvar_t* lod_LOD_slider;
2439extern cvar_t* lod_curve_0_val;
2440extern cvar_t* lod_curve_1_val;
2441extern cvar_t* lod_curve_2_val;
2442extern cvar_t* lod_curve_3_val;
2443extern cvar_t* lod_curve_4_val;
2444extern cvar_t* lod_edit_0;
2445extern cvar_t* lod_edit_1;
2446extern cvar_t* lod_edit_2;
2447extern cvar_t* lod_edit_3;
2448extern cvar_t* lod_edit_4;
2449extern cvar_t* lod_curve_0_slider;
2450extern cvar_t* lod_curve_1_slider;
2451extern cvar_t* lod_curve_2_slider;
2452extern cvar_t* lod_curve_3_slider;
2453extern cvar_t* lod_curve_4_slider;
2454extern cvar_t* lod_pitch_val;
2455extern cvar_t* lod_zee_val;
2456extern cvar_t* lod_mesh;
2457extern cvar_t* lod_meshname;
2458extern cvar_t* lod_tikiname;
2459extern cvar_t* lod_metric;
2460extern cvar_t* lod_tris;
2461extern cvar_t* lod_position;
2462extern cvar_t* lod_save;
2463extern cvar_t* lod_tool;
2467extern cvar_t* r_developer;
2468extern cvar_t* r_fps;
2469extern cvar_t* r_showstaticbboxes;
2470extern cvar_t* r_showcull;
2471extern cvar_t* r_showlod;
2472extern cvar_t* r_showstaticlod;
2473extern cvar_t* r_showportal;
2479static ID_INLINE qboolean ShaderRequiresCPUDeforms(
const shader_t * shader)
2481 if(shader->numDeforms)
2485 if (shader->numDeforms > 1)
2488 switch (ds->deformation)
2493 return ( backEnd.refdef.floatTime != (
float)backEnd.refdef.floatTime );
2505void R_SwapBuffers(
int );
2508void R_RenderDlightCubemaps(
const refdef_t *fd);
2509void R_RenderPshadowMaps(
const refdef_t *fd);
2510void R_RenderSunShadowMaps(
const refdef_t *fd,
int level);
2511void R_RenderCubemapSide(
int cubemapIndex,
int cubemapSide, qboolean subscene );
2516void R_AddRailSurfaces(
trRefEntity_t *e, qboolean isUnderwater );
2519void R_AddPolygonSurfaces(
void );
2521void R_DecomposeSort(
unsigned sort,
int *entityNum, shader_t **shader,
2522 int *fogNum,
int *dlightMap,
int *pshadowMap, qboolean *bStaticModel );
2524void R_AddDrawSurf( surfaceType_t *surface, shader_t *shader,
2525 int fogIndex,
int dlightMap,
int pshadowMap,
int cubemap );
2527void R_CalcTexDirs(vec3_t sdir, vec3_t tdir,
const vec3_t v1,
const vec3_t v2,
2528 const vec3_t v3,
const vec2_t w1,
const vec2_t w2,
const vec2_t w3);
2529vec_t R_CalcTangentSpace(vec3_t tangent, vec3_t bitangent,
const vec3_t normal,
const vec3_t sdir,
const vec3_t tdir);
2530qboolean R_CalcTangentVectors(
srfVert_t * dv[3]);
2535void R_LocalNormalToWorld (
const vec3_t local, vec3_t world);
2536void R_LocalPointToWorld (
const vec3_t local, vec3_t world);
2537int R_CullBox (vec3_t bounds[2]);
2538int R_CullLocalBox (vec3_t bounds[2]);
2539int R_CullPointAndRadiusEx(
const vec3_t origin,
float radius,
const cplane_t* frustum,
int numPlanes );
2540int R_CullPointAndRadius(
const vec3_t origin,
float radius );
2541int R_CullLocalPointAndRadius(
const vec3_t origin,
float radius );
2543void R_SetupProjection(
viewParms_t *dest,
float zProj,
float zFar, qboolean computeFrustum);
2549void GL_BindToTMU( image_t *image,
int tmu );
2550void GL_SetDefaultState (
void);
2551void GL_TextureMode(
const char *
string );
2552void GL_CheckErrs(
char *file,
int line );
2553#define GL_CheckErrors(...) GL_CheckErrs(__FILE__, __LINE__)
2554void GL_State(
unsigned long stateVector );
2555void GL_SetProjectionMatrix(mat4_t matrix);
2556void GL_SetModelviewMatrix(mat4_t matrix);
2557void GL_Cull(
int cullType );
2559#define GLS_SRCBLEND_ZERO 0x00000001
2560#define GLS_SRCBLEND_ONE 0x00000002
2561#define GLS_SRCBLEND_DST_COLOR 0x00000003
2562#define GLS_SRCBLEND_ONE_MINUS_DST_COLOR 0x00000004
2563#define GLS_SRCBLEND_SRC_ALPHA 0x00000005
2564#define GLS_SRCBLEND_ONE_MINUS_SRC_ALPHA 0x00000006
2565#define GLS_SRCBLEND_DST_ALPHA 0x00000007
2566#define GLS_SRCBLEND_ONE_MINUS_DST_ALPHA 0x00000008
2567#define GLS_SRCBLEND_ALPHA_SATURATE 0x00000009
2568#define GLS_SRCBLEND_BITS 0x0000000f
2570#define GLS_DSTBLEND_ZERO 0x00000010
2571#define GLS_DSTBLEND_ONE 0x00000020
2572#define GLS_DSTBLEND_SRC_COLOR 0x00000030
2573#define GLS_DSTBLEND_ONE_MINUS_SRC_COLOR 0x00000040
2574#define GLS_DSTBLEND_SRC_ALPHA 0x00000050
2575#define GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA 0x00000060
2576#define GLS_DSTBLEND_DST_ALPHA 0x00000070
2577#define GLS_DSTBLEND_ONE_MINUS_DST_ALPHA 0x00000080
2578#define GLS_DSTBLEND_BITS 0x000000f0
2580#define GLS_DEPTHMASK_TRUE 0x00000100
2582#define GLS_POLYMODE_LINE 0x00001000
2584#define GLS_DEPTHTEST_DISABLE 0x00010000
2585#define GLS_DEPTHFUNC_EQUAL 0x00020000
2586#define GLS_DEPTHFUNC_GREATER 0x00040000
2587#define GLS_DEPTHFUNC_BITS 0x00060000
2589#define GLS_ATEST_GT_0 0x10000000
2590#define GLS_ATEST_LT_80 0x20000000
2591#define GLS_ATEST_GE_80 0x40000000
2592#define GLS_ATEST_BITS 0x70000000
2594#define GLS_DEFAULT GLS_DEPTHMASK_TRUE
2596void RE_StretchRaw (
int x,
int y,
int w,
int h,
int cols,
int rows,
const byte *data,
int client, qboolean dirty);
2597void RE_UploadCinematic (
int w,
int h,
int cols,
int rows,
const byte *data,
int client, qboolean dirty);
2599void RE_BeginFrame( stereoFrame_t stereoFrame );
2600void RE_BeginRegistration(
glconfig_t *glconfig );
2601void RE_LoadWorldMap(
const char *mapname );
2602void RE_SetWorldVisData(
const byte *vis );
2603qhandle_t RE_RegisterModel(
const char *name );
2604qhandle_t RE_RegisterSkin(
const char *name );
2605void RE_Shutdown( qboolean destroyWindow );
2607qboolean R_GetEntityToken(
char *buffer,
int size );
2609model_t *R_AllocModel(
void );
2612void R_UpdateSubImage( image_t *image,
byte *pic,
int x,
int y,
int width,
int height, GLenum picFormat );
2614void R_SetColorMappings(
void );
2615void R_GammaCorrect(
byte *buffer,
int bufSize );
2617void R_ImageList_f(
void );
2618void R_SkinList_f(
void );
2620const void *RB_TakeScreenshotCmd(
const void *data );
2621void R_ScreenShot_f(
void );
2623void R_InitFogTable(
void );
2624float R_FogFactor(
float s,
float t );
2625void R_InitImages(
void );
2626void R_DeleteTextures(
void );
2627int R_SumOfUsedImages(
void );
2628void R_InitSkins(
void );
2629skin_t *R_GetSkinByHandle( qhandle_t hSkin );
2633const void *RB_TakeVideoFrameCmd(
const void *data );
2638shader_t *R_FindShader(
const char *name,
int lightmapIndex, qboolean mipRawImage );
2639shader_t *R_FindShaderEx(
const char *name,
int lightmapIndex, qboolean mipRawImage,
int realLightmapIndex );
2640shader_t *R_GetShaderByHandle( qhandle_t hShader );
2641shader_t *R_GetShaderByState(
int index,
long *cycleTime );
2642shader_t *R_FindShaderByName(
const char *name );
2643void R_InitShaders(
void );
2644void R_ShaderList_f(
void );
2645void R_RemapShader(
const char *oldShader,
const char *newShader,
const char *timeOffset);
2651#define GLS_MULTITEXTURE 0x00004000
2652#define GLS_MULTITEXTURE_ENV 0x00008000
2653#define GLS_FOG 0x00080000
2655#define GLS_FOG_ENABLED 0x00100000
2656#define GLS_FOG_BLACK 0x00200000
2657#define GLS_FOG_WHITE 0x00400000
2658#define GLS_FOG_COLOR (GLS_FOG_BLACK | GLS_FOG_WHITE)
2659#define GLS_FOG_BITS (GLS_FOG_WHITE|GLS_FOG_BLACK|GLS_FOG_ENABLED)
2660#define GLS_COLOR_NOMASK 0x00800000
2663void R_RotateForViewer(
void);
2664void R_SetupFrustum(
void);
2665int R_DistanceCullLocalPointAndRadius(
float fDist,
const vec3_t pt,
float radius);
2666int R_DistanceCullPointAndRadius(
float fDist,
const vec3_t pt,
float radius);
2667qboolean R_ImageExists(
const char* name);
2668int R_CountTextureMemory();
2669qboolean R_LoadRawImage(
const char *name,
byte **pic,
int *width,
int *height);
2670void R_FreeRawImage(
byte *pic);
2675void RE_PrintBSPFileSizes(
void);
2676int RE_MapVersion(
void);
2681void R_SavePerformanceCounters(
void);
2687void R_AddSpriteSurfaces();
2688qboolean SurfIsOffscreen2(
const srfBspSurface_t* surface, shader_t* shader,
int entityNum);
2693qhandle_t RE_RefreshShaderNoMip(
const char* name);
2705void GLimp_InitExtraExtensions(
void );
2717 color4ub_t colors[SHADER_MAX_VERTEXES];
2718 vec2_t texcoords[NUM_TEXTURE_BUNDLES][SHADER_MAX_VERTEXES];
2723 glIndex_t indexes[SHADER_MAX_INDEXES] QALIGN(16);
2724 vec4_t xyz[SHADER_MAX_VERTEXES] QALIGN(16);
2725 int16_t normal[SHADER_MAX_VERTEXES][4] QALIGN(16);
2726 int16_t tangent[SHADER_MAX_VERTEXES][4] QALIGN(16);
2727 vec2_t texCoords[SHADER_MAX_VERTEXES] QALIGN(16);
2728 vec2_t lightCoords[SHADER_MAX_VERTEXES] QALIGN(16);
2729 uint16_t color[SHADER_MAX_VERTEXES][4] QALIGN(16);
2730 int16_t lightdir[SHADER_MAX_VERTEXES][4] QALIGN(16);
2733 void *attribPointers[ATTR_INDEX_COUNT];
2735 qboolean useInternalVao;
2736 qboolean useCacheVao;
2738 stageVars_t svars QALIGN(16);
2756 void (*currentStageIteratorFunc)( void );
2757 shaderStage_t **xstages;
2763 qboolean no_global_fog;
2766extern shaderCommands_t tess;
2768void RB_BeginSurface(shader_t *shader,
int fogNum,
int cubemapIndex );
2769void RB_EndSurface(
void);
2770void RB_CheckOverflow(
int verts,
int indexes );
2771#define RB_CHECKOVERFLOW(v,i) if (tess.numVertexes + (v) >= SHADER_MAX_VERTEXES || tess.numIndexes + (i) >= SHADER_MAX_INDEXES ) {RB_CheckOverflow(v,i);}
2773void R_DrawElements(
int numIndexes,
int firstIndex );
2774void RB_StageIteratorGeneric(
void );
2775void RB_StageIteratorSky(
void );
2776void RB_StageIteratorVertexLitTexture(
void );
2777void RB_StageIteratorLightmappedMultitexture(
void );
2779void RB_AddQuadStamp( vec3_t origin, vec3_t left, vec3_t up,
float color[4] );
2780void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up,
float color[4],
float s1,
float t1,
float s2,
float t2 );
2781void RB_InstantQuad( vec4_t quadVerts[4] );
2783void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4]);
2785void RB_ShowImages(
void );
2797void R_AddWorldSurfaces(
void);
2798qboolean R_inPVS(
const vec3_t p1,
const vec3_t p2 );
2799mnode_t* R_PointInLeaf(
const vec3_t p);
2810void R_ClearFlares(
void );
2812void RB_AddFlare(
void *surface,
int fogNum, vec3_t point, vec3_t color, vec3_t normal );
2813void RB_AddDlightFlares(
void );
2814void RB_RenderFlares (
void);
2824void R_DlightBmodel(
bmodel_t *bmodel );
2826void R_TransformDlights(
int count, dlight_t *dl,
orientationr_t *or );
2827int R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir );
2828int R_LightDirForPoint( vec3_t point, vec3_t lightDir, vec3_t normal,
world_t *world );
2829int R_CubemapForPoint( vec3_t point );
2839void RB_ShadowTessEnd(
void );
2840void RB_ShadowFinish(
void );
2841void RB_ProjectionShadowDeform(
void );
2851void R_BuildCloudData( shaderCommands_t *shader );
2852void R_InitSkyTexCoords(
float cloudLayerHeight );
2853void R_DrawSkyBox( shaderCommands_t *shader );
2854void RB_DrawSun(
float scale, shader_t *shader );
2855void RB_ClipSkyPolygons( shaderCommands_t *shader );
2865#define PATCH_STITCHING
2867void R_SubdividePatchToGrid( srfBspSurface_t *grid,
int width,
int height,
2868 srfVert_t points[MAX_PATCH_SIZE*MAX_PATCH_SIZE] );
2869void R_GridInsertColumn( srfBspSurface_t *grid,
int column,
int row, vec3_t point,
float loderror );
2870void R_GridInsertRow( srfBspSurface_t *grid,
int row,
int column, vec3_t point,
float loderror );
2880int R_MarkFragments(
int numPoints,
const vec3_t *points,
const vec3_t projection,
2881 int maxPoints, vec3_t pointBuffer,
int maxFragments,
markFragment_t *fragmentBuffer,
float fRadiusSquared);
2883int R_MarkFragmentsForInlineModel(clipHandle_t bmodel,
const vec3_t vAngles,
const vec3_t vOrigin,
int numPoints,
2884 const vec3_t* points,
const vec3_t projection,
int maxPoints, vec3_t pointBuffer,
2885 int maxFragments,
markFragment_t* fragmentBuffer,
float fRadiusSquared);
2896void R_VaoPackTangent(int16_t *out, vec4_t v);
2897void R_VaoPackNormal(int16_t *out, vec3_t v);
2898void R_VaoPackColor(uint16_t *out, vec4_t c);
2899void R_VaoUnpackTangent(vec4_t v, int16_t *pack);
2900void R_VaoUnpackNormal(vec3_t v, int16_t *pack);
2902vao_t *R_CreateVao(
const char *name,
byte *vertexes,
int vertexesSize,
byte *indexes,
int indexesSize, vaoUsage_t usage);
2903vao_t *R_CreateVao2(
const char *name,
int numVertexes,
srfVert_t *verts,
int numIndexes, glIndex_t *inIndexes);
2905void R_BindVao(vao_t *vao);
2906void R_BindNullVao(
void);
2908void Vao_SetVertexPointers(vao_t *vao);
2910void R_InitVaos(
void);
2911void R_ShutdownVaos(
void);
2912void R_VaoList_f(
void);
2914void RB_UpdateTessVao(
unsigned int attribBits);
2916void VaoCache_Commit(
void);
2917void VaoCache_DrawElements(
int numIndexes,
int firstIndex);
2918void VaoCache_Init(
void);
2919void VaoCache_BindVao(
void);
2920void VaoCache_CheckAdd(qboolean *endSurface, qboolean *recycleVertexBuffer, qboolean *recycleIndexBuffer,
int numVerts,
int numIndexes);
2921void VaoCache_RecycleVertexBuffer(
void);
2922void VaoCache_RecycleIndexBuffer(
void);
2923void VaoCache_InitQueue(
void);
2924void VaoCache_AddSurface(
srfVert_t *verts,
int numVerts, glIndex_t *indexes,
int numIndexes);
2934void GLSL_InitGPUShaders(
void);
2935void GLSL_ShutdownGPUShaders(
void);
2936void GLSL_VertexAttribPointers(uint32_t attribBits);
2937void GLSL_BindProgram(shaderProgram_t * program);
2939void GLSL_SetUniformInt(shaderProgram_t *program,
int uniformNum, GLint value);
2940void GLSL_SetUniformFloat(shaderProgram_t *program,
int uniformNum, GLfloat value);
2941void GLSL_SetUniformFloat5(shaderProgram_t *program,
int uniformNum,
const vec5_t v);
2942void GLSL_SetUniformVec2(shaderProgram_t *program,
int uniformNum,
const vec2_t v);
2943void GLSL_SetUniformVec3(shaderProgram_t *program,
int uniformNum,
const vec3_t v);
2944void GLSL_SetUniformVec4(shaderProgram_t *program,
int uniformNum,
const vec4_t v);
2945void GLSL_SetUniformMat4(shaderProgram_t *program,
int uniformNum,
const mat4_t matrix);
2946void GLSL_SetUniformMat4BoneMatrix(shaderProgram_t *program,
int uniformNum, mat4_t *matrix,
int numMatricies);
2948shaderProgram_t *GLSL_GetGenericShaderProgram(
int stage);
2958void R_InitNextFrame(
void );
2960void RE_ClearScene(
void );
2961void RE_AddRefEntityToScene(
const refEntity_t *ent );
2962void RE_AddPolyToScene( qhandle_t hShader ,
int numVerts,
const polyVert_t *verts,
int num );
2963void RE_AddLightToScene(
const vec3_t org,
float intensity,
float r,
float g,
float b );
2964void RE_AddAdditiveLightToScene(
const vec3_t org,
float intensity,
float r,
float g,
float b );
2965void RE_BeginScene(
const refdef_t *fd );
2966void RE_RenderScene(
const refdef_t *fd );
2967void RE_EndScene(
void);
2968void RE_AddRefEntityToScene2(
const refEntity_t* ent,
int parentEntityNumber);
2978#define MC_BITS_X (16)
2979#define MC_BITS_Y (16)
2980#define MC_BITS_Z (16)
2981#define MC_BITS_VECT (16)
2983#define MC_SCALE_X (1.0f/64)
2984#define MC_SCALE_Y (1.0f/64)
2985#define MC_SCALE_Z (1.0f/64)
2987void MC_UnCompress(
float mat[3][4],
const unsigned char * comp);
2999qboolean R_LoadIQM (model_t *mod,
void *buffer,
int filesize,
const char *name );
3001void RB_IQMSurfaceAnim( surfaceType_t *surface );
3002void RB_IQMSurfaceAnimVao( srfVaoIQModel_t *surface );
3004 int startFrame,
int endFrame,
3005 float frac,
const char *tagName );
3019void Draw_SetColor(
const vec4_t rgba);
3020void Draw_StretchPic(
float x,
float y,
float w,
float h,
float s1,
float t1,
float s2,
float t2, qhandle_t hShader);
3021void Draw_StretchPic2(
float x,
float y,
float w,
float h,
float s1,
float t1,
float s2,
float t2,
float sx,
float sy, qhandle_t hShader);
3022void Draw_TilePic(
float x,
float y,
float w,
float h, qhandle_t hShader);
3023void Draw_TilePicOffset(
float x,
float y,
float w,
float h, qhandle_t hShader,
int offsetX,
int offsetY);
3024void Draw_TrianglePic(
const vec2_t vPoints[3],
const vec2_t vTexCoords[3], qhandle_t hShader);
3025void DrawBox(
float x,
float y,
float w,
float h);
3026void AddBox(
float x,
float y,
float w,
float h);
3027void Set2DWindow(
int x,
int y,
int w,
int h,
float left,
float right,
float bottom,
float top,
float n,
float f);
3028void RE_Scissor(
int x,
int y,
int width,
int height);
3029void DrawLineLoop(
const vec2_t* points,
int count,
int stipple_factor,
int stipple_mask);
3030void RE_StretchRaw2(
int x,
int y,
int w,
int h,
int cols,
int rows,
int components,
const byte* data);
3039void R_ShutdownFont();
3040fontheader_t* R_LoadFont(
const char* name);
3041void R_LoadFontShader(fontheader_sgl_t* font);
3042void R_DrawString(fontheader_t* font,
const char* text,
float x,
float y,
int maxlen,
const float *pvVirtualScreen);
3043void R_DrawFloatingString(fontheader_t* font,
const char* text,
const vec3_t org,
const vec4_t color,
float scale,
int maxlen);
3044float R_GetFontHeight(
const fontheader_t* font);
3045float R_GetFontStringWidth(
const fontheader_t* font,
const char* s);
3055void R_UpdateGhostTextures();
3056void R_SetGhostImage(
const char* name, image_t* image);
3057void LoadGHOST(
const char* name,
byte** pic,
int* width,
int* height);
3067void R_GetLightingForDecal(vec3_t vLight,
const vec3_t vFacing,
const vec3_t vOrigin);
3068void R_GetLightingForSmoke(vec3_t vLight,
const vec3_t vOrigin);
3069void R_GetLightingGridValue(
world_t* world,
const vec3_t vPos, vec3_t vAmbientLight, vec3_t vDirectedLight);
3070void RB_SetupEntityGridLighting();
3073void RB_Light_Real(
unsigned char* colors);
3074void RB_Sphere_BuildDLights();
3075void RB_Sphere_SetupEntity();
3076void RB_Grid_SetupEntity();
3077void RB_Grid_SetupStaticModel();
3078void RB_Light_Fullbright(
unsigned char* colors);
3079void R_Sphere_InitLights();
3080int R_GatherLightSources(
const vec3_t vPos, vec3_t* pvLightPos, vec3_t* pvLightIntensity,
int iMaxLights);
3082extern suninfo_t s_sun;
3091void R_LevelMarksLoad(
const char* szBSPName);
3092void R_LevelMarksInit();
3093void R_LevelMarksFree();
3094void R_UpdateLevelMarksSystem();
3095void R_AddPermanentMarkFragmentSurfaces(
void** pFirstMarkFragment,
int iNumMarkFragment);
3105void RE_AddRefSpriteToScene(
const refEntity_t* ent);
3106void RE_AddTerrainMarkToScene(
int iTerrainIndex, qhandle_t hShader,
int numVerts,
const polyVert_t* verts,
int renderfx);
3108qboolean RE_AddPolyToScene2(qhandle_t hShader,
int numVerts,
const polyVert_t* verts,
int renderfx);
3109void RE_AddLightToScene2(
const vec3_t org,
float intensity,
float r,
float g,
float b,
int type);
3119void RB_CalcLightGridColor(
unsigned char* colors);
3130void R_Sky_AddSurf(msurface_t* surf);
3140sprite_t* SPR_RegisterSprite(
const char* name);
3141void RB_DrawSprite(
const refSprite_t* spr);
3151void R_InitLensFlare();
3152void R_DrawLensFlares();
3161void RB_DrawSwipeSurface(surfaceType_t* pswipe);
3162void RE_SwipeBegin(
float thistime,
float life, qhandle_t shader);
3164void R_AddSwipeSurfaces();
3178void R_AddTerrainSurfaces();
3179void R_AddTerrainMarkSurfaces();
3180void R_InitTerrain();
3181void R_ShutdownTerrain();
3182void R_TerrainFree();
3183void R_TerrainPrepareFrame();
3185void R_SwapTerraPatch(cTerraPatch_t* pPatch);
3187void R_TerrainCrater_f(
void);
3199void R_InitStaticModels(
void);
3200void RE_FreeModels(
void);
3201qhandle_t RE_SpawnEffectModel(
const char* szModel, vec3_t vPos, vec3_t* axis);
3202qhandle_t RE_RegisterServerModel(
const char* name);
3203void RE_UnregisterServerModel(qhandle_t hModel);
3205qboolean RE_TIKI_IsOnGround(
refEntity_t* model,
int tagnum,
float threshold);
3206float R_ModelRadius(qhandle_t handle);
3207void R_ModelBounds(qhandle_t handle, vec3_t mins, vec3_t maxs);
3208dtiki_t* R_Model_GetHandle(qhandle_t handle);
3213void RE_SetFrameNumber(
int frameNumber);
3215void RB_SkelMesh(skelSurfaceGame_t* sf);
3216void RB_StaticMesh(staticSurface_t* staticSurf);
3217void RB_Static_BuildDLights();
3218void R_InfoStaticModels_f(
void);
3219void R_PrintInfoStaticModels();
3221void R_AddStaticModelSurfaces(
void);
3222void R_CountTikiLodTris(dtiki_t* tiki,
float lodpercentage,
int* render_tris,
int* total_tris);
3223float R_CalcLod(
const vec3_t origin,
float radius);
3224int GetLodCutoff(
struct skelHeaderGame_s* skelmodel,
float lod_val,
int renderfx);
3226void R_InfoWorldTris_f(
void);
3227void R_PrintInfoWorldtris(
void);
3228void R_DebugSkeleton(
void);
3230extern int g_nStaticSurfaces;
3231extern qboolean g_bInfostaticmodels;
3232extern qboolean g_bInfoworldtris;
3242void RB_StreamBegin(shader_t* shader);
3243void RB_StreamEnd(
void);
3244void RB_StreamBeginDrawSurf(
void);
3245void RB_StreamEndDrawSurf(
void);
3246static void addTriangle(
void);
3247void RB_Vertex3fv(vec3_t v);
3248void RB_Vertex3f(vec_t x, vec_t y, vec_t z);
3249void RB_Vertex2f(vec_t x, vec_t y);
3250void RB_Color4f(vec_t r, vec_t g, vec_t b, vec_t a);
3251void RB_Color3f(vec_t r, vec_t g, vec_t b);
3252void RB_Color3fv(vec3_t col);
3253void RB_Color4bv(
unsigned char* colors);
3254void RB_Texcoord2f(
float s,
float t);
3255void RB_Texcoord2fv(vec2_t st);
3256void R_DrawDebugNumber(
const vec3_t org,
float number,
float scale,
float r,
float g,
float b,
int precision);
3257void R_DebugRotatedBBox(
const vec3_t org,
const vec3_t ang,
const vec3_t mins,
const vec3_t maxs,
float r,
float g,
float b,
float alpha);
3258void R_DebugCircle(
const vec3_t org,
float radius,
float r,
float g,
float b,
float alpha, qboolean horizontal);
3259void R_DebugLine(
const vec3_t start,
const vec3_t end,
float r,
float g,
float b,
float alpha);
3260int RE_GetShaderWidth(qhandle_t hShader);
3261int RE_GetShaderHeight(qhandle_t hShader);
3262const char* RE_GetShaderName(qhandle_t hShader);
3263const char* RE_GetModelName(qhandle_t hModel);
3272void R_GetInlineModelBounds(
int iIndex, vec3_t vMins, vec3_t vMaxs);
3273int R_SphereInLeafs(
const vec3_t p,
float r, mnode_t** nodes,
int nMaxNodes);
3274mnode_t* R_PointInLeaf(
const vec3_t p);
3277void R_AddSpriteSurfCmd(drawSurf_t* drawSurfs,
int numDrawSurfs);
3285void R_TransformModelToClip(
const vec3_t src,
const float *modelMatrix,
const float *projectionMatrix,
3286 vec4_t eye, vec4_t dst );
3287void R_TransformClipToWindow(
const vec4_t clip,
const viewParms_t *view, vec4_t normalized, vec4_t window );
3289void RB_DeformTessGeometry(
void );
3291void RB_CalcFogTexCoords(
float *dstTexCoords );
3293void RB_CalcScaleTexMatrix(
const float scale[2],
float *matrix );
3294void RB_CalcScrollTexMatrix(
const float scrollSpeed[2],
float *matrix );
3295void RB_CalcRotateTexMatrix(
float degsPerSecond,
float *matrix );
3296void RB_CalcTurbulentFactors(
const waveForm_t *wf,
float *amplitude,
float *now );
3297void RB_CalcTransformTexMatrix(
const texModInfo_t *tmi,
float *matrix );
3298void RB_CalcStretchTexMatrix(
const waveForm_t *wf,
float *matrix );
3300void RB_CalcModulateColorsByFog(
unsigned char *dstColors );
3301float RB_CalcWaveAlphaSingle(
const waveForm_t *wf );
3302float RB_CalcWaveColorSingle(
const waveForm_t *wf );
3312void RB_ExecuteRenderCommands(
const void *data );
3322#define MAX_RENDER_COMMANDS 0x40000
3325 byte cmds[MAX_RENDER_COMMANDS];
3369 drawSurf_t *drawSurfs;
3387 byte *captureBuffer;
3389 qboolean motionJpeg;
3446#define MAX_POLYS 600
3447#define MAX_POLYVERTS 3000
3448#define MAX_TERMARKS 1024
3453 drawSurf_t drawSurfs[MAX_DRAWSURFS];
3454 dlight_t dlights[MAX_DLIGHTS];
3458 pshadow_t pshadows[MAX_CALC_PSHADOWS];
3464 drawSurf_t spriteSurfs[MAX_SPRITESURFS];
3465 srfMarkFragment_t* terMarks;
3466 refSprite_t sprites[2048];
3468 byte* staticModelData;
3471extern int max_polys;
3472extern int max_polyverts;
3477void *R_GetCommandBuffer(
int bytes );
3478void RB_ExecuteRenderCommands(
const void *data );
3480void R_IssuePendingRenderCommands(
void );
3482void R_AddDrawSurfCmd( drawSurf_t *drawSurfs,
int numDrawSurfs );
3483void R_AddCapShadowmapCmd(
int dlight,
int cubeSide );
3484void R_AddPostProcessCmd (
void);
3486void RE_SetColor(
const float *rgba );
3487void RE_StretchPic (
float x,
float y,
float w,
float h,
3488 float s1,
float t1,
float s2,
float t2, qhandle_t hShader );
3489void RE_BeginFrame( stereoFrame_t stereoFrame );
3490void RE_EndFrame(
int *frontEndMsec,
int *backEndMsec );
3491void RE_SaveJPG(
char * filename,
int quality,
int image_width,
int image_height,
3492 unsigned char *image_buffer,
int padding);
3493size_t RE_SaveJPGToBuffer(
byte *buffer,
size_t bufSize,
int quality,
3494 int image_width,
int image_height,
byte *image_buffer,
int padding);
3495void RE_TakeVideoFrame(
int width,
int height,
3496 byte *captureBuffer,
byte *encodeBuffer, qboolean motionJpeg );
3498void R_ConvertTextureFormat(
const byte *in,
int width,
int height, GLenum format, GLenum type,
byte *out );
Definition tr_local.h:1250
Definition tr_local.h:2458
Definition tr_local.h:1266
Definition tr_local.h:1063
Definition tr_local.h:983
Definition navigation_bsp.h:148
Definition tr_local.h:952
Definition navigation_bsp.h:307
Definition tr_local.h:3404
Definition tr_local.h:2428
Definition tr_local.h:2421
Definition tr_local.h:100
Definition tr_local.h:1512
Definition tr_local.h:720
Definition tr_local.h:169
Definition tr_local.h:2362
Definition tr_local.h:760
Definition tr_local.h:2393
Definition tr_local.h:2379
Definition tr_local.h:3416
Definition tr_local.h:542
Definition tr_local.h:707
Definition tr_local.h:1216
Definition tr_local.h:1890
Definition tr_types.h:244
Definition tr_local.h:1236
Definition tr_local.h:1172
Definition q_shared.h:1493
Definition tr_local.h:1671
Definition tr_local.h:1720
Definition tr_local.h:1696
Definition tr_local.h:1701
Definition tr_local.h:1684
Definition tr_local.h:1678
Definition tr_local.h:1689
Definition tr_local.h:1035
Definition tr_local.h:1148
Definition tr_local.h:1023
Definition q_shared.h:1524
Definition tr_local.h:214
Definition tr_local.h:105
Definition tr_local.h:3410
Definition tr_local.h:1472
Definition tr_local.h:126
Definition tr_local.h:202
Definition tr_types.h:162
Definition tr_local.h:2352
Definition tr_local.h:2401
Definition tr_local.h:2357
Definition tr_local.h:1885
Definition tr_local.h:849
Definition tr_local.h:476
Definition tr_local.h:548
Definition tr_local.h:695
Definition tr_local.h:700
Definition tr_local.h:525
Definition tr_local.h:114
Definition tr_local.h:157
Definition tr_local.h:140
Definition tr_local.h:537
Definition tr_local.h:1073
Definition tr_local.h:1128
Definition tr_local.h:793
Definition tr_local.h:1215
Definition tr_local.h:780
Definition tr_local.h:772
Definition tr_local.h:978
Definition tr_local.h:935
Definition tr_local.h:1226
Definition tr_local.h:1241
Definition tr_local.h:1110
Definition tr_local.h:1879
Definition tr_local.h:2384
Definition tr_local.h:2367
Definition tr_local.h:2342
Definition tr_local.h:2375
Definition tr_local.h:916
Definition navigation_bsp.h:280
Definition tr_local.h:902
Definition navigation_bsp.h:268
Definition tr_local.h:422
Definition tr_local.h:455
Definition tr_local.h:1298
Definition tr_local.h:181
Definition tr_local.h:633
Definition tr_local.h:166
Definition tr_local.h:177
Definition tr_local.h:2411
Definition tr_local.h:727
Definition tr_local.h:1082
Definition navigation_bsp.h:213