]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.h
Enable shadowmapping on transparent surfaces.
[xonotic/darkplaces.git] / model_brush.h
index 0463d74d1eedc3a8fe65f79ff5143f250b77dda5..0c07048971f24701598428eb78a678dd7923148e 100644 (file)
@@ -48,8 +48,15 @@ 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; // set by PlaneClassify()
        int signbits; // set by PlaneClassify()
@@ -62,6 +69,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
@@ -112,6 +121,14 @@ mplane_t;
 #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
+// alphagen vertex
+#define MATERIALFLAG_ALPHAGEN_VERTEX 268435456
+// use occlusion buffer for corona
+#define MATERIALFLAG_OCCLUDE 536870912
 // 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
@@ -119,7 +136,7 @@ mplane_t;
 
 typedef struct medge_s
 {
-       unsigned short v[2];
+       unsigned int v[2];
 }
 medge_t;
 
@@ -143,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;
 
@@ -217,6 +234,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
@@ -315,9 +333,12 @@ 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
 
 
 
+/*
 typedef struct q2dnode_s
 {
        int                     planenum;
@@ -328,13 +349,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;
 
@@ -394,6 +414,7 @@ typedef struct q2darea_s
        int             numareaportals;
        int             firstareaportal;
 } q2darea_t;
+*/
 
 
 //Q3 bsp stuff
@@ -632,17 +653,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
@@ -699,9 +720,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