]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
snap curve vertices to solve some finicky collision problems and probably also makes...
[xonotic/darkplaces.git] / model_shared.h
index 516cf45f805e04889cd7d5576da1a67af66f7d97..6f57d464c96a2c98ac08a2421ea93d785dff81b7 100644 (file)
@@ -327,16 +327,31 @@ model_brushq2_t;
 #define Q3SURFACEPARM_TRANS 16777216
 #define Q3SURFACEPARM_WATER 33554432
 
+// 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
+
+struct q3msurface_s;
 typedef struct q3mtexture_s
 {
        char name[Q3PATHLENGTH];
+       char firstpasstexturename[Q3PATHLENGTH];
        int surfaceflags;
        int nativecontents;
        int supercontents;
        int surfaceparms;
+       int textureflags;
 
        int number;
        skinframe_t skin;
+
+       int numfaces;
+       struct q3msurface_s **facelist;
+       int *facenumlist;
 }
 q3mtexture_t;
 
@@ -363,7 +378,8 @@ typedef struct q3mleaf_s
        int clusterindex;
        int areaindex;
        int numleaffaces;
-       struct q3mface_s **firstleafface;
+       struct q3msurface_s **firstleafface;
+       int *firstleaffacenum;
        int numleafbrushes;
        struct q3mbrush_s **firstleafbrush;
 }
@@ -374,7 +390,7 @@ typedef struct q3mmodel_s
        vec3_t mins;
        vec3_t maxs;
        int numfaces;
-       struct q3mface_s *firstface;
+       struct q3msurface_s *firstface;
        int numbrushes;
        struct q3mbrush_s *firstbrush;
 }
@@ -404,21 +420,17 @@ typedef struct q3meffect_s
 }
 q3meffect_t;
 
-typedef struct q3mface_s
+typedef struct q3msurface_s
 {
+       // FIXME: collisionmarkframe should be kept in a separate array
+       // FIXME: visframe should be kept in a separate array
+       // FIXME: shadowmark should be kept in a separate array
+
        struct q3mtexture_s *texture;
        struct q3meffect_s *effect;
        rtexture_t *lightmaptexture;
-       int collisions; // performs per triangle collisions on this surface
        int collisionmarkframe; // don't collide twice in one trace
-       int type;
-       int firstvertex;
-       int firstelement;
-       int patchsize[2];
-       // used for processing
-       int markframe;
-       // (world only) visframe == r_framecount means it is visible this frame
-       int visframe;
+       int visframe; // visframe == r_framecount means it is visible this frame
        // bounding box for culling
        float mins[3];
        float maxs[3];
@@ -442,12 +454,9 @@ typedef struct q3mface_s
 
        // index into model->brush.shadowmesh
        int num_firstshadowmeshtriangle;
-       
+
        // used for shadow volume generation
        int shadowmark;
-
-       // temporary use by light processing
-       int lighttemp_castshadow;
 }
 q3msurface_t;
 
@@ -459,6 +468,8 @@ typedef struct model_brushq3_s
 
        int num_textures;
        q3mtexture_t *data_textures;
+       q3msurface_t **data_texturefaces;
+       int *data_texturefacenums;
 
        int num_planes;
        mplane_t *data_planes;
@@ -474,6 +485,7 @@ typedef struct model_brushq3_s
 
        int num_leaffaces;
        q3msurface_t **data_leaffaces;
+       int *data_leaffacenums;
 
        int num_models;
        q3mmodel_t *data_models;
@@ -680,6 +692,7 @@ skinfile_t *Mod_LoadSkinFiles(void);
 void Mod_FreeSkinFiles(skinfile_t *skinfile);
 int Mod_CountSkinFiles(skinfile_t *skinfile);
 
+void Mod_SnapVertices(int numcomponents, int numvertices, float *vertices, float snap);
 int Mod_RemoveDegenerateTriangles(int numtriangles, const int *inelement3i, int *outelement3i, const float *vertex3f);
 
 #endif // MODEL_SHARED_H