From 7e292fbfece37edc25d8898672a3cc6c09d6359d Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Mon, 19 Jun 2017 15:01:27 -0400 Subject: [PATCH] - Partially fixed the 3d floors + fogboundary issue. There's still an issue when a sprite appears in front of a fog boundary, but because this is already a huge visual improvement I am going to go ahead and push this. --- src/swrenderer/scene/r_translucent_pass.cpp | 4 ++++ src/swrenderer/segments/r_drawsegment.cpp | 1 + src/swrenderer/segments/r_drawsegment.h | 1 + 3 files changed, 6 insertions(+) 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;