]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rsurf.c
some const fixes and type fixes found by gcc -combine
[xonotic/darkplaces.git] / gl_rsurf.c
index e7d39184cc875ba0fba0d65a6034076ec251331b..586219e5bbf87b7e82a9572b7cf48de2cc0155bb 100644 (file)
@@ -43,7 +43,7 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface)
        int smax, tmax, i, size, size3, maps, l;
        int *bl, scale;
        unsigned char *lightmap, *out, *stain;
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        int *intblocklights;
        unsigned char *templight;
 
@@ -99,12 +99,25 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface)
        // scaling, and remaps the 0-65536 (2x overbright) to 0-256, it will
        // be doubled during rendering to achieve 2x overbright
        // (0 = 0.0, 128 = 1.0, 256 = 2.0)
-       for (i = 0;i < size;i++, bl += 3, stain += 3, out += 4)
+       if (stain)
        {
-               l = (bl[0] * stain[0]) >> 16;out[2] = min(l, 255);
-               l = (bl[1] * stain[1]) >> 16;out[1] = min(l, 255);
-               l = (bl[2] * stain[2]) >> 16;out[0] = min(l, 255);
-               out[3] = 255;
+               for (i = 0;i < size;i++, bl += 3, stain += 3, out += 4)
+               {
+                       l = (bl[0] * stain[0]) >> 16;out[2] = min(l, 255);
+                       l = (bl[1] * stain[1]) >> 16;out[1] = min(l, 255);
+                       l = (bl[2] * stain[2]) >> 16;out[0] = min(l, 255);
+                       out[3] = 255;
+               }
+       }
+       else
+       {
+               for (i = 0;i < size;i++, bl += 3, out += 4)
+               {
+                       l = bl[0] >> 8;out[2] = min(l, 255);
+                       l = bl[1] >> 8;out[1] = min(l, 255);
+                       l = bl[2] >> 8;out[0] = min(l, 255);
+                       out[3] = 255;
+               }
        }
 
        R_UpdateTexture(surface->lightmaptexture, templight, surface->lightmapinfo->lightmaporigin[0], surface->lightmapinfo->lightmaporigin[1], smax, tmax);
@@ -149,7 +162,7 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface)
        }
 }
 
-void R_StainNode (mnode_t *node, model_t *model, const vec3_t origin, float radius, const float fcolor[8])
+void R_StainNode (mnode_t *node, dp_model_t *model, const vec3_t origin, float radius, const float fcolor[8])
 {
        float ndist, a, ratio, maxdist, maxdist2, maxdist3, invradius, sdtable[256], td, dist2;
        msurface_t *surface, *endsurface;
@@ -276,7 +289,7 @@ void R_Stain (const vec3_t origin, float radius, int cr1, int cg1, int cb1, int
        int n;
        float fcolor[8];
        entity_render_t *ent;
-       model_t *model;
+       dp_model_t *model;
        vec3_t org;
        if (r_refdef.scene.worldmodel == NULL || !r_refdef.scene.worldmodel->brush.data_nodes || !r_refdef.scene.worldmodel->brushq1.lightdata)
                return;
@@ -357,7 +370,7 @@ void R_DrawPortals(void)
        int i, leafnum;
        mportal_t *portal;
        float center[3], f;
-       model_t *model = r_refdef.scene.worldmodel;
+       dp_model_t *model = r_refdef.scene.worldmodel;
        if (model == NULL)
                return;
        for (leafnum = 0;leafnum < r_refdef.scene.worldmodel->brush.num_leafs;leafnum++)
@@ -387,7 +400,7 @@ void R_View_WorldVisibility(qboolean forcenovis)
        int i, j, *mark;
        mleaf_t *leaf;
        mleaf_t *viewleaf;
-       model_t *model = r_refdef.scene.worldmodel;
+       dp_model_t *model = r_refdef.scene.worldmodel;
 
        if (!model)
                return;
@@ -452,7 +465,7 @@ void R_View_WorldVisibility(qboolean forcenovis)
                }
                // just check if each leaf in the PVS is on screen
                // (unless portal culling is enabled)
-               else if (r_useportalculling.integer < 1 || (r_useportalculling.integer < 2 && !r_novis.integer))
+               else if (!model->brush.data_portals || r_useportalculling.integer < 1 || (r_useportalculling.integer < 2 && !r_novis.integer))
                {
                        // pvs method:
                        // simply check if each leaf is in the Potentially Visible Set,
@@ -532,7 +545,7 @@ void R_Q1BSP_DrawSky(entity_render_t *ent)
 
 void R_Q1BSP_DrawAddWaterPlanes(entity_render_t *ent)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        if (model == NULL)
                return;
        if (ent == r_refdef.scene.worldentity)
@@ -543,7 +556,7 @@ void R_Q1BSP_DrawAddWaterPlanes(entity_render_t *ent)
 
 void R_Q1BSP_Draw(entity_render_t *ent)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        if (model == NULL)
                return;
        if (ent == r_refdef.scene.worldentity)
@@ -554,7 +567,7 @@ void R_Q1BSP_Draw(entity_render_t *ent)
 
 void R_Q1BSP_DrawDepth(entity_render_t *ent)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        if (model == NULL)
                return;
        GL_ColorMask(0,0,0,0);
@@ -585,7 +598,7 @@ void R_Q1BSP_DrawDebug(entity_render_t *ent)
 
 typedef struct r_q1bsp_getlightinfo_s
 {
-       model_t *model;
+       dp_model_t *model;
        vec3_t relativelightorigin;
        float lightradius;
        int *outleaflist;
@@ -912,12 +925,12 @@ void R_Q1BSP_GetLightInfo(entity_render_t *ent, vec3_t relativelightorigin, floa
                info.pvs = NULL;
        R_UpdateAllTextureInfo(ent);
 
-       if (r_shadow_frontsidecasting.integer && r_shadow_compilingrtlight && r_shadow_realtime_world_compileportalculling.integer)
+       if (r_shadow_frontsidecasting.integer && r_shadow_compilingrtlight && r_shadow_realtime_world_compileportalculling.integer && info.model->brush.data_portals)
        {
                // use portal recursion for exact light volume culling, and exact surface checking
                Portal_Visibility(info.model, info.relativelightorigin, info.outleaflist, info.outleafpvs, &info.outnumleafs, info.outsurfacelist, info.outsurfacepvs, &info.outnumsurfaces, NULL, 0, true, info.lightmins, info.lightmaxs, info.outmins, info.outmaxs, info.outshadowtrispvs, info.outlighttrispvs);
        }
-       else if (r_shadow_frontsidecasting.integer && r_shadow_realtime_dlight_portalculling.integer)
+       else if (r_shadow_frontsidecasting.integer && r_shadow_realtime_dlight_portalculling.integer && info.model->brush.data_portals)
        {
                // use portal recursion for exact light volume culling, but not the expensive exact surface checking
                Portal_Visibility(info.model, info.relativelightorigin, info.outleaflist, info.outleafpvs, &info.outnumleafs, info.outsurfacelist, info.outsurfacepvs, &info.outnumsurfaces, NULL, 0, r_shadow_realtime_dlight_portalculling.integer >= 2, info.lightmins, info.lightmaxs, info.outmins, info.outmaxs, info.outshadowtrispvs, info.outlighttrispvs);
@@ -945,7 +958,7 @@ void R_Q1BSP_GetLightInfo(entity_render_t *ent, vec3_t relativelightorigin, floa
 
 void R_Q1BSP_CompileShadowVolume(entity_render_t *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        msurface_t *surface;
        int surfacelistindex;
        float projectdistance = relativelightdirection ? lightradius : lightradius + model->radius*2 + r_shadow_projectdistance.value;
@@ -964,9 +977,9 @@ void R_Q1BSP_CompileShadowVolume(entity_render_t *ent, vec3_t relativelightorigi
 
 extern cvar_t r_polygonoffset_submodel_factor;
 extern cvar_t r_polygonoffset_submodel_offset;
-void R_Q1BSP_DrawShadowVolume(entity_render_t *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int modelnumsurfaces, const int *modelsurfacelist, const vec3_t lightmins, const vec3_t lightmaxs)
+void R_Q1BSP_DrawShadowVolume(entity_render_t *ent, const vec3_t relativelightorigin, const vec3_t relativelightdirection, float lightradius, int modelnumsurfaces, const int *modelsurfacelist, const vec3_t lightmins, const vec3_t lightmaxs)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        msurface_t *surface;
        int modelsurfacelistindex;
        float projectdistance = relativelightdirection ? lightradius : lightradius + model->radius*2 + r_shadow_projectdistance.value;
@@ -1017,7 +1030,7 @@ static void R_Q1BSP_DrawLight_TransparentCallback(const entity_render_t *ent, co
        msurface_t *surface;
        // note: in practice this never actually receives batches), oh well
        R_Shadow_RenderMode_Begin();
-       R_Shadow_RenderMode_ActiveLight((rtlight_t *)rtlight);
+       R_Shadow_RenderMode_ActiveLight(rtlight);
        R_Shadow_RenderMode_Lighting(false, true);
        R_Shadow_SetupEntityLight(ent);
        for (i = 0;i < numsurfaces;i = j)
@@ -1044,7 +1057,7 @@ static void R_Q1BSP_DrawLight_TransparentCallback(const entity_render_t *ent, co
 
 void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surfacelist, const unsigned char *trispvs)
 {
-       model_t *model = ent->model;
+       dp_model_t *model = ent->model;
        msurface_t *surface;
        int i, k, kend, l, m, mend, endsurface, batchnumsurfaces, batchnumtriangles, batchfirstvertex, batchlastvertex, batchfirsttriangle;
        qboolean usebufferobject, culltriangles;
@@ -1164,7 +1177,7 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
 //Made by [515]
 void R_ReplaceWorldTexture (void)
 {
-       model_t         *m;
+       dp_model_t              *m;
        texture_t       *t;
        int                     i;
        const char      *r, *newt;
@@ -1214,7 +1227,7 @@ void R_ReplaceWorldTexture (void)
 //Made by [515]
 void R_ListWorldTextures (void)
 {
-       model_t         *m;
+       dp_model_t              *m;
        texture_t       *t;
        int                     i;
        if (!r_refdef.scene.worldmodel)