frog
This commit is contained in:
@@ -48,6 +48,7 @@ void MaterialLoader::import(MaterialImportArgs args, PMaterialAsset asset)
|
|||||||
Gfx::ODescriptorLayout layout = graphics->createDescriptorLayout(materialName + "Layout");
|
Gfx::ODescriptorLayout layout = graphics->createDescriptorLayout(materialName + "Layout");
|
||||||
//Shader file needs to conform to the slang standard, which prohibits _
|
//Shader file needs to conform to the slang standard, which prohibits _
|
||||||
materialName.erase(std::remove(materialName.begin(), materialName.end(), '_'), materialName.end());
|
materialName.erase(std::remove(materialName.begin(), materialName.end(), '_'), materialName.end());
|
||||||
|
materialName.erase(std::remove(materialName.begin(), materialName.end(), '-'), materialName.end());
|
||||||
|
|
||||||
uint32 uniformBufferOffset = 0;
|
uint32 uniformBufferOffset = 0;
|
||||||
uint32 bindingCounter = 0; // Uniform buffers are always binding 0
|
uint32 bindingCounter = 0; // Uniform buffers are always binding 0
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ int main()
|
|||||||
//AssetImporter::importMesh(MeshImportArgs{
|
//AssetImporter::importMesh(MeshImportArgs{
|
||||||
// .filePath = sourcePath / "old_resources/models/arena.fbx",
|
// .filePath = sourcePath / "old_resources/models/arena.fbx",
|
||||||
// });
|
// });
|
||||||
|
AssetImporter::importMesh(MeshImportArgs{
|
||||||
|
.filePath = sourcePath / "old_resources/models/frog.fbx",
|
||||||
|
});
|
||||||
AssetImporter::importMesh(MeshImportArgs{
|
AssetImporter::importMesh(MeshImportArgs{
|
||||||
.filePath = sourcePath / "old_resources/models/train.fbx",
|
.filePath = sourcePath / "old_resources/models/train.fbx",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ struct ShaderPermutation
|
|||||||
char vertexMeshFile[32];
|
char vertexMeshFile[32];
|
||||||
char fragmentFile[32];
|
char fragmentFile[32];
|
||||||
char vertexDataName[32];
|
char vertexDataName[32];
|
||||||
char materialName[32];
|
char materialName[64];
|
||||||
uint8 hasFragment : 1;
|
uint8 hasFragment : 1;
|
||||||
uint8 useMeshShading : 1;
|
uint8 useMeshShading : 1;
|
||||||
uint8 hasTaskShader : 1;
|
uint8 hasTaskShader : 1;
|
||||||
|
|||||||
@@ -102,10 +102,10 @@ void VertexData::loadMesh(MeshId id, Array<uint32> loadedIndices, Array<Meshlet>
|
|||||||
Meshlet& m = loadedMeshlets[currentMesh + i];
|
Meshlet& m = loadedMeshlets[currentMesh + i];
|
||||||
uint32 vertexOffset = vertexIndices.size();
|
uint32 vertexOffset = vertexIndices.size();
|
||||||
vertexIndices.resize(vertexOffset + m.numVertices);
|
vertexIndices.resize(vertexOffset + m.numVertices);
|
||||||
std::memcpy(vertexIndices.data() + vertexOffset, m.uniqueVertices.data(), m.numVertices * sizeof(uint32));
|
std::memcpy(vertexIndices.data() + vertexOffset, m.uniqueVertices, m.numVertices * sizeof(uint32));
|
||||||
uint32 primitiveOffset = primitiveIndices.size();
|
uint32 primitiveOffset = primitiveIndices.size();
|
||||||
primitiveIndices.resize(primitiveOffset + (m.numPrimitives * 3));
|
primitiveIndices.resize(primitiveOffset + (m.numPrimitives * 3));
|
||||||
std::memcpy(primitiveIndices.data() + primitiveOffset, m.primitiveLayout.data(), m.numPrimitives * 3 * sizeof(uint8));
|
std::memcpy(primitiveIndices.data() + primitiveOffset, m.primitiveLayout, m.numPrimitives * 3 * sizeof(uint8));
|
||||||
meshlets.add(MeshletDescription{
|
meshlets.add(MeshletDescription{
|
||||||
.boundingBox = MeshletAABB(),
|
.boundingBox = MeshletAABB(),
|
||||||
.vertexCount = m.numVertices,
|
.vertexCount = m.numVertices,
|
||||||
@@ -230,22 +230,6 @@ VertexData::VertexData()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Meshlet::save(ArchiveBuffer& buffer) const
|
|
||||||
{
|
|
||||||
Serialization::save(buffer, uniqueVertices);
|
|
||||||
Serialization::save(buffer, primitiveLayout);
|
|
||||||
Serialization::save(buffer, numVertices);
|
|
||||||
Serialization::save(buffer, numPrimitives);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Meshlet::load(ArchiveBuffer& buffer)
|
|
||||||
{
|
|
||||||
Serialization::load(buffer, uniqueVertices);
|
|
||||||
Serialization::load(buffer, primitiveLayout);
|
|
||||||
Serialization::load(buffer, numVertices);
|
|
||||||
Serialization::load(buffer, numPrimitives);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Seele::Meshlet::buildFromIndexBuffer(const Array<uint32>& indices, Array<Meshlet>& meshlets)
|
void Seele::Meshlet::buildFromIndexBuffer(const Array<uint32>& indices, Array<Meshlet>& meshlets)
|
||||||
{
|
{
|
||||||
std::set<uint32> uniqueVertices;
|
std::set<uint32> uniqueVertices;
|
||||||
|
|||||||
@@ -24,12 +24,10 @@ struct MeshId
|
|||||||
};
|
};
|
||||||
struct Meshlet
|
struct Meshlet
|
||||||
{
|
{
|
||||||
StaticArray<uint32, Gfx::numVerticesPerMeshlet> uniqueVertices; // unique vertiex indices in the vertex data
|
uint32 uniqueVertices[Gfx::numVerticesPerMeshlet]; // unique vertiex indices in the vertex data
|
||||||
StaticArray<uint8, Gfx::numPrimitivesPerMeshlet * 3> primitiveLayout; // indices into the uniqueVertices array, only uint8 needed
|
uint8 primitiveLayout[Gfx::numPrimitivesPerMeshlet * 3]; // indices into the uniqueVertices array, only uint8 needed
|
||||||
uint32 numVertices;
|
uint32 numVertices;
|
||||||
uint32 numPrimitives;
|
uint32 numPrimitives;
|
||||||
void save(ArchiveBuffer& buffer) const;
|
|
||||||
void load(ArchiveBuffer& buffer);
|
|
||||||
static void buildFromIndexBuffer(const Array<uint32>& indices, Array<Meshlet>& meshlets);
|
static void buildFromIndexBuffer(const Array<uint32>& indices, Array<Meshlet>& meshlets);
|
||||||
};
|
};
|
||||||
class VertexData
|
class VertexData
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ void Graphics::pickPhysicalDevice()
|
|||||||
{
|
{
|
||||||
if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0)
|
if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0)
|
||||||
{
|
{
|
||||||
meshShadingEnabled = true;
|
//meshShadingEnabled = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,14 +96,14 @@ namespace Serialization
|
|||||||
buffer.readBytes(type.data(), length * sizeof(char));
|
buffer.readBytes(type.data(), length * sizeof(char));
|
||||||
}
|
}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void save(ArchiveBuffer& buffer, const Array<T>& type) requires (std::is_integral_v<T> || std::is_floating_point_v<T>)
|
static void save(ArchiveBuffer& buffer, const Array<T>& type) requires (std::is_trivially_copyable_v<T>)
|
||||||
{
|
{
|
||||||
uint64 length = type.size();
|
uint64 length = type.size();
|
||||||
buffer.writeBytes(&length, sizeof(uint64));
|
buffer.writeBytes(&length, sizeof(uint64));
|
||||||
buffer.writeBytes(type.data(), sizeof(T) * type.size());
|
buffer.writeBytes(type.data(), sizeof(T) * type.size());
|
||||||
}
|
}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void load(ArchiveBuffer& buffer, Array<T>& type) requires (std::is_integral_v<T> || std::is_floating_point_v<T>)
|
static void load(ArchiveBuffer& buffer, Array<T>& type) requires (std::is_trivially_copyable_v<T>)
|
||||||
{
|
{
|
||||||
uint64 length = 0;
|
uint64 length = 0;
|
||||||
buffer.readBytes(&length, sizeof(uint64));
|
buffer.readBytes(&length, sizeof(uint64));
|
||||||
@@ -111,12 +111,12 @@ namespace Serialization
|
|||||||
buffer.readBytes(type.data(), sizeof(T) * type.size());
|
buffer.readBytes(type.data(), sizeof(T) * type.size());
|
||||||
}
|
}
|
||||||
template<typename T, size_t N>
|
template<typename T, size_t N>
|
||||||
static void save(ArchiveBuffer& buffer, const StaticArray<T, N>& type) requires (std::is_integral_v<T> || std::is_floating_point_v<T>)
|
static void save(ArchiveBuffer& buffer, const StaticArray<T, N>& type) requires (std::is_trivially_copyable_v<T>)
|
||||||
{
|
{
|
||||||
buffer.writeBytes(type.data(), sizeof(T) * N);
|
buffer.writeBytes(type.data(), sizeof(T) * N);
|
||||||
}
|
}
|
||||||
template<typename T, size_t N>
|
template<typename T, size_t N>
|
||||||
static void load(ArchiveBuffer& buffer, StaticArray<T, N>& type) requires (std::is_integral_v<T> || std::is_floating_point_v<T>)
|
static void load(ArchiveBuffer& buffer, StaticArray<T, N>& type) requires (std::is_trivially_copyable_v<T>)
|
||||||
{
|
{
|
||||||
buffer.readBytes(type.data(), sizeof(T) * N);
|
buffer.readBytes(type.data(), sizeof(T) * N);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user