WIP surface list for raytracing

This commit is contained in:
RaveYard 2023-09-07 20:22:21 +02:00 committed by Christoph Oelckers
parent 3a6d5586ef
commit 5fc7a4dc41
3 changed files with 15 additions and 8 deletions

View file

@ -31,7 +31,7 @@ VkLightmap::~VkLightmap()
lights.Buffer->Unmap();
}
void VkLightmap::Raytrace(LevelMesh* level)
void VkLightmap::Raytrace(LevelMesh* level, const TArray<LevelMeshSurface*>& surfaces)
{
bool newLevel = (mesh != level);
mesh = level;
@ -46,7 +46,7 @@ void VkLightmap::Raytrace(LevelMesh* level)
for (size_t pageIndex = 0; pageIndex < atlasImages.size(); pageIndex++)
{
RenderAtlasImage(pageIndex);
RenderAtlasImage(pageIndex, surfaces);
}
for (size_t pageIndex = 0; pageIndex < atlasImages.size(); pageIndex++)
@ -57,7 +57,7 @@ void VkLightmap::Raytrace(LevelMesh* level)
}
}
void VkLightmap::RenderAtlasImage(size_t pageIndex)
void VkLightmap::RenderAtlasImage(size_t pageIndex, const TArray<LevelMeshSurface*>& surfaces)
{
LightmapImage& img = atlasImages[pageIndex];
@ -79,9 +79,9 @@ void VkLightmap::RenderAtlasImage(size_t pageIndex)
cmdbuffer->bindDescriptorSet(VK_PIPELINE_BIND_POINT_GRAPHICS, raytrace.pipelineLayout.get(), 1, raytrace.descriptorSet1.get());
}
for (int i = 0, count = mesh->GetSurfaceCount(); i < count; i++)
for (int i = 0, count = surfaces.Size(); i < count; i++)
{
LevelMeshSurface* targetSurface = mesh->GetSurface(i);
LevelMeshSurface* targetSurface = surfaces[i];
if (targetSurface->lightmapperAtlasPage != pageIndex)
continue;

View file

@ -86,14 +86,14 @@ public:
VkLightmap(VulkanRenderDevice* fb);
~VkLightmap();
void Raytrace(LevelMesh* level);
void Raytrace(LevelMesh* level, const TArray<LevelMeshSurface*>& surfaces);
private:
void UpdateAccelStructDescriptors();
void UploadUniforms();
void CreateAtlasImages();
void RenderAtlasImage(size_t pageIndex);
void RenderAtlasImage(size_t pageIndex, const TArray<LevelMeshSurface*>& surfaces);
void ResolveAtlasImage(size_t pageIndex);
void BlurAtlasImage(size_t pageIndex);
void CopyAtlasImageResult(size_t pageIndex);

View file

@ -542,8 +542,15 @@ void VulkanRenderDevice::SetLevelMesh(LevelMesh* mesh)
mesh->UpdateLightLists();
TArray<LevelMeshSurface*> surfaces;
surfaces.Reserve(mesh->GetSurfaceCount());
for (unsigned i = 0, count = mesh->GetSurfaceCount(); i < count; ++i)
{
surfaces[i] = mesh->GetSurface(i);
}
GetTextureManager()->CreateLightmap(mesh->LMTextureSize, mesh->LMTextureCount);
GetLightmap()->Raytrace(mesh);
GetLightmap()->Raytrace(mesh, surfaces);
}
}