diff --git a/engine/modules/engine/render/include/render/asset/vertex.h b/engine/modules/engine/render/include/render/asset/vertex.h index 6b2193f..b05da7c 100644 --- a/engine/modules/engine/render/include/render/asset/vertex.h +++ b/engine/modules/engine/render/include/render/asset/vertex.h @@ -9,33 +9,33 @@ namespace api { template concept Vertexs = requires {std::is_base_of_v; }; struct PosVertex : public Vertex { - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) Vector3 Position = {}; }; struct TexVertex : public Vertex { - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) Vector3 Position = {}; - UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) UPROPERTY_vk() Vector2 TexCoords = {}; - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk() Vector3 Normal = {}; }; struct BoneVertex : public Vertex { - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) Vector3 Position = {}; - UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) UPROPERTY_vk() Vector2 TexCoords = {}; - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk() Vector3 Normal = {}; - UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) + //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) UPROPERTY_vk() Vector3 Tangent = {}; // 骨骼蒙皮数据 diff --git a/engine/modules/engine/render/src/pass/demo_pass.cpp b/engine/modules/engine/render/src/pass/demo_pass.cpp index c23080b..0efc8bd 100644 --- a/engine/modules/engine/render/src/pass/demo_pass.cpp +++ b/engine/modules/engine/render/src/pass/demo_pass.cpp @@ -9,6 +9,7 @@ namespace api { static RscHandle shader; if (!shader) { shader = ResourceSystem::Ptr()->LoadEmplaceResource(); + shader->Name("api::PosVertex"); auto vert = ResourceSystem::Ptr()->Load("/engine/assets/shader/simple.frag"); auto frag = ResourceSystem::Ptr()->Load("/engine/assets/shader/simple.frag"); shader->SetVertHandle(vert); diff --git a/engine/modules/engine/zlib/include/refl/detail/name.h b/engine/modules/engine/zlib/include/refl/detail/name.h index 37c77d2..b1c8fc7 100644 --- a/engine/modules/engine/zlib/include/refl/detail/name.h +++ b/engine/modules/engine/zlib/include/refl/detail/name.h @@ -6,15 +6,11 @@ namespace refl { struct TStr { std::array value; constexpr TStr() {}; - constexpr TStr(const char(&data)[N]) { - for (size_t i = 0; i < N; ++i) { - value[i] = data[i]; - } + constexpr TStr(const char(&data)[N]) : value{} { + std::copy(data, data + N, value.begin()); } - constexpr TStr(std::string_view data) { - for (size_t i = 0; i < N; ++i) { - value[i] = data[i]; - } + constexpr TStr(std::string_view data) : value{} { + std::copy(data.begin(), data.end(), value.begin()); } constexpr std::string_view View()const { return std::string_view(value.data(), N - 1); diff --git a/engine/modules/engine/zlib/include/refl/detail/name.inl b/engine/modules/engine/zlib/include/refl/detail/name.inl index 76f53f4..116fa12 100644 --- a/engine/modules/engine/zlib/include/refl/detail/name.inl +++ b/engine/modules/engine/zlib/include/refl/detail/name.inl @@ -22,12 +22,10 @@ namespace refl { } template constexpr auto concat(const TStr& lhs, const TStr& rhs) { - constexpr size_t L = N + M - 1; - char result[L] = {}; - for (size_t i = 0; i < L; ++i) { - result[i] = i < N - 1 ? lhs.value[i] : rhs.value[i - N + 1]; - } - return TStr{result}; + TStr result; + std::copy(lhs.value.begin(), lhs.value.end() - 1, result.value.begin()); + std::copy(rhs.value.begin(), rhs.value.end(), result.value.begin() + N - 1); + return result; } constexpr int _num_digits(int num) { diff --git a/engine/modules/render/vulkan/include/vkn/type.h b/engine/modules/render/vulkan/include/vkn/type.h index eb05ebf..3a8990b 100644 --- a/engine/modules/render/vulkan/include/vkn/type.h +++ b/engine/modules/render/vulkan/include/vkn/type.h @@ -53,6 +53,16 @@ namespace vkn { uint32_t height; uint32_t layers; }; + struct VulkanPipeline + { + Name name; // For debug + VkPipeline pipeline = VK_NULL_HANDLE; + VkDescriptorSet descriptorSet = VK_NULL_HANDLE; + VkPipelineLayout pipelineLayout = VK_NULL_HANDLE; + VkDescriptorSetLayout descriptorSetLayout = VK_NULL_HANDLE; + VkDescriptorSetLayout sceneDescriptorSetLayout = VK_NULL_HANDLE; // For ray tracing + bool inUse = false; + }; } namespace std { template<> diff --git a/engine/modules/render/vulkan/include/vkn/vulkan_api.h b/engine/modules/render/vulkan/include/vkn/vulkan_api.h index a23ac87..c728367 100644 --- a/engine/modules/render/vulkan/include/vkn/vulkan_api.h +++ b/engine/modules/render/vulkan/include/vkn/vulkan_api.h @@ -24,6 +24,7 @@ namespace vkn { VulkanWindow& window; Backend backend; table MeshTable; + table PipelineTable; table RenderPassCache; table FramebufferCache; public: diff --git a/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp b/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp index 222704b..97c1a47 100644 --- a/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp +++ b/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp @@ -4,13 +4,14 @@ #include "render/tool/glsl_to_spirv.h" #include "render/asset/vertex.h" #include "os/file_handle.h" +#include ".render/vkmeta_vertex_gen.inl" using namespace api; namespace vkn { void VulkanGlslLoader::Init() { - //REGISTER_META_TABLE(PosVertex); - //REGISTER_META_TABLE(TexVertex); - //REGISTER_META_TABLE(BoneVertex); + refl::meta_info(); + refl::meta_info(); + refl::meta_info(); ResourceSystem::Ptr()->RegisterLoader(".geom"); ResourceSystem::Ptr()->RegisterLoader(".frag"); ResourceSystem::Ptr()->RegisterLoader(".vert"); diff --git a/engine/modules/render/vulkan/src/vulkan_api.cpp b/engine/modules/render/vulkan/src/vulkan_api.cpp index 1fa042c..011f5c6 100644 --- a/engine/modules/render/vulkan/src/vulkan_api.cpp +++ b/engine/modules/render/vulkan/src/vulkan_api.cpp @@ -94,6 +94,8 @@ namespace vkn { shaderStageInfo.pName = "main"; shaderStages.push_back(shaderStageInfo); } + RenderPassKey config{}; + VkRenderPass renderpass; auto it = refl::find_info(shader.Name()); auto meta = it->GetMeta("vkMeta"); // 设置顶点输入格式 @@ -220,7 +222,7 @@ namespace vkn { pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pDepthStencilState = nullptr; //&depthStencilInfo; pipelineInfo.layout = pipelineLayout; - pipelineInfo.renderPass = PassList[RENDER_FORWARD_RENDERING]->Ptr(); + pipelineInfo.renderPass = renderpass; pipelineInfo.subpass = 0; pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; pipelineInfo.basePipelineIndex = -1; @@ -238,7 +240,8 @@ namespace vkn { vulkan_pipeline.inUse = true; vulkan_pipeline.pipelineLayout = pipelineLayout; vulkan_pipeline.descriptorSetLayout = descriptorSetLayout; - vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout);*/ + vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout); + */ } ImagePtr VulkanAPI::CreateTexture(TextureDesc desc) { diff --git a/engine/modules/render/vulkan/src/vulkan_window.cpp b/engine/modules/render/vulkan/src/vulkan_window.cpp index 2d7ce2a..52b6392 100644 --- a/engine/modules/render/vulkan/src/vulkan_window.cpp +++ b/engine/modules/render/vulkan/src/vulkan_window.cpp @@ -135,5 +135,4 @@ namespace vkn { .maxFrameInFlightCount = 2 }; } -} -#include ".render/vertex_gen.inl" \ No newline at end of file +} \ No newline at end of file diff --git a/game/zworld/editor/zworld_editor.cpp b/game/zworld/editor/zworld_editor.cpp index 357e2cb..1d04b73 100644 --- a/game/zworld/editor/zworld_editor.cpp +++ b/game/zworld/editor/zworld_editor.cpp @@ -8,21 +8,7 @@ using namespace api; using namespace std; using namespace refl; int main() { - using TestContainer = vector; - TestContainer t1, t2; - t1.push_back("hello"); - t1.push_back("world"); - //t1[1] = "hello"; - //t1[2] = "world"; - - auto text = JsonSerialize(t1); - auto res = JsonDeserialize(text); - if (res) { - t2 = *res; - } - auto cls = meta_info(); - Any args[3] = { Any{ (int)2 }, Any{ (float)3 }, Any{false} }; - Any obj = cls->New(FramePool(), span{args}); - auto ptr = &api::Guid::Multy; + auto aguid = meta_name(); + auto bguid = aguid.View(); std::cout << "hello world" << std::endl; } \ No newline at end of file