]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - tools/quake2/q2map/qrad.h
d8e3791e73767a78174a180a3ec37e209f7139c3
[xonotic/netradiant.git] / tools / quake2 / q2map / qrad.h
1 /*
2    Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3    For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21 /* Files:
22
23    lightmap.c
24    patches.c
25    qrad.c
26    trace.c
27
28  */
29
30
31 #include "cmdlib.h"
32 #include "mathlib.h"
33 #include "bspfile.h"
34 #include "polylib.h"
35 #include "q2_threads.h"
36 #include "lbmlib.h"
37 #include "inout.h"
38
39 #ifdef WIN32
40 #include <windows.h>
41 #endif
42
43 #ifdef WIN32
44         #ifdef NDEBUG                           // Don't show in a Release build
45                 #pragma warning(disable : 4305)     // truncate from double to float
46                 #pragma warning(disable : 4244)     // conversion from double to float
47                 #pragma warning(disable : 4018)     // signed/unsigned mismatch
48         #endif
49 #endif
50
51 typedef enum
52 {
53         emit_surface,
54         emit_point,
55         emit_spotlight
56 } emittype_t;
57
58
59
60 typedef struct directlight_s
61 {
62         struct directlight_s *next;
63         emittype_t type;
64
65         float intensity;
66         int style;
67         vec3_t origin;
68         vec3_t color;
69         vec3_t normal;          // for surfaces and spotlights
70         float stopdot;              // for spotlights
71 } directlight_t;
72
73
74 // the sum of all tranfer->transfer values for a given patch
75 // should equal exactly 0x10000, showing that all radiance
76 // reaches other patches
77 typedef struct
78 {
79         unsigned short patch;
80         unsigned short transfer;
81 } transfer_t;
82
83
84 #define MAX_PATCHES 65000           // larger will cause 32 bit overflows
85
86 typedef struct patch_s
87 {
88         winding_t   *winding;
89         struct patch_s      *next;      // next in face
90         int numtransfers;
91         transfer_t  *transfers;
92
93         int cluster;                    // for pvs checking
94         vec3_t origin;
95         dplane_t    *plane;
96
97         qboolean sky;
98
99         vec3_t totallight;              // accumulated by radiosity
100                                         // does NOT include light
101                                         // accounted for by direct lighting
102         float area;
103
104         // illuminance * reflectivity = radiosity
105         vec3_t reflectivity;
106         vec3_t baselight;               // emissivity only
107
108         // each style 0 lightmap sample in the patch will be
109         // added up to get the average illuminance of the entire patch
110         vec3_t samplelight;
111         int samples;                // for averaging direct light
112 } patch_t;
113
114 extern patch_t     *face_patches[MAX_MAP_FACES];
115 extern entity_t    *face_entity[MAX_MAP_FACES];
116 extern vec3_t face_offset[MAX_MAP_FACES];           // for rotating bmodels
117 extern patch_t patches[MAX_PATCHES];
118 extern unsigned num_patches;
119
120 extern int leafparents[MAX_MAP_LEAFS];
121 extern int nodeparents[MAX_MAP_NODES];
122
123 extern float lightscale;
124
125
126 void MakeShadowSplits( void );
127
128 //==============================================
129
130
131 void BuildVisMatrix( void );
132 qboolean CheckVisBit( unsigned p1, unsigned p2 );
133
134 //==============================================
135
136 extern float ambient, maxlight;
137
138 void LinkPlaneFaces( void );
139
140 extern qboolean extrasamples;
141 extern int numbounce;
142
143 extern directlight_t   *directlights[MAX_MAP_LEAFS];
144
145 extern byte nodehit[MAX_MAP_NODES];
146
147 void BuildLightmaps( void );
148
149 void BuildFacelights( int facenum );
150
151 void FinalLightFace( int facenum );
152
153 qboolean PvsForOrigin( vec3_t org, byte *pvs );
154
155 int TestLine_r( int node, vec3_t start, vec3_t stop );
156
157 void CreateDirectLights( void );
158
159 dleaf_t     *Rad_PointInLeaf( vec3_t point );
160
161
162 extern dplane_t backplanes[MAX_MAP_PLANES];
163 extern int fakeplanes;                          // created planes for origin offset
164
165 extern float subdiv;
166
167 extern float direct_scale;
168 extern float entity_scale;
169
170 int PointInLeafnum( vec3_t point );
171 void MakeTnodes( dmodel_t *bm );
172 void MakePatches( void );
173 void SubdividePatches( void );
174 void PairEdges( void );
175 void ( *CalcTextureReflectivity )( void );
176 void CalcTextureReflectivity_Quake2( void );
177 void CalcTextureReflectivity_Heretic2( void );
178
179 //=============================================================================
180
181 // externs
182
183 extern char *mapname;
184 extern char game[64];