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,
852 char name[MAX_QPATH];
856 GLuint fragmentShader;
860 GLint uniforms[UNIFORM_COUNT];
861 short uniformBufferOffsets[UNIFORM_COUNT];
868 int x, y, width, height;
873 stereoFrame_t stereoFrame;
879 byte areamask[MAX_MAP_AREA_BYTES];
880 qboolean areamaskModified;
887 char text[MAX_RENDER_STRINGS][MAX_RENDER_STRING_LENGTH];
901 unsigned int dlightMask;
905 float sunShadowMvp[4][16];
910 float autoExposureMinMax[2];
911 float toneMinAvgMaxLinear[3];
930 int numStaticModelData;
931 unsigned char *staticModelData;
937 qboolean skybox_farplane;
938 qboolean render_terrain;
948#define MAX_SKIN_SURFACES 256
952 char name[MAX_QPATH];
957 char name[MAX_QPATH];
959 skinSurface_t *surfaces;
964 int originalBrushNumber;
988#define FARPLANE_CULL_NONE 0
990#define FARPLANE_CULL_STANDARD 1
992#define FARPLANE_CULL_PORTALSKY 2
998 VPF_NOVIEWMODEL = 0x01,
999 VPF_SHADOWMAP = 0x02,
1000 VPF_DEPTHSHADOW = 0x04,
1001 VPF_DEPTHCLAMP = 0x08,
1002 VPF_ORTHOGRAPHIC = 0x10,
1003 VPF_USESUNLIGHT = 0x20,
1004 VPF_FARPLANEFRUSTUM = 0x40,
1005 VPF_NOCUBEMAPS = 0x80
1014 viewParmFlags_t flags;
1017 cplane_t portalPlane;
1018 int viewportX, viewportY, viewportWidth, viewportHeight;
1021 int targetFboCubemapIndex;
1023 float projectionMatrix[16];
1024 cplane_t frustum[5];
1025 vec3_t visBounds[2];
1028 stereoFrame_t stereoFrame;
1034 qboolean isPortalSky;
1036 float farplane_distance;
1037 float farplane_bias;
1038 float farplane_color[3];
1040 qboolean renderTerrain;
1051typedef byte color4ub_t[4];
1079 SF_NUM_SURFACE_TYPES,
1086 surfaceType_t *surface;
1089#define MAX_FACE_POINTS 64
1091#define MAX_PATCH_SIZE 32
1092#define MAX_GRID_SIZE 65
1097 surfaceType_t surfaceType;
1112 surfaceType_t surfaceType;
1125 int16_t lightdir[4];
1128#if DEBUG_OPTIMIZEVERTICES
1133#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}}
1138 surfaceType_t surfaceType;
1145 vec3_t cullBounds[2];
1170 float *widthLodError;
1171 float *heightLodError;
1201 byte *influenceBlendIndexes;
1205 } influenceBlendWeights;
1210 int blendWeightsType;
1215 float *invBindJoints;
1225 surfaceType_t surfaceType;
1226 char name[MAX_QPATH];
1229 int first_vertex, num_vertexes;
1230 int first_triangle, num_triangles;
1231 int first_influence, num_influences;
1236 surfaceType_t surfaceType;
1251 surfaceType_t surfaceType;
1264extern void (*rb_surfaceTable[SF_NUM_SURFACE_TYPES])(
void *);
1303typedef float cube_entry_t[3][4];
1311 void(*TessFunction) (
unsigned char* dstColors);
1313 unsigned char level[4];
1317 reallightinfo_t light[MAX_REAL_LIGHTS];
1319 float cubemap[24][3][4];
1326 struct mnode_s* leaf;
1329 float spot_radiusbydistance;
1331 int reference_count;
1337 vec3_t flaredirection;
1338 char szFlareName[64];
1347typedef unsigned short terraInt;
1351 vec2_t texCoords[2];
1355 unsigned int uiDistRecalc;
1357 terraInt iVertArray;
1364 unsigned short iPt[3];
1366 unsigned int uiDistRecalc;
1367 struct cTerraPatchUnpacked_s* patch;
1368 varnodeUnpacked_t* varnode;
1375 terraInt iLeftChild;
1376 terraInt iRightChild;
1383 surfaceType_t surfaceType;
1387 terraInt iMergeHead;
1400 srfTerrain_t drawinfo;
1405 unsigned int uiDistRecalc;
1408 vec2_t texCoord[2][2];
1418 struct cTerraPatchUnpacked_s* pNextActive;
1419 varnodeUnpacked_t varTree[2][63];
1420 unsigned char heightmap[81];
1426 surfaceType_t surfaceType;
1427 struct cStaticModelUnpacked_s* parent;
1431 surfaceType_t surfaceType;
1438 qboolean useSpecialLighting;
1439 qboolean bLightGridCalculated;
1446 int firstVertexData;
1450 sphere_dlight_t dlights[MAX_DLIGHTS];
1455 float lodpercentage[2];
1459 surfaceType_t surftype;
1486 vec3_t entityOrigins[8];
1487 float entityRadiuses[8];
1492 vec3_t lightViewAxis[3];
1516#define CULLINFO_NONE 0
1517#define CULLINFO_BOX 1
1518#define CULLINFO_SPHERE 2
1519#define CULLINFO_PLANE 4
1534 cullinfo_t cullinfo;
1536 surfaceType_t *data;
1540#define CONTENTS_NODE -1
1544 int visCounts[MAX_VISCOUNTS];
1546 struct mnode_s *parent;
1550 struct mnode_s *children[2];
1556 int firstmarksurface;
1557 int nummarksurfaces;
1566 int firstTerraPatch;
1567 int numTerraPatches;
1568 int firstStaticModel;
1569 int numStaticModels;
1570 void** pFirstMarkFragment;
1571 int iNumMarkFragment;
1583 void** pFirstMarkFragment;
1584 int iNumMarkFragment;
1586 qboolean hasLightmap;
1590 char name[MAX_QPATH];
1591 char baseName[MAX_QPATH];
1605 int numDecisionNodes;
1608 int numWorldSurfaces;
1611 msurface_t *surfaces;
1612 int *surfacesViewCount;
1613 int *surfacesDlightBits;
1614 int *surfacesPshadowBits;
1616 int nummarksurfaces;
1622 vec3_t lightGridOrigin;
1623 vec3_t lightGridSize;
1624 vec3_t lightGridInverseSize;
1625 int lightGridBounds[3];
1626 byte *lightGridData;
1627 uint16_t *lightGrid16;
1635 char *entityParsePoint;
1641 unsigned short* lightGridOffsets;
1642 byte lightGridPalette[768];
1644 int numTerraPatches;
1648 int numVisTerraPatches;
1651 int numStaticModelData;
1652 byte* staticModelData;
1654 int numStaticModels;
1657 int numVisStaticModels;
1682 float localOrigin[3];
1694 char name[MAX_QPATH];
1711 surfaceType_t surfaceType;
1713 char name[MAX_QPATH];
1715 int numShaderIndexes;
1738 mdvSurface_t *surfaces;
1741 srfVaoMdvMesh_t *vaoSurfaces;
1764 char name[MAX_QPATH];
1770 mdvModel_t *mdv[MD3_MAX_LODS];
1780 qboolean serveronly;
1784#define MAX_MOD_KNOWN 1024
1786void R_ModelInit (
void);
1787model_t *R_GetModelByHandle( qhandle_t hModel );
1788int R_LerpTag(
orientation_t *tag, qhandle_t handle,
int startFrame,
int endFrame,
1789 float frac,
const char *tagName );
1790void R_ModelBounds( qhandle_t handle, vec3_t mins, vec3_t maxs );
1792void R_Modellist_f (
void);
1796#define MAX_DRAWIMAGES 2048
1797#define MAX_SKINS 1024
1800#define MAX_DRAWSURFS 0x10000
1801#define DRAWSURF_MASK (MAX_DRAWSURFS-1)
1834#define QSORT_FOGNUM_SHIFT 2
1835#define QSORT_REFENTITYNUM_SHIFT 4
1836#define QSORT_STATICMODEL_SHIFT (QSORT_REFENTITYNUM_SHIFT+REFENTITYNUM_BITS)
1837#define QSORT_SHADERNUM_SHIFT (QSORT_STATICMODEL_SHIFT+1)
1838#if (QSORT_SHADERNUM_SHIFT+SHADERNUM_BITS) > 32
1839 #error "Need to update sorting, too many bits."
1841#define QSORT_PSHADOW_SHIFT 1
1843extern int gl_filter_min, gl_filter_max;
1849 int c_sphere_cull_patch_in, c_sphere_cull_patch_clip, c_sphere_cull_patch_out;
1850 int c_box_cull_patch_in, c_box_cull_patch_clip, c_box_cull_patch_out;
1851 int c_sphere_cull_md3_in, c_sphere_cull_md3_clip, c_sphere_cull_md3_out;
1852 int c_box_cull_md3_in, c_box_cull_md3_clip, c_box_cull_md3_out;
1855 int c_dlightSurfaces;
1856 int c_dlightSurfacesCulled;
1859#define FOG_TABLE_SIZE 256
1860#define FUNCTABLE_SIZE 1024
1861#define FUNCTABLE_SIZE2 10
1862#define FUNCTABLE_MASK (FUNCTABLE_SIZE-1)
1867 qboolean finishCalled;
1871 uint32_t glStateBits;
1872 uint32_t storedGlState;
1873 float vertexAttribsInterpolation;
1874 qboolean vertexAnimation;
1876 mat4_t boneMatrix[IQM_MAX_JOINTS];
1877 uint32_t vertexAttribsEnabled;
1882 mat4_t modelviewProjection;
1895} textureCompressionRef_t;
1900 qboolean intelGraphics;
1902 qboolean occlusionQuery;
1903 GLenum occlusionQueryTarget;
1905 int glslMajorVersion;
1906 int glslMinorVersion;
1907 int glslMaxAnimatedBones;
1911 qboolean framebufferObject;
1912 int maxRenderbufferSize;
1913 int maxColorAttachments;
1915 qboolean textureFloat;
1916 textureCompressionRef_t textureCompression;
1917 qboolean swizzleNormalmap;
1919 qboolean framebufferMultisample;
1920 qboolean framebufferBlit;
1922 qboolean depthClamp;
1923 qboolean seamlessCubeMap;
1925 qboolean vertexArrayObject;
1926 qboolean directStateAccess;
1928 int maxVertexAttribs;
1929 qboolean gpuVertexAnimation;
1931 GLenum vaoCacheGlIndexType;
1932 size_t vaoCacheGlIndexSize;
1936 qboolean readStencil;
1937 qboolean shadowSamplers;
1938 qboolean standardDerivatives;
1943 int c_surfaces, c_shaders, c_vertexes, c_indexes, c_totalIndexes;
1951 int c_staticVaoDraws;
1952 int c_dynamicVaoDraws;
1954 int c_dlightVertexes;
1955 int c_dlightIndexes;
1961 int c_glslShaderBinds;
1963 int c_lightallDraws;
1973 int c_characterlights;
1983 qboolean isHyperspace;
1985 qboolean skyRenderedThisView;
1987 qboolean projection2D;
1989 qboolean vertexes2D;
1993 qboolean colorMask[4];
2001 unsigned short numSpheresUsed;
2006 float shaderStartTime;
2019 qboolean registered;
2022 int visClusters[MAX_VISCOUNTS];
2023 int visCounts[MAX_VISCOUNTS];
2032 qboolean worldMapLoaded;
2033 qboolean worldDeluxeMapping;
2034 vec2_t autoExposureMinMax;
2035 vec3_t toneMinAvgMaxLevel;
2038 const byte *externalVisData;
2040 image_t *defaultImage;
2041 image_t *scratchImage[32];
2043 image_t *dlightImage;
2044 image_t *flareImage;
2045 image_t *whiteImage;
2046 image_t *identityLightImage;
2048 image_t *shadowCubemaps[MAX_DLIGHTS];
2051 image_t *renderImage;
2052 image_t *sunRaysImage;
2053 image_t *renderDepthImage;
2054 image_t *pshadowMaps[MAX_DRAWN_PSHADOWS];
2055 image_t *screenScratchImage;
2056 image_t *textureScratchImage[2];
2057 image_t *quarterImage[2];
2058 image_t *calcLevelsImage;
2059 image_t *targetLevelsImage;
2060 image_t *fixedLevelsImage;
2061 image_t *sunShadowDepthImage[4];
2062 image_t *screenShadowImage;
2063 image_t *screenSsaoImage;
2064 image_t *hdrDepthImage;
2065 image_t *renderCubeImage;
2067 image_t *textureDepthImage;
2070 FBO_t *msaaResolveFbo;
2073 FBO_t *pshadowFbos[MAX_DRAWN_PSHADOWS];
2074 FBO_t *screenScratchFbo;
2075 FBO_t *textureScratchFbo[2];
2076 FBO_t *quarterFbo[2];
2077 FBO_t *calcLevelsFbo;
2078 FBO_t *targetLevelsFbo;
2079 FBO_t *sunShadowFbo[4];
2080 FBO_t *screenShadowFbo;
2081 FBO_t *screenSsaoFbo;
2083 FBO_t *renderCubeFbo;
2085 shader_t *defaultShader;
2086 shader_t *shadowShader;
2087 shader_t *projectionShadowShader;
2089 shader_t *flareShader;
2090 shader_t *sunShader;
2091 shader_t *sunFlareShader;
2095 image_t **lightmaps;
2096 image_t **deluxemaps;
2098 int fatLightmapCols;
2099 int fatLightmapRows;
2102 cubemap_t *cubemaps;
2106 int currentEntityNum;
2107 int shiftedEntityNum;
2108 model_t *currentModel;
2113 shaderProgram_t genericShader[GENERICDEF_COUNT];
2114 shaderProgram_t textureColorShader;
2115 shaderProgram_t fogShader[FOGDEF_COUNT];
2116 shaderProgram_t dlightShader[DLIGHTDEF_COUNT];
2117 shaderProgram_t lightallShader[LIGHTDEF_COUNT];
2118 shaderProgram_t shadowmapShader[SHADOWMAPDEF_COUNT];
2119 shaderProgram_t pshadowShader;
2120 shaderProgram_t down4xShader;
2121 shaderProgram_t bokehShader;
2122 shaderProgram_t tonemapShader;
2123 shaderProgram_t calclevels4xShader[2];
2124 shaderProgram_t shadowmaskShader;
2125 shaderProgram_t ssaoShader;
2126 shaderProgram_t depthBlurShader[4];
2127 shaderProgram_t testcubeShader;
2128 shaderProgram_t greyscaleShader;
2135 float identityLight;
2136 int identityLightByte;
2145 float sunShadowScale;
2147 qboolean sunShadows;
2149 vec3_t sunDirection;
2150 vec3_t lastCascadeSunDirection;
2151 float lastCascadeSunMvp[16];
2160 model_t *models[MAX_MOD_KNOWN];
2164 image_t *images[MAX_DRAWIMAGES];
2167 FBO_t *fbos[MAX_FBOS];
2170 vao_t *vaos[MAX_VAOS];
2176 shader_t *shaders[MAX_SHADERS];
2177 shader_t *sortedShaders[MAX_SHADERS];
2180 skin_t *skins[MAX_SKINS];
2182 GLuint sunFlareQuery[2];
2183 int sunFlareQueryIndex;
2184 qboolean sunFlareQueryActive[2];
2186 float sinTable[FUNCTABLE_SIZE];
2187 float squareTable[FUNCTABLE_SIZE];
2188 float triangleTable[FUNCTABLE_SIZE];
2189 float sawToothTable[FUNCTABLE_SIZE];
2190 float inverseSawToothTable[FUNCTABLE_SIZE];
2191 float fogTable[FOG_TABLE_SIZE];
2197 int currentSpriteNum;
2198 int shiftedIsStatic;
2200 int overbrightShift;
2201 float overbrightMult;
2204 qboolean skyRendered;
2205 qboolean portalRendered;
2207 spherel_t sSunLight;
2208 spherel_t sLights[1532];
2211 qboolean shadersParsed;
2212 int frame_skel_index;
2213 int skel_index[1024];
2214 fontheader_t* pFontDebugStrings;
2226extern cvar_t *r_flareSize;
2227extern cvar_t *r_flareFade;
2229#define FLARE_STDCOEFF "150"
2230extern cvar_t *r_flareCoeff;
2232extern cvar_t *r_railWidth;
2233extern cvar_t *r_railCoreWidth;
2234extern cvar_t *r_railSegmentLength;
2236extern cvar_t *r_ignore;
2237extern cvar_t *r_verbose;
2239extern cvar_t *r_znear;
2240extern cvar_t *r_zproj;
2241extern cvar_t *r_stereoSeparation;
2243extern cvar_t *r_measureOverdraw;
2245extern cvar_t *r_lodbias;
2246extern cvar_t *r_lodscale;
2248extern cvar_t *r_inGameVideo;
2249extern cvar_t *r_fastsky;
2250extern cvar_t *r_drawSun;
2251extern cvar_t *r_dynamiclight;
2252extern cvar_t *r_dlightBacks;
2254extern cvar_t *r_norefresh;
2255extern cvar_t *r_drawentities;
2256extern cvar_t *r_drawworld;
2257extern cvar_t *r_speeds;
2258extern cvar_t *r_detailTextures;
2259extern cvar_t *r_novis;
2260extern cvar_t *r_nocull;
2261extern cvar_t *r_facePlaneCull;
2262extern cvar_t *r_nocurves;
2263extern cvar_t *r_showcluster;
2265extern cvar_t *r_gamma;
2266extern cvar_t *r_displayRefresh;
2268extern cvar_t *r_ext_framebuffer_object;
2269extern cvar_t *r_ext_texture_float;
2270extern cvar_t *r_ext_framebuffer_multisample;
2271extern cvar_t *r_arb_seamless_cube_map;
2272extern cvar_t *r_arb_vertex_array_object;
2273extern cvar_t *r_ext_direct_state_access;
2275extern cvar_t *r_nobind;
2276extern cvar_t *r_singleShader;
2277extern cvar_t *r_roundImagesDown;
2278extern cvar_t *r_colorMipLevels;
2279extern cvar_t *r_picmip;
2280extern cvar_t *r_finish;
2281extern cvar_t *r_textureMode;
2282extern cvar_t *r_offsetFactor;
2283extern cvar_t *r_offsetUnits;
2285extern cvar_t *r_fullbright;
2286extern cvar_t *r_lightmap;
2287extern cvar_t *r_vertexLight;
2288extern cvar_t *r_uiFullScreen;
2290extern cvar_t *r_logFile;
2291extern cvar_t *r_showtris;
2292extern cvar_t *r_showsky;
2293extern cvar_t *r_shownormals;
2294extern cvar_t *r_clear;
2296extern cvar_t *r_shadows;
2297extern cvar_t *r_flares;
2299extern cvar_t *r_intensity;
2301extern cvar_t *r_lockpvs;
2302extern cvar_t *r_noportals;
2303extern cvar_t *r_portalOnly;
2305extern cvar_t *r_subdivisions;
2306extern cvar_t *r_lodCurveError;
2307extern cvar_t *r_skipBackEnd;
2309extern cvar_t *r_anaglyphMode;
2311extern cvar_t *r_externalGLSL;
2313extern cvar_t *r_hdr;
2314extern cvar_t *r_floatLightmap;
2315extern cvar_t *r_postProcess;
2317extern cvar_t *r_toneMap;
2318extern cvar_t *r_forceToneMap;
2319extern cvar_t *r_forceToneMapMin;
2320extern cvar_t *r_forceToneMapAvg;
2321extern cvar_t *r_forceToneMapMax;
2323extern cvar_t *r_autoExposure;
2324extern cvar_t *r_forceAutoExposure;
2325extern cvar_t *r_forceAutoExposureMin;
2326extern cvar_t *r_forceAutoExposureMax;
2328extern cvar_t *r_cameraExposure;
2330extern cvar_t *r_depthPrepass;
2331extern cvar_t *r_ssao;
2333extern cvar_t *r_normalMapping;
2334extern cvar_t *r_specularMapping;
2335extern cvar_t *r_deluxeMapping;
2336extern cvar_t *r_parallaxMapping;
2337extern cvar_t *r_parallaxMapOffset;
2338extern cvar_t *r_parallaxMapShadows;
2339extern cvar_t *r_cubeMapping;
2340extern cvar_t *r_cubemapSize;
2341extern cvar_t *r_deluxeSpecular;
2342extern cvar_t *r_pbr;
2343extern cvar_t *r_baseNormalX;
2344extern cvar_t *r_baseNormalY;
2345extern cvar_t *r_baseParallax;
2346extern cvar_t *r_baseSpecular;
2347extern cvar_t *r_baseGloss;
2348extern cvar_t *r_glossType;
2349extern cvar_t *r_dlightMode;
2350extern cvar_t *r_pshadowDist;
2351extern cvar_t *r_mergeLightmaps;
2352extern cvar_t *r_imageUpsample;
2353extern cvar_t *r_imageUpsampleMaxSize;
2354extern cvar_t *r_imageUpsampleType;
2355extern cvar_t *r_genNormalMaps;
2356extern cvar_t *r_forceSun;
2357extern cvar_t *r_forceSunLightScale;
2358extern cvar_t *r_forceSunAmbientScale;
2359extern cvar_t *r_sunlightMode;
2360extern cvar_t *r_drawSunRays;
2361extern cvar_t *r_sunShadows;
2362extern cvar_t *r_shadowFilter;
2363extern cvar_t *r_shadowBlur;
2364extern cvar_t *r_shadowMapSize;
2365extern cvar_t *r_shadowCascadeZNear;
2366extern cvar_t *r_shadowCascadeZFar;
2367extern cvar_t *r_shadowCascadeZBias;
2368extern cvar_t *r_ignoreDstAlpha;
2370extern cvar_t *r_greyscale;
2372extern cvar_t *r_ignoreGLErrors;
2374extern cvar_t *r_overBrightBits;
2375extern cvar_t *r_mapOverBrightBits;
2377extern cvar_t *r_debugSurface;
2378extern cvar_t *r_simpleMipMaps;
2380extern cvar_t *r_showImages;
2381extern cvar_t *r_debugSort;
2383extern cvar_t *r_printShaders;
2385extern cvar_t *r_marksOnTriangleMeshes;
2391extern int r_sequencenumber;
2395extern cvar_t *r_drawentitypoly;
2396extern cvar_t *r_drawstaticmodels;
2397extern cvar_t *r_drawstaticmodelpoly;
2398extern cvar_t *r_drawstaticdecals;
2399extern cvar_t *r_drawterrain;
2400extern cvar_t *r_drawsprites;
2401extern cvar_t *r_drawspherelights;
2403extern cvar_t *r_numdebuglines;
2404extern cvar_t *r_stipplelines;
2405extern cvar_t *r_debuglines_depthmask;
2407extern cvar_t *r_maxpolys;
2408extern int max_polys;
2409extern cvar_t *r_maxpolyverts;
2410extern int max_polyverts;
2411extern cvar_t* r_maxtermarks;
2412extern int max_termarks;
2414extern cvar_t* r_skyportal;
2415extern cvar_t* r_skyportal_origin;
2416extern cvar_t* r_farplane;
2417extern cvar_t* r_farplane_bias;
2418extern cvar_t* r_farplane_color;
2419extern cvar_t* r_farplane_nocull;
2420extern cvar_t* r_farplane_nofog;
2421extern cvar_t* r_skybox_farplane;
2422extern cvar_t* r_farclip;
2426extern cvar_t* r_lightcoronasize;
2427extern cvar_t *r_entlight_scale;
2428extern cvar_t *r_entlight_errbound;
2429extern cvar_t *r_entlight_cubelevel;
2430extern cvar_t *r_entlight_cubefraction;
2431extern cvar_t *r_entlight_maxcalc;
2432extern cvar_t *r_light_lines;
2433extern cvar_t *r_light_sun_line;
2434extern cvar_t *r_light_int_scale;
2435extern cvar_t *r_light_nolight;
2436extern cvar_t *r_light_showgrid;
2440extern cvar_t* r_staticlod;
2441extern cvar_t* r_lodscale;
2442extern cvar_t* r_lodcap;
2443extern cvar_t* r_lodviewmodelcap;
2445extern cvar_t* r_uselod;
2446extern cvar_t* lod_LOD;
2447extern cvar_t* lod_minLOD;
2448extern cvar_t* lod_maxLOD;
2449extern cvar_t* lod_LOD_slider;
2450extern cvar_t* lod_curve_0_val;
2451extern cvar_t* lod_curve_1_val;
2452extern cvar_t* lod_curve_2_val;
2453extern cvar_t* lod_curve_3_val;
2454extern cvar_t* lod_curve_4_val;
2455extern cvar_t* lod_edit_0;
2456extern cvar_t* lod_edit_1;
2457extern cvar_t* lod_edit_2;
2458extern cvar_t* lod_edit_3;
2459extern cvar_t* lod_edit_4;
2460extern cvar_t* lod_curve_0_slider;
2461extern cvar_t* lod_curve_1_slider;
2462extern cvar_t* lod_curve_2_slider;
2463extern cvar_t* lod_curve_3_slider;
2464extern cvar_t* lod_curve_4_slider;
2465extern cvar_t* lod_pitch_val;
2466extern cvar_t* lod_zee_val;
2467extern cvar_t* lod_mesh;
2468extern cvar_t* lod_meshname;
2469extern cvar_t* lod_tikiname;
2470extern cvar_t* lod_metric;
2471extern cvar_t* lod_tris;
2472extern cvar_t* lod_position;
2473extern cvar_t* lod_save;
2474extern cvar_t* lod_tool;
2478extern cvar_t* r_developer;
2479extern cvar_t* r_fps;
2480extern cvar_t* r_showstaticbboxes;
2481extern cvar_t* r_showcull;
2482extern cvar_t* r_showlod;
2483extern cvar_t* r_showstaticlod;
2484extern cvar_t* r_showportal;
2488extern cvar_t *r_vaoCache;
2492static ID_INLINE qboolean ShaderRequiresCPUDeforms(
const shader_t * shader)
2494 if(shader->numDeforms)
2498 if (shader->numDeforms > 1)
2501 switch (ds->deformation)
2506 return ( backEnd.refdef.floatTime != (
float)backEnd.refdef.floatTime );
2518void R_SwapBuffers(
int );
2521void R_RenderDlightCubemaps(
const refdef_t *fd);
2522void R_RenderPshadowMaps(
const refdef_t *fd);
2523void R_RenderSunShadowMaps(
const refdef_t *fd,
int level);
2524void R_RenderCubemapSide(
int cubemapIndex,
int cubemapSide, qboolean subscene );
2529void R_AddRailSurfaces(
trRefEntity_t *e, qboolean isUnderwater );
2532void R_AddPolygonSurfaces(
void );
2534void R_DecomposeSort(
unsigned sort,
int *entityNum, shader_t **shader,
2535 int *fogNum,
int *dlightMap,
int *pshadowMap, qboolean *bStaticModel );
2537void R_AddDrawSurf( surfaceType_t *surface, shader_t *shader,
2538 int fogIndex,
int dlightMap,
int pshadowMap,
int cubemap );
2540void R_CalcTexDirs(vec3_t sdir, vec3_t tdir,
const vec3_t v1,
const vec3_t v2,
2541 const vec3_t v3,
const vec2_t w1,
const vec2_t w2,
const vec2_t w3);
2542vec_t R_CalcTangentSpace(vec3_t tangent, vec3_t bitangent,
const vec3_t normal,
const vec3_t sdir,
const vec3_t tdir);
2543qboolean R_CalcTangentVectors(
srfVert_t * dv[3]);
2548void R_LocalNormalToWorld (
const vec3_t local, vec3_t world);
2549void R_LocalPointToWorld (
const vec3_t local, vec3_t world);
2550int R_CullBox (vec3_t bounds[2]);
2551int R_CullLocalBox (vec3_t bounds[2]);
2552int R_CullPointAndRadiusEx(
const vec3_t origin,
float radius,
const cplane_t* frustum,
int numPlanes );
2553int R_CullPointAndRadius(
const vec3_t origin,
float radius );
2554int R_CullLocalPointAndRadius(
const vec3_t origin,
float radius );
2556void R_SetupProjection(
viewParms_t *dest,
float zProj,
float zFar, qboolean computeFrustum);
2562void GL_BindToTMU( image_t *image,
int tmu );
2563void GL_SetDefaultState (
void);
2564void GL_TextureMode(
const char *
string );
2565void GL_CheckErrs(
char *file,
int line );
2566#define GL_CheckErrors(...) GL_CheckErrs(__FILE__, __LINE__)
2567void GL_State(
unsigned long stateVector );
2568void GL_SetProjectionMatrix(mat4_t matrix);
2569void GL_SetModelviewMatrix(mat4_t matrix);
2570void GL_Cull(
int cullType );
2572#define GLS_SRCBLEND_ZERO 0x00000001
2573#define GLS_SRCBLEND_ONE 0x00000002
2574#define GLS_SRCBLEND_DST_COLOR 0x00000003
2575#define GLS_SRCBLEND_ONE_MINUS_DST_COLOR 0x00000004
2576#define GLS_SRCBLEND_SRC_ALPHA 0x00000005
2577#define GLS_SRCBLEND_ONE_MINUS_SRC_ALPHA 0x00000006
2578#define GLS_SRCBLEND_DST_ALPHA 0x00000007
2579#define GLS_SRCBLEND_ONE_MINUS_DST_ALPHA 0x00000008
2580#define GLS_SRCBLEND_ALPHA_SATURATE 0x00000009
2581#define GLS_SRCBLEND_BITS 0x0000000f
2583#define GLS_DSTBLEND_ZERO 0x00000010
2584#define GLS_DSTBLEND_ONE 0x00000020
2585#define GLS_DSTBLEND_SRC_COLOR 0x00000030
2586#define GLS_DSTBLEND_ONE_MINUS_SRC_COLOR 0x00000040
2587#define GLS_DSTBLEND_SRC_ALPHA 0x00000050
2588#define GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA 0x00000060
2589#define GLS_DSTBLEND_DST_ALPHA 0x00000070
2590#define GLS_DSTBLEND_ONE_MINUS_DST_ALPHA 0x00000080
2591#define GLS_DSTBLEND_BITS 0x000000f0
2593#define GLS_DEPTHMASK_TRUE 0x00000100
2595#define GLS_POLYMODE_LINE 0x00001000
2597#define GLS_DEPTHTEST_DISABLE 0x00010000
2598#define GLS_DEPTHFUNC_EQUAL 0x00020000
2599#define GLS_DEPTHFUNC_GREATER 0x00040000
2600#define GLS_DEPTHFUNC_BITS 0x00060000
2602#define GLS_ATEST_GT_0 0x10000000
2603#define GLS_ATEST_LT_80 0x20000000
2604#define GLS_ATEST_GE_80 0x40000000
2605#define GLS_ATEST_BITS 0x70000000
2607#define GLS_DEFAULT GLS_DEPTHMASK_TRUE
2609void RE_StretchRaw (
int x,
int y,
int w,
int h,
int cols,
int rows,
const byte *data,
int client, qboolean dirty);
2610void RE_UploadCinematic (
int w,
int h,
int cols,
int rows,
const byte *data,
int client, qboolean dirty);
2612void RE_BeginFrame( stereoFrame_t stereoFrame );
2613void RE_BeginRegistration(
glconfig_t *glconfig );
2614void RE_LoadWorldMap(
const char *mapname );
2615void RE_SetWorldVisData(
const byte *vis );
2616qhandle_t RE_RegisterModel(
const char *name );
2617qhandle_t RE_RegisterSkin(
const char *name );
2618void RE_Shutdown( qboolean destroyWindow );
2620qboolean R_GetEntityToken(
char *buffer,
int size );
2622model_t *R_AllocModel(
void );
2625void R_UpdateSubImage( image_t *image,
byte *pic,
int x,
int y,
int width,
int height, GLenum picFormat );
2627void R_SetColorMappings(
void );
2628void R_GammaCorrect(
byte *buffer,
int bufSize );
2630void R_ImageList_f(
void );
2631void R_SkinList_f(
void );
2633const void *RB_TakeScreenshotCmd(
const void *data );
2634void R_ScreenShot_f(
void );
2636void R_InitFogTable(
void );
2637float R_FogFactor(
float s,
float t );
2638void R_InitImages(
void );
2639void R_DeleteTextures(
void );
2640int R_SumOfUsedImages(
void );
2641void R_InitSkins(
void );
2642skin_t *R_GetSkinByHandle( qhandle_t hSkin );
2646const void *RB_TakeVideoFrameCmd(
const void *data );
2651shader_t *R_FindShader(
const char *name,
int lightmapIndex, qboolean mipRawImage );
2652shader_t *R_FindShaderEx(
const char *name,
int lightmapIndex, qboolean mipRawImage,
int realLightmapIndex );
2653shader_t *R_GetShaderByHandle( qhandle_t hShader );
2654shader_t *R_GetShaderByState(
int index,
long *cycleTime );
2655shader_t *R_FindShaderByName(
const char *name );
2656void R_InitShaders(
void );
2657void R_ShaderList_f(
void );
2658void R_RemapShader(
const char *oldShader,
const char *newShader,
const char *timeOffset);
2664#define GLS_MULTITEXTURE 0x00004000
2665#define GLS_MULTITEXTURE_ENV 0x00008000
2666#define GLS_FOG 0x00080000
2668#define GLS_FOG_ENABLED 0x00100000
2669#define GLS_FOG_BLACK 0x00200000
2670#define GLS_FOG_WHITE 0x00400000
2671#define GLS_FOG_COLOR (GLS_FOG_BLACK | GLS_FOG_WHITE)
2672#define GLS_FOG_BITS (GLS_FOG_WHITE|GLS_FOG_BLACK|GLS_FOG_ENABLED)
2673#define GLS_COLOR_NOMASK 0x00800000
2676void R_RotateForViewer(
void);
2677void R_SetupFrustum (
viewParms_t *dest,
float xmin,
float xmax,
float ymax,
float zProj,
float zFar,
float stereoSep);
2678int R_DistanceCullLocalPointAndRadius(
float fDist,
const vec3_t pt,
float radius);
2679int R_DistanceCullPointAndRadius(
float fDist,
const vec3_t pt,
float radius);
2680qboolean R_ImageExists(
const char* name);
2681int R_CountTextureMemory();
2682qboolean R_LoadRawImage(
const char *name,
byte **pic,
int *width,
int *height);
2683void R_FreeRawImage(
byte *pic);
2688void RE_PrintBSPFileSizes(
void);
2689int RE_MapVersion(
void);
2690void R_ClearWorld(
void);
2695void R_SavePerformanceCounters(
void);
2701void R_AddSpriteSurfaces();
2702qboolean SurfIsOffscreen2(
const srfBspSurface_t* surface, shader_t* shader,
int entityNum);
2707qhandle_t RE_RefreshShaderNoMip(
const char* name);
2719void GLimp_InitExtraExtensions(
void );
2731 color4ub_t colors[SHADER_MAX_VERTEXES];
2732 vec2_t texcoords[NUM_TEXTURE_BUNDLES][SHADER_MAX_VERTEXES];
2737 glIndex_t indexes[SHADER_MAX_INDEXES] Q_ALIGN(16);
2738 vec4_t xyz[SHADER_MAX_VERTEXES] Q_ALIGN(16);
2739 int16_t normal[SHADER_MAX_VERTEXES][4] Q_ALIGN(16);
2740 int16_t tangent[SHADER_MAX_VERTEXES][4] Q_ALIGN(16);
2741 vec2_t texCoords[SHADER_MAX_VERTEXES] Q_ALIGN(16);
2742 vec2_t lightCoords[SHADER_MAX_VERTEXES] Q_ALIGN(16);
2743 uint16_t color[SHADER_MAX_VERTEXES][4] Q_ALIGN(16);
2744 int16_t lightdir[SHADER_MAX_VERTEXES][4] Q_ALIGN(16);
2747 void *attribPointers[ATTR_INDEX_COUNT];
2749 qboolean useInternalVao;
2750 qboolean useCacheVao;
2752 stageVars_t svars Q_ALIGN(16);
2770 void (*currentStageIteratorFunc)( void );
2771 shaderStage_t **xstages;
2777 qboolean no_global_fog;
2780extern shaderCommands_t tess;
2782void RB_BeginSurface(shader_t *shader,
int fogNum,
int cubemapIndex );
2783void RB_EndSurface(
void);
2784void RB_CheckOverflow(
int verts,
int indexes );
2785#define RB_CHECKOVERFLOW(v,i) if (tess.numVertexes + (v) >= SHADER_MAX_VERTEXES || tess.numIndexes + (i) >= SHADER_MAX_INDEXES ) {RB_CheckOverflow(v,i);}
2787void R_DrawElements(
int numIndexes,
int firstIndex );
2788void RB_StageIteratorGeneric(
void );
2789void RB_StageIteratorSky(
void );
2790void RB_StageIteratorVertexLitTexture(
void );
2791void RB_StageIteratorLightmappedMultitexture(
void );
2793void RB_AddQuadStamp( vec3_t origin, vec3_t left, vec3_t up,
float color[4] );
2794void RB_AddQuadStampExt( vec3_t origin, vec3_t left, vec3_t up,
float color[4],
float s1,
float t1,
float s2,
float t2 );
2795void RB_InstantQuad( vec4_t quadVerts[4] );
2797void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4]);
2799void RB_ShowImages(
void );
2811void R_AddWorldSurfaces(
void);
2812qboolean R_inPVS(
const vec3_t p1,
const vec3_t p2 );
2813mnode_t* R_PointInLeaf(
const vec3_t p);
2824void R_ClearFlares(
void );
2826void RB_AddFlare(
void *surface,
int fogNum, vec3_t point, vec3_t color, vec3_t normal );
2827void RB_AddDlightFlares(
void );
2828void RB_RenderFlares (
void);
2838void R_DlightBmodel(
bmodel_t *bmodel );
2840void R_TransformDlights(
int count, dlight_t *dl,
orientationr_t *ori );
2841int R_LightForPoint( vec3_t point, vec3_t ambientLight, vec3_t directedLight, vec3_t lightDir );
2842int R_LightDirForPoint( vec3_t point, vec3_t lightDir, vec3_t normal,
world_t *world );
2843int R_CubemapForPoint( vec3_t point );
2853void RB_ShadowTessEnd(
void );
2854void RB_ShadowFinish(
void );
2855void RB_ProjectionShadowDeform(
void );
2865void R_BuildCloudData( shaderCommands_t *shader );
2866void R_InitSkyTexCoords(
float cloudLayerHeight );
2867void R_DrawSkyBox( shaderCommands_t *shader );
2868void RB_DrawSun(
float scale, shader_t *shader );
2869void RB_ClipSkyPolygons( shaderCommands_t *shader );
2879#define PATCH_STITCHING
2881void R_SubdividePatchToGrid( srfBspSurface_t *grid,
int width,
int height,
2882 srfVert_t points[MAX_PATCH_SIZE*MAX_PATCH_SIZE] );
2883void R_GridInsertColumn( srfBspSurface_t *grid,
int column,
int row, vec3_t point,
float loderror );
2884void R_GridInsertRow( srfBspSurface_t *grid,
int row,
int column, vec3_t point,
float loderror );
2894int R_MarkFragments(
int numPoints,
const vec3_t *points,
const vec3_t projection,
2895 int maxPoints, vec3_t pointBuffer,
int maxFragments,
markFragment_t *fragmentBuffer,
float fRadiusSquared);
2897int R_MarkFragmentsForInlineModel(clipHandle_t bmodel,
const vec3_t vAngles,
const vec3_t vOrigin,
int numPoints,
2898 const vec3_t* points,
const vec3_t projection,
int maxPoints, vec3_t pointBuffer,
2899 int maxFragments,
markFragment_t* fragmentBuffer,
float fRadiusSquared);
2910void R_VaoPackTangent(int16_t *out, vec4_t v);
2911void R_VaoPackNormal(int16_t *out, vec3_t v);
2912void R_VaoPackColor(uint16_t *out, vec4_t c);
2913void R_VaoUnpackTangent(vec4_t v, int16_t *pack);
2914void R_VaoUnpackNormal(vec3_t v, int16_t *pack);
2916vao_t *R_CreateVao(
const char *name,
byte *vertexes,
int vertexesSize,
byte *indexes,
int indexesSize, vaoUsage_t usage);
2917vao_t *R_CreateVao2(
const char *name,
int numVertexes,
srfVert_t *verts,
int numIndexes, glIndex_t *inIndexes);
2919void R_BindVao(vao_t *vao);
2920void R_BindNullVao(
void);
2922void Vao_SetVertexPointers(vao_t *vao);
2924void R_InitVaos(
void);
2925void R_ShutdownVaos(
void);
2926void R_VaoList_f(
void);
2928void RB_UpdateTessVao(
unsigned int attribBits);
2930void VaoCache_Commit(
void);
2931void VaoCache_DrawElements(
int numIndexes,
int firstIndex);
2932void VaoCache_Init(
void);
2933void VaoCache_BindVao(
void);
2934void VaoCache_CheckAdd(qboolean *endSurface, qboolean *recycleVertexBuffer, qboolean *recycleIndexBuffer,
int numVerts,
int numIndexes);
2935void VaoCache_RecycleVertexBuffer(
void);
2936void VaoCache_RecycleIndexBuffer(
void);
2937void VaoCache_InitQueue(
void);
2938void VaoCache_AddSurface(
srfVert_t *verts,
int numVerts, glIndex_t *indexes,
int numIndexes);
2948void GLSL_InitGPUShaders(
void);
2949void GLSL_ShutdownGPUShaders(
void);
2950void GLSL_VertexAttribPointers(uint32_t attribBits);
2951void GLSL_BindProgram(shaderProgram_t * program);
2953void GLSL_SetUniformInt(shaderProgram_t *program,
int uniformNum, GLint value);
2954void GLSL_SetUniformFloat(shaderProgram_t *program,
int uniformNum, GLfloat value);
2955void GLSL_SetUniformFloat5(shaderProgram_t *program,
int uniformNum,
const vec5_t v);
2956void GLSL_SetUniformVec2(shaderProgram_t *program,
int uniformNum,
const vec2_t v);
2957void GLSL_SetUniformVec3(shaderProgram_t *program,
int uniformNum,
const vec3_t v);
2958void GLSL_SetUniformVec4(shaderProgram_t *program,
int uniformNum,
const vec4_t v);
2959void GLSL_SetUniformMat4(shaderProgram_t *program,
int uniformNum,
const mat4_t matrix);
2960void GLSL_SetUniformMat4BoneMatrix(shaderProgram_t *program,
int uniformNum, mat4_t *matrix,
int numMatricies);
2962shaderProgram_t *GLSL_GetGenericShaderProgram(
int stage);
2972void R_InitNextFrame(
void );
2974void RE_ClearScene(
void );
2975void RE_AddRefEntityToScene(
const refEntity_t *ent );
2976void RE_AddPolyToScene( qhandle_t hShader ,
int numVerts,
const polyVert_t *verts,
int num );
2977void RE_AddLightToScene(
const vec3_t org,
float intensity,
float r,
float g,
float b );
2978void RE_AddAdditiveLightToScene(
const vec3_t org,
float intensity,
float r,
float g,
float b );
2979void RE_BeginScene(
const refdef_t *fd );
2980void RE_RenderScene(
const refdef_t *fd );
2981void RE_EndScene(
void);
2982void RE_AddRefEntityToScene2(
const refEntity_t* ent,
int parentEntityNumber);
2992#define MC_BITS_X (16)
2993#define MC_BITS_Y (16)
2994#define MC_BITS_Z (16)
2995#define MC_BITS_VECT (16)
2997#define MC_SCALE_X (1.0f/64)
2998#define MC_SCALE_Y (1.0f/64)
2999#define MC_SCALE_Z (1.0f/64)
3001void MC_UnCompress(
float mat[3][4],
const unsigned char * comp);
3013qboolean R_LoadIQM (model_t *mod,
void *buffer,
int filesize,
const char *name );
3015void RB_IQMSurfaceAnim( surfaceType_t *surface );
3016void RB_IQMSurfaceAnimVao( srfVaoIQModel_t *surface );
3018 int startFrame,
int endFrame,
3019 float frac,
const char *tagName );
3033void Draw_SetColor(
const vec4_t rgba);
3034void Draw_StretchPic(
float x,
float y,
float w,
float h,
float s1,
float t1,
float s2,
float t2, qhandle_t hShader);
3035void 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);
3036void Draw_TilePic(
float x,
float y,
float w,
float h, qhandle_t hShader);
3037void Draw_TilePicOffset(
float x,
float y,
float w,
float h, qhandle_t hShader,
int offsetX,
int offsetY);
3038void Draw_TrianglePic(
const vec2_t vPoints[3],
const vec2_t vTexCoords[3], qhandle_t hShader);
3039void DrawBox(
float x,
float y,
float w,
float h);
3040void AddBox(
float x,
float y,
float w,
float h);
3041void Set2DWindow(
int x,
int y,
int w,
int h,
float left,
float right,
float bottom,
float top,
float n,
float f);
3042void RE_Scissor(
int x,
int y,
int width,
int height);
3043void DrawLineLoop(
const vec2_t* points,
int count,
int stipple_factor,
int stipple_mask);
3044void RE_StretchRaw2(
int x,
int y,
int w,
int h,
int cols,
int rows,
int components,
const byte* data);
3053void R_ShutdownFont();
3054fontheader_t* R_LoadFont(
const char* name);
3055void R_LoadFontShader(fontheader_sgl_t* font);
3056void R_DrawString(fontheader_t* font,
const char* text,
float x,
float y,
int maxlen,
const float *pvVirtualScreen);
3057void R_DrawFloatingString(fontheader_t* font,
const char* text,
const vec3_t org,
const vec4_t color,
float scale,
int maxlen);
3058float R_GetFontHeight(
const fontheader_t* font);
3059float R_GetFontStringWidth(
const fontheader_t* font,
const char* s);
3069void R_UpdateGhostTextures();
3070void R_SetGhostImage(
const char* name, image_t* image);
3071void LoadGHOST(
const char* name,
byte** pic,
int* width,
int* height);
3081void R_GetLightingForDecal(vec3_t vLight,
const vec3_t vFacing,
const vec3_t vOrigin);
3082void R_GetLightingForSmoke(vec3_t vLight,
const vec3_t vOrigin);
3083void R_GetLightingGridValue(
world_t* world,
const vec3_t vPos, vec3_t vAmbientLight, vec3_t vDirectedLight);
3084void RB_SetupEntityGridLighting();
3087void RB_Light_Real(
unsigned char* colors);
3088void RB_Sphere_BuildDLights();
3089void RB_Sphere_SetupEntity();
3090void RB_Grid_SetupEntity();
3091void RB_Grid_SetupStaticModel();
3092void RB_Light_Fullbright(
unsigned char* colors);
3093void R_Sphere_InitLights();
3094int R_GatherLightSources(
const vec3_t vPos, vec3_t* pvLightPos, vec3_t* pvLightIntensity,
int iMaxLights);
3096extern suninfo_t s_sun;
3105void R_LevelMarksLoad(
const char* szBSPName);
3106void R_LevelMarksInit();
3107void R_LevelMarksFree();
3108void R_UpdateLevelMarksSystem();
3109void R_AddPermanentMarkFragmentSurfaces(
void** pFirstMarkFragment,
int iNumMarkFragment);
3119void RE_AddRefSpriteToScene(
const refEntity_t* ent);
3120void RE_AddTerrainMarkToScene(
int iTerrainIndex, qhandle_t hShader,
int numVerts,
const polyVert_t* verts,
int renderfx);
3122qboolean RE_AddPolyToScene2(qhandle_t hShader,
int numVerts,
const polyVert_t* verts,
int renderfx);
3123void RE_AddLightToScene2(
const vec3_t org,
float intensity,
float r,
float g,
float b,
int type);
3133void RB_CalcLightGridColor(
unsigned char* colors);
3144void R_Sky_AddSurf(msurface_t* surf);
3154sprite_t* SPR_RegisterSprite(
const char* name);
3155void RB_DrawSprite(
const refSprite_t* spr);
3165void R_InitLensFlare();
3166void R_DrawLensFlares();
3175void RB_DrawSwipeSurface(surfaceType_t* pswipe);
3176void RE_SwipeBegin(
float thistime,
float life, qhandle_t shader);
3178void R_AddSwipeSurfaces();
3192void R_AddTerrainSurfaces();
3193void R_AddTerrainMarkSurfaces();
3194void R_InitTerrain();
3195void R_ShutdownTerrain();
3196void R_TerrainFree();
3197void R_TerrainPrepareFrame();
3199void R_SwapTerraPatch(cTerraPatch_t* pPatch);
3201void R_TerrainCrater_f(
void);
3213void R_InitStaticModels(
void);
3214void RE_FreeModels(
void);
3215qhandle_t RE_SpawnEffectModel(
const char* szModel, vec3_t vPos, vec3_t* axis);
3216qhandle_t RE_RegisterServerModel(
const char* name);
3217void RE_UnregisterServerModel(qhandle_t hModel);
3219qboolean RE_TIKI_IsOnGround(
refEntity_t* model,
int tagnum,
float threshold);
3220float R_ModelRadius(qhandle_t handle);
3221void R_ModelBounds(qhandle_t handle, vec3_t mins, vec3_t maxs);
3222dtiki_t* R_Model_GetHandle(qhandle_t handle);
3227void RE_SetFrameNumber(
int frameNumber);
3229void RB_SkelMesh(skelSurfaceGame_t* sf);
3230void RB_StaticMesh(staticSurface_t* staticSurf);
3231void RB_Static_BuildDLights();
3232void R_InfoStaticModels_f(
void);
3233void R_PrintInfoStaticModels();
3235void R_AddStaticModelSurfaces(
void);
3236void R_CountTikiLodTris(dtiki_t* tiki,
float lodpercentage,
int* render_tris,
int* total_tris);
3237float R_CalcLod(
const vec3_t origin,
float radius);
3238int GetLodCutoff(
struct skelHeaderGame_s* skelmodel,
float lod_val,
int renderfx);
3240void R_InfoWorldTris_f(
void);
3241void R_PrintInfoWorldtris(
void);
3242void R_DebugSkeleton(
void);
3244extern int g_nStaticSurfaces;
3245extern qboolean g_bInfostaticmodels;
3246extern qboolean g_bInfoworldtris;
3256void RB_StreamBegin(shader_t* shader);
3257void RB_StreamEnd(
void);
3258void RB_StreamBeginDrawSurf(
void);
3259void RB_StreamEndDrawSurf(
void);
3260static void addTriangle(
void);
3261void RB_Vertex3fv(vec3_t v);
3262void RB_Vertex3f(vec_t x, vec_t y, vec_t z);
3263void RB_Vertex2f(vec_t x, vec_t y);
3264void RB_Color4f(vec_t r, vec_t g, vec_t b, vec_t a);
3265void RB_Color3f(vec_t r, vec_t g, vec_t b);
3266void RB_Color3fv(vec3_t col);
3267void RB_Color4bv(
unsigned char* colors);
3268void RB_Texcoord2f(
float s,
float t);
3269void RB_Texcoord2fv(vec2_t st);
3270void R_DrawDebugNumber(
const vec3_t org,
float number,
float scale,
float r,
float g,
float b,
int precision);
3271void 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);
3272void R_DebugCircle(
const vec3_t org,
float radius,
float r,
float g,
float b,
float alpha, qboolean horizontal);
3273void R_DebugLine(
const vec3_t start,
const vec3_t end,
float r,
float g,
float b,
float alpha);
3274int RE_GetShaderWidth(qhandle_t hShader);
3275int RE_GetShaderHeight(qhandle_t hShader);
3276const char* RE_GetShaderName(qhandle_t hShader);
3277const char* RE_GetModelName(qhandle_t hModel);
3286void R_GetInlineModelBounds(
int iIndex, vec3_t vMins, vec3_t vMaxs);
3287int R_SphereInLeafs(
const vec3_t p,
float r, mnode_t** nodes,
int nMaxNodes);
3288mnode_t* R_PointInLeaf(
const vec3_t p);
3291void R_AddSpriteSurfCmd(drawSurf_t* drawSurfs,
int numDrawSurfs);
3299void R_TransformModelToClip(
const vec3_t src,
const float *modelMatrix,
const float *projectionMatrix,
3300 vec4_t eye, vec4_t dst );
3301void R_TransformClipToWindow(
const vec4_t clip,
const viewParms_t *view, vec4_t normalized, vec4_t window );
3303void RB_DeformTessGeometry(
void );
3305void RB_CalcFogTexCoords(
float *dstTexCoords );
3307void RB_CalcScaleTexMatrix(
const float scale[2],
float *matrix );
3308void RB_CalcScrollTexMatrix(
const float scrollSpeed[2],
float *matrix );
3309void RB_CalcRotateTexMatrix(
float degsPerSecond,
float *matrix );
3310void RB_CalcTurbulentFactors(
const waveForm_t *wf,
float *amplitude,
float *now );
3311void RB_CalcTransformTexMatrix(
const texModInfo_t *tmi,
float *matrix );
3312void RB_CalcStretchTexMatrix(
const waveForm_t *wf,
float *matrix );
3314void RB_CalcModulateColorsByFog(
unsigned char *dstColors );
3315float RB_CalcWaveAlphaSingle(
const waveForm_t *wf );
3316float RB_CalcWaveColorSingle(
const waveForm_t *wf );
3326void RB_ExecuteRenderCommands(
const void *data );
3336#define MAX_RENDER_COMMANDS 0x40000
3339 byte cmds[MAX_RENDER_COMMANDS];
3383 drawSurf_t *drawSurfs;
3401 byte *captureBuffer;
3403 qboolean motionJpeg;
3460#define MAX_POLYS 600
3461#define MAX_POLYVERTS 3000
3462#define MAX_TERMARKS 1024
3467 drawSurf_t drawSurfs[MAX_DRAWSURFS];
3468 dlight_t dlights[MAX_DLIGHTS];
3472 pshadow_t pshadows[MAX_CALC_PSHADOWS];
3478 drawSurf_t spriteSurfs[MAX_SPRITESURFS];
3479 srfMarkFragment_t* terMarks;
3480 refSprite_t sprites[2048];
3482 byte* staticModelData;
3485extern int max_polys;
3486extern int max_polyverts;
3491void *R_GetCommandBuffer(
int bytes );
3492void RB_ExecuteRenderCommands(
const void *data );
3494void R_IssuePendingRenderCommands(
void );
3496void R_AddDrawSurfCmd( drawSurf_t *drawSurfs,
int numDrawSurfs );
3497void R_AddCapShadowmapCmd(
int dlight,
int cubeSide );
3498void R_AddPostProcessCmd (
void);
3500void RE_SetColor(
const float *rgba );
3501void RE_StretchPic (
float x,
float y,
float w,
float h,
3502 float s1,
float t1,
float s2,
float t2, qhandle_t hShader );
3503void RE_BeginFrame( stereoFrame_t stereoFrame );
3504void RE_EndFrame(
int *frontEndMsec,
int *backEndMsec );
3505void RE_SaveJPG(
char * filename,
int quality,
int image_width,
int image_height,
3506 unsigned char *image_buffer,
int padding);
3507size_t RE_SaveJPGToBuffer(
byte *buffer,
size_t bufSize,
int quality,
3508 int image_width,
int image_height,
byte *image_buffer,
int padding);
3509void RE_TakeVideoFrame(
int width,
int height,
3510 byte *captureBuffer,
byte *encodeBuffer, qboolean motionJpeg );
3512void R_ConvertTextureFormat(
const byte *in,
int width,
int height, GLenum format, GLenum type,
byte *out );
Definition tr_local.h:1257
Definition tr_local.h:2465
Definition tr_local.h:1273
Definition tr_local.h:1070
Definition tr_local.h:990
Definition navigation_bsp.h:149
Definition tr_local.h:959
Definition navigation_bsp.h:308
Definition tr_local.h:3418
Definition tr_local.h:2435
Definition tr_local.h:2428
Definition tr_local.h:100
Definition tr_local.h:1521
Definition tr_local.h:720
Definition tr_local.h:169
Definition tr_local.h:2369
Definition tr_local.h:767
Definition tr_local.h:2400
Definition tr_local.h:2386
Definition tr_local.h:3430
Definition tr_local.h:542
Definition tr_local.h:707
Definition tr_local.h:1223
Definition tr_local.h:1899
Definition tr_types.h:244
Definition tr_local.h:1243
Definition tr_local.h:1181
Definition q_shared.h:1493
Definition tr_local.h:1680
Definition tr_local.h:1729
Definition tr_local.h:1705
Definition tr_local.h:1710
Definition tr_local.h:1693
Definition tr_local.h:1687
Definition tr_local.h:1698
Definition tr_local.h:1042
Definition tr_local.h:1155
Definition tr_local.h:1030
Definition q_shared.h:1524
Definition tr_local.h:214
Definition tr_local.h:105
Definition tr_local.h:3424
Definition tr_local.h:1481
Definition tr_local.h:126
Definition tr_local.h:202
Definition tr_types.h:162
Definition tr_local.h:2359
Definition tr_local.h:2408
Definition tr_local.h:2364
Definition tr_local.h:1892
Definition tr_local.h:851
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:1080
Definition tr_local.h:1137
Definition tr_local.h:800
Definition tr_local.h:1224
Definition tr_local.h:787
Definition tr_local.h:779
Definition tr_local.h:985
Definition tr_local.h:942
Definition tr_local.h:1235
Definition tr_local.h:1250
Definition tr_local.h:1119
Definition tr_local.h:1886
Definition tr_local.h:2391
Definition tr_local.h:2374
Definition tr_local.h:2349
Definition tr_local.h:2382
Definition tr_local.h:923
Definition navigation_bsp.h:281
Definition tr_local.h:909
Definition navigation_bsp.h:269
Definition tr_local.h:422
Definition tr_local.h:455
Definition tr_local.h:1305
Definition tr_local.h:181
Definition tr_local.h:633
Definition tr_local.h:166
Definition tr_local.h:177
Definition tr_local.h:2418
Definition tr_local.h:734
Definition tr_local.h:1089
Definition navigation_bsp.h:214