Fix not lights in the internal lightmapper

This commit is contained in:
Magnus Norddahl 2024-08-13 23:35:32 +02:00
commit e9946bead2
2 changed files with 28 additions and 26 deletions

View file

@ -207,24 +207,24 @@ public:
void UploadAll()
{
UploadRanges.Vertex.Clear();
UploadRanges.Vertex.Push({ 0, (int)Mesh.Vertices.Size() });
UploadRanges.Index.Clear();
UploadRanges.Index.Push({ 0, (int)Mesh.Indexes.Size() });
UploadRanges.SurfaceIndex.Clear();
UploadRanges.SurfaceIndex.Push({ 0, (int)Mesh.SurfaceIndexes.Size() });
UploadRanges.Surface.Clear();
UploadRanges.Surface.Push({ 0, GetSurfaceCount() });
UploadRanges.UniformIndexes.Clear();
UploadRanges.UniformIndexes.Push({ 0, (int)Mesh.UniformIndexes.Size() });
UploadRanges.Uniforms.Clear();
UploadRanges.Uniforms.Push({ 0, (int)Mesh.Uniforms.Size() });
UploadRanges.Portals.Clear();
UploadRanges.Portals.Push({ 0, (int)Portals.Size() });
UploadRanges.Light.Clear();
UploadRanges.Light.Push({ 0, (int)Mesh.Lights.Size() });
UploadRanges.LightIndex.Clear();
UploadRanges.LightIndex.Push({ 0, (int)Mesh.LightIndexes.Size() });
ClearRanges(UploadRanges.Vertex);
AddRange(UploadRanges.Vertex, { 0, (int)Mesh.Vertices.Size() });
ClearRanges(UploadRanges.Index);
AddRange(UploadRanges.Index, { 0, (int)Mesh.Indexes.Size() });
ClearRanges(UploadRanges.SurfaceIndex);
AddRange(UploadRanges.SurfaceIndex, { 0, (int)Mesh.SurfaceIndexes.Size() });
ClearRanges(UploadRanges.Surface);
AddRange(UploadRanges.Surface, { 0, GetSurfaceCount() });
ClearRanges(UploadRanges.UniformIndexes);
AddRange(UploadRanges.UniformIndexes, { 0, (int)Mesh.UniformIndexes.Size() });
ClearRanges(UploadRanges.Uniforms);
AddRange(UploadRanges.Uniforms, { 0, (int)Mesh.Uniforms.Size() });
ClearRanges(UploadRanges.Portals);
AddRange(UploadRanges.Portals, { 0, (int)Portals.Size() });
ClearRanges(UploadRanges.Light);
AddRange(UploadRanges.Light, { 0, (int)Mesh.Lights.Size() });
ClearRanges(UploadRanges.LightIndex);
AddRange(UploadRanges.LightIndex, { 0, (int)Mesh.LightIndexes.Size() });
}
void UploadCollision()
@ -234,8 +234,16 @@ public:
UploadRanges.Node.Push({ 0, (int)Collision->get_nodes().size() });
}
void ClearRanges(TArray<MeshBufferRange>& ranges)
{
ranges.Clear();
}
void AddRange(TArray<MeshBufferRange>& ranges, MeshBufferRange range)
{
if (range.Size <= 0)
return;
auto right = std::lower_bound(ranges.begin(), ranges.end(), range);
bool leftExists = right != ranges.begin();

View file

@ -205,6 +205,7 @@ void DoomLevelMesh::CreateLights(FLevelLocals& doomMap)
int lightindex = GetLightIndex(light, portalgroup);
if (lightindex >= 0)
{
AddRange(UploadRanges.LightIndex, { (int)Mesh.LightIndexes.Size(), 1 });
Mesh.LightIndexes.Push(lightindex);
surface.LightList.Count++;
}
@ -266,6 +267,7 @@ int DoomLevelMesh::GetLightIndex(FDynamicLight* light, int portalgroup)
int lightindex = Mesh.Lights.Size();
light->levelmesh[index].index = lightindex + 1;
light->levelmesh[index].portalgroup = portalgroup;
AddRange(UploadRanges.Light, { (int)Mesh.Lights.Size(), 1 });
Mesh.Lights.Push(meshlight);
return lightindex;
}
@ -273,14 +275,6 @@ int DoomLevelMesh::GetLightIndex(FDynamicLight* light, int portalgroup)
void DoomLevelMesh::BeginFrame(FLevelLocals& doomMap)
{
CreateLights(doomMap);
#if 0
static_cast<DoomLevelSubmesh*>(DynamicMesh.get())->Update(doomMap);
if (doomMap.lightmaps)
{
DynamicMesh->SetupTileTransforms();
DynamicMesh->PackLightmapAtlas(StaticMesh->LMTextureCount);
}
#endif
}
bool DoomLevelMesh::TraceSky(const FVector3& start, FVector3 direction, float dist)