Create VkLevelMeshUploader

This commit is contained in:
Magnus Norddahl 2023-12-06 15:57:46 +01:00
commit 486a08e882
8 changed files with 425 additions and 329 deletions

View file

@ -251,7 +251,7 @@ void DoomLevelMesh::DumpMesh(const FString& objFilename, const FString& mtlFilen
auto f = fopen(objFilename.GetChars(), "w");
fprintf(f, "# DoomLevelMesh debug export\n");
fprintf(f, "# MeshVertices: %u, MeshElements: %u, Surfaces: %u\n", submesh->Mesh.Vertices.Size(), submesh->Mesh.Elements.Size(), submesh->Surfaces.Size());
fprintf(f, "# Vertices: %u, Indexes: %u, Surfaces: %u\n", submesh->Mesh.Vertices.Size(), submesh->Mesh.Indexes.Size(), submesh->Surfaces.Size());
fprintf(f, "mtllib %s\n", mtlFilename.GetChars());
double scale = 1 / 10.0;
@ -294,7 +294,7 @@ void DoomLevelMesh::DumpMesh(const FString& objFilename, const FString& mtlFilen
bool useErrorMaterial = false;
int highestUsedAtlasPage = -1;
for (unsigned i = 0, count = submesh->Mesh.Elements.Size(); i + 2 < count; i += 3)
for (unsigned i = 0, count = submesh->Mesh.Indexes.Size(); i + 2 < count; i += 3)
{
auto index = submesh->Mesh.SurfaceIndexes[i / 3];
@ -324,9 +324,9 @@ void DoomLevelMesh::DumpMesh(const FString& objFilename, const FString& mtlFilen
// fprintf(f, "f %d %d %d\n", MeshElements[i] + 1, MeshElements[i + 1] + 1, MeshElements[i + 2] + 1);
fprintf(f, "f %d/%d %d/%d %d/%d\n",
submesh->Mesh.Elements[i + 0] + 1, submesh->Mesh.Elements[i + 0] + 1,
submesh->Mesh.Elements[i + 1] + 1, submesh->Mesh.Elements[i + 1] + 1,
submesh->Mesh.Elements[i + 2] + 1, submesh->Mesh.Elements[i + 2] + 1);
submesh->Mesh.Indexes[i + 0] + 1, submesh->Mesh.Indexes[i + 0] + 1,
submesh->Mesh.Indexes[i + 1] + 1, submesh->Mesh.Indexes[i + 1] + 1,
submesh->Mesh.Indexes[i + 2] + 1, submesh->Mesh.Indexes[i + 2] + 1);
}

View file

@ -65,7 +65,7 @@ void DoomLevelSubmesh::Reset()
Surfaces.Clear();
WallPortals.Clear();
Mesh.Vertices.Clear();
Mesh.Elements.Clear();
Mesh.Indexes.Clear();
Mesh.SurfaceIndexes.Clear();
Mesh.UniformIndexes.Clear();
Mesh.Uniforms.Clear();
@ -328,7 +328,7 @@ void DoomLevelSubmesh::CreateIndexes()
{
LevelSubmeshDrawRange range;
range.PipelineID = it.first >> 32;
range.Start = Mesh.Elements.Size();
range.Start = Mesh.Indexes.Size();
for (unsigned int i : it.second)
{
DoomLevelMeshSurface& s = Surfaces[i];
@ -337,7 +337,7 @@ void DoomLevelSubmesh::CreateIndexes()
FFlatVertex* verts = &Mesh.Vertices[pos];
s.Vertices = verts;
s.startElementIndex = Mesh.Elements.Size();
s.startElementIndex = Mesh.Indexes.Size();
s.numElements = 0;
if (s.Type == ST_CEILING)
@ -346,9 +346,9 @@ void DoomLevelSubmesh::CreateIndexes()
{
if (!IsDegenerate(verts[0].fPos(), verts[j - 1].fPos(), verts[j].fPos()))
{
Mesh.Elements.Push(pos);
Mesh.Elements.Push(pos + j - 1);
Mesh.Elements.Push(pos + j);
Mesh.Indexes.Push(pos);
Mesh.Indexes.Push(pos + j - 1);
Mesh.Indexes.Push(pos + j);
Mesh.SurfaceIndexes.Push((int)i);
s.numElements += 3;
}
@ -360,9 +360,9 @@ void DoomLevelSubmesh::CreateIndexes()
{
if (!IsDegenerate(verts[0].fPos(), verts[j - 1].fPos(), verts[j].fPos()))
{
Mesh.Elements.Push(pos + j);
Mesh.Elements.Push(pos + j - 1);
Mesh.Elements.Push(pos);
Mesh.Indexes.Push(pos + j);
Mesh.Indexes.Push(pos + j - 1);
Mesh.Indexes.Push(pos);
Mesh.SurfaceIndexes.Push((int)i);
s.numElements += 3;
}
@ -372,23 +372,23 @@ void DoomLevelSubmesh::CreateIndexes()
{
if (!IsDegenerate(verts[0].fPos(), verts[2].fPos(), verts[1].fPos()))
{
Mesh.Elements.Push(pos + 0);
Mesh.Elements.Push(pos + 1);
Mesh.Elements.Push(pos + 2);
Mesh.Indexes.Push(pos + 0);
Mesh.Indexes.Push(pos + 1);
Mesh.Indexes.Push(pos + 2);
Mesh.SurfaceIndexes.Push((int)i);
s.numElements += 3;
}
if (!IsDegenerate(verts[0].fPos(), verts[2].fPos(), verts[3].fPos()))
{
Mesh.Elements.Push(pos + 0);
Mesh.Elements.Push(pos + 2);
Mesh.Elements.Push(pos + 3);
Mesh.Indexes.Push(pos + 0);
Mesh.Indexes.Push(pos + 2);
Mesh.Indexes.Push(pos + 3);
Mesh.SurfaceIndexes.Push((int)i);
s.numElements += 3;
}
}
}
range.Count = Mesh.Elements.Size() - range.Start;
range.Count = Mesh.Indexes.Size() - range.Start;
if ((it.first & 1) == 0)
DrawList.Push(range);