diff --git a/src/swrenderer/scene/r_translucent_pass.cpp b/src/swrenderer/scene/r_translucent_pass.cpp index 6afa2fcc9b..2e15a0a21a 100644 --- a/src/swrenderer/scene/r_translucent_pass.cpp +++ b/src/swrenderer/scene/r_translucent_pass.cpp @@ -163,8 +163,12 @@ namespace swrenderer if (ds->fake) continue; if (ds->maskedtexturecol != nullptr || ds->bFogBoundary) { + if (renew && ds->bRenewDrawn) + continue; RenderDrawSegment renderer(Thread); renderer.Render(ds, ds->x1, ds->x2); + if (renew && ds->bFogBoundary) + ds->bRenewDrawn = true; } } } diff --git a/src/swrenderer/segments/r_drawsegment.cpp b/src/swrenderer/segments/r_drawsegment.cpp index 6d8d507077..846800e035 100644 --- a/src/swrenderer/segments/r_drawsegment.cpp +++ b/src/swrenderer/segments/r_drawsegment.cpp @@ -85,6 +85,7 @@ namespace swrenderer void DrawSegmentList::Push(DrawSegment *segment) { + segment->bRenewDrawn = false; Segments.Push(segment); } diff --git a/src/swrenderer/segments/r_drawsegment.h b/src/swrenderer/segments/r_drawsegment.h index 5480ac4f24..26751b2e66 100644 --- a/src/swrenderer/segments/r_drawsegment.h +++ b/src/swrenderer/segments/r_drawsegment.h @@ -39,6 +39,7 @@ namespace swrenderer uint8_t silhouette; // 0=none, 1=bottom, 2=top, 3=both uint8_t bFogBoundary; uint8_t bFakeBoundary; // for fake walls + bool bRenewDrawn; int shade; bool foggy;