OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
tr_local.h
1/*
2===========================================================================
3Copyright (C) 1999-2005 Id Software, Inc.
4
5This file is part of Quake III Arena source code.
6
7Quake III Arena source code is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 2 of the License,
10or (at your option) any later version.
11
12Quake III Arena source code is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with Quake III Arena source code; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20===========================================================================
21*/
22
23
24#ifndef TR_LOCAL_H
25#define TR_LOCAL_H
26
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"
34#include "tr_fbo.h"
35#include "tr_postprocess.h"
36#include "../renderercommon/iqm.h"
37#include "../renderercommon/qgl.h"
38
39#ifdef __cplusplus
40#define GLE(ret, name, ...) extern "C" name##proc * qgl##name;
41#else
42#define GLE(ret, name, ...) extern name##proc * qgl##name;
43#endif
44QGL_1_1_PROCS;
45QGL_DESKTOP_1_1_PROCS;
46QGL_1_3_PROCS;
47QGL_1_5_PROCS;
48QGL_2_0_PROCS;
49QGL_3_0_PROCS;
50QGL_ARB_occlusion_query_PROCS;
51QGL_ARB_framebuffer_object_PROCS;
52QGL_ARB_vertex_array_object_PROCS;
53QGL_EXT_direct_state_access_PROCS;
54#undef GLE
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60#define GL_INDEX_TYPE GL_UNSIGNED_SHORT
61typedef unsigned short glIndex_t;
62
63typedef unsigned int vaoCacheGlIndex_t;
64
65#define BUFFER_OFFSET(i) ((char *)NULL + (i))
66
67// 14 bits
68// can't be increased without changing bit packing for drawsurfs
69// see QSORT_SHADERNUM_SHIFT
70#define SHADERNUM_BITS 14
71#define MAX_SHADERS (1<<SHADERNUM_BITS)
72
73#define MAX_FBOS 64
74#define MAX_VISCOUNTS 5
75#define MAX_VAOS 4096
76
77#define MAX_CALC_PSHADOWS 64
78#define MAX_DRAWN_PSHADOWS 16 // do not increase past 32, because bit flags are used on surfaces
79#define PSHADOW_MAP_SIZE 512
80
81//
82// OPENMOHAA-specific stuff
83//=========================
84
85#define MAX_SPHERE_LIGHTS 512
86#define MAX_SPRITESURFS 0x8000
87
88#define MAX_SPRITE_DIST 16384.0f
89#define MAX_SPRITE_DIST_SQUARED (MAX_SPRITE_DIST * MAX_SPRITE_DIST)
90
91typedef enum {
92 USE_S_COORDS,
93 USE_T_COORDS
94} texDirection_t;
95
96#define BUNDLE_ANIMATE_ONCE 1
97
98//=========================
99
100typedef struct cubemap_s {
101 char name[MAX_QPATH];
102 vec3_t origin;
103 float parallaxRadius;
104 image_t *image;
105} cubemap_t;
106
107typedef struct dlight_s {
108 vec3_t origin;
109 vec3_t color; // range from 0.0 to 1.0, should be color normalized
110 float radius;
111
112 vec3_t transformed; // origin in local coordinate system
113 int additive; // texture detail is lost tho when the lightmap is dark
114
115 //
116 // OPENMOHAA-specific stuff
117 //
118
119 dlighttype_t type;
120} dlight_t;
121
122
123// a trRefEntity_t has all the information passed in by
124// the client game, as well as some locally derived info
125typedef struct {
126 refEntity_t e;
127
128 float axisLength; // compensate for non-normalized axis
129
130 qboolean needDlights; // true for bmodels that touch a dlight
131 qboolean lightingCalculated;
132 qboolean mirrored; // mirrored matrix, needs reversed culling
133 vec3_t lightDir; // normalized direction towards light, in world space
134 vec3_t modelLightDir; // normalized direction towards light, in model space
135 vec3_t ambientLight; // color normalized to 0-255
136 int ambientLightInt; // 32 bit rgba packed
137 vec3_t directedLight;
138
139 //
140 // OPENMOHAA-specific stuff
141 //
142
143 int iGridLighting;
144 float lodpercentage[2];
146
147
148typedef struct {
149 vec3_t origin; // in world coordinates
150 vec3_t axis[3]; // orientation in world
151 vec3_t viewOrigin; // viewParms->or.origin in local coordinates
152 float modelMatrix[16];
153 float transformMatrix[16];
155
156// Ensure this is >= the ATTR_INDEX_COUNT enum below
157#define VAO_MAX_ATTRIBS 16
158
159typedef enum
160{
161 VAO_USAGE_STATIC,
162 VAO_USAGE_DYNAMIC
163} vaoUsage_t;
164
165typedef struct vaoAttrib_s
166{
167 uint32_t enabled;
168 uint32_t count;
169 uint32_t type;
170 uint32_t normalized;
171 uint32_t stride;
172 uint32_t offset;
173}
174vaoAttrib_t;
175
176typedef struct vao_s
177{
178 char name[MAX_QPATH];
179
180 uint32_t vao;
181
182 uint32_t vertexesVBO;
183 int vertexesSize; // amount of memory data allocated for all vertices in bytes
184 vaoAttrib_t attribs[VAO_MAX_ATTRIBS];
185
186 uint32_t frameSize; // bytes to skip per frame when doing vertex animation
187
188 uint32_t indexesIBO;
189 int indexesSize; // amount of memory data allocated for all triangles in bytes
190} vao_t;
191
192//===============================================================================
193
194typedef enum {
195 SS_BAD,
196 SS_PORTAL, // mirrors, portals, viewscreens
197 SS_ENVIRONMENT, // sky box
198 SS_OPAQUE, // opaque
199
200 SS_DECAL, // scorch marks, etc.
201 SS_SEE_THROUGH, // ladders, grates, grills that may have small blended edges
202 // in addition to alpha test
203 SS_BANNER,
204
205 SS_FOG,
206
207 SS_UNDERWATER, // for items that should be drawn in front of the water plane
208
209 SS_BLEND0, // regular transparency and filters
210 SS_BLEND1, // generally only used for additive type effects
211 SS_BLEND2,
212 SS_BLEND3,
213
214 SS_BLEND6,
215 SS_STENCIL_SHADOW,
216 SS_ALMOST_NEAREST, // gun smoke puffs
217
218 SS_NEAREST // blood blobs
219} shaderSort_t;
220
221
222#define MAX_SHADER_STAGES 8
223
224typedef enum {
225 GF_NONE,
226
227 GF_SIN,
228 GF_SQUARE,
229 GF_TRIANGLE,
230 GF_SAWTOOTH,
231 GF_INVERSE_SAWTOOTH,
232
233 GF_NOISE
234
235} genFunc_t;
236
237
238typedef enum {
239 DEFORM_NONE,
240 DEFORM_WAVE,
241 DEFORM_NORMALS,
242 DEFORM_BULGE,
243 DEFORM_MOVE,
244 DEFORM_PROJECTION_SHADOW,
245 DEFORM_AUTOSPRITE,
246 DEFORM_AUTOSPRITE2,
247 DEFORM_TEXT0,
248 DEFORM_TEXT1,
249 DEFORM_TEXT2,
250 DEFORM_TEXT3,
251 DEFORM_TEXT4,
252 DEFORM_TEXT5,
253 DEFORM_TEXT6,
254 DEFORM_TEXT7,
255 //
256 // OPENMOHAA-specific stuff
257 //=========================
258 DEFORM_LIGHTGLOW,
259 DEFORM_FLAP_S,
260 DEFORM_FLAP_T,
261 //=========================
262} deform_t;
263
264// deformVertexes types that can be handled by the GPU
265typedef enum
266{
267 // do not edit: same as genFunc_t
268
269 DGEN_NONE,
270 DGEN_WAVE_SIN,
271 DGEN_WAVE_SQUARE,
272 DGEN_WAVE_TRIANGLE,
273 DGEN_WAVE_SAWTOOTH,
274 DGEN_WAVE_INVERSE_SAWTOOTH,
275 DGEN_WAVE_NOISE,
276
277 // do not edit until this line
278
279 DGEN_BULGE,
280 DGEN_MOVE
281} deformGen_t;
282
283typedef enum {
284 AGEN_IDENTITY,
285 AGEN_SKIP,
286 AGEN_ENTITY,
287 AGEN_ONE_MINUS_ENTITY,
288 AGEN_VERTEX,
289 AGEN_ONE_MINUS_VERTEX,
290 AGEN_LIGHTING_SPECULAR,
291 AGEN_WAVEFORM,
292 AGEN_PORTAL,
293 AGEN_CONST,
294
295 //
296 // OPENMOHAA-specific stuff
297 //
298
299 AGEN_NOISE,
300 AGEN_DOT,
301 AGEN_ONE_MINUS_DOT,
302 AGEN_CONSTANT,
303 AGEN_GLOBAL_ALPHA,
304 AGEN_SKYALPHA,
305 AGEN_ONE_MINUS_SKYALPHA,
306 AGEN_SCOORD,
307 AGEN_TCOORD,
308 AGEN_DIST_FADE,
309 AGEN_ONE_MINUS_DIST_FADE,
310 AGEN_TIKI_DIST_FADE,
311 AGEN_ONE_MINUS_TIKI_DIST_FADE,
312 AGEN_DOT_VIEW,
313 AGEN_ONE_MINUS_DOT_VIEW,
314 AGEN_HEIGHT_FADE,
315} alphaGen_t;
316
317typedef enum {
318 CGEN_BAD,
319 CGEN_IDENTITY_LIGHTING, // tr.identityLight
320 CGEN_IDENTITY, // always (1,1,1,1)
321 CGEN_ENTITY, // grabbed from entity's modulate field
322 CGEN_ONE_MINUS_ENTITY, // grabbed from 1 - entity.modulate
323 CGEN_EXACT_VERTEX, // tess.vertexColors
324 CGEN_VERTEX, // tess.vertexColors * tr.identityLight
325 CGEN_EXACT_VERTEX_LIT, // like CGEN_EXACT_VERTEX but takes a light direction from the lightgrid
326 CGEN_VERTEX_LIT, // like CGEN_VERTEX but takes a light direction from the lightgrid
327 CGEN_ONE_MINUS_VERTEX,
328 CGEN_WAVEFORM, // programmatically generated
329 CGEN_LIGHTING_DIFFUSE,
330 CGEN_FOG, // standard fog
331 CGEN_CONST, // fixed color
332
333 //
334 // OPENMOHAA-specific stuff
335 //
336
337 CGEN_MULTIPLY_BY_WAVEFORM,
338 CGEN_LIGHTING_GRID,
339 CGEN_LIGHTING_SPHERICAL,
340 CGEN_NOISE,
341 CGEN_GLOBAL_COLOR,
342 CGEN_STATIC,
343 CGEN_SCOORD,
344 CGEN_TCOORD,
345 CGEN_DOT,
346 CGEN_ONE_MINUS_DOT,
347} colorGen_t;
348
349typedef enum {
350 TCGEN_BAD,
351 TCGEN_IDENTITY, // clear to 0,0
352 TCGEN_LIGHTMAP,
353 TCGEN_TEXTURE,
354 TCGEN_ENVIRONMENT_MAPPED,
355 TCGEN_FOG,
356 TCGEN_VECTOR // S and T from world coordinates
357} texCoordGen_t;
358
359typedef enum {
360 ACFF_NONE,
361 ACFF_MODULATE_RGB,
362 ACFF_MODULATE_RGBA,
363 ACFF_MODULATE_ALPHA
364} acff_t;
365
366typedef struct {
367 genFunc_t func;
368
369 float base;
370 float amplitude;
371 float phase;
372 float frequency;
373} waveForm_t;
374
375#define TR_MAX_TEXMODS 4
376
377typedef enum {
378 TMOD_NONE,
379 TMOD_TRANSFORM,
380 TMOD_TURBULENT,
381 TMOD_SCROLL,
382 TMOD_SCALE,
383 TMOD_STRETCH,
384 TMOD_ROTATE,
385 TMOD_ENTITY_TRANSLATE
386} texMod_t;
387
388#define MAX_SHADER_DEFORMS 3
389typedef struct {
390 deform_t deformation; // vertex coordinate modification type
391
392 vec3_t moveVector;
393 waveForm_t deformationWave;
394 float deformationSpread;
395
396 float bulgeWidth;
397 float bulgeHeight;
398 float bulgeSpeed;
400
401
402typedef struct {
403 texMod_t type;
404
405 // used for TMOD_TURBULENT and TMOD_STRETCH
406 waveForm_t wave;
407
408 // used for TMOD_TRANSFORM
409 float matrix[2][2]; // s' = s * m[0][0] + t * m[1][0] + trans[0]
410 float translate[2]; // t' = s * m[0][1] + t * m[0][1] + trans[1]
411
412 // used for TMOD_SCALE
413 float scale[2]; // s *= scale[0]
414 // t *= scale[1]
415
416 // used for TMOD_SCROLL
417 float scroll[2]; // s' = s + scroll[0] * time
418 // t' = t + scroll[1] * time
419
420 // + = clockwise
421 // - = counterclockwise
422 float rotateSpeed;
423
425
426
427//#define MAX_IMAGE_ANIMATIONS 8
428//
429// OPENMOHAA-specific stuff
430//=========================
431#define MAX_IMAGE_ANIMATIONS 64
432//=========================
433
434typedef struct {
435 image_t *image[MAX_IMAGE_ANIMATIONS];
436 int numImageAnimations;
437 float imageAnimationSpeed;
438
439 texCoordGen_t tcGen;
440 vec3_t tcGenVectors[2];
441
442 int numTexMods;
443 texModInfo_t *texMods;
444
445 int videoMapHandle;
446 qboolean isLightmap;
447 qboolean isVideoMap;
448
449 //
450 // OPENMOHAA-specific stuff
451 //=========================
452 float imageAnimationPhase;
453 int flags;
454 //=========================
456
457enum
458{
459 TB_COLORMAP = 0,
460 TB_DIFFUSEMAP = 0,
461 TB_LIGHTMAP = 1,
462 TB_LEVELSMAP = 1,
463 TB_SHADOWMAP3 = 1,
464 TB_NORMALMAP = 2,
465 TB_DELUXEMAP = 3,
466 TB_SHADOWMAP2 = 3,
467 TB_SPECULARMAP = 4,
468 TB_SHADOWMAP = 5,
469 TB_CUBEMAP = 6,
470 TB_SHADOWMAP4 = 6,
471 NUM_TEXTURE_BUNDLES = 7
472};
473
474typedef enum
475{
476 // material shader stage types
477 ST_COLORMAP = 0, // vanilla Q3A style shader treatening
478 ST_DIFFUSEMAP = 0, // treat color and diffusemap the same
479 ST_NORMALMAP,
480 ST_NORMALPARALLAXMAP,
481 ST_SPECULARMAP,
482 ST_GLSL
483} stageType_t;
484
485typedef struct {
486 qboolean active;
487
488 textureBundle_t bundle[NUM_TEXTURE_BUNDLES];
489
490 waveForm_t rgbWave;
491 colorGen_t rgbGen;
492
493 waveForm_t alphaWave;
494 alphaGen_t alphaGen;
495
496 byte constantColor[4]; // for CGEN_CONST and AGEN_CONST
497
498 unsigned stateBits; // GLS_xxxx mask
499
500 acff_t adjustColorsForFog;
501
502 qboolean isDetail;
503
504 stageType_t type;
505 struct shaderProgram_s *glslShaderGroup;
506 int glslShaderIndex;
507
508 vec4_t normalScale;
509 vec4_t specularScale;
510
511 //
512 // OPENMOHAA-SPECIFIC stuff
513 //
514
515 float alphaMin;
516 float alphaMax;
517 vec3_t specOrigin;
518
519 byte colorConst[4]; // for CGEN_CONST and AGEN_CONST
520 byte alphaConst;
521 byte alphaConstMin;
523
524struct shaderCommands_s;
525
526typedef enum {
527 CT_FRONT_SIDED,
528 CT_BACK_SIDED,
529 CT_TWO_SIDED
530} cullType_t;
531
532typedef enum {
533 FP_NONE, // surface is translucent and will just be adjusted properly
534 FP_EQUAL, // surface is opaque but possibly alpha tested
535 FP_LE // surface is trnaslucent, but still needs a fog pass (fog surface)
536} fogPass_t;
537
538typedef struct {
539 float cloudHeight;
540 image_t *outerbox[6], *innerbox[6];
541} skyParms_t;
542
543typedef struct {
544 vec3_t color;
545 float depthForOpaque;
546} fogParms_t;
547
548//
549// OPENMOHAA-specific stuff
550//
551//=============================
552
553typedef enum {
554 SPRITE_PARALLEL,
555 SPRITE_PARALLEL_ORIENTED,
556 SPRITE_ORIENTED,
557 SPRITE_PARALLEL_UPRIGHT
558} spriteType_t;
559
560typedef struct {
561 spriteType_t type;
562 float scale;
564
565//=============================
566
567typedef struct shader_s {
568 char name[MAX_QPATH]; // game path, including extension
569 int lightmapIndex; // for a shader to match, both name and lightmapIndex must match
570
571 int index; // this shader == tr.shaders[index]
572 int sortedIndex; // this shader == tr.sortedShaders[sortedIndex]
573
574 float sort; // lower numbered shaders draw before higher numbered
575
576 qboolean defaultShader; // we want to return index 0 if the shader failed to
577 // load for some reason, but R_FindShader should
578 // still keep a name allocated for it, so if
579 // something calls RE_RegisterShader again with
580 // the same name, we don't try looking for it again
581
582 qboolean explicitlyDefined; // found in a .shader file
583
584 int surfaceFlags; // if explicitlyDefined, this will have SURF_* flags
585 int contentFlags;
586
587 qboolean entityMergable; // merge across entites optimizable (smoke, blood)
588
589 qboolean isSky;
590 skyParms_t sky;
591 fogParms_t fogParms;
592
593 float portalRange; // distance to fog out at
594 qboolean isPortal;
595
596 cullType_t cullType; // CT_FRONT_SIDED, CT_BACK_SIDED, or CT_TWO_SIDED
597 qboolean polygonOffset; // set for decals and other items that must be offset
598 qboolean noMipMaps; // for console fonts, 2D elements, etc.
599 qboolean noPicMip; // for images that must always be full resolution
600
601 fogPass_t fogPass; // draw a blended pass, possibly with depth test equals
602
603 int vertexAttribs; // not all shaders will need all data to be gathered
604
605 int numDeforms;
606 deformStage_t deforms[MAX_SHADER_DEFORMS];
607
608 int numUnfoggedPasses;
609 shaderStage_t *stages[MAX_SHADER_STAGES];
610
611 void (*optimalStageIteratorFunc)( void );
612
613 double clampTime; // time this shader is clamped to
614 double timeOffset; // current time offset for this shader
615
616 struct shader_s *remappedShader; // current shader this one is remapped too
617
618 struct shader_s *next;
619
620 //
621 // OPENMOHAA-specific stuff
622 //
623 qboolean force32bit;
624 float fDistRange;
625 float fDistNear;
626 spriteParms_t sprite;
627} shader_t;
628
629enum
630{
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,
641
642 // GPU vertex animations
643 ATTR_INDEX_POSITION2 = 10,
644 ATTR_INDEX_TANGENT2 = 11,
645 ATTR_INDEX_NORMAL2 = 12,
646
647 ATTR_INDEX_COUNT = 13
648};
649
650enum
651{
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,
662
663 // for .md3 interpolation
664 ATTR_POSITION2 = 1 << ATTR_INDEX_POSITION2,
665 ATTR_TANGENT2 = 1 << ATTR_INDEX_TANGENT2,
666 ATTR_NORMAL2 = 1 << ATTR_INDEX_NORMAL2,
667
668 ATTR_DEFAULT = ATTR_POSITION,
669 ATTR_BITS = ATTR_POSITION |
670 ATTR_TEXCOORD |
671 ATTR_LIGHTCOORD |
672 ATTR_TANGENT |
673 ATTR_NORMAL |
674 ATTR_COLOR |
675 ATTR_PAINTCOLOR |
676 ATTR_LIGHTDIRECTION |
677 ATTR_BONE_INDEXES |
678 ATTR_BONE_WEIGHTS |
679 ATTR_POSITION2 |
680 ATTR_TANGENT2 |
681 ATTR_NORMAL2
682};
683
684enum
685{
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,
694};
695
696enum
697{
698 FOGDEF_USE_DEFORM_VERTEXES = 0x0001,
699 FOGDEF_USE_VERTEX_ANIMATION = 0x0002,
700 FOGDEF_USE_BONE_ANIMATION = 0x0004,
701 FOGDEF_ALL = 0x0007,
702 FOGDEF_COUNT = 0x0008,
703};
704
705enum
706{
707 DLIGHTDEF_USE_DEFORM_VERTEXES = 0x0001,
708 DLIGHTDEF_ALL = 0x0001,
709 DLIGHTDEF_COUNT = 0x0002,
710};
711
712enum
713{
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
725};
726
727enum
728{
729 SHADOWMAPDEF_USE_VERTEX_ANIMATION = 0x0001,
730 SHADOWMAPDEF_USE_BONE_ANIMATION = 0x0002,
731 SHADOWMAPDEF_ALL = 0x0003,
732 SHADOWMAPDEF_COUNT = 0x0004
733};
734
735enum
736{
737 GLSL_INT,
738 GLSL_FLOAT,
739 GLSL_FLOAT5,
740 GLSL_VEC2,
741 GLSL_VEC3,
742 GLSL_VEC4,
743 GLSL_MAT16,
744 GLSL_MAT16_BONEMATRIX
745};
746
747typedef enum
748{
749 UNIFORM_DIFFUSEMAP = 0,
750 UNIFORM_LIGHTMAP,
751 UNIFORM_NORMALMAP,
752 UNIFORM_DELUXEMAP,
753 UNIFORM_SPECULARMAP,
754
755 UNIFORM_TEXTUREMAP,
756 UNIFORM_LEVELSMAP,
757 UNIFORM_CUBEMAP,
758
759 UNIFORM_SCREENIMAGEMAP,
760 UNIFORM_SCREENDEPTHMAP,
761
762 UNIFORM_SHADOWMAP,
763 UNIFORM_SHADOWMAP2,
764 UNIFORM_SHADOWMAP3,
765 UNIFORM_SHADOWMAP4,
766
767 UNIFORM_SHADOWMVP,
768 UNIFORM_SHADOWMVP2,
769 UNIFORM_SHADOWMVP3,
770 UNIFORM_SHADOWMVP4,
771
772 UNIFORM_ENABLETEXTURES,
773
774 UNIFORM_DIFFUSETEXMATRIX0,
775 UNIFORM_DIFFUSETEXMATRIX1,
776 UNIFORM_DIFFUSETEXMATRIX2,
777 UNIFORM_DIFFUSETEXMATRIX3,
778 UNIFORM_DIFFUSETEXMATRIX4,
779 UNIFORM_DIFFUSETEXMATRIX5,
780 UNIFORM_DIFFUSETEXMATRIX6,
781 UNIFORM_DIFFUSETEXMATRIX7,
782
783 UNIFORM_TCGEN0,
784 UNIFORM_TCGEN0VECTOR0,
785 UNIFORM_TCGEN0VECTOR1,
786
787 UNIFORM_DEFORMGEN,
788 UNIFORM_DEFORMPARAMS,
789
790 UNIFORM_COLORGEN,
791 UNIFORM_ALPHAGEN,
792 UNIFORM_COLOR,
793 UNIFORM_BASECOLOR,
794 UNIFORM_VERTCOLOR,
795
796 UNIFORM_DLIGHTINFO,
797 UNIFORM_LIGHTFORWARD,
798 UNIFORM_LIGHTUP,
799 UNIFORM_LIGHTRIGHT,
800 UNIFORM_LIGHTORIGIN,
801 UNIFORM_MODELLIGHTDIR,
802 UNIFORM_LIGHTRADIUS,
803 UNIFORM_AMBIENTLIGHT,
804 UNIFORM_DIRECTEDLIGHT,
805
806 UNIFORM_PORTALRANGE,
807
808 UNIFORM_FOGDISTANCE,
809 UNIFORM_FOGDEPTH,
810 UNIFORM_FOGEYET,
811 UNIFORM_FOGCOLORMASK,
812
813 UNIFORM_MODELMATRIX,
814 UNIFORM_MODELVIEWPROJECTIONMATRIX,
815
816 UNIFORM_TIME,
817 UNIFORM_VERTEXLERP,
818 UNIFORM_NORMALSCALE,
819 UNIFORM_SPECULARSCALE,
820
821 UNIFORM_VIEWINFO, // znear, zfar, width/2, height/2
822 UNIFORM_VIEWORIGIN,
823 UNIFORM_LOCALVIEWORIGIN,
824 UNIFORM_VIEWFORWARD,
825 UNIFORM_VIEWLEFT,
826 UNIFORM_VIEWUP,
827
828 UNIFORM_INVTEXRES,
829 UNIFORM_AUTOEXPOSUREMINMAX,
830 UNIFORM_TONEMINAVGMAXLINEAR,
831
832 UNIFORM_PRIMARYLIGHTORIGIN,
833 UNIFORM_PRIMARYLIGHTCOLOR,
834 UNIFORM_PRIMARYLIGHTAMBIENT,
835 UNIFORM_PRIMARYLIGHTRADIUS,
836
837 UNIFORM_CUBEMAPINFO,
838
839 UNIFORM_ALPHATEST,
840
841 UNIFORM_BONEMATRIX,
842
843 UNIFORM_COUNT
844} uniform_t;
845
846// shaderProgram_t represents a pair of one
847// GLSL vertex and one GLSL fragment shader
848typedef struct shaderProgram_s
849{
850 char name[MAX_QPATH];
851
852 GLuint program;
853 GLuint vertexShader;
854 GLuint fragmentShader;
855 uint32_t attribs; // vertex array attributes
856
857 // uniform parameters
858 GLint uniforms[UNIFORM_COUNT];
859 short uniformBufferOffsets[UNIFORM_COUNT]; // max 32767/64=511 uniforms
860 char *uniformBuffer;
861} shaderProgram_t;
862
863// trRefdef_t holds everything that comes in refdef_t,
864// as well as the locally generated scene information
865typedef struct {
866 int x, y, width, height;
867 float fov_x, fov_y;
868 vec3_t vieworg;
869 vec3_t viewaxis[3]; // transformation matrix
870
871 stereoFrame_t stereoFrame;
872
873 int time; // time in milliseconds for shader effects and other time dependent rendering issues
874 int rdflags; // RDF_NOWORLDMODEL, etc
875
876 // 1 bits will prevent the associated area from rendering at all
877 byte areamask[MAX_MAP_AREA_BYTES];
878 qboolean areamaskModified; // qtrue if areamask changed since last scene
879
880 double floatTime; // tr.refdef.time / 1000.0
881
882 float blurFactor;
883
884 // text messages for deform text shaders
885 char text[MAX_RENDER_STRINGS][MAX_RENDER_STRING_LENGTH];
886
887 int num_entities;
888 trRefEntity_t *entities;
889
890 int num_dlights;
891 struct dlight_s *dlights;
892
893 int numPolys;
894 struct srfPoly_s *polys;
895
896 int numDrawSurfs;
897 struct drawSurf_s *drawSurfs;
898
899 unsigned int dlightMask;
900 int num_pshadows;
901 struct pshadow_s *pshadows;
902
903 float sunShadowMvp[4][16];
904 float sunDir[4];
905 float sunCol[4];
906 float sunAmbCol[4];
907
908 float autoExposureMinMax[2];
909 float toneMinAvgMaxLinear[3];
910
911
912 //
913 // OPENMOHAA-specific stuff
914 //
915
916 int num_sprites;
917 struct refSprite_s *sprites;
918
919 int numTerMarks;
920 struct srfMarkFragment_s *terMarks;
921
922 int numSpriteSurfs;
923 struct drawSurf_s *spriteSurfs;
924
925 int numStaticModels;
926 struct cStaticModelUnpacked_s *staticModels;
927
928 int numStaticModelData;
929 unsigned char *staticModelData;
930
931 qboolean sky_portal;
932 float sky_alpha;
933 vec3_t sky_origin;
934 vec3_t sky_axis[3];
935 qboolean skybox_farplane;
936 qboolean render_terrain;
937} trRefdef_t;
938
939
940//=================================================================================
941
942// max surfaces per-skin
943// This is an arbitry limit. Vanilla Q3 only supported 32 surfaces in skins but failed to
944// enforce the maximum limit when reading skin files. It was possile to use more than 32
945// surfaces which accessed out of bounds memory past end of skin->surfaces hunk block.
946#define MAX_SKIN_SURFACES 256
947
948// skins allow models to be retextured without modifying the model file
949typedef struct {
950 char name[MAX_QPATH];
951 shader_t *shader;
953
954typedef struct skin_s {
955 char name[MAX_QPATH]; // game path, including extension
956 int numSurfaces;
957 skinSurface_t *surfaces; // dynamically allocated array of surfaces
958} skin_t;
959
960
961typedef struct {
962 int originalBrushNumber;
963 vec3_t bounds[2];
964
965 unsigned colorInt; // in packed byte format
966 float tcScale; // texture coordinate vector scales
967 fogParms_t parms;
968
969 // for clipping distance in fog when outside
970 qboolean hasSurface;
971 float surface[4];
972} fog_t;
973
974//
975// OPENMOHAA-specific stuff
976//
977//=========================
978typedef struct depthfog_s {
979 float len;
980 float oolen;
981 int enabled;
982 int extrafrustums;
983} depthfog_t;
984
985//=========================
986
987typedef enum {
988 VPF_NONE = 0x00,
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
997} viewParmFlags_t;
998
999typedef struct {
1000 orientationr_t or;
1001 orientationr_t world;
1002 vec3_t pvsOrigin; // may be different than or.origin for portals
1003 qboolean isPortal; // true if this view is through a portal
1004 qboolean isMirror; // the portal is a mirror, invert the face culling
1005 viewParmFlags_t flags;
1006 int frameSceneNum; // copied from tr.frameSceneNum
1007 int frameCount; // copied from tr.frameCount
1008 cplane_t portalPlane; // clip anything behind this if mirroring
1009 int viewportX, viewportY, viewportWidth, viewportHeight;
1010 FBO_t *targetFbo;
1011 int targetFboLayer;
1012 int targetFboCubemapIndex;
1013 float fovX, fovY;
1014 float projectionMatrix[16];
1015 cplane_t frustum[5];
1016 vec3_t visBounds[2];
1017 float zFar;
1018 float zNear;
1019 stereoFrame_t stereoFrame;
1020
1021 //
1022 // OPENMOHAA-specific stuff
1023 //
1024
1025 qboolean isPortalSky; // since 2.0 whether or not this view is a portal sky
1026 depthfog_t fog;
1027 float farplane_distance;
1028 float farplane_bias; // added in 2.0
1029 float farplane_color[3];
1030 qboolean farplane_cull;
1031 qboolean renderTerrain; // added in 2.0
1032} viewParms_t;
1033
1034
1035/*
1036==============================================================================
1037
1038SURFACES
1039
1040==============================================================================
1041*/
1042typedef byte color4ub_t[4];
1043
1044// any changes in surfaceType must be mirrored in rb_surfaceTable[]
1045typedef enum {
1046 SF_BAD,
1047 SF_SKIP, // ignore
1048 SF_FACE,
1049 SF_GRID,
1050 SF_TRIANGLES,
1051 SF_POLY,
1052 SF_MDV,
1053 SF_MDR,
1054 SF_IQM,
1055 SF_FLARE,
1056 SF_ENTITY, // beams, rails, lightning, etc that can be determined by entity
1057 SF_VAO_MDVMESH,
1058 SF_VAO_IQM,
1059
1060 //
1061 // OPENMOHAA-specific stuff
1062 //
1063
1064 SF_MARK_FRAG,
1065 SF_TIKI_SKEL,
1066 SF_TIKI_STATIC,
1067 SF_SWIPE,
1068 SF_SPRITE,
1069 SF_TERRAIN_PATCH,
1070 SF_NUM_SURFACE_TYPES,
1071 SF_MAX = 0x7fffffff // ensures that sizeof( surfaceType_t ) == sizeof( int )
1072} surfaceType_t;
1073
1074typedef struct drawSurf_s {
1075 unsigned int sort; // bit combination for fast compares
1076 int cubemapIndex;
1077 surfaceType_t *surface; // any of surface*_t
1078} drawSurf_t;
1079
1080#define MAX_FACE_POINTS 64
1081
1082#define MAX_PATCH_SIZE 32 // max dimensions of a patch mesh in map file
1083#define MAX_GRID_SIZE 65 // max dimensions of a grid mesh in memory
1084
1085// when cgame directly specifies a polygon, it becomes a srfPoly_t
1086// as soon as it is called
1087typedef struct srfPoly_s {
1088 surfaceType_t surfaceType;
1089 qhandle_t hShader;
1090 int fogIndex;
1091 int numVerts;
1092 polyVert_t *verts;
1093
1094 //
1095 // OPENMOHAA-specific stuff
1096 //
1097
1098 int renderfx;
1099} srfPoly_t;
1100
1101
1102typedef struct srfFlare_s {
1103 surfaceType_t surfaceType;
1104 vec3_t origin;
1105 vec3_t normal;
1106 vec3_t color;
1107} srfFlare_t;
1108
1109typedef struct
1110{
1111 vec3_t xyz;
1112 vec2_t st;
1113 vec2_t lightmap;
1114 int16_t normal[4];
1115 int16_t tangent[4];
1116 int16_t lightdir[4];
1117 uint16_t color[4];
1118
1119#if DEBUG_OPTIMIZEVERTICES
1120 unsigned int id;
1121#endif
1122} srfVert_t;
1123
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}}
1125
1126// srfBspSurface_t covers SF_GRID, SF_TRIANGLES, and SF_POLY
1127typedef struct srfBspSurface_s
1128{
1129 surfaceType_t surfaceType;
1130
1131 // dynamic lighting information
1132 int dlightBits;
1133 int pshadowBits;
1134
1135 // culling information
1136 vec3_t cullBounds[2];
1137 vec3_t cullOrigin;
1138 float cullRadius;
1139 cplane_t cullPlane;
1140
1141 // indexes
1142 int numIndexes;
1143 glIndex_t *indexes;
1144
1145 // vertexes
1146 int numVerts;
1147 srfVert_t *verts;
1148
1149 // SF_GRID specific variables after here
1150
1151 // lod information, which may be different
1152 // than the culling information to allow for
1153 // groups of curves that LOD as a unit
1154 vec3_t lodOrigin;
1155 float lodRadius;
1156 int lodFixed;
1157 int lodStitched;
1158
1159 // vertexes
1160 int width, height;
1161 float *widthLodError;
1162 float *heightLodError;
1163} srfBspSurface_t;
1164
1165typedef struct {
1166 vec3_t translate;
1167 quat_t rotate;
1168 vec3_t scale;
1170
1171// inter-quake-model
1172typedef struct {
1173 int num_vertexes;
1174 int num_triangles;
1175 int num_frames;
1176 int num_surfaces;
1177 int num_joints;
1178 int num_poses;
1179 struct srfIQModel_s *surfaces;
1180
1181 int *triangles;
1182
1183 // vertex arrays
1184 float *positions;
1185 float *texcoords;
1186 float *normals;
1187 float *tangents;
1188 byte *colors;
1189 int *influences; // [num_vertexes] indexes into influenceBlendVertexes
1190
1191 // unique list of vertex blend indexes/weights for faster CPU vertex skinning
1192 byte *influenceBlendIndexes; // [num_influences]
1193 union {
1194 float *f;
1195 byte *b;
1196 } influenceBlendWeights; // [num_influences]
1197
1198 // depending upon the exporter, blend indices and weights might be int/float
1199 // as opposed to the recommended byte/byte, for example Noesis exports
1200 // int/float whereas the official IQM tool exports byte/byte
1201 int blendWeightsType; // IQM_UBYTE or IQM_FLOAT
1202
1203 char *jointNames;
1204 int *jointParents;
1205 float *bindJoints; // [num_joints * 12]
1206 float *invBindJoints; // [num_joints * 12]
1207 iqmTransform_t *poses; // [num_frames * num_poses]
1208 float *bounds;
1209
1210 int numVaoSurfaces;
1211 struct srfVaoIQModel_s *vaoSurfaces;
1212} iqmData_t;
1213
1214// inter-quake-model surface
1215typedef struct srfIQModel_s {
1216 surfaceType_t surfaceType;
1217 char name[MAX_QPATH];
1218 shader_t *shader;
1219 iqmData_t *data;
1220 int first_vertex, num_vertexes;
1221 int first_triangle, num_triangles;
1222 int first_influence, num_influences;
1223} srfIQModel_t;
1224
1225typedef struct srfVaoIQModel_s
1226{
1227 surfaceType_t surfaceType;
1228
1229 iqmData_t *iqmData;
1230 struct srfIQModel_s *iqmSurface;
1231
1232 // backEnd stats
1233 int numIndexes;
1234 int numVerts;
1235
1236 // static render data
1237 vao_t *vao;
1238} srfVaoIQModel_t;
1239
1240typedef struct srfVaoMdvMesh_s
1241{
1242 surfaceType_t surfaceType;
1243
1244 struct mdvModel_s *mdvModel;
1245 struct mdvSurface_s *mdvSurface;
1246
1247 // backEnd stats
1248 int numIndexes;
1249 int numVerts;
1250
1251 // static render data
1252 vao_t *vao;
1253} srfVaoMdvMesh_t;
1254
1255extern void (*rb_surfaceTable[SF_NUM_SURFACE_TYPES])(void *);
1256
1257//
1258// OPENMOHAA-specific stuff
1259//=========================
1260
1261typedef struct {
1262 struct mnode_s* cntNode;
1263 struct msurface_s* skySurfs[32];
1264 int numSurfs;
1265 vec3_t offset;
1266 vec3_t mins;
1267 vec3_t maxs;
1268} portalsky_t;
1269
1270typedef struct {
1271 vec3_t transformed;
1272 int index;
1274
1275typedef enum {
1276 LIGHT_POINT,
1277 LIGHT_DIRECTIONAL,
1278 LIGHT_SPOT,
1279 LIGHT_SPOT_FAST
1280} lighttype_t;
1281
1282typedef struct reallightinfo_s {
1283 vec3_t color;
1284 lighttype_t eType;
1285 float fIntensity;
1286 float fDist;
1287 float fSpotSlope;
1288 float fSpotConst;
1289 float fSpotScale;
1290 vec3_t vOrigin;
1291 vec3_t vDirection;
1292} reallightinfo_t;
1293
1294typedef float cube_entry_t[3][4];
1295
1296typedef struct {
1297 vec3_t origin;
1298 vec3_t worldOrigin;
1299 vec3_t traceOrigin;
1300 float radius;
1301 struct mnode_s* leaves[8];
1302 void(*TessFunction) (unsigned char* dstColors);
1303 union {
1304 unsigned char level[4];
1305 int value;
1306 } ambient;
1307 int numRealLights;
1308 reallightinfo_t light[MAX_REAL_LIGHTS];
1309 int bUsesCubeMap;
1310 float cubemap[24][3][4];
1311} sphereor_t;
1312
1313typedef struct spherel_s {
1314 vec3_t origin;
1315 vec3_t color;
1316 float intensity;
1317 struct mnode_s* leaf;
1318 int needs_trace;
1319 int spot_light;
1320 float spot_radiusbydistance;
1321 vec3_t spot_dir;
1322 int reference_count;
1323} spherel_t;
1324
1325typedef struct suninfo_s {
1326 vec3_t color;
1327 vec3_t direction;
1328 vec3_t flaredirection;
1329 char szFlareName[64];
1330 qboolean exists;
1331} suninfo_t;
1332
1333typedef union varnodeUnpacked_u {
1334 float fVariance;
1335 int flags;
1336} varnodeUnpacked_t;
1337
1338typedef unsigned short terraInt;
1339
1340typedef struct terrainVert_s {
1341 vec3_t xyz;
1342 vec2_t texCoords[2];
1343 float fVariance;
1344 float fHgtAvg;
1345 float fHgtAdd;
1346 unsigned int uiDistRecalc;
1347 terraInt nRef;
1348 terraInt iVertArray;
1349 byte* pHgt;
1350 terraInt iNext;
1351 terraInt iPrev;
1353
1354typedef struct terraTri_s {
1355 unsigned short iPt[3];
1356 terraInt nSplit;
1357 unsigned int uiDistRecalc;
1358 struct cTerraPatchUnpacked_s* patch;
1359 varnodeUnpacked_t* varnode;
1360 terraInt index;
1361 byte lod;
1362 byte byConstChecks;
1363 terraInt iLeft;
1364 terraInt iRight;
1365 terraInt iBase;
1366 terraInt iLeftChild;
1367 terraInt iRightChild;
1368 terraInt iParent;
1369 terraInt iPrev;
1370 terraInt iNext;
1371} terraTri_t;
1372
1373typedef struct srfTerrain_s {
1374 surfaceType_t surfaceType;
1375 terraInt iVertHead;
1376 terraInt iTriHead;
1377 terraInt iTriTail;
1378 terraInt iMergeHead;
1379 int nVerts;
1380 int nTris;
1381 int lmapSize;
1382 int dlightBits[2];
1383 float lmapStep;
1384 int dlightMap[2];
1385 byte* lmData;
1386 float lmapX;
1387 float lmapY;
1388} srfTerrain_t;
1389
1390typedef struct cTerraPatchUnpacked_s {
1391 srfTerrain_t drawinfo;
1392 int viewCount;
1393 int visCountCheck;
1394 int visCountDraw;
1395 int frameCount;
1396 unsigned int uiDistRecalc;
1397 float s;
1398 float t;
1399 vec2_t texCoord[2][2];
1400 float x0;
1401 float y0;
1402 float z0;
1403 float zmax;
1404 shader_t* shader;
1405 short int iNorth;
1406 short int iEast;
1407 short int iSouth;
1408 short int iWest;
1409 struct cTerraPatchUnpacked_s* pNextActive;
1410 varnodeUnpacked_t varTree[2][63];
1411 unsigned char heightmap[81];
1412 byte flags;
1413 byte byDirty;
1415
1416typedef struct srfStaticModel_s {
1417 surfaceType_t surfaceType;
1418 struct cStaticModelUnpacked_s* parent;
1419} srfStaticModel_t;
1420
1421typedef struct srfMarkFragment_s {
1422 surfaceType_t surfaceType;
1423 int iIndex;
1424 int numVerts;
1425 polyVert_t* verts;
1426} srfMarkFragment_t;
1427
1428typedef struct cStaticModelUnpacked_s {
1429 qboolean useSpecialLighting;
1430 qboolean bLightGridCalculated;
1431 qboolean bRendered;
1432 char model[128];
1433 vec3_t origin;
1434 vec3_t angles;
1435 vec3_t axis[3];
1436 float scale;
1437 int firstVertexData;
1438 int numVertexData;
1439 int visCount;
1440 dtiki_t* tiki;
1441 sphere_dlight_t dlights[MAX_DLIGHTS];
1442 int numdlights;
1443 float radius;
1444 float cull_radius;
1445 int iGridLighting;
1446 float lodpercentage[2];
1448
1449typedef struct refSprite_s {
1450 surfaceType_t surftype;
1451 int hModel;
1452 int shaderNum;
1453 float origin[3];
1454 float scale;
1455 float axis[3][3];
1456 byte shaderRGBA[4];
1457 int renderfx;
1458 float shaderTime;
1459} refSprite_t;
1460
1461//=========================
1462
1463/*
1464==============================================================================
1465
1466SHADOWS
1467
1468==============================================================================
1469*/
1470
1471typedef struct pshadow_s
1472{
1473 float sort;
1474
1475 int numEntities;
1476 int entityNums[8];
1477 vec3_t entityOrigins[8];
1478 float entityRadiuses[8];
1479
1480 float viewRadius;
1481 vec3_t viewOrigin;
1482
1483 vec3_t lightViewAxis[3];
1484 vec3_t lightOrigin;
1485 float lightRadius;
1486 cplane_t cullPlane;
1487} pshadow_t;
1488
1489
1490/*
1491==============================================================================
1492
1493BRUSH MODELS
1494
1495==============================================================================
1496*/
1497
1498
1499//
1500// in memory representation
1501//
1502
1503#define SIDE_FRONT 0
1504#define SIDE_BACK 1
1505#define SIDE_ON 2
1506
1507#define CULLINFO_NONE 0
1508#define CULLINFO_BOX 1
1509#define CULLINFO_SPHERE 2
1510#define CULLINFO_PLANE 4
1511
1512typedef struct cullinfo_s {
1513 int type;
1514 vec3_t bounds[2];
1515 vec3_t localOrigin;
1516 float radius;
1517 cplane_t plane;
1518} cullinfo_t;
1519
1520typedef struct msurface_s {
1521 //int viewCount; // if == tr.viewCount, already added
1522 struct shader_s *shader;
1523 int fogIndex;
1524 int cubemapIndex;
1525 cullinfo_t cullinfo;
1526
1527 surfaceType_t *data; // any of srf*_t
1528} msurface_t;
1529
1530
1531#define CONTENTS_NODE -1
1532typedef struct mnode_s {
1533 // common with leaf and node
1534 int contents; // -1 for nodes, to differentiate from leafs
1535 int visCounts[MAX_VISCOUNTS]; // node needs to be traversed if current
1536 vec3_t mins, maxs; // for bounding box culling
1537 struct mnode_s *parent;
1538
1539 // node specific
1540 cplane_t *plane;
1541 struct mnode_s *children[2];
1542
1543 // leaf specific
1544 int cluster;
1545 int area;
1546
1547 int firstmarksurface;
1548 int nummarksurfaces;
1549
1550 //
1551 // OPENMOHAA-specific stuff
1552 //
1553
1554 spherel_t** lights;
1555 int numlights;
1556
1557 int firstTerraPatch;
1558 int numTerraPatches;
1559 int firstStaticModel;
1560 int numStaticModels;
1561 void** pFirstMarkFragment;
1562 int iNumMarkFragment;
1563} mnode_t;
1564
1565typedef struct {
1566 vec3_t bounds[2]; // for culling
1567 int firstSurface;
1568 int numSurfaces;
1569
1570 //
1571 // OPENMOHAA-specific stuff
1572 //
1573
1574 void** pFirstMarkFragment;
1575 int iNumMarkFragment;
1576 int frameCount;
1577 qboolean hasLightmap;
1578} bmodel_t;
1579
1580typedef struct {
1581 char name[MAX_QPATH]; // ie: maps/tim_dm2.bsp
1582 char baseName[MAX_QPATH]; // ie: tim_dm2
1583
1584 int dataSize;
1585
1586 int numShaders;
1587 dshader_t *shaders;
1588
1589 int numBModels;
1590 bmodel_t *bmodels;
1591
1592 int numplanes;
1593 cplane_t *planes;
1594
1595 int numnodes; // includes leafs
1596 int numDecisionNodes;
1597 mnode_t *nodes;
1598
1599 int numWorldSurfaces;
1600
1601 int numsurfaces;
1602 msurface_t *surfaces;
1603 int *surfacesViewCount;
1604 int *surfacesDlightBits;
1605 int *surfacesPshadowBits;
1606
1607 int nummarksurfaces;
1608 int *marksurfaces;
1609
1610 int numfogs;
1611 fog_t *fogs;
1612
1613 vec3_t lightGridOrigin;
1614 vec3_t lightGridSize;
1615 vec3_t lightGridInverseSize;
1616 int lightGridBounds[3];
1617 byte *lightGridData;
1618 uint16_t *lightGrid16;
1619
1620
1621 int numClusters;
1622 int clusterBytes;
1623 const byte *vis; // may be passed in by CM_LoadMap to save space
1624
1625 char *entityString;
1626 char *entityParsePoint;
1627
1628 //
1629 // OPENMOHAA-specific stuff
1630 //
1631
1632 unsigned short* lightGridOffsets;
1633 byte lightGridPalette[768];
1634
1635 int numTerraPatches;
1636 cTerraPatchUnpacked_t* terraPatches;
1637 cTerraPatchUnpacked_t* activeTerraPatches;
1638
1639 int numVisTerraPatches;
1640 cTerraPatchUnpacked_t** visTerraPatches;
1641
1642 int numStaticModelData;
1643 byte* staticModelData;
1644
1645 int numStaticModels;
1646 cStaticModelUnpacked_t* staticModels;
1647
1648 int numVisStaticModels;
1649 cStaticModelUnpacked_t** visStaticModels;
1650} world_t;
1651
1652//
1653// OPENMOHAA-specific stuff
1654//=========================
1655typedef struct {
1656 float width;
1657 float height;
1658 float origin_x;
1659 float origin_y;
1660 float scale;
1661 shader_t* shader;
1662} sprite_t;
1663//=========================
1664
1665/*
1666==============================================================================
1667MDV MODELS - meta format for vertex animation models like .md2, .md3, .mdc
1668==============================================================================
1669*/
1670typedef struct
1671{
1672 float bounds[2][3];
1673 float localOrigin[3];
1674 float radius;
1675} mdvFrame_t;
1676
1677typedef struct
1678{
1679 float origin[3];
1680 float axis[3][3];
1681} mdvTag_t;
1682
1683typedef struct
1684{
1685 char name[MAX_QPATH]; // tag name
1686} mdvTagName_t;
1687
1688typedef struct
1689{
1690 vec3_t xyz;
1691 int16_t normal[4];
1692 int16_t tangent[4];
1693} mdvVertex_t;
1694
1695typedef struct
1696{
1697 float st[2];
1698} mdvSt_t;
1699
1700typedef struct mdvSurface_s
1701{
1702 surfaceType_t surfaceType;
1703
1704 char name[MAX_QPATH]; // polyset name
1705
1706 int numShaderIndexes;
1707 int *shaderIndexes;
1708
1709 int numVerts;
1710 mdvVertex_t *verts;
1711 mdvSt_t *st;
1712
1713 int numIndexes;
1714 glIndex_t *indexes;
1715
1716 struct mdvModel_s *model;
1717} mdvSurface_t;
1718
1719typedef struct mdvModel_s
1720{
1721 int numFrames;
1722 mdvFrame_t *frames;
1723
1724 int numTags;
1725 mdvTag_t *tags;
1726 mdvTagName_t *tagNames;
1727
1728 int numSurfaces;
1729 mdvSurface_t *surfaces;
1730
1731 int numVaoSurfaces;
1732 srfVaoMdvMesh_t *vaoSurfaces;
1733
1734 int numSkins;
1735} mdvModel_t;
1736
1737
1738//======================================================================
1739
1740typedef enum {
1741 MOD_BAD,
1742 MOD_BRUSH,
1743 MOD_MESH,
1744 MOD_MDR,
1745 MOD_IQM,
1746
1747 //
1748 // OPENMOHAA-specific stuff
1749 //
1750 MOD_TIKI,
1751 MOD_SPRITE
1752} modtype_t;
1753
1754typedef struct model_s {
1755 char name[MAX_QPATH];
1756 modtype_t type;
1757 int index; // model = tr.models[model->index]
1758
1759 int dataSize; // just for listing purposes
1760 bmodel_t *bmodel; // only if type == MOD_BRUSH
1761 mdvModel_t *mdv[MD3_MAX_LODS]; // only if type == MOD_MESH
1762 void *modelData; // only if type == (MOD_MDR | MOD_IQM)
1763
1764 int numLods;
1765
1766 // OPENMOHAA-specific stuff
1767 union {
1768 dtiki_t* tiki;
1769 sprite_t* sprite;
1770 } d;
1771 qboolean serveronly;
1772} model_t;
1773
1774
1775#define MAX_MOD_KNOWN 1024
1776
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 );
1782
1783void R_Modellist_f (void);
1784
1785//====================================================
1786
1787#define MAX_DRAWIMAGES 2048
1788#define MAX_SKINS 1024
1789
1790
1791#define MAX_DRAWSURFS 0x10000
1792#define DRAWSURF_MASK (MAX_DRAWSURFS-1)
1793
1794/*
1795
1796the drawsurf sort data is packed into a single 32 bit value so it can be
1797compared quickly during the qsorting process
1798
1799the bits are allocated as follows:
1800
18010 - 1 : dlightmap index
1802//2 : used to be clipped flag REMOVED - 03.21.00 rad
18032 - 6 : fog index
180411 - 20 : entity index
180521 - 31 : sorted shader index
1806
1807 TTimo - 1.32
18080-1 : dlightmap index
18092-6 : fog index
18107-16 : entity index
181117-30 : sorted shader index
1812
1813 SmileTheory - for pshadows
181417-31 : sorted shader index
18157-16 : entity index
18162-6 : fog index
18171 : pshadow flag
18180 : dlight flag
1819*/
1820/*
1821#define QSORT_FOGNUM_SHIFT 2
1822#define QSORT_REFENTITYNUM_SHIFT 7
1823#define QSORT_SHADERNUM_SHIFT (QSORT_REFENTITYNUM_SHIFT+REFENTITYNUM_BITS)
1824*/
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."
1831#endif
1832#define QSORT_PSHADOW_SHIFT 1
1833
1834extern int gl_filter_min, gl_filter_max;
1835
1836/*
1837** performanceCounters_t
1838*/
1839typedef struct {
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;
1844
1845 int c_leafs;
1846 int c_dlightSurfaces;
1847 int c_dlightSurfacesCulled;
1849
1850#define FOG_TABLE_SIZE 256
1851#define FUNCTABLE_SIZE 1024
1852#define FUNCTABLE_SIZE2 10
1853#define FUNCTABLE_MASK (FUNCTABLE_SIZE-1)
1854
1855
1856// the renderer front end should never modify glstate_t
1857typedef struct {
1858 qboolean finishCalled;
1859 int texEnv[2];
1860 int faceCulling;
1861 int faceCullFront;
1862 uint32_t glStateBits;
1863 uint32_t storedGlState;
1864 float vertexAttribsInterpolation;
1865 qboolean vertexAnimation;
1866 int boneAnimation; // number of bones
1867 mat4_t boneMatrix[IQM_MAX_JOINTS];
1868 uint32_t vertexAttribsEnabled; // global if no VAOs, tess only otherwise
1869 FBO_t *currentFBO;
1870 vao_t *currentVao;
1871 mat4_t modelview;
1872 mat4_t projection;
1873 mat4_t modelviewProjection;
1874} glstate_t;
1875
1876typedef enum {
1877 MI_NONE,
1878 MI_NVX,
1879 MI_ATI
1880} memInfo_t;
1881
1882typedef enum {
1883 TCR_NONE = 0x0000,
1884 TCR_RGTC = 0x0001,
1885 TCR_BPTC = 0x0002,
1886} textureCompressionRef_t;
1887
1888// We can't change glConfig_t without breaking DLL/vms compatibility, so
1889// store extensions we have here.
1890typedef struct {
1891 qboolean intelGraphics;
1892
1893 qboolean occlusionQuery;
1894 GLenum occlusionQueryTarget;
1895
1896 int glslMajorVersion;
1897 int glslMinorVersion;
1898 int glslMaxAnimatedBones;
1899
1900 memInfo_t memInfo;
1901
1902 qboolean framebufferObject;
1903 int maxRenderbufferSize;
1904 int maxColorAttachments;
1905
1906 qboolean textureFloat;
1907 textureCompressionRef_t textureCompression;
1908 qboolean swizzleNormalmap;
1909
1910 qboolean framebufferMultisample;
1911 qboolean framebufferBlit;
1912
1913 qboolean depthClamp;
1914 qboolean seamlessCubeMap;
1915
1916 qboolean vertexArrayObject;
1917 qboolean directStateAccess;
1918
1919 int maxVertexAttribs;
1920 qboolean gpuVertexAnimation;
1921
1922 GLenum vaoCacheGlIndexType; // GL_UNSIGNED_INT or GL_UNSIGNED_SHORT
1923 size_t vaoCacheGlIndexSize; // must be <= sizeof( vaoCacheGlIndex_t )
1924
1925 // OpenGL ES extensions
1926 qboolean readDepth;
1927 qboolean readStencil;
1928 qboolean shadowSamplers;
1929 qboolean standardDerivatives;
1931
1932
1933typedef struct {
1934 int c_surfaces, c_shaders, c_vertexes, c_indexes, c_totalIndexes;
1935 int c_surfBatches;
1936 float c_overDraw;
1937
1938 int c_vaoBinds;
1939 int c_vaoVertexes;
1940 int c_vaoIndexes;
1941
1942 int c_staticVaoDraws;
1943 int c_dynamicVaoDraws;
1944
1945 int c_dlightVertexes;
1946 int c_dlightIndexes;
1947
1948 int c_flareAdds;
1949 int c_flareTests;
1950 int c_flareRenders;
1951
1952 int c_glslShaderBinds;
1953 int c_genericDraws;
1954 int c_lightallDraws;
1955 int c_fogDraws;
1956 int c_dlightDraws;
1957
1958 int msec; // total msec for backend run
1959
1960 //
1961 // OPENMOHAA-specific stuff
1962 //
1963
1964 int c_characterlights;
1966
1967// all state modified by the back end is separated
1968// from the front end state
1969typedef struct {
1970 trRefdef_t refdef;
1971 viewParms_t viewParms;
1972 orientationr_t or;
1974 qboolean isHyperspace;
1975 trRefEntity_t *currentEntity;
1976 qboolean skyRenderedThisView; // flag for drawing sun
1977
1978 qboolean projection2D; // if qtrue, drawstretchpic doesn't need to change modes
1979 byte color2D[4];
1980 qboolean vertexes2D; // shader needs to be finished
1981 trRefEntity_t entity2D; // currentEntity will point at this when doing 2D rendering
1982
1983 FBO_t *last2DFBO;
1984 qboolean colorMask[4];
1985 qboolean depthFill;
1986
1987 //
1988 // OPENMOHAA-specific stuff
1989 //
1990 sphereor_t spheres[MAX_SPHERE_LIGHTS];
1991 unsigned short numSpheresUsed;
1992 sphereor_t* currentSphere;
1993 sphereor_t spareSphere;
1994 sphereor_t hudSphere;
1995 cStaticModelUnpacked_t* currentStaticModel;
1996 float shaderStartTime;
1997 int dsStreamVert;
1999
2000/*
2001** trGlobals_t
2002**
2003** Most renderer globals are defined here.
2004** backend functions should never modify any of these fields,
2005** but may read fields that aren't dynamically modified
2006** by the frontend.
2007*/
2008typedef struct {
2009 qboolean registered; // cleared at shutdown, set at beginRegistration
2010
2011 int visIndex;
2012 int visClusters[MAX_VISCOUNTS];
2013 int visCounts[MAX_VISCOUNTS]; // incremented every time a new vis cluster is entered
2014
2015 int frameCount; // incremented every frame
2016 int sceneCount; // incremented every scene
2017 int viewCount; // incremented every view (twice a scene if portaled)
2018 // and every R_MarkFragments call
2019
2020 int frameSceneNum; // zeroed at RE_BeginFrame
2021
2022 qboolean worldMapLoaded;
2023 qboolean worldDeluxeMapping;
2024 vec2_t autoExposureMinMax;
2025 vec3_t toneMinAvgMaxLevel;
2026 world_t *world;
2027
2028 const byte *externalVisData; // from RE_SetWorldVisData, shared with CM_Load
2029
2030 image_t *defaultImage;
2031 image_t *scratchImage[32];
2032 image_t *fogImage;
2033 image_t *dlightImage; // inverse-quare highlight for projective adding
2034 image_t *flareImage;
2035 image_t *whiteImage; // full of 0xff
2036 image_t *identityLightImage; // full of tr.identityLightByte
2037
2038 image_t *shadowCubemaps[MAX_DLIGHTS];
2039
2040
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;
2056
2057 image_t *textureDepthImage;
2058
2059 FBO_t *renderFbo;
2060 FBO_t *msaaResolveFbo;
2061 FBO_t *sunRaysFbo;
2062 FBO_t *depthFbo;
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;
2072 FBO_t *hdrDepthFbo;
2073 FBO_t *renderCubeFbo;
2074
2075 shader_t *defaultShader;
2076 shader_t *shadowShader;
2077 shader_t *projectionShadowShader;
2078
2079 shader_t *flareShader;
2080 shader_t *sunShader;
2081 shader_t *sunFlareShader;
2082
2083 int numLightmaps;
2084 int lightmapSize;
2085 image_t **lightmaps;
2086 image_t **deluxemaps;
2087
2088 int fatLightmapCols;
2089 int fatLightmapRows;
2090
2091 int numCubemaps;
2092 cubemap_t *cubemaps;
2093
2094 trRefEntity_t *currentEntity;
2095 trRefEntity_t worldEntity; // point currentEntity at this when rendering world
2096 int currentEntityNum;
2097 int shiftedEntityNum; // currentEntityNum << QSORT_REFENTITYNUM_SHIFT
2098 model_t *currentModel;
2099
2100 //
2101 // GPU shader programs
2102 //
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;
2118
2119
2120 // -----------------------------------------
2121
2122 viewParms_t viewParms;
2123
2124 float identityLight; // 1.0 / ( 1 << overbrightBits )
2125 int identityLightByte; // identityLight * 255
2126 int overbrightBits; // r_overbrightBits->integer, but set to 0 if no hw gamma
2127
2128 orientationr_t or; // for current entity
2129
2130 trRefdef_t refdef;
2131
2132 int viewCluster;
2133
2134 float sunShadowScale;
2135
2136 qboolean sunShadows;
2137 vec3_t sunLight; // from the sky shader for this level
2138 vec3_t sunDirection;
2139 vec3_t lastCascadeSunDirection;
2140 float lastCascadeSunMvp[16];
2141
2143 int frontEndMsec; // not in pc due to clearing issue
2144
2145 //
2146 // put large tables at the end, so most elements will be
2147 // within the +/32K indexed range on risc processors
2148 //
2149 model_t *models[MAX_MOD_KNOWN];
2150 int numModels;
2151
2152 int numImages;
2153 image_t *images[MAX_DRAWIMAGES];
2154
2155 int numFBOs;
2156 FBO_t *fbos[MAX_FBOS];
2157
2158 int numVaos;
2159 vao_t *vaos[MAX_VAOS];
2160
2161 // shader indexes from other modules will be looked up in tr.shaders[]
2162 // shader indexes from drawsurfs will be looked up in sortedShaders[]
2163 // lower indexed sortedShaders must be rendered first (opaque surfaces before translucent)
2164 int numShaders;
2165 shader_t *shaders[MAX_SHADERS];
2166 shader_t *sortedShaders[MAX_SHADERS];
2167
2168 int numSkins;
2169 skin_t *skins[MAX_SKINS];
2170
2171 GLuint sunFlareQuery[2];
2172 int sunFlareQueryIndex;
2173 qboolean sunFlareQueryActive[2];
2174
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];
2181
2182 //
2183 // OPENMOHAA-specific stuff
2184 //
2185
2186 int currentSpriteNum;
2187 int shiftedIsStatic;
2188
2189 int overbrightShift;
2190 float overbrightMult;
2191
2192 portalsky_t portalsky;
2193 qboolean skyRendered;
2194 qboolean portalRendered;
2195
2196 spherel_t sSunLight;
2197 spherel_t sLights[1532];
2198 int numSLights;
2199 int rendererhandle;
2200 qboolean shadersParsed;
2201 int frame_skel_index;
2202 int skel_index[1024];
2203 fontheader_t* pFontDebugStrings;
2204 int farclip;
2205} trGlobals_t;
2206
2207extern backEndState_t backEnd;
2208extern trGlobals_t tr;
2209extern glstate_t glState; // outside of TR since it shouldn't be cleared during ref re-init
2210extern glRefConfig_t glRefConfig;
2211
2212//
2213// cvars
2214//
2215extern cvar_t *r_flareSize;
2216extern cvar_t *r_flareFade;
2217// coefficient for the flare intensity falloff function.
2218#define FLARE_STDCOEFF "150"
2219extern cvar_t *r_flareCoeff;
2220
2221extern cvar_t *r_railWidth;
2222extern cvar_t *r_railCoreWidth;
2223extern cvar_t *r_railSegmentLength;
2224
2225extern cvar_t *r_ignore; // used for debugging anything
2226extern cvar_t *r_verbose; // used for verbose debug spew
2227
2228extern cvar_t *r_znear; // near Z clip plane
2229extern cvar_t *r_zproj; // z distance of projection plane
2230extern cvar_t *r_stereoSeparation; // separation of cameras for stereo rendering
2231
2232extern cvar_t *r_measureOverdraw; // enables stencil buffer overdraw measurement
2233
2234extern cvar_t *r_lodbias; // push/pull LOD transitions
2235extern cvar_t *r_lodscale;
2236
2237extern cvar_t *r_inGameVideo; // controls whether in game video should be draw
2238extern cvar_t *r_fastsky; // controls whether sky should be cleared or drawn
2239extern cvar_t *r_drawSun; // controls drawing of sun quad
2240extern cvar_t *r_dynamiclight; // dynamic lights enabled/disabled
2241extern cvar_t *r_dlightBacks; // dlight non-facing surfaces for continuity
2242
2243extern cvar_t *r_norefresh; // bypasses the ref rendering
2244extern cvar_t *r_drawentities; // disable/enable entity rendering
2245extern cvar_t *r_drawworld; // disable/enable world rendering
2246extern cvar_t *r_speeds; // various levels of information display
2247extern cvar_t *r_detailTextures; // enables/disables detail texturing stages
2248extern cvar_t *r_novis; // disable/enable usage of PVS
2249extern cvar_t *r_nocull;
2250extern cvar_t *r_facePlaneCull; // enables culling of planar surfaces with back side test
2251extern cvar_t *r_nocurves;
2252extern cvar_t *r_showcluster;
2253
2254extern cvar_t *r_gamma;
2255extern cvar_t *r_displayRefresh; // optional display refresh option
2256
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;
2263
2264extern cvar_t *r_nobind; // turns off binding to appropriate textures
2265extern cvar_t *r_singleShader; // make most world faces use default shader
2266extern cvar_t *r_roundImagesDown;
2267extern cvar_t *r_colorMipLevels; // development aid to see texture mip usage
2268extern cvar_t *r_picmip; // controls picmip values
2269extern cvar_t *r_finish;
2270extern cvar_t *r_textureMode;
2271extern cvar_t *r_offsetFactor;
2272extern cvar_t *r_offsetUnits;
2273
2274extern cvar_t *r_fullbright; // avoid lightmap pass
2275extern cvar_t *r_lightmap; // render lightmaps only
2276extern cvar_t *r_vertexLight; // vertex lighting mode for better performance
2277extern cvar_t *r_uiFullScreen; // ui is running fullscreen
2278
2279extern cvar_t *r_logFile; // number of frames to emit GL logs
2280extern cvar_t *r_showtris; // enables wireframe rendering of the world
2281extern cvar_t *r_showsky; // forces sky in front of all surfaces
2282extern cvar_t *r_shownormals; // draws wireframe normals
2283extern cvar_t *r_clear; // force screen clear every frame
2284
2285extern cvar_t *r_shadows; // controls shadows: 0 = none, 1 = blur, 2 = stencil, 3 = black planar projection
2286extern cvar_t *r_flares; // light flares
2287
2288extern cvar_t *r_intensity;
2289
2290extern cvar_t *r_lockpvs;
2291extern cvar_t *r_noportals;
2292extern cvar_t *r_portalOnly;
2293
2294extern cvar_t *r_subdivisions;
2295extern cvar_t *r_lodCurveError;
2296extern cvar_t *r_skipBackEnd;
2297
2298extern cvar_t *r_anaglyphMode;
2299
2300extern cvar_t *r_externalGLSL;
2301
2302extern cvar_t *r_hdr;
2303extern cvar_t *r_floatLightmap;
2304extern cvar_t *r_postProcess;
2305
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;
2311
2312extern cvar_t *r_autoExposure;
2313extern cvar_t *r_forceAutoExposure;
2314extern cvar_t *r_forceAutoExposureMin;
2315extern cvar_t *r_forceAutoExposureMax;
2316
2317extern cvar_t *r_cameraExposure;
2318
2319extern cvar_t *r_depthPrepass;
2320extern cvar_t *r_ssao;
2321
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;
2358
2359extern cvar_t *r_greyscale;
2360
2361extern cvar_t *r_ignoreGLErrors;
2362
2363extern cvar_t *r_overBrightBits;
2364extern cvar_t *r_mapOverBrightBits;
2365
2366extern cvar_t *r_debugSurface;
2367extern cvar_t *r_simpleMipMaps;
2368
2369extern cvar_t *r_showImages;
2370extern cvar_t *r_debugSort;
2371
2372extern cvar_t *r_printShaders;
2373
2374extern cvar_t *r_marksOnTriangleMeshes;
2375
2376//
2377// OPENMOHAA-specific stuff
2378//=========================
2379
2380extern int r_sequencenumber;
2381
2382// DRAWING
2383
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;
2391
2392extern cvar_t *r_numdebuglines;
2393extern cvar_t *r_stipplelines;
2394extern cvar_t *r_debuglines_depthmask;
2395
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;
2402
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;
2412
2413// Lighting
2414
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;
2426
2427// LOD
2428
2429extern cvar_t* r_staticlod;
2430extern cvar_t* r_lodscale;
2431extern cvar_t* r_lodcap;
2432extern cvar_t* r_lodviewmodelcap;
2433
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;
2464
2465// UTILS
2466
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;
2474
2475//=========================
2476
2477//====================================================================
2478
2479static ID_INLINE qboolean ShaderRequiresCPUDeforms(const shader_t * shader)
2480{
2481 if(shader->numDeforms)
2482 {
2483 const deformStage_t *ds = &shader->deforms[0];
2484
2485 if (shader->numDeforms > 1)
2486 return qtrue;
2487
2488 switch (ds->deformation)
2489 {
2490 case DEFORM_WAVE:
2491 case DEFORM_BULGE:
2492 // need CPU deforms at high level-times to avoid floating point percision loss
2493 return ( backEnd.refdef.floatTime != (float)backEnd.refdef.floatTime );
2494
2495 default:
2496 return qtrue;
2497 }
2498 }
2499
2500 return qfalse;
2501}
2502
2503//====================================================================
2504
2505void R_SwapBuffers( int );
2506
2507void R_RenderView( viewParms_t *parms );
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 );
2512
2513void R_AddMD3Surfaces( trRefEntity_t *e );
2514void R_AddNullModelSurfaces( trRefEntity_t *e );
2515void R_AddBeamSurfaces( trRefEntity_t *e );
2516void R_AddRailSurfaces( trRefEntity_t *e, qboolean isUnderwater );
2517void R_AddLightningBoltSurfaces( trRefEntity_t *e );
2518
2519void R_AddPolygonSurfaces( void );
2520
2521void R_DecomposeSort( unsigned sort, int *entityNum, shader_t **shader,
2522 int *fogNum, int *dlightMap, int *pshadowMap, qboolean *bStaticModel );
2523
2524void R_AddDrawSurf( surfaceType_t *surface, shader_t *shader,
2525 int fogIndex, int dlightMap, int pshadowMap, int cubemap );
2526
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]);
2531
2532#define CULL_IN 0 // completely unclipped
2533#define CULL_CLIP 1 // clipped by one or more planes
2534#define CULL_OUT 2 // completely outside the clipping planes
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 );
2542
2543void R_SetupProjection(viewParms_t *dest, float zProj, float zFar, qboolean computeFrustum);
2544void R_RotateForEntity( const trRefEntity_t *ent, const viewParms_t *viewParms, orientationr_t *or );
2545
2546/*
2547** GL wrapper/helper functions
2548*/
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 );
2558
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
2569
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
2579
2580#define GLS_DEPTHMASK_TRUE 0x00000100
2581
2582#define GLS_POLYMODE_LINE 0x00001000
2583
2584#define GLS_DEPTHTEST_DISABLE 0x00010000
2585#define GLS_DEPTHFUNC_EQUAL 0x00020000
2586#define GLS_DEPTHFUNC_GREATER 0x00040000
2587#define GLS_DEPTHFUNC_BITS 0x00060000
2588
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
2593
2594#define GLS_DEFAULT GLS_DEPTHMASK_TRUE
2595
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);
2598
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 );
2606
2607qboolean R_GetEntityToken( char *buffer, int size );
2608
2609model_t *R_AllocModel( void );
2610
2611void R_Init( void );
2612void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height, GLenum picFormat );
2613
2614void R_SetColorMappings( void );
2615void R_GammaCorrect( byte *buffer, int bufSize );
2616
2617void R_ImageList_f( void );
2618void R_SkinList_f( void );
2619// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=516
2620const void *RB_TakeScreenshotCmd( const void *data );
2621void R_ScreenShot_f( void );
2622
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 );
2630
2631int R_ComputeLOD( trRefEntity_t *ent );
2632
2633const void *RB_TakeVideoFrameCmd( const void *data );
2634
2635//
2636// tr_shader.c
2637//
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);
2646
2647//
2648// OPENMOHAA-specific stuff
2649//=========================
2650
2651#define GLS_MULTITEXTURE 0x00004000
2652#define GLS_MULTITEXTURE_ENV 0x00008000
2653#define GLS_FOG 0x00080000
2654
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
2661
2662void R_RotateForStaticModel(cStaticModelUnpacked_t* SM, const viewParms_t* viewParms, orientationr_t* ori);
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);
2671
2672//
2673// tr_bsp.c
2674//
2675void RE_PrintBSPFileSizes(void);
2676int RE_MapVersion(void);
2677
2678//
2679// tr_cmds.c
2680//
2681void R_SavePerformanceCounters(void);
2682
2683//
2684// tr_main.c
2685//
2686
2687void R_AddSpriteSurfaces();
2688qboolean SurfIsOffscreen2(const srfBspSurface_t* surface, shader_t* shader, int entityNum);
2689
2690//
2691// tr_shader.c
2692//
2693qhandle_t RE_RefreshShaderNoMip(const char* name);
2694//=========================
2695
2696
2697/*
2698====================================================================
2699
2700IMPLEMENTATION SPECIFIC FUNCTIONS
2701
2702====================================================================
2703*/
2704
2705void GLimp_InitExtraExtensions( void );
2706
2707/*
2708====================================================================
2709
2710TESSELATOR/SHADER DECLARATIONS
2711
2712====================================================================
2713*/
2714
2715typedef struct stageVars
2716{
2717 color4ub_t colors[SHADER_MAX_VERTEXES];
2718 vec2_t texcoords[NUM_TEXTURE_BUNDLES][SHADER_MAX_VERTEXES];
2719} stageVars_t;
2720
2721typedef struct shaderCommands_s
2722{
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);
2731 //int vertexDlightBits[SHADER_MAX_VERTEXES] QALIGN(16);
2732
2733 void *attribPointers[ATTR_INDEX_COUNT];
2734 vao_t *vao;
2735 qboolean useInternalVao;
2736 qboolean useCacheVao;
2737
2738 stageVars_t svars QALIGN(16);
2739
2740 //color4ub_t constantColor255[SHADER_MAX_VERTEXES] QALIGN(16);
2741
2742 shader_t *shader;
2743 double shaderTime;
2744 int fogNum;
2745 int cubemapIndex;
2746
2747 int dlightBits; // or together of all vertexDlightBits
2748 int pshadowBits;
2749
2750 int firstIndex;
2751 int numIndexes;
2752 int numVertexes;
2753
2754 // info extracted from current shader
2755 int numPasses;
2756 void (*currentStageIteratorFunc)( void );
2757 shaderStage_t **xstages;
2758
2759 //
2760 // OPENMOHAA-specific stuff
2761 //
2762
2763 qboolean no_global_fog;
2764} shaderCommands_t;
2765
2766extern shaderCommands_t tess;
2767
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);}
2772
2773void R_DrawElements( int numIndexes, int firstIndex );
2774void RB_StageIteratorGeneric( void );
2775void RB_StageIteratorSky( void );
2776void RB_StageIteratorVertexLitTexture( void );
2777void RB_StageIteratorLightmappedMultitexture( void );
2778
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] );
2782//void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4], vec4_t color, shaderProgram_t *sp, vec2_t invTexRes);
2783void RB_InstantQuad2(vec4_t quadVerts[4], vec2_t texCoords[4]);
2784
2785void RB_ShowImages( void );
2786
2787
2788/*
2789============================================================
2790
2791WORLD MAP
2792
2793============================================================
2794*/
2795
2796void R_AddBrushModelSurfaces(trRefEntity_t* e);
2797void R_AddWorldSurfaces(void);
2798qboolean R_inPVS( const vec3_t p1, const vec3_t p2 );
2799mnode_t* R_PointInLeaf(const vec3_t p);
2800
2801
2802/*
2803============================================================
2804
2805FLARES
2806
2807============================================================
2808*/
2809
2810void R_ClearFlares( void );
2811
2812void RB_AddFlare( void *surface, int fogNum, vec3_t point, vec3_t color, vec3_t normal );
2813void RB_AddDlightFlares( void );
2814void RB_RenderFlares (void);
2815
2816/*
2817============================================================
2818
2819LIGHTS
2820
2821============================================================
2822*/
2823
2824void R_DlightBmodel( bmodel_t *bmodel );
2825void R_SetupEntityLighting( const trRefdef_t *refdef, trRefEntity_t *ent );
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 );
2830
2831/*
2832============================================================
2833
2834SHADOWS
2835
2836============================================================
2837*/
2838
2839void RB_ShadowTessEnd( void );
2840void RB_ShadowFinish( void );
2841void RB_ProjectionShadowDeform( void );
2842
2843/*
2844============================================================
2845
2846SKIES
2847
2848============================================================
2849*/
2850
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 );
2856
2857/*
2858============================================================
2859
2860CURVE TESSELATION
2861
2862============================================================
2863*/
2864
2865#define PATCH_STITCHING
2866
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 );
2871
2872/*
2873============================================================
2874
2875MARKERS, POLYGON PROJECTION ON WORLD POLYGONS
2876
2877============================================================
2878*/
2879
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);
2882
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);
2886
2887
2888/*
2889============================================================
2890
2891VERTEX BUFFER OBJECTS
2892
2893============================================================
2894*/
2895
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);
2901
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);
2904
2905void R_BindVao(vao_t *vao);
2906void R_BindNullVao(void);
2907
2908void Vao_SetVertexPointers(vao_t *vao);
2909
2910void R_InitVaos(void);
2911void R_ShutdownVaos(void);
2912void R_VaoList_f(void);
2913
2914void RB_UpdateTessVao(unsigned int attribBits);
2915
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);
2925
2926/*
2927============================================================
2928
2929GLSL
2930
2931============================================================
2932*/
2933
2934void GLSL_InitGPUShaders(void);
2935void GLSL_ShutdownGPUShaders(void);
2936void GLSL_VertexAttribPointers(uint32_t attribBits);
2937void GLSL_BindProgram(shaderProgram_t * program);
2938
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, /*const*/ mat4_t *matrix, int numMatricies);
2947
2948shaderProgram_t *GLSL_GetGenericShaderProgram(int stage);
2949
2950/*
2951============================================================
2952
2953SCENE GENERATION
2954
2955============================================================
2956*/
2957
2958void R_InitNextFrame( void );
2959
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);
2969
2970/*
2971=============================================================
2972
2973UNCOMPRESSING BONES
2974
2975=============================================================
2976*/
2977
2978#define MC_BITS_X (16)
2979#define MC_BITS_Y (16)
2980#define MC_BITS_Z (16)
2981#define MC_BITS_VECT (16)
2982
2983#define MC_SCALE_X (1.0f/64)
2984#define MC_SCALE_Y (1.0f/64)
2985#define MC_SCALE_Z (1.0f/64)
2986
2987void MC_UnCompress(float mat[3][4],const unsigned char * comp);
2988
2989/*
2990=============================================================
2991
2992ANIMATED MODELS
2993
2994=============================================================
2995*/
2996
2997void R_MDRAddAnimSurfaces( trRefEntity_t *ent );
2998void RB_MDRSurfaceAnim( mdrSurface_t *surface );
2999qboolean R_LoadIQM (model_t *mod, void *buffer, int filesize, const char *name );
3000void R_AddIQMSurfaces( trRefEntity_t *ent );
3001void RB_IQMSurfaceAnim( surfaceType_t *surface );
3002void RB_IQMSurfaceAnimVao( srfVaoIQModel_t *surface );
3003int R_IQMLerpTag( orientation_t *tag, iqmData_t *data,
3004 int startFrame, int endFrame,
3005 float frac, const char *tagName );
3006
3007//
3008// OPENMOHAA-specific stuff
3009//=========================
3010
3011/*
3012=============================================================
3013
3014DRAWING
3015
3016=============================================================
3017*/
3018
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);
3031
3032/*
3033=============================================================
3034
3035FONT
3036
3037=============================================================
3038*/
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);
3046
3047/*
3048=============================================================
3049
3050GHOST
3051
3052=============================================================
3053*/
3054
3055void R_UpdateGhostTextures();
3056void R_SetGhostImage(const char* name, image_t* image);
3057void LoadGHOST(const char* name, byte** pic, int* width, int* height);
3058
3059/*
3060============================================================
3061
3062LIGHTS
3063
3064============================================================
3065*/
3066
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();
3071void RB_SetupStaticModelGridLighting(trRefdef_t* refdef, cStaticModelUnpacked_t* ent, const vec3_t lightOrigin);
3072
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);
3081
3082extern suninfo_t s_sun;
3083
3084/*
3085=============================================================
3086
3087MARKS
3088
3089=============================================================
3090*/
3091void R_LevelMarksLoad(const char* szBSPName);
3092void R_LevelMarksInit();
3093void R_LevelMarksFree();
3094void R_UpdateLevelMarksSystem();
3095void R_AddPermanentMarkFragmentSurfaces(void** pFirstMarkFragment, int iNumMarkFragment);
3096
3097/*
3098============================================================
3099
3100SCENE
3101
3102============================================================
3103*/
3104
3105void RE_AddRefSpriteToScene(const refEntity_t* ent);
3106void RE_AddTerrainMarkToScene(int iTerrainIndex, qhandle_t hShader, int numVerts, const polyVert_t* verts, int renderfx);
3107refEntity_t* RE_GetRenderEntity(int entityNumber);
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);
3110
3111/*
3112============================================================
3113
3114SHADE CALC
3115
3116============================================================
3117*/
3118
3119void RB_CalcLightGridColor(unsigned char* colors);
3120
3121/*
3122=============================================================
3123
3124SKY PORTALS
3125
3126=============================================================
3127*/
3128void R_Sky_Init();
3129void R_Sky_Reset();
3130void R_Sky_AddSurf(msurface_t* surf);
3131void R_Sky_Render();
3132
3133/*
3134=============================================================
3135
3136SPRITE
3137
3138=============================================================
3139*/
3140sprite_t* SPR_RegisterSprite(const char* name);
3141void RB_DrawSprite(const refSprite_t* spr);
3142
3143
3144/*
3145=============================================================
3146
3147SUN FLARE
3148
3149=============================================================
3150*/
3151void R_InitLensFlare();
3152void R_DrawLensFlares();
3153
3154/*
3155=============================================================
3156
3157SWIPE
3158
3159=============================================================
3160*/
3161void RB_DrawSwipeSurface(surfaceType_t* pswipe);
3162void RE_SwipeBegin(float thistime, float life, qhandle_t shader);
3163void RE_SwipeEnd();
3164void R_AddSwipeSurfaces();
3165
3166/*
3167=============================================================
3168
3169TERRAIN
3170
3171=============================================================
3172*/
3173
3174extern terraTri_t* g_pTris;
3175extern terrainVert_t* g_pVert;
3176
3177void R_MarkTerrainPatch(cTerraPatchUnpacked_t* pPatch);
3178void R_AddTerrainSurfaces();
3179void R_AddTerrainMarkSurfaces();
3180void R_InitTerrain();
3181void R_ShutdownTerrain();
3182void R_TerrainFree();
3183void R_TerrainPrepareFrame();
3184qboolean R_TerrainHeightForPoly(cTerraPatchUnpacked_t* pPatch, polyVert_t* pVerts, int nVerts);
3185void R_SwapTerraPatch(cTerraPatch_t* pPatch);
3186
3187void R_TerrainCrater_f(void);
3188
3189/*
3190=============================================================
3191
3192TIKI
3193
3194=============================================================
3195*/
3196struct skelHeaderGame_s;
3197struct skelAnimFrame_s;
3198
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);
3204orientation_t RE_TIKI_Orientation(refEntity_t* model, int tagnum);
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);
3209
3210float R_GetRadius(refEntity_t* model);
3211void R_GetFrame(refEntity_t* model, struct skelAnimFrame_s* newFrame);
3212void RE_ForceUpdatePose(refEntity_t* model);
3213void RE_SetFrameNumber(int frameNumber);
3214void R_UpdatePoseInternal(refEntity_t* model);
3215void RB_SkelMesh(skelSurfaceGame_t* sf);
3216void RB_StaticMesh(staticSurface_t* staticSurf);
3217void RB_Static_BuildDLights();
3218void R_InfoStaticModels_f(void);
3219void R_PrintInfoStaticModels();
3220void R_AddSkelSurfaces(trRefEntity_t* ent);
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);
3225int GetToolLodCutoff(struct skelHeaderGame_s* skelmodel, float lod_val);
3226void R_InfoWorldTris_f(void);
3227void R_PrintInfoWorldtris(void);
3228void R_DebugSkeleton(void);
3229
3230extern int g_nStaticSurfaces;
3231extern qboolean g_bInfostaticmodels;
3232extern qboolean g_bInfoworldtris;
3233
3234/*
3235=============================================================
3236
3237UTIL
3238
3239=============================================================
3240*/
3241
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);
3264
3265/*
3266============================================================
3267
3268WORLD MAP
3269
3270============================================================
3271*/
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);
3275int R_CheckDlightTerrain(cTerraPatchUnpacked_t* surf, int dlightBits);
3276
3277void R_AddSpriteSurfCmd(drawSurf_t* drawSurfs, int numDrawSurfs);
3278
3279//=========================
3280
3281/*
3282=============================================================
3283=============================================================
3284*/
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 );
3288
3289void RB_DeformTessGeometry( void );
3290
3291void RB_CalcFogTexCoords( float *dstTexCoords );
3292
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 );
3299
3300void RB_CalcModulateColorsByFog( unsigned char *dstColors );
3301float RB_CalcWaveAlphaSingle( const waveForm_t *wf );
3302float RB_CalcWaveColorSingle( const waveForm_t *wf );
3303
3304/*
3305=============================================================
3306
3307RENDERER BACK END FUNCTIONS
3308
3309=============================================================
3310*/
3311
3312void RB_ExecuteRenderCommands( const void *data );
3313
3314/*
3315=============================================================
3316
3317RENDERER BACK END COMMAND QUEUE
3318
3319=============================================================
3320*/
3321
3322#define MAX_RENDER_COMMANDS 0x40000
3323
3324typedef struct {
3325 byte cmds[MAX_RENDER_COMMANDS];
3326 int used;
3328
3329typedef struct {
3330 int commandId;
3331 float color[4];
3333
3334typedef struct {
3335 int commandId;
3336 int buffer;
3338
3339typedef struct {
3340 int commandId;
3341 image_t *image;
3342 int width;
3343 int height;
3344 void *data;
3346
3347typedef struct {
3348 int commandId;
3350
3351typedef struct {
3352 int commandId;
3353 int buffer;
3355
3356typedef struct {
3357 int commandId;
3358 shader_t *shader;
3359 float x, y;
3360 float w, h;
3361 float s1, t1;
3362 float s2, t2;
3364
3365typedef struct {
3366 int commandId;
3367 trRefdef_t refdef;
3368 viewParms_t viewParms;
3369 drawSurf_t *drawSurfs;
3370 int numDrawSurfs;
3372
3373typedef struct {
3374 int commandId;
3375 int x;
3376 int y;
3377 int width;
3378 int height;
3379 char *fileName;
3380 qboolean jpeg;
3382
3383typedef struct {
3384 int commandId;
3385 int width;
3386 int height;
3387 byte *captureBuffer;
3388 byte *encodeBuffer;
3389 qboolean motionJpeg;
3391
3392typedef struct
3393{
3394 int commandId;
3395
3396 GLboolean rgba[4];
3398
3399typedef struct
3400{
3401 int commandId;
3403
3404typedef struct {
3405 int commandId;
3406 int map;
3407 int cubeSide;
3409
3410typedef struct {
3411 int commandId;
3412 trRefdef_t refdef;
3413 viewParms_t viewParms;
3415
3416typedef struct {
3417 int commandId;
3419
3420typedef enum {
3421 RC_END_OF_LIST,
3422 RC_SET_COLOR,
3423 RC_STRETCH_PIC,
3424 RC_DRAW_SURFS,
3425 RC_DRAW_BUFFER,
3426 RC_SWAP_BUFFERS,
3427 RC_SCREENSHOT,
3428 RC_VIDEOFRAME,
3429 RC_COLORMASK,
3430 RC_CLEARDEPTH,
3431 RC_CAPSHADOWMAP,
3432 RC_POSTPROCESS,
3433 RC_EXPORT_CUBEMAPS,
3434
3435 //
3436 // OPENMOHAA-specific stuff
3437 //
3438
3439 RC_SPRITE_SURFS,
3440} renderCommand_t;
3441
3442
3443// these are sort of arbitrary limits.
3444// the limits apply to the sum of all scenes in a frame --
3445// the main view, all the 3D icons, etc
3446#define MAX_POLYS 600
3447#define MAX_POLYVERTS 3000
3448#define MAX_TERMARKS 1024
3449
3450// all of the information needed by the back end must be
3451// contained in a backEndData_t
3452typedef struct {
3453 drawSurf_t drawSurfs[MAX_DRAWSURFS];
3454 dlight_t dlights[MAX_DLIGHTS];
3455 trRefEntity_t entities[MAX_REFENTITIES];
3456 srfPoly_t *polys;//[MAX_POLYS];
3457 polyVert_t *polyVerts;//[MAX_POLYVERTS];
3458 pshadow_t pshadows[MAX_CALC_PSHADOWS];
3459 renderCommandList_t commands;
3460
3461 //
3462 // OPENMOHAA-specific stuff
3463 //
3464 drawSurf_t spriteSurfs[MAX_SPRITESURFS];
3465 srfMarkFragment_t* terMarks;
3466 refSprite_t sprites[2048];
3467 cStaticModelUnpacked_t* staticModels;
3468 byte* staticModelData;
3470
3471extern int max_polys;
3472extern int max_polyverts;
3473
3474extern backEndData_t *backEndData; // the second one may not be allocated
3475
3476
3477void *R_GetCommandBuffer( int bytes );
3478void RB_ExecuteRenderCommands( const void *data );
3479
3480void R_IssuePendingRenderCommands( void );
3481
3482void R_AddDrawSurfCmd( drawSurf_t *drawSurfs, int numDrawSurfs );
3483void R_AddCapShadowmapCmd( int dlight, int cubeSide );
3484void R_AddPostProcessCmd (void);
3485
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 );
3497
3498void R_ConvertTextureFormat( const byte *in, int width, int height, GLenum format, GLenum type, byte *out );
3499
3500#ifdef __cplusplus
3501}
3502#endif
3503
3504#endif //TR_LOCAL_H
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:409
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 qfiles.h:543
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 tr_local.h:1165
Definition q_shared.h:1493
Definition qfiles.h:275
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_types.h:67
Definition tr_local.h:105
Definition tr_local.h:3410
Definition tr_local.h:1472
Definition tr_local.h:126
Definition tr_types.h:95
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 skeletor.h:42
Definition tiki_shared.h:257
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:379
Definition tr_local.h:1082
Definition navigation_bsp.h:213