mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-04-22 02:40:57 +00:00
WIP surface list for raytracing
This commit is contained in:
parent
3a6d5586ef
commit
5fc7a4dc41
3 changed files with 15 additions and 8 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue