Merge pull request #1133 from protocultor/lightmapchain_fix

Infinite loop in R_GetBrushesLighting() function, hangs the game
This commit is contained in:
Yamagi 2024-07-31 20:22:57 +02:00 committed by GitHub
commit 3aa051c6d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 4 additions and 2 deletions

View File

@ -1143,9 +1143,9 @@ R_GetBrushesLighting(void)
for (k = 0; k < currentmodel->nummodelsurfaces; k++, surf++) for (k = 0; k < currentmodel->nummodelsurfaces; k++, surf++)
{ {
if (surf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66 | SURF_WARP) if (surf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66 | SURF_WARP)
|| surf->flags & SURF_DRAWTURB) || surf->flags & SURF_DRAWTURB || surf->lmchain_frame == r_framecount)
{ {
continue; continue; // either not affected by light, or already in the chain
} }
// find which side of the node we are on // find which side of the node we are on
@ -1155,6 +1155,7 @@ R_GetBrushesLighting(void)
if (((surf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || if (((surf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) ||
(!(surf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) (!(surf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON)))
{ {
surf->lmchain_frame = r_framecount; // don't add this twice to the chain
surf->lightmapchain = gl_lms.lightmap_surfaces[surf->lightmaptexturenum]; surf->lightmapchain = gl_lms.lightmap_surfaces[surf->lightmaptexturenum];
gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf; gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf;
} }

View File

@ -59,6 +59,7 @@ typedef struct msurface_s
glpoly_t *polys; /* multiple if warped */ glpoly_t *polys; /* multiple if warped */
struct msurface_s *texturechain; struct msurface_s *texturechain;
struct msurface_s *lightmapchain; struct msurface_s *lightmapchain;
int lmchain_frame; // avoids adding this surface twice to the lightmap chain
mtexinfo_t *texinfo; mtexinfo_t *texinfo;