From 192cdcd9cb8e378d1b47fc41ac689419903a90a0 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sat, 9 Mar 2024 13:28:50 +0100 Subject: [PATCH] Fix null pointer crash for translucent flats with no texture --- src/rendering/hwrenderer/doom_levelmesh.cpp | 12 ++++++------ src/rendering/hwrenderer/doom_levelmesh.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index e5eec3dc2..2df459bba 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -405,16 +405,16 @@ void DoomLevelMesh::UpdateFlat(FLevelLocals& doomMap, unsigned int sectorIndex) state.ClearDepthBias(); state.EnableTexture(true); state.EnableBrightmap(true); - CreateFlatSurface(disp, state, result.list); + CreateFlatSurface(disp, state, result.list, false, false); - CreateFlatSurface(disp, state, result.portals, true); + CreateFlatSurface(disp, state, result.portals, true, false); // final pass: translucent stuff state.AlphaFunc(Alpha_GEqual, gl_mask_sprite_threshold); state.SetRenderStyle(STYLE_Translucent); - CreateFlatSurface(disp, state, result.translucentborder); + CreateFlatSurface(disp, state, result.translucentborder, false, true); state.SetDepthMask(false); - CreateFlatSurface(disp, state, result.translucent); + CreateFlatSurface(disp, state, result.translucent, false, true); state.AlphaFunc(Alpha_GEqual, 0.f); state.SetDepthMask(true); state.SetRenderStyle(STYLE_Normal); @@ -594,7 +594,7 @@ int DoomLevelMesh::GetSampleDimension(const DoomLevelMeshSurface& surf, uint16_t return sampleDimension; } -void DoomLevelMesh::CreateFlatSurface(HWFlatDispatcher& disp, MeshBuilder& state, TArray& list, bool isSky) +void DoomLevelMesh::CreateFlatSurface(HWFlatDispatcher& disp, MeshBuilder& state, TArray& list, bool isSky, bool translucent) { for (HWFlat& flatpart : list) { @@ -620,7 +620,7 @@ void DoomLevelMesh::CreateFlatSurface(HWFlatDispatcher& disp, MeshBuilder& state state.AlphaFunc(Alpha_GEqual, 0.f); } - flatpart.DrawFlat(&disp, state, false); + flatpart.DrawFlat(&disp, state, translucent); } VSMatrix textureMatrix; diff --git a/src/rendering/hwrenderer/doom_levelmesh.h b/src/rendering/hwrenderer/doom_levelmesh.h index 8a1d69dbe..9b407f7b9 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.h +++ b/src/rendering/hwrenderer/doom_levelmesh.h @@ -78,7 +78,7 @@ private: void SortIndexes(); void CreateWallSurface(side_t* side, HWWallDispatcher& disp, MeshBuilder& state, TArray& list, bool isPortal, bool translucent); - void CreateFlatSurface(HWFlatDispatcher& disp, MeshBuilder& state, TArray& list, bool isSky = false); + void CreateFlatSurface(HWFlatDispatcher& disp, MeshBuilder& state, TArray& list, bool isSky, bool translucent); void LinkSurfaces(FLevelLocals& doomMap);