diff --git a/src/common/rendering/hwrenderer/data/hw_renderstate.h b/src/common/rendering/hwrenderer/data/hw_renderstate.h index 5b5fa72fa..e24c58542 100644 --- a/src/common/rendering/hwrenderer/data/hw_renderstate.h +++ b/src/common/rendering/hwrenderer/data/hw_renderstate.h @@ -263,7 +263,7 @@ protected: EPassType mPassType = NORMAL_PASS; std::atomic mActiveLightmapSurfaceBufferIndex; - TArray mActiveLightmapSurfacesBuffer; + TArray mActiveLightmapSurfacesBuffer; public: uint64_t firstFrame = 0; @@ -746,7 +746,7 @@ public: int index = mActiveLightmapSurfaceBufferIndex.fetch_add(1); if (index < mActiveLightmapSurfacesBuffer.Size()) { - mActiveLightmapSurfacesBuffer[index] = surfaceIndex; + mActiveLightmapSurfacesBuffer[index] = surface; surface->needsUpdate = false; } } diff --git a/src/common/rendering/v_video.h b/src/common/rendering/v_video.h index 280904212..c6eafc1f6 100644 --- a/src/common/rendering/v_video.h +++ b/src/common/rendering/v_video.h @@ -156,7 +156,7 @@ public: virtual bool IsPoly() { return false; } virtual bool CompileNextShader() { return true; } virtual void SetLevelMesh(LevelMesh *mesh) { } - virtual void UpdateLightmaps(const TArray& surfaceIndices) {} + virtual void UpdateLightmaps(const TArray& surfaces) {} bool allowSSBO() const { #ifndef HW_BLOCK_SSBO diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp index 681df71cf..1210f1a5d 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmap.cpp @@ -49,7 +49,7 @@ VkLightmap::~VkLightmap() #include #endif -void VkLightmap::Raytrace(LevelMesh* level, const TArray& surfaceIndices) +void VkLightmap::Raytrace(LevelMesh* level, const TArray& surfaces) { bool newLevel = (mesh != level); mesh = level; @@ -68,9 +68,9 @@ void VkLightmap::Raytrace(LevelMesh* level, const TArray& surfaceIndices) lightmapRaytrace.Clock(); lightmapRaytraceLast.ResetAndClock(); - CreateAtlasImages(surfaceIndices); + CreateAtlasImages(surfaces); -#if 0 +#if 0 // SmoothGroups TArray allSurfaces; std::set s; @@ -91,12 +91,7 @@ void VkLightmap::Raytrace(LevelMesh* level, const TArray& surfaceIndices) } } #else - for (auto& surface : surfaceIndices) - { - mesh->GetSurface(surface)->needsUpdate = false; - } - - const auto& allSurfaces = surfaceIndices; + const auto& allSurfaces = surfaces; #endif UploadUniforms(); @@ -125,7 +120,7 @@ void VkLightmap::Raytrace(LevelMesh* level, const TArray& surfaceIndices) lightmapRaytraceLast.Unclock(); } -void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArray& surfaceIndices) +void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArray& surfaces) { LightmapImage& img = atlasImages[pageIndex]; @@ -147,9 +142,9 @@ void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArray& surfaceIn cmdbuffer->bindDescriptorSet(VK_PIPELINE_BIND_POINT_GRAPHICS, raytrace.pipelineLayout.get(), 1, raytrace.descriptorSet1.get()); } - for (int i = 0, count = surfaceIndices.Size(); i < count; i++) + for (int i = 0, count = surfaces.Size(); i < count; i++) { - LevelMeshSurface* targetSurface = mesh->GetSurface(surfaceIndices[i]); + LevelMeshSurface* targetSurface = surfaces[i]; if (targetSurface->lightmapperAtlasPage != pageIndex) continue; @@ -258,7 +253,7 @@ void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArray& surfaceIn fb->GetCommands()->GetTransferCommands()->endRenderPass(); } -void VkLightmap::CreateAtlasImages(const TArray& surfaceIndices) +void VkLightmap::CreateAtlasImages(const TArray& surfaces) { for (auto& page : atlasImages) { @@ -271,9 +266,9 @@ void VkLightmap::CreateAtlasImages(const TArray& surfaceIndices) size_t pageIndex = atlasImages.size(); - for (int i = 0, count = surfaceIndices.Size(); i < count; i++) + for (int i = 0, count = surfaces.Size(); i < count; i++) { - LevelMeshSurface* surface = mesh->GetSurface(surfaceIndices[i]); + LevelMeshSurface* surface = surfaces[i]; //for (int i = 0, count = mesh->GetSurfaceCount(); i < count; i++) //{ //LevelMeshSurface* surface = mesh->GetSurface(i); @@ -458,14 +453,14 @@ void VkLightmap::BlurAtlasImage(size_t pageIndex) } } -void VkLightmap::CopyAtlasImageResult(size_t pageIndex, const TArray& surfaceIndices) +void VkLightmap::CopyAtlasImageResult(size_t pageIndex, const TArray& surfaces) { LightmapImage& img = atlasImages[pageIndex]; std::vector regions; - for (int i = 0, count = surfaceIndices.Size(); i < count; i++) + for (int i = 0, count = surfaces.Size(); i < count; i++) { - LevelMeshSurface* surface = mesh->GetSurface(surfaceIndices[i]); + LevelMeshSurface* surface = surfaces[i]; if (surface->lightmapperAtlasPage != pageIndex) continue; diff --git a/src/common/rendering/vulkan/accelstructs/vk_lightmap.h b/src/common/rendering/vulkan/accelstructs/vk_lightmap.h index bce8d0c72..b8493172c 100644 --- a/src/common/rendering/vulkan/accelstructs/vk_lightmap.h +++ b/src/common/rendering/vulkan/accelstructs/vk_lightmap.h @@ -90,17 +90,17 @@ public: VkLightmap(VulkanRenderDevice* fb); ~VkLightmap(); - void Raytrace(LevelMesh* level, const TArray& surfaceIndices); + void Raytrace(LevelMesh* level, const TArray& surfaces); private: void UpdateAccelStructDescriptors(); void UploadUniforms(); - void CreateAtlasImages(const TArray& surfaceIndices); - void RenderAtlasImage(size_t pageIndex, const TArray& surfaceIndices); + void CreateAtlasImages(const TArray& surfaces); + void RenderAtlasImage(size_t pageIndex, const TArray& surfaces); void ResolveAtlasImage(size_t pageIndex); void BlurAtlasImage(size_t pageIndex); - void CopyAtlasImageResult(size_t pageIndex, const TArray& surfaceIndices); + void CopyAtlasImageResult(size_t pageIndex, const TArray& surfaces); LightmapImage CreateImage(int width, int height); diff --git a/src/common/rendering/vulkan/vk_renderdevice.cpp b/src/common/rendering/vulkan/vk_renderdevice.cpp index 3505df6b8..7cb5b3543 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.cpp +++ b/src/common/rendering/vulkan/vk_renderdevice.cpp @@ -557,15 +557,15 @@ void VulkanRenderDevice::SetLevelMesh(LevelMesh* mesh) } } -void VulkanRenderDevice::UpdateLightmaps(const TArray& surfaceIndices) +void VulkanRenderDevice::UpdateLightmaps(const TArray& surfaces) { - if (surfaceIndices.Size() > 0) + if (surfaces.Size() > 0) { auto levelMesh = lastMesh; // There's nothing more permanent than a temporary solution if (levelMesh) { - GetLightmap()->Raytrace(levelMesh, surfaceIndices); + GetLightmap()->Raytrace(levelMesh, surfaces); } } } diff --git a/src/common/rendering/vulkan/vk_renderdevice.h b/src/common/rendering/vulkan/vk_renderdevice.h index 4b4927431..9de2e5381 100644 --- a/src/common/rendering/vulkan/vk_renderdevice.h +++ b/src/common/rendering/vulkan/vk_renderdevice.h @@ -63,7 +63,7 @@ public: void AmbientOccludeScene(float m5) override; void SetSceneRenderTarget(bool useSSAO) override; void SetLevelMesh(LevelMesh* mesh) override; - void UpdateLightmaps(const TArray& surfaceIndices) override; + void UpdateLightmaps(const TArray& surfaces) override; void SetShadowMaps(const TArray& lights, hwrenderer::LevelAABBTree* tree, bool newTree) override; void SetSaveBuffers(bool yes) override; void ImageTransitionScene(bool unknown) override; diff --git a/src/rendering/hwrenderer/scene/hw_bsp.cpp b/src/rendering/hwrenderer/scene/hw_bsp.cpp index 6bac11510..69aae2f79 100644 --- a/src/rendering/hwrenderer/scene/hw_bsp.cpp +++ b/src/rendering/hwrenderer/scene/hw_bsp.cpp @@ -867,17 +867,15 @@ void UpdateLightmaps(DFrameBuffer* screen, FRenderState& RenderState) if (size < lm_background_updates) { - int index = 0; for (auto& e : level.levelMesh->Surfaces) { if (e.needsUpdate) { - list.Push(index); + list.Push(&e); if (list.Size() >= lm_background_updates) break; } - ++index; } }