]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.h
fix typo in some powers of two
[xonotic/darkplaces.git] / model_brush.h
index bf44b585eec0432d6431ec7dfcf635ce02076044..0c0f0e56847f1566eaec2dce6a9f8ae48a5f8148 100644 (file)
@@ -29,7 +29,6 @@ BRUSH MODELS
 ==============================================================================
 */
 
-#define Q3PATHLENGTH 64
 
 
 //
@@ -63,8 +62,6 @@ mplane_t;
 
 //#define SURF_PLANEBACK 2
 
-// set for anything to be transparent sorted
-#define MATERIALFLAG_TRANSPARENT 1
 // use alpha blend on this material
 #define MATERIALFLAG_ALPHA 2
 // use additive blend on this material
@@ -75,17 +72,44 @@ 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
 #define MATERIALFLAG_LIGHTBOTHSIDES 1024
+// use alpha test on this material
+#define MATERIALFLAG_ALPHATEST 2048
+// 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
+// render using a custom blendfunc
+#define MATERIALFLAG_CUSTOMBLEND 8192
+// do not cast shadows from this material
+#define MATERIALFLAG_NOSHADOW 16384
+// render using vertex alpha (q3bsp) as texture blend parameter between foreground (normal) skinframe and background skinframe
+#define MATERIALFLAG_VERTEXTEXTUREBLEND 32768
+// disables GL_CULL_FACE on this texture (making it double sided)
+#define MATERIALFLAG_NOCULLFACE 65536
+// 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
+// render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
+#define MATERIALFLAG_WATERSHADER 262144
+// render refraction (note: this is just a way to distort the background, otherwise useless)
+#define MATERIALFLAG_REFRACTION 524288
+// render reflection
+#define MATERIALFLAG_REFLECTION 1048576
+// 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
+// combined mask of all attributes that require depth sorted rendering
+#define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
 
 typedef struct medge_s
 {
@@ -106,6 +130,8 @@ typedef struct mnode_s
        // for bounding box culling
        vec3_t mins;
        vec3_t maxs;
+       // supercontents from all brushes inside this node or leaf
+       int combinedsupercontents;
 
        // this part unique to node
        struct mnode_s *children[2];
@@ -125,11 +151,14 @@ typedef struct mleaf_s
        // for bounding box culling
        vec3_t mins;
        vec3_t maxs;
+       // supercontents from all brushes inside this node or leaf
+       int combinedsupercontents;
 
        // this part unique to leaf
        // common
        int clusterindex; // -1 is not in pvs, >= 0 is pvs bit number
        int areaindex; // q3bsp
+       int containscollisionsurfaces; // indicates whether the leafsurfaces contains q3 patches
        int numleafsurfaces;
        int *firstleafsurface;
        int numleafbrushes; // q3bsp
@@ -140,9 +169,15 @@ typedef struct mleaf_s
 }
 mleaf_t;
 
+typedef struct mclipnode_s
+{
+       int                     planenum;
+       int                     children[2];    // negative numbers are contents
+} mclipnode_t;
+
 typedef struct hull_s
 {
-       dclipnode_t *clipnodes;
+       mclipnode_t *clipnodes;
        mplane_t *planes;
        int firstclipnode;
        int lastclipnode;
@@ -174,43 +209,6 @@ typedef struct svbspmesh_s
 }
 svbspmesh_t;
 
-typedef struct mlight_s
-{
-       // location of light
-       vec3_t origin;
-       // distance attenuation scale (smaller is a larger light)
-       float falloff;
-       // color and brightness combined
-       vec3_t light;
-       // brightness bias, used for limiting radius without a hard edge
-       float subtract;
-       // spotlight direction
-       vec3_t spotdir;
-       // cosine of spotlight cone angle (or 0 if not a spotlight)
-       float spotcone;
-       // distance bias (larger value is softer and darker)
-       float distbias;
-       // light style controlling this light
-       int style;
-       // maximum extent of the light for shading purposes
-       float lightradius;
-       // maximum extent of the light for culling purposes
-       float cullradius;
-       float cullradius2;
-       /*
-       // surfaces this shines on
-       int numsurfaces;
-       msurface_t **surfaces;
-       // lit area
-       vec3_t mins, maxs;
-       // precomputed shadow volume meshs
-       //svbspmesh_t *shadowvolume;
-       //vec3_t shadowvolumemins, shadowvolumemaxs;
-       shadowmesh_t *shadowvolume;
-       */
-}
-mlight_t;
-
 // Q2 bsp stuff
 
 #define Q2BSPVERSION   38
@@ -395,6 +393,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)
@@ -414,12 +414,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
@@ -486,6 +489,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];
@@ -510,7 +521,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?)
@@ -537,14 +548,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
@@ -654,21 +665,17 @@ 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
 #define Q3SURFACEPARM_WATER 33554432
 #define Q3SURFACEPARM_POINTLIGHT 67108864
-
-// various flags from shaders
-#define Q3TEXTUREFLAG_TWOSIDED 1
-#define Q3TEXTUREFLAG_ADDITIVE 2
-#define Q3TEXTUREFLAG_NOMIPMAPS 4
-#define Q3TEXTUREFLAG_NOPICMIP 8
-#define Q3TEXTUREFLAG_AUTOSPRITE 16
-#define Q3TEXTUREFLAG_AUTOSPRITE2 32
-#define Q3TEXTUREFLAG_ALPHATEST 64
+#define Q3SURFACEPARM_HINT 134217728
+#define Q3SURFACEPARM_DUST 268435456
+#define Q3SURFACEPARM_BOTCLIP 536870912
+#define Q3SURFACEPARM_LIGHTGRID 1073741824
+#define Q3SURFACEPARM_ANTIPORTAL 2147483648u
 
 typedef struct q3mbrush_s
 {