diff --git a/engine/src/engine/render/asset/mesh.cpp b/engine/src/engine/render/asset/mesh.cpp index a528137..30f6090 100644 --- a/engine/src/engine/render/asset/mesh.cpp +++ b/engine/src/engine/render/asset/mesh.cpp @@ -1,13 +1,6 @@ #include "mesh.h" #include "render/renderapi.h" namespace engineapi { - Mesh::Mesh(string name, uint32_t flags, parray& vertices, vector& indices) - :Asset(name, flags) - ,mVertices(vertices) - ,mIndices(indices) - { - BeginLoad(); - } void Mesh::BeginLoad() { Asset::BeginLoad(); diff --git a/engine/src/engine/render/asset/mesh.h b/engine/src/engine/render/asset/mesh.h index 7c7da84..97e7e3d 100644 --- a/engine/src/engine/render/asset/mesh.h +++ b/engine/src/engine/render/asset/mesh.h @@ -1,9 +1,10 @@ #pragma once -#include "zstd/parray.h" +#include "refl/std/parray.h" #include "asset_render.h" #include "../meta/vertex.h" namespace engineapi { - using zstd::parray; + using refl::parray; + using refl::ToParray; class Texture; class Material; class Mesh : public Asset { @@ -12,7 +13,15 @@ namespace engineapi { parray mVertices; vector mIndices; public: - Mesh(string name, uint32_t flags, parray& vertices, vector& indices); + template + requires std::is_base_of_v + Mesh(string name, uint32_t flags,vector& vertices, vector& indices) + :Asset(name, flags) + , mVertices(vertices) + , mIndices(indices) + { + BeginLoad(); + } void BeginLoad()override; public: diff --git a/engine/src/engine/render/asset/model.cpp b/engine/src/engine/render/asset/model.cpp index e176a00..7a34b4c 100644 --- a/engine/src/engine/render/asset/model.cpp +++ b/engine/src/engine/render/asset/model.cpp @@ -45,10 +45,7 @@ namespace engineapi { } Mesh* Model::ProcessMesh(const aiMesh* mesh) { // data to fill - parray vertices(mesh->mNumVertices, sizeof(BoneVertex)); - parray vertices2(mesh->mNumVertices, sizeof(BoneVertex)); - BoneVertex vertex2; - vertices2.push_back(vertex2); + vector vertices; vector indices; // Walk through each of the mesh's vertices for (unsigned int i = 0; i < mesh->mNumVertices; i++) diff --git a/engine/src/engine/render/meta/meta.cpp b/engine/src/engine/render/meta/meta.cpp new file mode 100644 index 0000000..e69de29 diff --git a/engine/src/engine/render/meta/meta.h b/engine/src/engine/render/meta/meta.h new file mode 100644 index 0000000..17ee36a --- /dev/null +++ b/engine/src/engine/render/meta/meta.h @@ -0,0 +1,11 @@ +#pragma once +#include "refl/refl.h" +namespace engineapi { + enum class EVkFormat : uint32_t { + None = 0, + R32G32B32 = 106, + }; + struct VertexMeta { + EVkFormat vkFormat; + }; +} \ No newline at end of file diff --git a/engine/src/engine/render/meta/vertex.h b/engine/src/engine/render/meta/vertex.h index 563e20b..74992b2 100644 --- a/engine/src/engine/render/meta/vertex.h +++ b/engine/src/engine/render/meta/vertex.h @@ -1,7 +1,7 @@ #pragma once #include "math/vector3.h" #include "math/vector2.h" -#include "refl/refl.h" +#include "meta.h" // 顶点最多关联4个骨骼 #define MAX_NUM_BONES_PER_VERTEX 4 @@ -12,7 +12,7 @@ namespace engineapi { struct PosVertex_Meta; struct PosVertex : public Vertex{ using MyMeta = PosVertex_Meta; - __cppast(Meta = {}) + __cppast(VkMeta = { {} ,VertexMeta{.vkFormat=EVkFormat::R32G32B32} }) Vector3 Position = {}; }; struct TexVertex_Meta; @@ -46,4 +46,5 @@ namespace engineapi { void AddBoneData(uint32_t boneID, float weight); }; }; -#include "meta_vertex_gen.inl" \ No newline at end of file +#include "meta_vertex_gen.inl" +#include "vkmeta_vertex_gen.inl" \ No newline at end of file diff --git a/engine/src/engine/vulkanapi/vulkanapi.cpp b/engine/src/engine/vulkanapi/vulkanapi.cpp index 5a626a0..b0c61a6 100644 --- a/engine/src/engine/vulkanapi/vulkanapi.cpp +++ b/engine/src/engine/vulkanapi/vulkanapi.cpp @@ -67,7 +67,7 @@ namespace vulkanapi { meshBuffer->vertexCount = Vertices.size(); // ----------------------------------------------- Vertex Buffer ----------------------------------------------- - VkDeviceSize vertexBufferSize = Vertices.data_size(); + VkDeviceSize vertexBufferSize = Vertices.capicty(); VmaAllocationCreateInfo vertexVmaStagingInfo = {}; VmaAllocation vertexVmaStagingAlloc; VkBuffer vertexStagingBuffer = Buffer::CreateStageBuffer(vertexVmaStagingInfo, vertexVmaStagingAlloc, vertexBufferSize); diff --git a/engine/src/engine/vulkanapi/wrapper/swapchain.cpp b/engine/src/engine/vulkanapi/wrapper/swapchain.cpp index ac6eede..7503ea4 100644 --- a/engine/src/engine/vulkanapi/wrapper/swapchain.cpp +++ b/engine/src/engine/vulkanapi/wrapper/swapchain.cpp @@ -45,6 +45,7 @@ namespace vulkanapi { for (int i = 0; i < Creator.frames;i++) { mSurfaces.push_back(new Image(Creator.device,"swapchain" + to_string(i), swapchain_images[i], args)); } + mFrames = Creator.frames; mSurfaceSemaphore = Creator.device.CreateSemaphore(); mRenderSemaphore = Creator.device.CreateSemaphore(); } @@ -52,6 +53,9 @@ namespace vulkanapi { { ctx.surfaceSemaphore = mSurfaceSemaphore; vkAcquireNextImageKHR(mDevice.Ptr(), mPtr, UINT64_MAX, ctx.surfaceSemaphore, VK_NULL_HANDLE, &ctx.frame); + if (ctx.frame >= mFrames) { + ctx.frame = 0; + } } void Swapchain::Present(VulkanContext& ctx) { diff --git a/engine/src/engine/vulkanapi/wrapper/swapchain.h b/engine/src/engine/vulkanapi/wrapper/swapchain.h index 20c4259..c82833e 100644 --- a/engine/src/engine/vulkanapi/wrapper/swapchain.h +++ b/engine/src/engine/vulkanapi/wrapper/swapchain.h @@ -11,6 +11,7 @@ namespace vulkanapi { protected: VkSwapchainKHR mPtr; Device& mDevice; + int mFrames; vector mSurfaces; VkSemaphore mSurfaceSemaphore; VkSemaphore mRenderSemaphore; diff --git a/engine/xmake.lua b/engine/xmake.lua index e3f1c57..04550a4 100644 --- a/engine/xmake.lua +++ b/engine/xmake.lua @@ -1,6 +1,7 @@ includes("3rdparty/xmake.lua") includes("xmake/xmake.lua") --includes("test/**xmake.lua") +set_languages("cxx20") target("zengine") set_kind("binary") set_rundir(".")