]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake2/extra/bsp/qrad3/qrad.h
Q2Tools source - didn't import this in initially
[xonotic/netradiant.git] / tools / quake2 / extra / bsp / qrad3 / qrad.h
diff --git a/tools/quake2/extra/bsp/qrad3/qrad.h b/tools/quake2/extra/bsp/qrad3/qrad.h
new file mode 100644 (file)
index 0000000..6702546
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+===========================================================================
+Copyright (C) 1997-2006 Id Software, Inc.
+
+This file is part of Quake 2 Tools source code.
+
+Quake 2 Tools source code is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the License,
+or (at your option) any later version.
+
+Quake 2 Tools source code is distributed in the hope that it will be
+useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Quake 2 Tools source code; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+===========================================================================
+*/
+
+#include "cmdlib.h"
+#include "mathlib.h"
+#include "bspfile.h"
+#include "polylib.h"
+#include "threads.h"
+#include "lbmlib.h"
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+typedef enum
+{
+       emit_surface,
+       emit_point,
+       emit_spotlight
+} emittype_t;
+
+
+
+typedef struct directlight_s
+{
+       struct directlight_s *next;
+       emittype_t      type;
+
+       float           intensity;
+       int                     style;
+       vec3_t          origin;
+       vec3_t          color;
+       vec3_t          normal;         // for surfaces and spotlights
+       float           stopdot;                // for spotlights
+} directlight_t;
+
+
+// the sum of all tranfer->transfer values for a given patch
+// should equal exactly 0x10000, showing that all radiance
+// reaches other patches
+typedef struct
+{
+       unsigned short  patch;
+       unsigned short  transfer;
+} transfer_t;
+
+
+#define        MAX_PATCHES     65000                   // larger will cause 32 bit overflows
+
+typedef struct patch_s
+{
+       winding_t       *winding;
+       struct patch_s          *next;          // next in face
+       int                     numtransfers;
+       transfer_t      *transfers;
+
+       int                     cluster;                        // for pvs checking
+       vec3_t          origin;
+       dplane_t        *plane;
+
+       qboolean        sky;
+
+       vec3_t          totallight;                     // accumulated by radiosity
+                                                                       // does NOT include light
+                                                                       // accounted for by direct lighting
+       float           area;
+
+       // illuminance * reflectivity = radiosity
+       vec3_t          reflectivity;
+       vec3_t          baselight;                      // emissivity only
+
+       // each style 0 lightmap sample in the patch will be
+       // added up to get the average illuminance of the entire patch
+       vec3_t          samplelight;
+       int                     samples;                // for averaging direct light
+} patch_t;
+
+extern patch_t         *face_patches[MAX_MAP_FACES];
+extern entity_t        *face_entity[MAX_MAP_FACES];
+extern vec3_t          face_offset[MAX_MAP_FACES];             // for rotating bmodels
+extern patch_t         patches[MAX_PATCHES];
+extern unsigned        num_patches;
+
+extern int             leafparents[MAX_MAP_LEAFS];
+extern int             nodeparents[MAX_MAP_NODES];
+
+extern float   lightscale;
+
+
+void MakeShadowSplits (void);
+
+//==============================================
+
+
+void BuildVisMatrix (void);
+qboolean CheckVisBit (unsigned p1, unsigned p2);
+
+//==============================================
+
+extern float ambient, maxlight;
+
+void LinkPlaneFaces (void);
+
+extern qboolean        extrasamples;
+extern int numbounce;
+
+extern directlight_t   *directlights[MAX_MAP_LEAFS];
+
+extern byte    nodehit[MAX_MAP_NODES];
+
+void BuildLightmaps (void);
+
+void BuildFacelights (int facenum);
+
+void FinalLightFace (int facenum);
+
+qboolean PvsForOrigin (vec3_t org, byte *pvs);
+
+int TestLine_r (int node, vec3_t start, vec3_t stop);
+
+void CreateDirectLights (void);
+
+dleaf_t                *PointInLeaf (vec3_t point);
+
+
+extern dplane_t        backplanes[MAX_MAP_PLANES];
+extern int                     fakeplanes;                                     // created planes for origin offset 
+
+extern float   subdiv;
+
+extern float   direct_scale;
+extern float   entity_scale;
+
+int    PointInLeafnum (vec3_t point);
+void MakeTnodes (dmodel_t *bm);
+void MakePatches (void);
+void SubdividePatches (void);
+void PairEdges (void);
+void CalcTextureReflectivity (void);