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++)
{
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
@ -1155,6 +1155,7 @@ R_GetBrushesLighting(void)
if (((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];
gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf;
}

View file

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