From 5912a2c30bde1f2cf46b55c3d267943769402322 Mon Sep 17 00:00:00 2001 From: RaveYard <29225776+MrRaveYard@users.noreply.github.com> Date: Sun, 10 Sep 2023 23:24:00 +0200 Subject: [PATCH] Remove awful hardcoded byte offset hack --- src/common/rendering/hwrenderer/data/hw_levelmesh.h | 1 + src/common/rendering/hwrenderer/data/hw_renderstate.h | 4 ++-- src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp | 2 +- src/rendering/hwrenderer/doom_levelmesh.h | 1 + src/rendering/hwrenderer/scene/hw_bsp.cpp | 4 ++-- src/rendering/hwrenderer/scene/hw_flats.cpp | 6 ++---- src/rendering/hwrenderer/scene/hw_walls.cpp | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_levelmesh.h b/src/common/rendering/hwrenderer/data/hw_levelmesh.h index c4d298a01..f8836df0d 100644 --- a/src/common/rendering/hwrenderer/data/hw_levelmesh.h +++ b/src/common/rendering/hwrenderer/data/hw_levelmesh.h @@ -187,6 +187,7 @@ public: std::unique_ptr Collision; virtual LevelMeshSurface* GetSurface(int index) { return nullptr; } + virtual unsigned GetSurfaceIndex(const LevelMeshSurface* surface) const { return unsigned(-1); } virtual int GetSurfaceCount() { return 0; } virtual void UpdateLightLists() { } diff --git a/src/common/rendering/hwrenderer/data/hw_renderstate.h b/src/common/rendering/hwrenderer/data/hw_renderstate.h index e24c58542..334d2b585 100644 --- a/src/common/rendering/hwrenderer/data/hw_renderstate.h +++ b/src/common/rendering/hwrenderer/data/hw_renderstate.h @@ -739,11 +739,11 @@ public: return SetViewpoint(matrices); } - inline void PushVisibleSurface(int surfaceIndex, LevelMeshSurface* surface) + inline void PushVisibleSurface(LevelMeshSurface* surface) { if (surface->needsUpdate) // TODO atomic? { - int index = mActiveLightmapSurfaceBufferIndex.fetch_add(1); + auto index = mActiveLightmapSurfaceBufferIndex.fetch_add(1); if (index < mActiveLightmapSurfacesBuffer.Size()) { mActiveLightmapSurfacesBuffer[index] = surface; diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp index 7f380013c..66e9572b3 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp @@ -230,7 +230,7 @@ void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArrayGetSurface(0), (char*)targetSurface) / 288; + pc.SurfaceIndex = mesh->GetSurfaceIndex(targetSurface); pc.LightmapOrigin = targetSurface->worldOrigin - targetSurface->worldStepX - targetSurface->worldStepY; pc.LightmapStepX = targetSurface->worldStepX * viewport.width; pc.LightmapStepY = targetSurface->worldStepY * viewport.height; diff --git a/src/rendering/hwrenderer/doom_levelmesh.h b/src/rendering/hwrenderer/doom_levelmesh.h index e9a9aa7fb..cf2314ffc 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.h +++ b/src/rendering/hwrenderer/doom_levelmesh.h @@ -40,6 +40,7 @@ public: void UpdateLightLists() override; LevelMeshSurface* GetSurface(int index) override { return &Surfaces[index]; } + unsigned GetSurfaceIndex(const LevelMeshSurface* surface) const { return std::distance(reinterpret_cast(&Surfaces[0]), reinterpret_cast(surface)); } int GetSurfaceCount() override { return Surfaces.Size(); } diff --git a/src/rendering/hwrenderer/scene/hw_bsp.cpp b/src/rendering/hwrenderer/scene/hw_bsp.cpp index 69aae2f79..996848422 100644 --- a/src/rendering/hwrenderer/scene/hw_bsp.cpp +++ b/src/rendering/hwrenderer/scene/hw_bsp.cpp @@ -865,7 +865,7 @@ void UpdateLightmaps(DFrameBuffer* screen, FRenderState& RenderState) list.Resize(min(list.Size(), unsigned(size))); - if (size < lm_background_updates) + if (size < unsigned(lm_background_updates)) { for (auto& e : level.levelMesh->Surfaces) { @@ -873,7 +873,7 @@ void UpdateLightmaps(DFrameBuffer* screen, FRenderState& RenderState) { list.Push(&e); - if (list.Size() >= lm_background_updates) + if (list.Size() >= unsigned(lm_background_updates)) break; } } diff --git a/src/rendering/hwrenderer/scene/hw_flats.cpp b/src/rendering/hwrenderer/scene/hw_flats.cpp index 68cdf6a00..115731edf 100644 --- a/src/rendering/hwrenderer/scene/hw_flats.cpp +++ b/src/rendering/hwrenderer/scene/hw_flats.cpp @@ -505,15 +505,13 @@ void HWFlat::ProcessSector(HWDrawInfo *di, FRenderState& state, sector_t * front // Lightmaps // - const auto* lm = §or->Level->levelMesh->Surfaces[0]; // temporay hack on top of a temporary hack - for (int i = 0, count = sector->subsectorcount; i < count; ++i) { for (int plane = 0; plane < 2; ++plane) { if (auto lightmap = sector->subsectors[i]->lightmap[plane][0]) { - state.PushVisibleSurface(lightmap - lm, lightmap); + state.PushVisibleSurface(lightmap); } } } @@ -524,7 +522,7 @@ void HWFlat::ProcessSector(HWDrawInfo *di, FRenderState& state, sector_t * front { if (surface) { - state.PushVisibleSurface(surface - lm, surface); + state.PushVisibleSurface(surface); } } } diff --git a/src/rendering/hwrenderer/scene/hw_walls.cpp b/src/rendering/hwrenderer/scene/hw_walls.cpp index 8737e02b8..87a5685ea 100644 --- a/src/rendering/hwrenderer/scene/hw_walls.cpp +++ b/src/rendering/hwrenderer/scene/hw_walls.cpp @@ -1267,7 +1267,7 @@ void HWWall::DoTexture(HWDrawInfo *di, FRenderState& state, int _type,seg_t * se lightmap = seg->sidedef->lightmap[type - RENDERWALL_TOP]; if (lightmap) { - state.PushVisibleSurface(lightmap - &seg->Subsector->sector->Level->levelMesh->Surfaces[0], lightmap); + state.PushVisibleSurface(lightmap); } } else