]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.h
GL_ARB_multisampling defs (vid_multisampling) and alpha-to-coverage effect (r_transpa...
[xonotic/darkplaces.git] / model_brush.h
index 20dd05b2c315a31ff5fa7b281514624608e5ee49..906594ad4c893db4dc623ca2e12c10151c435070 100644 (file)
@@ -51,8 +51,8 @@ typedef struct mplane_s
        vec3_t normal;
        float 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,6 +62,8 @@ mplane_t;
 
 //#define SURF_PLANEBACK 2
 
+// indicates that all triangles of the surface should be added to the BIH collision system
+#define MATERIALFLAG_MESHCOLLISIONS 1
 // use alpha blend on this material
 #define MATERIALFLAG_ALPHA 2
 // use additive blend on this material
@@ -72,13 +74,13 @@ mplane_t;
 #define MATERIALFLAG_WATERALPHA 16
 // draw with no lighting
 #define MATERIALFLAG_FULLBRIGHT 32
-// drawn as a normal lightmapped wall
+// drawn as a normal surface (alternative to SKY)
 #define MATERIALFLAG_WALL 64
-// swirling water effect
-#define MATERIALFLAG_WATER 128
-// this surface shows the sky
+// this surface shows the sky in its place, alternative to WALL
 // skipped if transparent
-#define MATERIALFLAG_SKY 256
+#define MATERIALFLAG_SKY 128
+// swirling water effect (used with MATERIALFLAG_WALL)
+#define MATERIALFLAG_WATERSCROLL 256
 // skips drawing the surface
 #define MATERIALFLAG_NODRAW 512
 // probably used only on q1bsp water
@@ -104,12 +106,22 @@ mplane_t;
 #define MATERIALFLAG_REFRACTION 524288
 // render reflection
 #define MATERIALFLAG_REFLECTION 1048576
-// render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
-#define MATERIALFLAG_SORTTRANSPARENT 2097152
 // 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
+// causes RSurf_GetCurrentTexture to leave alone certain fields
+#define MATERIALFLAG_CUSTOMSURFACE 16777216
+// causes MATERIALFLAG_BLENDED to render a depth pass before rendering, hiding backfaces and other hidden geometry
+#define MATERIALFLAG_TRANSDEPTH 33554432
+// like refraction, but doesn't distort etc.
+#define MATERIALFLAG_CAMERA 67108864
+// disable rtlight on surface, use R_LightPoint instead
+#define MATERIALFLAG_NORTLIGHT 134217728
+// 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
 {
@@ -393,6 +405,8 @@ typedef struct q2darea_s
 //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)
 #define        Q3LUMP_TEXTURES         1 // textures used (used by faces)
@@ -412,12 +426,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
@@ -484,6 +501,14 @@ typedef struct q3dbrushside_s
 }
 q3dbrushside_t;
 
+typedef struct q3dbrushside_ig_s
+{
+       int planeindex;
+       int textureindex;
+       int surfaceflags;
+}
+q3dbrushside_ig_t;
+
 typedef struct q3dvertex_s
 {
        float origin3f[3];
@@ -508,7 +533,7 @@ typedef struct q3deffect_s
 }
 q3deffect_t;
 
-#define Q3FACETYPE_POLYGON 1 // common
+#define Q3FACETYPE_FLAT 1 // common
 #define Q3FACETYPE_PATCH 2 // common
 #define Q3FACETYPE_MESH 3 // common
 #define Q3FACETYPE_FLARE 4 // rare (is this ever used?)
@@ -535,14 +560,14 @@ typedef struct q3dface_s
                unknown;
                struct
                {
-                       // Q3FACETYPE_POLYGON
-                       // polygon is simply a convex polygon, renderable as a mesh
+                       // Q3FACETYPE_FLAT
+                       // mesh is a collection of triangles on a plane, renderable as a mesh (NOT a polygon)
                        float lightmap_origin[3];
                        float lightmap_vectors[2][3];
                        float normal[3];
                        int unused1[2];
                }
-               polygon;
+               flat;
                struct
                {
                        // Q3FACETYPE_PATCH
@@ -652,7 +677,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
@@ -680,9 +705,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