123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #ifndef HLBSP_H__
- #define HLBSP_H__
- #if _MSC_VER >= 1000
- #pragma once
- #endif
- #include "cmdlib.h"
- #include "messages.h"
- #include "win32fix.h"
- #include "log.h"
- #include "hlassert.h"
- #include "mathlib.h"
- #include "bspfile.h"
- #include "blockmem.h"
- #include "filelib.h"
- #include "threads.h"
- #include "winding.h"
- #define ENTITIES_VOID "entities.void"
- #define ENTITIES_VOID_EXT ".void"
- #define BOGUS_RANGE 18000
- // the exact bounding box of the brushes is expanded some for the headnode
- // volume. is this still needed?
- #define SIDESPACE 24
- //============================================================================
- #define MIN_SUBDIVIDE_SIZE 64
- #ifdef ZHLT_GENERAL
- #define MAX_SUBDIVIDE_SIZE 512
- #else
- #define MAX_SUBDIVIDE_SIZE 240
- #endif
- #define DEFAULT_SUBDIVIDE_SIZE 240
- #define MIN_MAXNODE_SIZE 64
- #define MAX_MAXNODE_SIZE 8192
- #define DEFAULT_MAXNODE_SIZE 1024
- #define DEFAULT_NOFILL false
- #define DEFAULT_NOTJUNC false
- #define DEFAULT_NOCLIP false
- #define DEFAULT_NOOPT false
- #define DEFAULT_LEAKONLY false
- #define DEFAULT_WATERVIS false
- #define DEFAULT_CHART false
- #define DEFAULT_INFO true
- #ifdef ZHLT_NULLTEX // AJM
- #define DEFAULT_NULLTEX true
- #endif
- #ifdef ZHLT_PROGRESSFILE // AJM
- #define DEFAULT_PROGRESSFILE NULL // progress file is only used if g_progressfile is non-null
- #endif
- #ifdef SYSTEM_WIN32
- #define DEFAULT_ESTIMATE false
- #endif
- #ifdef SYSTEM_POSIX
- #define DEFAULT_ESTIMATE true
- #endif
- #ifdef ZHLT_DETAIL // AJM
- #define DEFAULT_DETAIL true
- #endif
- #define MAXEDGES 48 // 32
- #define MAXPOINTS 28 // don't let a base face get past this
- // because it can be split more later
- #define MAXNODESIZE 1024 // Valve default is 1024
- typedef enum
- {
- face_normal = 0,
- face_hint,
- face_skip,
- #ifdef ZHLT_NULLTEX // AJM
- face_null,
- #endif
- #ifdef ZHLT_DETAIL // AJM
- face_detail
- #endif
- //face_blocklight
- }
- facestyle_e;
- typedef struct face_s // This structure is layed out so 'pts' is on a quad-word boundary (and the pointers are as well)
- {
- struct face_s* next;
- int planenum;
- int texturenum;
- int contents; // contents in front of face
- struct face_s* original; // face on node
- int outputnumber; // only valid for original faces after write surfaces
- int numpoints;
- facestyle_e facestyle;
- // vector quad word aligned
- vec3_t pts[MAXEDGES]; // FIXME: change to use winding_t
- }
- face_t;
- typedef struct surface_s
- {
- struct surface_s* next;
- int planenum;
- vec3_t mins, maxs;
- struct node_s* onnode; // true if surface has already been used
- // as a splitting node
- face_t* faces; // links to all the faces on either side of the surf
- }
- surface_t;
- typedef struct
- {
- vec3_t mins, maxs;
- surface_t* surfaces;
- }
- surfchain_t;
- //
- // there is a node_t structure for every node and leaf in the bsp tree
- //
- #define PLANENUM_LEAF -1
- typedef struct node_s
- {
- surface_t* surfaces;
- vec3_t mins, maxs; // bounding volume of portals;
- // information for decision nodes
- int planenum; // -1 = leaf node
- struct node_s* children[2]; // only valid for decision nodes
- face_t* faces; // decision nodes only, list for both sides
- // information for leafs
- int contents; // leaf nodes (0 for decision nodes)
- face_t** markfaces; // leaf nodes only, point to node faces
- struct portal_s* portals;
- int visleafnum; // -1 = solid
- int valid; // for flood filling
- int occupied; // light number in leaf for outside filling
- }
- node_t;
- #define NUM_HULLS 4
- //=============================================================================
- // solidbsp.c
- extern void SubdivideFace(face_t* f, face_t** prevptr);
- extern node_t* SolidBSP(const surfchain_t* const surfhead, bool report_progress);
- //=============================================================================
- // merge.c
- extern void MergePlaneFaces(surface_t* plane);
- extern void MergeAll(surface_t* surfhead);
- //=============================================================================
- // surfaces.c
- extern void MakeFaceEdges();
- extern int GetEdge(const vec3_t p1, const vec3_t p2, face_t* f);
- //=============================================================================
- // portals.c
- typedef struct portal_s
- {
- dplane_t plane;
- node_t* onnode; // NULL = outside box
- node_t* nodes[2]; // [0] = front side of plane
- struct portal_s* next[2];
- Winding* winding;
- }
- portal_t;
- extern node_t g_outside_node; // portals outside the world face this
- extern void AddPortalToNodes(portal_t* p, node_t* front, node_t* back);
- extern void RemovePortalFromNode(portal_t* portal, node_t* l);
- extern void MakeHeadnodePortals(node_t* node, const vec3_t mins, const vec3_t maxs);
- extern void FreePortals(node_t* node);
- extern void WritePortalfile(node_t* headnode);
- //=============================================================================
- // tjunc.c
- void tjunc(node_t* headnode);
- //=============================================================================
- // writebsp.c
- extern void WriteClipNodes(node_t* headnode);
- extern void WriteDrawNodes(node_t* headnode);
- extern void BeginBSPFile();
- extern void FinishBSPFile();
- //=============================================================================
- // outside.c
- extern node_t* FillOutside(node_t* node, bool leakfile, unsigned hullnum);
- extern void LoadAllowableOutsideList(const char* const filename);
- extern void FreeAllowableOutsideList();
- //=============================================================================
- // misc functions
- extern void GetParamsFromEnt(entity_t* mapent);
- extern face_t* AllocFace();
- extern void FreeFace(face_t* f);
- extern struct portal_s* AllocPortal();
- extern void FreePortal(struct portal_s* p);
- extern surface_t* AllocSurface();
- extern void FreeSurface(surface_t* s);
- extern node_t* AllocNode();
- extern bool CheckFaceForHint(const face_t* const f);
- extern bool CheckFaceForSkip(const face_t* const f);
- #ifdef ZHLT_NULLTEX// AJM
- extern bool CheckFaceForNull(const face_t* const f);
- #endif
- // =====================================================================================
- //Cpt_Andrew - UTSky Check
- // =====================================================================================
- extern bool CheckFaceForEnv_Sky(const face_t* const f);
- // =====================================================================================
- #ifdef ZHLT_DETAIL // AJM
- extern bool CheckFaceForDetail(const face_t* const f);
- #endif
- //=============================================================================
- // cull.c
- extern void CullStuff();
- //=============================================================================
- // qbsp.c
- extern bool g_nofill;
- extern bool g_notjunc;
- extern bool g_watervis;
- extern bool g_chart;
- extern bool g_estimate;
- extern int g_maxnode_size;
- extern int g_subdivide_size;
- extern int g_hullnum;
- extern bool g_bLeakOnly;
- extern bool g_bLeaked;
- extern char g_portfilename[_MAX_PATH];
- extern char g_pointfilename[_MAX_PATH];
- extern char g_linefilename[_MAX_PATH];
- extern char g_bspfilename[_MAX_PATH];
- #ifdef ZHLT_DETAIL // AJM
- extern bool g_bDetailBrushes;
- #endif
- #ifdef ZHLT_NULLTEX // AJM
- extern bool g_bUseNullTex;
- #endif
- extern face_t* NewFaceFromFace(const face_t* const in);
- extern void SplitFace(face_t* in, const dplane_t* const split, face_t** front, face_t** back);
- #endif // qbsp.c====================================================================== HLBSP_H__
|