diff --git a/src/swrenderer/scene/r_translucent_pass.cpp b/src/swrenderer/scene/r_translucent_pass.cpp index 862b47a71..67b060095 100644 --- a/src/swrenderer/scene/r_translucent_pass.cpp +++ b/src/swrenderer/scene/r_translucent_pass.cpp @@ -61,7 +61,6 @@ namespace swrenderer void RenderTranslucentPass::Clear() { VisibleSpriteList::Instance()->Clear(); - DrewAVoxel = false; } void RenderTranslucentPass::CollectPortals() @@ -161,7 +160,7 @@ namespace swrenderer void RenderTranslucentPass::Render() { CollectPortals(); - VisibleSpriteList::Instance()->Sort(DrewAVoxel); + VisibleSpriteList::Instance()->Sort(); Clip3DFloors *clip3d = Clip3DFloors::Instance(); if (clip3d->height_top == nullptr) diff --git a/src/swrenderer/scene/r_translucent_pass.h b/src/swrenderer/scene/r_translucent_pass.h index 6e5ea778d..64695e0db 100644 --- a/src/swrenderer/scene/r_translucent_pass.h +++ b/src/swrenderer/scene/r_translucent_pass.h @@ -34,8 +34,6 @@ namespace swrenderer void Clear(); void Render(); - bool DrewAVoxel = false; - bool ClipSpriteColumnWithPortals(int x, VisibleSprite *spr); private: diff --git a/src/swrenderer/things/r_visiblespritelist.cpp b/src/swrenderer/things/r_visiblespritelist.cpp index 395499ab1..76706d7bc 100644 --- a/src/swrenderer/things/r_visiblespritelist.cpp +++ b/src/swrenderer/things/r_visiblespritelist.cpp @@ -39,6 +39,7 @@ namespace swrenderer Sprites.Clear(); StartIndices.Clear(); SortedSprites.Clear(); + DrewAVoxel = false; } void VisibleSpriteList::PushPortal() @@ -52,13 +53,17 @@ namespace swrenderer StartIndices.Pop(); } - void VisibleSpriteList::Push(VisibleSprite *sprite) + void VisibleSpriteList::Push(VisibleSprite *sprite, bool isVoxel) { Sprites.Push(sprite); + if (isVoxel) + DrewAVoxel = true; } - void VisibleSpriteList::Sort(bool compare2d) + void VisibleSpriteList::Sort() { + bool compare2d = DrewAVoxel; + unsigned int first = StartIndices.Size() == 0 ? 0 : StartIndices.Last(); unsigned int count = Sprites.Size() - first; diff --git a/src/swrenderer/things/r_visiblespritelist.h b/src/swrenderer/things/r_visiblespritelist.h index d70fc88d4..99370c250 100644 --- a/src/swrenderer/things/r_visiblespritelist.h +++ b/src/swrenderer/things/r_visiblespritelist.h @@ -26,13 +26,14 @@ namespace swrenderer void Clear(); void PushPortal(); void PopPortal(); - void Push(VisibleSprite *sprite); - void Sort(bool compare2d); + void Push(VisibleSprite *sprite, bool isVoxel = false); + void Sort(); TArray SortedSprites; private: TArray Sprites; TArray StartIndices; + bool DrewAVoxel = false; }; } diff --git a/src/swrenderer/things/r_voxel.cpp b/src/swrenderer/things/r_voxel.cpp index 481c2c378..8d30f50c9 100644 --- a/src/swrenderer/things/r_voxel.cpp +++ b/src/swrenderer/things/r_voxel.cpp @@ -177,8 +177,7 @@ namespace swrenderer vis->Light.SetColormap(r_SpriteVisibility / MAX(tz, MINZ), spriteshade, basecolormap, fullbright, invertcolormap, fadeToBlack); - VisibleSpriteList::Instance()->Push(vis); - RenderTranslucentPass::Instance()->DrewAVoxel = true; + VisibleSpriteList::Instance()->Push(vis, true); } void RenderVoxel::Render(short *cliptop, short *clipbottom, int minZ, int maxZ)