From d1475d506eee16fcc2294b0dbee000b1bd94125c Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Mon, 27 Nov 2023 22:50:37 +0100 Subject: [PATCH] frog --- src/Editor/Asset/MaterialLoader.cpp | 3 ++- src/Editor/main.cpp | 3 +++ src/Engine/Graphics/Shader.h | 2 +- src/Engine/Graphics/VertexData.cpp | 20 ++------------------ src/Engine/Graphics/VertexData.h | 6 ++---- src/Engine/Graphics/Vulkan/Graphics.cpp | 2 +- src/Engine/Serialization/Serialization.h | 8 ++++---- 7 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/Editor/Asset/MaterialLoader.cpp b/src/Editor/Asset/MaterialLoader.cpp index 4b8b171..b95173a 100644 --- a/src/Editor/Asset/MaterialLoader.cpp +++ b/src/Editor/Asset/MaterialLoader.cpp @@ -48,7 +48,8 @@ void MaterialLoader::import(MaterialImportArgs args, PMaterialAsset asset) Gfx::ODescriptorLayout layout = graphics->createDescriptorLayout(materialName + "Layout"); //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()); + uint32 uniformBufferOffset = 0; uint32 bindingCounter = 0; // Uniform buffers are always binding 0 int32 uniformBinding = -1; diff --git a/src/Editor/main.cpp b/src/Editor/main.cpp index 7ecfc79..f1865da 100644 --- a/src/Editor/main.cpp +++ b/src/Editor/main.cpp @@ -46,6 +46,9 @@ int main() //AssetImporter::importMesh(MeshImportArgs{ // .filePath = sourcePath / "old_resources/models/arena.fbx", // }); + AssetImporter::importMesh(MeshImportArgs{ + .filePath = sourcePath / "old_resources/models/frog.fbx", + }); AssetImporter::importMesh(MeshImportArgs{ .filePath = sourcePath / "old_resources/models/train.fbx", }); diff --git a/src/Engine/Graphics/Shader.h b/src/Engine/Graphics/Shader.h index 76bd909..36102cf 100644 --- a/src/Engine/Graphics/Shader.h +++ b/src/Engine/Graphics/Shader.h @@ -57,7 +57,7 @@ struct ShaderPermutation char vertexMeshFile[32]; char fragmentFile[32]; char vertexDataName[32]; - char materialName[32]; + char materialName[64]; uint8 hasFragment : 1; uint8 useMeshShading : 1; uint8 hasTaskShader : 1; diff --git a/src/Engine/Graphics/VertexData.cpp b/src/Engine/Graphics/VertexData.cpp index 4d32599..0780d48 100644 --- a/src/Engine/Graphics/VertexData.cpp +++ b/src/Engine/Graphics/VertexData.cpp @@ -102,10 +102,10 @@ void VertexData::loadMesh(MeshId id, Array loadedIndices, Array Meshlet& m = loadedMeshlets[currentMesh + i]; uint32 vertexOffset = vertexIndices.size(); 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(); 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{ .boundingBox = MeshletAABB(), .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& indices, Array& meshlets) { std::set uniqueVertices; diff --git a/src/Engine/Graphics/VertexData.h b/src/Engine/Graphics/VertexData.h index 72b39b7..ca850d9 100644 --- a/src/Engine/Graphics/VertexData.h +++ b/src/Engine/Graphics/VertexData.h @@ -24,12 +24,10 @@ struct MeshId }; struct Meshlet { - StaticArray uniqueVertices; // unique vertiex indices in the vertex data - StaticArray primitiveLayout; // indices into the uniqueVertices array, only uint8 needed + uint32 uniqueVertices[Gfx::numVerticesPerMeshlet]; // unique vertiex indices in the vertex data + uint8 primitiveLayout[Gfx::numPrimitivesPerMeshlet * 3]; // indices into the uniqueVertices array, only uint8 needed uint32 numVertices; uint32 numPrimitives; - void save(ArchiveBuffer& buffer) const; - void load(ArchiveBuffer& buffer); static void buildFromIndexBuffer(const Array& indices, Array& meshlets); }; class VertexData diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index 68870b8..6044a38 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -399,7 +399,7 @@ void Graphics::pickPhysicalDevice() { if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0) { - meshShadingEnabled = true; + //meshShadingEnabled = true; break; } } diff --git a/src/Engine/Serialization/Serialization.h b/src/Engine/Serialization/Serialization.h index 442d4c9..ba1fb4c 100644 --- a/src/Engine/Serialization/Serialization.h +++ b/src/Engine/Serialization/Serialization.h @@ -96,14 +96,14 @@ namespace Serialization buffer.readBytes(type.data(), length * sizeof(char)); } template - static void save(ArchiveBuffer& buffer, const Array& type) requires (std::is_integral_v || std::is_floating_point_v) + static void save(ArchiveBuffer& buffer, const Array& type) requires (std::is_trivially_copyable_v) { uint64 length = type.size(); buffer.writeBytes(&length, sizeof(uint64)); buffer.writeBytes(type.data(), sizeof(T) * type.size()); } template - static void load(ArchiveBuffer& buffer, Array& type) requires (std::is_integral_v || std::is_floating_point_v) + static void load(ArchiveBuffer& buffer, Array& type) requires (std::is_trivially_copyable_v) { uint64 length = 0; buffer.readBytes(&length, sizeof(uint64)); @@ -111,12 +111,12 @@ namespace Serialization buffer.readBytes(type.data(), sizeof(T) * type.size()); } template - static void save(ArchiveBuffer& buffer, const StaticArray& type) requires (std::is_integral_v || std::is_floating_point_v) + static void save(ArchiveBuffer& buffer, const StaticArray& type) requires (std::is_trivially_copyable_v) { buffer.writeBytes(type.data(), sizeof(T) * N); } template - static void load(ArchiveBuffer& buffer, StaticArray& type) requires (std::is_integral_v || std::is_floating_point_v) + static void load(ArchiveBuffer& buffer, StaticArray& type) requires (std::is_trivially_copyable_v) { buffer.readBytes(type.data(), sizeof(T) * N); }