Add GL_ExtensionSupported in vid_null.c because vid_shared.c relies on
[xonotic/darkplaces.git] / model_brush.h
index 854faf5..9eae6ab 100644 (file)
@@ -48,11 +48,18 @@ mvertex_t;
 // plane_t structure
 typedef struct mplane_s
 {
-       vec3_t normal;
-       float dist;
+       union
+       {
+               struct
+               {
+                       vec3_t normal;
+                       vec_t dist;
+               };
+               vec4_t normal_and_dist;
+       };
        // for texture axis selection and fast side tests
-       int type;
-       int signbits;
+       int type; // set by PlaneClassify()
+       int signbits; // set by PlaneClassify()
 }
 mplane_t;
 
@@ -62,58 +69,74 @@ mplane_t;
 
 //#define SURF_PLANEBACK 2
 
+// indicates that all triangles of the surface should be added to the BIH collision system
+#define MATERIALFLAG_MESHCOLLISIONS 0x00000001
 // use alpha blend on this material
-#define MATERIALFLAG_ALPHA 2
+#define MATERIALFLAG_ALPHA 0x00000002
 // use additive blend on this material
-#define MATERIALFLAG_ADD 4
+#define MATERIALFLAG_ADD 0x00000004
 // turn off depth test on this material
-#define MATERIALFLAG_NODEPTHTEST 8
+#define MATERIALFLAG_NODEPTHTEST 0x00000008
 // multiply alpha by r_wateralpha cvar
-#define MATERIALFLAG_WATERALPHA 16
+#define MATERIALFLAG_WATERALPHA 0x00000010
 // draw with no lighting
-#define MATERIALFLAG_FULLBRIGHT 32
+#define MATERIALFLAG_FULLBRIGHT 0x00000020
 // drawn as a normal surface (alternative to SKY)
-#define MATERIALFLAG_WALL 64
+#define MATERIALFLAG_WALL 0x00000040
 // this surface shows the sky in its place, alternative to WALL
 // skipped if transparent
-#define MATERIALFLAG_SKY 128
+#define MATERIALFLAG_SKY 0x00000080
 // swirling water effect (used with MATERIALFLAG_WALL)
-#define MATERIALFLAG_WATERSCROLL 256
+#define MATERIALFLAG_WATERSCROLL 0x00000100
 // skips drawing the surface
-#define MATERIALFLAG_NODRAW 512
+#define MATERIALFLAG_NODRAW 0x00000200
 // probably used only on q1bsp water
-#define MATERIALFLAG_LIGHTBOTHSIDES 1024
+#define MATERIALFLAG_LIGHTBOTHSIDES 0x00000400
 // use alpha test on this material
-#define MATERIALFLAG_ALPHATEST 2048
+#define MATERIALFLAG_ALPHATEST 0x00000800
 // treat this material as a blended transparency (as opposed to an alpha test
 // transparency), this causes special fog behavior, and disables glDepthMask
-#define MATERIALFLAG_BLENDED 4096
+#define MATERIALFLAG_BLENDED 0x00001000
 // render using a custom blendfunc
-#define MATERIALFLAG_CUSTOMBLEND 8192
+#define MATERIALFLAG_CUSTOMBLEND 0x00002000
 // do not cast shadows from this material
-#define MATERIALFLAG_NOSHADOW 16384
+#define MATERIALFLAG_NOSHADOW 0x00004000
 // render using vertex alpha (q3bsp) as texture blend parameter between foreground (normal) skinframe and background skinframe
-#define MATERIALFLAG_VERTEXTEXTUREBLEND 32768
+#define MATERIALFLAG_VERTEXTEXTUREBLEND 0x00008000
 // disables GL_CULL_FACE on this texture (making it double sided)
-#define MATERIALFLAG_NOCULLFACE 65536
+#define MATERIALFLAG_NOCULLFACE 0x00010000
 // render with a very short depth range (like 10% of normal), this causes entities to appear infront of most of the scene
-#define MATERIALFLAG_SHORTDEPTHRANGE 131072
+#define MATERIALFLAG_SHORTDEPTHRANGE 0x00020000
 // render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
-#define MATERIALFLAG_WATERSHADER 262144
+#define MATERIALFLAG_WATERSHADER 0x00040000
 // render refraction (note: this is just a way to distort the background, otherwise useless)
-#define MATERIALFLAG_REFRACTION 524288
+#define MATERIALFLAG_REFRACTION 0x00080000
 // render reflection
-#define MATERIALFLAG_REFLECTION 1048576
+#define MATERIALFLAG_REFLECTION 0x00100000
 // use model lighting on this material (q1bsp lightmap sampling or q3bsp lightgrid, implies FULLBRIGHT is false)
-#define MATERIALFLAG_MODELLIGHT 4194304
-// add directional model lighting to this material (q3bsp lightgrid only)
-#define MATERIALFLAG_MODELLIGHT_DIRECTIONAL 8388608
+#define MATERIALFLAG_MODELLIGHT 0x00200000
+// causes RSurf_GetCurrentTexture to leave alone certain fields
+#define MATERIALFLAG_CUSTOMSURFACE 0x00800000
+// causes MATERIALFLAG_BLENDED to render a depth pass before rendering, hiding backfaces and other hidden geometry
+#define MATERIALFLAG_TRANSDEPTH 0x01000000
+// like refraction, but doesn't distort etc.
+#define MATERIALFLAG_CAMERA 0x02000000
+// disable rtlight on surface - does not disable other types of lighting (LIGHTMAP, MODELLIGHT)
+#define MATERIALFLAG_NORTLIGHT 0x04000000
+// alphagen vertex
+#define MATERIALFLAG_ALPHAGEN_VERTEX 0x08000000
+// use occlusion buffer for corona
+#define MATERIALFLAG_OCCLUDE 0x10000000
+// use vertex color instead of lighting (e.g. particles and other glowy stuff), use with MATERIALFLAG_FULLBRIGHT
+#define MATERIALFLAG_VERTEXCOLOR 0x20000000
 // combined mask of all attributes that require depth sorted rendering
 #define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
+// combined mask of all attributes that cause some sort of transparency
+#define MATERIALFLAGMASK_TRANSLUCENT (MATERIALFLAG_WATERALPHA | MATERIALFLAG_SKY | MATERIALFLAG_NODRAW | MATERIALFLAG_ALPHATEST | MATERIALFLAG_BLENDED | MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION)
 
 typedef struct medge_s
 {
-       unsigned short v[2];
+       unsigned int v[2];
 }
 medge_t;
 
@@ -137,8 +160,8 @@ typedef struct mnode_s
        struct mnode_s *children[2];
 
        // q1bsp specific
-       unsigned short firstsurface;
-       unsigned short numsurfaces;
+       unsigned int firstsurface;
+       unsigned int numsurfaces;
 }
 mnode_t;
 
@@ -196,6 +219,7 @@ typedef struct mportal_s
        mvertex_t *points;
        vec3_t mins, maxs; // culling
        mplane_t plane;
+       double tracetime; // refreshed to realtime by traceline tests
 }
 mportal_t;
 
@@ -211,6 +235,7 @@ svbspmesh_t;
 
 // Q2 bsp stuff
 
+#define Q2BSPMAGIC ('I' + 'B' * 256 + 'S' * 65536 + 'P' * 16777216)
 #define Q2BSPVERSION   38
 
 // leaffaces, leafbrushes, planes, and verts are still bounded by
@@ -309,9 +334,13 @@ typedef struct q2dmodel_s
 #define        Q2SURF_FLOWING  0x40    // scroll towards angle
 #define        Q2SURF_NODRAW           0x80    // don't bother referencing the texture
 
+#define Q2SURF_HINT            0x100   // make a primary bsp splitter
+#define Q2SURF_SKIP            0x200   // completely ignore, allowing non-closed brushes
 
+#define Q2SURF_ALPHATEST 0x02000000    // alpha test masking of color 255 in wal textures (supported by modded engines)
 
 
+/*
 typedef struct q2dnode_s
 {
        int                     planenum;
@@ -322,13 +351,12 @@ typedef struct q2dnode_s
        unsigned short  numfaces;       // counting both sides
 } q2dnode_t;
 
-
 typedef struct q2texinfo_s
 {
        float           vecs[2][4];             // [s/t][xyz offset]
        int                     flags;                  // miptex flags + overrides
        int                     value;                  // light emission, etc
-       char            texture[32];    // texture name (textures/*.wal)
+       char            texture[32];    // texture name (textures/something.wal)
        int                     nexttexinfo;    // for animations, -1 = end of chain
 } q2texinfo_t;
 
@@ -388,11 +416,13 @@ typedef struct q2darea_s
        int             numareaportals;
        int             firstareaportal;
 } q2darea_t;
+*/
 
 
 //Q3 bsp stuff
 
 #define Q3BSPVERSION   46
+#define Q3BSPVERSION_LIVE 47
 #define Q3BSPVERSION_IG        48
 
 #define        Q3LUMP_ENTITIES         0 // entities to spawn (used by server and client)
@@ -413,12 +443,15 @@ typedef struct q2darea_s
 #define        Q3LUMP_LIGHTGRID        15 // lighting as a voxel grid (used by rendering)
 #define        Q3LUMP_PVS                      16 // potentially visible set; bit[clusters][clusters] (used by rendering)
 #define        Q3HEADER_LUMPS          17
+#define        Q3LUMP_ADVERTISEMENTS 17 // quake live stuff written by zeroradiant's q3map2 (ignored by DP)
+#define        Q3HEADER_LUMPS_LIVE     18
+#define        Q3HEADER_LUMPS_MAX      18
 
 typedef struct q3dheader_s
 {
        int                     ident;
        int                     version;
-       lump_t          lumps[Q3HEADER_LUMPS];
+       lump_t          lumps[Q3HEADER_LUMPS_MAX];
 } q3dheader_t;
 
 typedef struct q3dtexture_s
@@ -622,17 +655,17 @@ q3dpvs_t;
 #define Q3SURFACEFLAG_NODAMAGE 1
 #define Q3SURFACEFLAG_SLICK 2
 #define Q3SURFACEFLAG_SKY 4
-#define Q3SURFACEFLAG_LADDER 8
+#define Q3SURFACEFLAG_LADDER 8 // has no surfaceparm
 #define Q3SURFACEFLAG_NOIMPACT 16
 #define Q3SURFACEFLAG_NOMARKS 32
-#define Q3SURFACEFLAG_FLESH 64
+#define Q3SURFACEFLAG_FLESH 64 // has no surfaceparm
 #define Q3SURFACEFLAG_NODRAW 128
 #define Q3SURFACEFLAG_HINT 256
-#define Q3SURFACEFLAG_SKIP 512
+#define Q3SURFACEFLAG_SKIP 512 // has no surfaceparm
 #define Q3SURFACEFLAG_NOLIGHTMAP 1024
 #define Q3SURFACEFLAG_POINTLIGHT 2048
 #define Q3SURFACEFLAG_METALSTEPS 4096
-#define Q3SURFACEFLAG_NOSTEPS 8192
+#define Q3SURFACEFLAG_NOSTEPS 8192 // has no surfaceparm
 #define Q3SURFACEFLAG_NONSOLID 16384
 #define Q3SURFACEFLAG_LIGHTFILTER 32768
 #define Q3SURFACEFLAG_ALPHASHADOW 65536
@@ -661,7 +694,7 @@ q3dpvs_t;
 #define Q3SURFACEPARM_ORIGIN 262144
 #define Q3SURFACEPARM_PLAYERCLIP 524288
 #define Q3SURFACEPARM_SKY 1048576
-#define Q3SURFACEPARM_SLICK 2197152
+#define Q3SURFACEPARM_SLICK 2097152
 #define Q3SURFACEPARM_SLIME 4194304
 #define Q3SURFACEPARM_STRUCTURAL 8388608
 #define Q3SURFACEPARM_TRANS 16777216
@@ -689,9 +722,10 @@ typedef struct q3mbrushside_s
 }
 q3mbrushside_t;
 
-#define CHECKPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : false)
-#define SETPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : false)
-#define CLEARPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : false)
+// the first cast is to shut up a stupid warning by clang, the second cast is to make both sides have the same type
+#define CHECKPVSBIT(pvs,b) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : (unsigned char) false)
+#define SETPVSBIT(pvs,b) (void) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : (unsigned char) false)
+#define CLEARPVSBIT(pvs,b) (void) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : (unsigned char) false)
 
 #endif