Create VkLevelMeshUploader
This commit is contained in:
parent
ed7da1ae25
commit
486a08e882
8 changed files with 425 additions and 329 deletions
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue