]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rsurf.c
changed behavior of r_showtris (now only affects geometry in the game view, not sky...
[xonotic/darkplaces.git] / gl_rsurf.c
index 292f1e71cf96578286afdac5f3babab76a32983c..065e77019a880e5ba2456ca5fe90b374c29cb119 100644 (file)
@@ -30,8 +30,6 @@ cvar_t r_drawportals = {0, "r_drawportals", "0", "shows portals (separating poly
 cvar_t r_lockpvs = {0, "r_lockpvs", "0", "disables pvs switching, allows you to walk around and inspect what is visible from a given location in the map (anything not visible from your current location will not be drawn)"};
 cvar_t r_lockvisibility = {0, "r_lockvisibility", "0", "disables visibility updates, allows you to walk around and inspect what is visible from a given viewpoint in the map (anything offscreen at the moment this is enabled will not be drawn)"};
 cvar_t r_useportalculling = {0, "r_useportalculling", "1", "use advanced portal culling visibility method to improve performance over just Potentially Visible Set, provides an even more significant speed improvement in unvised maps"};
-cvar_t r_drawcollisionbrushes_polygonfactor = {0, "r_drawcollisionbrushes_polygonfactor", "-1", "expands outward the brush polygons a little bit, used to make collision brushes appear infront of walls"};
-cvar_t r_drawcollisionbrushes_polygonoffset = {0, "r_drawcollisionbrushes_polygonoffset", "0", "nudges brush polygon depth in hardware depth units, used to make collision brushes appear infront of walls"};
 cvar_t r_q3bsp_renderskydepth = {0, "r_q3bsp_renderskydepth", "0", "draws sky depth masking in q3 maps (as in q1 maps), this means for example that sky polygons can hide other things"};
 
 // flag arrays used for visibility checking on world model
@@ -501,8 +499,7 @@ void R_Q1BSP_DrawSky(entity_render_t *ent)
 {
        if (ent->model == NULL)
                return;
-       if (r_drawcollisionbrushes.integer < 2)
-               R_DrawSurfaces(ent, true);
+       R_DrawSurfaces(ent, true);
 }
 
 void R_Q1BSP_Draw(entity_render_t *ent)
@@ -510,9 +507,8 @@ void R_Q1BSP_Draw(entity_render_t *ent)
        model_t *model = ent->model;
        if (model == NULL)
                return;
-       if (r_drawcollisionbrushes.integer < 2)
-               R_DrawSurfaces(ent, false);
-       if (r_drawcollisionbrushes.integer >= 1 && model->brush.num_brushes)
+       R_DrawSurfaces(ent, false);
+       if (r_showcollisionbrushes.integer && model->brush.num_brushes && !r_showtrispass)
        {
                int i;
                msurface_t *surface;
@@ -520,8 +516,8 @@ void R_Q1BSP_Draw(entity_render_t *ent)
                R_Mesh_Matrix(&ent->matrix);
                GL_BlendFunc(GL_SRC_ALPHA, GL_ONE);
                GL_DepthMask(false);
-               GL_DepthTest(true);
-               qglPolygonOffset(r_drawcollisionbrushes_polygonfactor.value, r_drawcollisionbrushes_polygonoffset.value);
+               GL_DepthTest(!r_showdisabledepthtest.integer);
+               qglPolygonOffset(r_showcollisionbrushes_polygonfactor.value, r_showcollisionbrushes_polygonoffset.value);
                for (i = 0, brush = model->brush.data_brushes + model->firstmodelbrush;i < model->nummodelbrushes;i++, brush++)
                        if (brush->colbrushf && brush->colbrushf->numtriangles)
                                R_DrawCollisionBrush(brush->colbrushf);
@@ -571,6 +567,8 @@ void R_Q1BSP_RecursiveGetLightInfo(r_q1bsp_getlightinfo_t *info, mnode_t *node)
                        R_Q1BSP_RecursiveGetLightInfo(info, node->children[0]);
                        node = node->children[1];
                }
+               else if (sides == 0)
+                       return; // ERROR: NAN bounding box!
                else
                        node = node->children[sides - 1];
        }
@@ -728,8 +726,6 @@ void R_Q1BSP_DrawShadowVolume(entity_render_t *ent, vec3_t relativelightorigin,
        // check the box in modelspace, it was already checked in worldspace
        if (!BoxesOverlap(ent->model->normalmins, ent->model->normalmaxs, lightmins, lightmaxs))
                return;
-       if (r_drawcollisionbrushes.integer >= 2)
-               return;
        R_UpdateAllTextureInfo(ent);
        if (model->brush.shadowmesh)
        {
@@ -780,6 +776,22 @@ static void R_Q1BSP_DrawLight_TransparentCallback(const entity_render_t *ent, in
        R_Shadow_RenderMode_End();
 }
 
+static void R_Q1BSP_DrawLight_TransparentBatch(const entity_render_t *ent, texture_t *texture, int batchnumsurfaces, msurface_t **batchsurfacelist)
+{
+       int batchsurfaceindex;
+       msurface_t *batchsurface;
+       vec3_t tempcenter, center;
+       for (batchsurfaceindex = 0;batchsurfaceindex < batchnumsurfaces;batchsurfaceindex++)
+       {
+               batchsurface = batchsurfacelist[batchsurfaceindex];
+               tempcenter[0] = (batchsurface->mins[0] + batchsurface->maxs[0]) * 0.5f;
+               tempcenter[1] = (batchsurface->mins[1] + batchsurface->maxs[1]) * 0.5f;
+               tempcenter[2] = (batchsurface->mins[2] + batchsurface->maxs[2]) * 0.5f;
+               Matrix4x4_Transform(&ent->matrix, tempcenter, center);
+               R_MeshQueue_AddTransparent(texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_vieworigin : center, R_Q1BSP_DrawLight_TransparentCallback, ent, batchsurface - ent->model->data_surfaces, r_shadow_rtlight);
+       }
+}
+
 #define RSURF_MAX_BATCHSURFACES 1024
 
 void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surfacelist)
@@ -792,8 +804,6 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
        vec3_t modelorg;
        texture_t *tex;
        qboolean skip;
-       if (r_drawcollisionbrushes.integer >= 2)
-               return;
        R_UpdateAllTextureInfo(ent);
        Matrix4x4_Transform(&ent->inversematrix, r_vieworigin, modelorg);
        tex = NULL;
@@ -811,19 +821,7 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
                        if (batchnumsurfaces > 0)
                        {
                                if (texture->currentmaterialflags & MATERIALFLAG_TRANSPARENT)
-                               {
-                                       int batchsurfaceindex;
-                                       for (batchsurfaceindex = 0;batchsurfaceindex < batchnumsurfaces;batchsurfaceindex++)
-                                       {
-                                               msurface_t *batchsurface = batchsurfacelist[batchsurfaceindex];
-                                               vec3_t tempcenter, center;
-                                               tempcenter[0] = (batchsurface->mins[0] + batchsurface->maxs[0]) * 0.5f;
-                                               tempcenter[1] = (batchsurface->mins[1] + batchsurface->maxs[1]) * 0.5f;
-                                               tempcenter[2] = (batchsurface->mins[2] + batchsurface->maxs[2]) * 0.5f;
-                                               Matrix4x4_Transform(&ent->matrix, tempcenter, center);
-                                               R_MeshQueue_AddTransparent(texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_vieworigin : center, R_Q1BSP_DrawLight_TransparentCallback, ent, batchsurface - ent->model->data_surfaces, r_shadow_rtlight);
-                                       }
-                               }
+                                       R_Q1BSP_DrawLight_TransparentBatch(ent, texture, batchnumsurfaces, batchsurfacelist);
                                else
                                        R_Shadow_RenderSurfacesLighting(ent, texture, batchnumsurfaces, batchsurfacelist);
                                batchnumsurfaces = 0;
@@ -839,19 +837,7 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
                        if (batchnumsurfaces == RSURF_MAX_BATCHSURFACES)
                        {
                                if (texture->currentmaterialflags & MATERIALFLAG_TRANSPARENT)
-                               {
-                                       int batchsurfaceindex;
-                                       for (batchsurfaceindex = 0;batchsurfaceindex < batchnumsurfaces;batchsurfaceindex++)
-                                       {
-                                               msurface_t *batchsurface = batchsurfacelist[batchsurfaceindex];
-                                               vec3_t tempcenter, center;
-                                               tempcenter[0] = (batchsurface->mins[0] + batchsurface->maxs[0]) * 0.5f;
-                                               tempcenter[1] = (batchsurface->mins[1] + batchsurface->maxs[1]) * 0.5f;
-                                               tempcenter[2] = (batchsurface->mins[2] + batchsurface->maxs[2]) * 0.5f;
-                                               Matrix4x4_Transform(&ent->matrix, tempcenter, center);
-                                               R_MeshQueue_AddTransparent(texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_vieworigin : center, R_Q1BSP_DrawLight_TransparentCallback, ent, batchsurface - ent->model->data_surfaces, r_shadow_rtlight);
-                                       }
-                               }
+                                       R_Q1BSP_DrawLight_TransparentBatch(ent, texture, batchnumsurfaces, batchsurfacelist);
                                else
                                        R_Shadow_RenderSurfacesLighting(ent, texture, batchnumsurfaces, batchsurfacelist);
                                batchnumsurfaces = 0;
@@ -861,7 +847,10 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
        }
        if (batchnumsurfaces > 0)
        {
-               R_Shadow_RenderSurfacesLighting(ent, texture, batchnumsurfaces, batchsurfacelist);
+               if (texture->currentmaterialflags & MATERIALFLAG_TRANSPARENT)
+                       R_Q1BSP_DrawLight_TransparentBatch(ent, texture, batchnumsurfaces, batchsurfacelist);
+               else
+                       R_Shadow_RenderSurfacesLighting(ent, texture, batchnumsurfaces, batchsurfacelist);
                batchnumsurfaces = 0;
        }
        qglEnable(GL_CULL_FACE);
@@ -946,8 +935,6 @@ void GL_Surf_Init(void)
        Cvar_RegisterVariable(&r_lockpvs);
        Cvar_RegisterVariable(&r_lockvisibility);
        Cvar_RegisterVariable(&r_useportalculling);
-       Cvar_RegisterVariable(&r_drawcollisionbrushes_polygonfactor);
-       Cvar_RegisterVariable(&r_drawcollisionbrushes_polygonoffset);
        Cvar_RegisterVariable(&r_q3bsp_renderskydepth);
 
        Cmd_AddCommand ("r_replacemaptexture", R_ReplaceWorldTexture, "override a map texture for testing purposes");   // By [515]