]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
Fixed a bug in the Ogg Vorbis streaming code that can cause sound files to be unplaya...
[xonotic/darkplaces.git] / model_shared.h
index ebf24a7e1941a0d4824454f9635229506bc9ec78..5cb24514ff8bc05fb86bf5e05663025f4321e619 100644 (file)
@@ -196,8 +196,6 @@ model_brush_t;
 
 typedef struct model_brushq1_s
 {
-       int                             firstmodelsurface, nummodelsurfaces;
-
        // lightmap format, set to r_lightmaprgba when model is loaded
        int                             lightmaprgba;
 
@@ -279,7 +277,6 @@ typedef struct model_brushq1_s
        int                             *light_stylevalue;
        msurface_t              ***light_styleupdatechains;
        msurface_t              **light_styleupdatechainsbuffer;
-       float                   light_ambient;
 
        mleaf_t *(*PointInLeaf)(struct model_s *model, const float *p);
        void (*BuildPVSTextureChains)(struct model_s *model);
@@ -464,7 +461,7 @@ typedef struct q3mface_s
        // temporary use by light processing
        int lighttemp_castshadow;
 }
-q3mface_t;
+q3msurface_t;
 
 typedef struct model_brushq3_s
 {
@@ -488,7 +485,7 @@ typedef struct model_brushq3_s
        q3mbrush_t **data_leafbrushes;
 
        int num_leaffaces;
-       q3mface_t **data_leaffaces;
+       q3msurface_t **data_leaffaces;
 
        int num_models;
        q3mmodel_t *data_models;
@@ -518,7 +515,7 @@ typedef struct model_brushq3_s
        q3meffect_t *data_effects;
 
        int num_faces;
-       q3mface_t *data_faces;
+       q3msurface_t *data_faces;
 
        // lightmap textures
        int num_lightmaps;
@@ -586,14 +583,21 @@ typedef struct model_s
        animscene_t             *skinscenes; // [numskins]
        // skin animation info
        animscene_t             *animscenes; // [numframes]
+       // range of surface numbers in this (sub)model
+       int                             firstmodelsurface;
+       int                             nummodelsurfaces;
+       // list of surface numbers in this (sub)model
+       int                             *surfacelist;
        // draw the model's sky polygons (only used by brush models)
        void(*DrawSky)(struct entity_render_s *ent);
        // draw the model using lightmap/dlight shading
        void(*Draw)(struct entity_render_s *ent);
+       // gathers info on which clusters and surfaces are lit by light, as well as calculating a bounding box
+       void(*GetLightInfo)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, vec3_t outmins, vec3_t outmaxs, int *outclusterlist, qbyte *outclusterpvs, int *outnumclusterspointer, int *outsurfacelist, qbyte *outsurfacepvs, int *outnumsurfacespointer);
        // draw a shadow volume for the model based on light source
-       void(*DrawShadowVolume)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius);
+       void(*DrawShadowVolume)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, int numsurfaces, const int *surfacelist);
        // draw the lighting on a model (through stencil)
-       void(*DrawLight)(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativeeyeorigin, float lightradius, float *lightcolor, const matrix4x4_t *matrix_modeltolight, const matrix4x4_t *matrix_modeltoattenuationxyz, const matrix4x4_t *matrix_modeltoattenuationz, rtexture_t *lightcubemap);
+       void(*DrawLight)(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativeeyeorigin, float lightradius, float *lightcolor, const matrix4x4_t *matrix_modeltolight, const matrix4x4_t *matrix_modeltoattenuationxyz, const matrix4x4_t *matrix_modeltoattenuationz, rtexture_t *lightcubemap, int numsurfaces, const int *surfacelist);
        // trace a box against this model
        void (*TraceBox)(struct model_s *model, int frame, struct trace_s *trace, const vec3_t boxstartmins, const vec3_t boxstartmaxs, const vec3_t boxendmins, const vec3_t boxendmaxs, int hitsupercontentsmask);
        // fields belonging to each type of model