diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
commit | 1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch) | |
tree | b361766433d4a7b4a111865afd52803e2bbf7754 /source/bsp.h | |
parent | e826e5f176f21cd18b3bbc22887a266835ada57c (diff) |
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems.
Refresh libraries may not longer be dynamically loaded.
Made gi.TagMalloc use separate tag namespace to avoid
conflicts with engine reserverd tags.
Fixed listing order of MVD channels in chooser menu.
A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/bsp.h')
-rw-r--r-- | source/bsp.h | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/source/bsp.h b/source/bsp.h new file mode 100644 index 0000000..5094220 --- /dev/null +++ b/source/bsp.h @@ -0,0 +1,274 @@ +/* +Copyright (C) 1997-2001 Id Software, Inc. +Copyright (C) 2008 Andrey Nazarov + +This program 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. + +This program 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 this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#include "d_bsp.h" + +#ifndef MIPLEVELS +#define MIPLEVELS 4 +#endif + +#define MAX_MAP_VIS ( MAX_MAP_LEAFS / 8 ) + +typedef struct mtexinfo_s { // used internally due to name len probs //ZOID + csurface_t c; + char name[MAX_TEXNAME]; + +#if USE_REF + vec3_t axis[2]; + vec2_t offset; + struct image_s *image; // used for texturing + int numframes; + struct mtexinfo_s *next; // used for animation +#if USE_REF == REF_SOFT + vec_t mipadjust; +#endif +#endif +} mtexinfo_t; + +#if USE_REF +typedef struct { + vec3_t point; +} mvertex_t; + +typedef struct { + mvertex_t *v[2]; +#if USE_REF == REF_SOFT + unsigned cachededgeoffset; +#endif +} medge_t; + +typedef struct { + medge_t *edge; + int vert; +} msurfedge_t; + +#define SURF_NOLM_MASK \ + (SURF_SKY|SURF_WARP|SURF_FLOWING|SURF_TRANS33|SURF_TRANS66) + +#define DSURF_PLANEBACK 1 + +typedef struct mface_s { + msurfedge_t *firstsurfedge; + int numsurfedges; + + cplane_t *plane; + int drawflags; // DSURF_PLANEBACK, etc + + byte *lightmap; +#if USE_REF == REF_SOFT + byte styles[MAX_LIGHTMAPS]; +#endif + + mtexinfo_t *texinfo; + int texturemins[2]; + int extents[2]; + +#if USE_REF == REF_GL + int texnum[2]; + int firstvert; +#else + struct surfcache_s *cachespots[MIPLEVELS]; // surface generation data +#endif + + int drawframe; + +#if USE_REF == REF_SOFT // && USE_DYNAMIC + int dlightframe; + int dlightbits; +#endif + struct mface_s *next; +} mface_t; +#endif + +typedef struct mnode_s { +/* ======> */ + cplane_t *plane; // never NULL to differentiate from leafs +#if USE_REF + union { + vec_t minmaxs[6]; + struct { + vec3_t mins; + vec3_t maxs; + }; + }; + + int visframe; +#endif + struct mnode_s *parent; +/* <====== */ + + struct mnode_s *children[2]; + +#if USE_REF + int numfaces; + mface_t *firstface; +#endif +} mnode_t; + +typedef struct { + cplane_t *plane; + mtexinfo_t *texinfo; +} mbrushside_t; + +typedef struct { + int contents; + int numsides; + mbrushside_t *firstbrushside; + int checkcount; // to avoid repeated testings +} mbrush_t; + +typedef struct { +/* ======> */ + cplane_t *plane; // always NULL to differentiate from nodes +#if USE_REF + vec3_t mins; + vec3_t maxs; + + int visframe; +#endif + struct mnode_s *parent; +/* <====== */ + + int contents; + int cluster; + int area; + mbrush_t **firstleafbrush; + int numleafbrushes; +#if USE_REF + mface_t **firstleafface; + int numleaffaces; +#if USE_REF == REF_SOFT + unsigned key; +#endif +#endif +} mleaf_t; + +typedef struct { + int numareaportals; + int firstareaportal; + int floodvalid; +} marea_t; + +typedef struct { + unsigned portalnum; + unsigned otherarea; +} mareaportal_t; + +typedef struct mmodel_s { +#if USE_REF +/* ======> */ + int type; +/* <====== */ +#endif + vec3_t mins, maxs; + vec3_t origin; // for sounds or lights + mnode_t *headnode; + +#if USE_REF + float radius; + + int numfaces; + mface_t *firstface; +#endif +} mmodel_t; + +typedef struct bsp_s { + list_t entry; + int refcount; + + unsigned checksum; + + mempool_t pool; + + int numbrushsides; + mbrushside_t *brushsides; + + int numtexinfo; + mtexinfo_t *texinfo; + + int numplanes; + cplane_t *planes; + + int numnodes; + mnode_t *nodes; + + int numleafs; + mleaf_t *leafs; + + int numleafbrushes; + mbrush_t **leafbrushes; + + int nummodels; + mmodel_t *models; + + int numbrushes; + mbrush_t *brushes; + + int numvisibility; + int visrowsize; + dvis_t *vis; + + int numentitychars; + char *entitystring; + + int numareas; + marea_t *areas; + + int numareaportals; + mareaportal_t *areaportals; + +#if USE_REF + int numfaces; + mface_t *faces; + + int numleaffaces; + mface_t **leaffaces; + + int numlightmapbytes; + byte *lightmap; + + int numvertices; + mvertex_t *vertices; + + int numedges; + medge_t *edges; + + int numsurfedges; + msurfedge_t *surfedges; +#endif + + char name[1]; +} bsp_t; + +bsp_t *BSP_Load( const char *name ); +void BSP_Free( bsp_t *bsp ); +const char *BSP_GetError( void ); + +#if USE_REF +mface_t *BSP_LightPoint( mnode_t *node, vec3_t start, vec3_t end, int *ps, int *pt ); +#endif +byte *BSP_ClusterVis( bsp_t *bsp, byte *mask, int cluster, int vis ); +mleaf_t *BSP_PointLeaf( mnode_t *node, vec3_t p ); +mmodel_t *BSP_InlineModel( bsp_t *bsp, const char *name ); + +void BSP_Init( void ); + + |