diff --git a/engine/assets/shader/simple.frag.meta b/engine/assets/shader/simple.frag.meta index da33eac..bb74a7c 100644 --- a/engine/assets/shader/simple.frag.meta +++ b/engine/assets/shader/simple.frag.meta @@ -1,5 +1,5 @@ metadatas: - - guid: 2b4239ff-796a-4b55-9d8f-272c80a16b17 + - guid: e41ec295-8385-41c7-8067-fd07059ec634 name: "" t_hash: api::ShaderProgram meta: @@ -7,4 +7,5 @@ metadatas: __data__: mOwner: guid: 3585c167-9cff-4327-88db-d07601382640 + mStage: 2 includes: ~ \ No newline at end of file diff --git a/engine/assets/shader/simple.vert.meta b/engine/assets/shader/simple.vert.meta index 347aa53..50201a0 100644 --- a/engine/assets/shader/simple.vert.meta +++ b/engine/assets/shader/simple.vert.meta @@ -1,5 +1,5 @@ metadatas: - - guid: 3890e4a2-7b6c-47d3-9bd2-578a50f8d684 + - guid: 536e5008-2349-4019-8de4-4790bb87ab2e name: "" t_hash: api::ShaderProgram meta: @@ -7,4 +7,5 @@ metadatas: __data__: mOwner: guid: 3585c167-9cff-4327-88db-d07601382640 + mStage: 1 includes: ~ \ No newline at end of file diff --git a/engine/modules/engine/core/include/archive/yaml/serialize.inl b/engine/modules/engine/core/include/archive/yaml/serialize.inl index ab95365..88ef307 100644 --- a/engine/modules/engine/core/include/archive/yaml/serialize.inl +++ b/engine/modules/engine/core/include/archive/yaml/serialize.inl @@ -32,6 +32,9 @@ namespace api { if (it_func) { return it_func(any.ptr); } + if (any.IsEnum()) { + return Serialize(any.Parent()); + } YAML::Node result; if (any.cls == meta_info()) { Any obj = any.CastTo(); @@ -83,6 +86,9 @@ namespace api { if (it_func) { return it_func(res, any.ptr); } + if (any.IsEnum()) { + return Deserialize(res, any.Parent()); + } if (any.cls == meta_info() && res) { auto __class = res["__class__"]; if (!__class) { diff --git a/engine/modules/engine/core/src/3rdparty/zlog.cpp b/engine/modules/engine/core/src/3rdparty/zlog.cpp index 1e3da8d..5f100fa 100644 --- a/engine/modules/engine/core/src/3rdparty/zlog.cpp +++ b/engine/modules/engine/core/src/3rdparty/zlog.cpp @@ -29,7 +29,7 @@ namespace zlog { } zloger::~zloger() noexcept { - //m_logger->flush(); + m_logger->flush(); //spdlog::drop_all(); //spdlog::shutdown(); } diff --git a/engine/modules/engine/core/src/module/module.cpp b/engine/modules/engine/core/src/module/module.cpp index 722f95d..e983582 100644 --- a/engine/modules/engine/core/src/module/module.cpp +++ b/engine/modules/engine/core/src/module/module.cpp @@ -1,9 +1,10 @@ #include "module/module_manager.h" #include "os/file_manager.h" +#include "archive/pch.h" namespace api { void CoreModule::OnLoad(int argc, char** argv) { - + TextArchive::InitSerde(); } void CoreModule::OnUnload() { diff --git a/engine/modules/engine/render/include/render/type.h b/engine/modules/engine/render/include/render/type.h index bb2ffae..7e190e6 100644 --- a/engine/modules/engine/render/include/render/type.h +++ b/engine/modules/engine/render/include/render/type.h @@ -1,7 +1,9 @@ #pragma once +#include "pmr/name.h" #include "tinyimageformat/tinyimageformat_base.h" #include namespace api { + using pmr::Name; enum class GraphicsAPI { OpenGL, @@ -100,14 +102,14 @@ namespace api { void* pHeader; char* pFlag; struct Header { - size_t hash; + Name name; uint32_t size; void* pCpuData; void* pMappingData; }; }; struct ShaderDescriptorLayout { - size_t hash; + Name name; uint32_t set : 8; uint32_t binding : 8; uint32_t size : 16; diff --git a/engine/modules/engine/render/src/tool/glsl_to_spirv.cpp b/engine/modules/engine/render/src/tool/glsl_to_spirv.cpp index e068431..1148146 100644 --- a/engine/modules/engine/render/src/tool/glsl_to_spirv.cpp +++ b/engine/modules/engine/render/src/tool/glsl_to_spirv.cpp @@ -83,7 +83,7 @@ namespace api layout.binding = compiler.get_decoration(res.id, spv::Decoration::DecorationBinding); layout.stageFlags = stage; if (auto result = FindFieldFn(fieldList, layout.set, layout.binding)) { - layout.hash = result.field->name; + layout.name = result.field->name; layout.isShared = result.info.isShared; } return layout; diff --git a/engine/modules/engine/zlib/include/refl/detail/any.h b/engine/modules/engine/zlib/include/refl/detail/any.h index 97d2737..1d8faf7 100644 --- a/engine/modules/engine/zlib/include/refl/detail/any.h +++ b/engine/modules/engine/zlib/include/refl/detail/any.h @@ -49,6 +49,7 @@ namespace refl { Any Parent()const; bool HasParent()const; + bool IsEnum()const; bool IsArray()const; bool IsObject()const; bool IsContainer()const; diff --git a/engine/modules/engine/zlib/include/refl/detail/any.inl b/engine/modules/engine/zlib/include/refl/detail/any.inl index 545f670..d1a2838 100644 --- a/engine/modules/engine/zlib/include/refl/detail/any.inl +++ b/engine/modules/engine/zlib/include/refl/detail/any.inl @@ -6,6 +6,10 @@ namespace refl{ { return cls->flag & CLASS_PARENT_FLAG; } + inline bool Any::IsEnum() const + { + return cls->flag & CLASS_ENUM_FLAG; + } inline bool Any::IsArray() const { return cls->flag & CLASS_ARRAY_FLAG; @@ -71,7 +75,7 @@ namespace refl{ { void* data = pool->allocate(cls->size); Any any{ data, cls }; - Convert::Construct(any, this); + Convert::Construct(any, *this); return any; } template diff --git a/engine/modules/engine/zlib/include/refl/detail/field.h b/engine/modules/engine/zlib/include/refl/detail/field.h index bd0a684..3642fb9 100644 --- a/engine/modules/engine/zlib/include/refl/detail/field.h +++ b/engine/modules/engine/zlib/include/refl/detail/field.h @@ -22,10 +22,9 @@ namespace refl { enum FieldFlag :uint32_t { FIELD_NONE_FLAG = 0, FIELD_MEMBER_FLAG = 1 << 0, - FIELD_ATTRIBUTE_FLAG = 1 << 1, - FIELD_METHOD_FLAG = 1 << 2, - FIELD_METHOD_VALUE_FLAG = 1 << 3, - FIELD_CTOR_FLAG = 1 << 4, + FIELD_METHOD_FLAG = 1 << 1, + FIELD_METHOD_VALUE_FLAG = 1 << 2, + FIELD_CTOR_FLAG = 1 << 3, }; struct FieldPtr { union Data @@ -44,18 +43,18 @@ namespace refl { Data data{}; uint32_t flag{}; Offset GetOffset() const { - if (flag & FIELD_ATTRIBUTE_FLAG) { + if (flag & FIELD_MEMBER_FLAG) { return data.member.offset; } return 0; } Any GetValue()const { - if (flag & FIELD_ATTRIBUTE_FLAG) + if (flag & FIELD_MEMBER_FLAG) return data.member.value; return {}; } Any GetMeta()const { - if (flag & FIELD_ATTRIBUTE_FLAG) + if (flag & FIELD_MEMBER_FLAG) return data.member.meta; if (flag & FIELD_METHOD_FLAG) return data.method.meta; diff --git a/engine/modules/engine/zlib/include/refl/detail/meta.inl b/engine/modules/engine/zlib/include/refl/detail/meta.inl index 5a89817..1df78ae 100644 --- a/engine/modules/engine/zlib/include/refl/detail/meta.inl +++ b/engine/modules/engine/zlib/include/refl/detail/meta.inl @@ -30,7 +30,7 @@ namespace refl { inline FieldPtr MetaHelp::CtorField(T(*ptr)(Args...), const MethodData& data) { const UClass* cls = meta_info...)>(); - uint32_t flag = FIELD_MEMBER_FLAG | FIELD_CTOR_FLAG; + uint32_t flag = FIELD_CTOR_FLAG; MethodData method; if (!data.value.empty()) { flag |= FIELD_METHOD_VALUE_FLAG; @@ -46,7 +46,7 @@ namespace refl { inline FieldPtr MetaHelp::MemberField(T Obj::* ptr, std::string_view name, const MemberData& data) { const UClass* cls = meta_info(); - uint32_t flag = FIELD_MEMBER_FLAG | FIELD_CTOR_FLAG; + uint32_t flag = FIELD_MEMBER_FLAG; MemberData member; member.offset = reinterpret_cast(&(reinterpret_cast(0)->*ptr)); if (data.value) { @@ -76,7 +76,7 @@ namespace refl { template inline FieldPtr MetaHelp::MethodField(R(T::* ptr)(Args...), std::string_view name, const MethodData& data) { MethodData method; - uint32_t flag = FIELD_MEMBER_FLAG | FIELD_METHOD_FLAG; + uint32_t flag = FIELD_METHOD_FLAG; const UClass* cls = meta_info(*)(const void*, real_type_t...)>(); if (!data.value.empty()) { flag |= FIELD_METHOD_VALUE_FLAG; diff --git a/engine/modules/engine/zlib/include/refl/detail/name.inl b/engine/modules/engine/zlib/include/refl/detail/name.inl index 21f12c8..3be6d3a 100644 --- a/engine/modules/engine/zlib/include/refl/detail/name.inl +++ b/engine/modules/engine/zlib/include/refl/detail/name.inl @@ -128,7 +128,7 @@ namespace refl { template Name meta_name() noexcept { - auto view = meta_tstr().view(); - return Name(view); + constexpr auto tstr = meta_tstr(); + return Name(tstr.view()); } } \ No newline at end of file diff --git a/engine/modules/engine/zlib/include/refl/detail/type.h b/engine/modules/engine/zlib/include/refl/detail/type.h index f6924f1..3ac2716 100644 --- a/engine/modules/engine/zlib/include/refl/detail/type.h +++ b/engine/modules/engine/zlib/include/refl/detail/type.h @@ -87,21 +87,21 @@ namespace refl { //转化为指针类型 template struct args_type { - using type = T; + using type = std::remove_cv_t; }; template struct args_type { - using type = T; + using type = std::remove_cv_t; }; template struct args_type { - using type = T; + using type = std::remove_cv_t; }; } template using real_type_t = detail::real_type::type; template - using args_type_t = detail::args_type>::type; + using args_type_t = detail::args_type::type; }; namespace gen { template diff --git a/engine/modules/engine/zlib/include/refl/detail/uclass.h b/engine/modules/engine/zlib/include/refl/detail/uclass.h index 6a9ef55..622d660 100644 --- a/engine/modules/engine/zlib/include/refl/detail/uclass.h +++ b/engine/modules/engine/zlib/include/refl/detail/uclass.h @@ -12,6 +12,7 @@ namespace refl { CLASS_SEQUENCE_FLAG = 1 << 4, CLASS_MAP_FLAG = 1 << 5, CLASS_PARENT_FLAG = 1 << 6, + CLASS_ENUM_FLAG = 1 << 7, }; enum EFieldFind :uint32_t { FIND_ALL_FIELD = 0, @@ -101,7 +102,7 @@ namespace refl { class UClass { public: Name name; - uint32_t size; + uint32_t size : 16; uint32_t flag : 16{0}; const UClass* parent; vtable_uclass vtable; diff --git a/engine/modules/engine/zlib/include/refl/detail/uclass.inl b/engine/modules/engine/zlib/include/refl/detail/uclass.inl index 809331a..29f3e10 100644 --- a/engine/modules/engine/zlib/include/refl/detail/uclass.inl +++ b/engine/modules/engine/zlib/include/refl/detail/uclass.inl @@ -22,6 +22,10 @@ namespace refl { parent = meta_info(); } else { + if constexpr (std::is_enum_v) { + flag = CLASS_ENUM_FLAG; + parent = meta_info>(); + } vtable.AddConstruct(&UClass::Construct); vtable.AddDestruct(&UClass::Destruct); } 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 9f640b0..21c4083 100644 --- a/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp +++ b/engine/modules/render/vulkan/src/loader/vulkan_glsl_loader.cpp @@ -115,6 +115,9 @@ namespace vkn { info.pFlag = (char*)pBuffer + meta_align_size(sizeof(Buffer) * count); char* pData = (char*)pHeader + header_size; for (auto& desc : descList) { + new(pHeader)MaterialInfo::Header{}; + new(pBuffer)Buffer{}; + pHeader->name = desc.name; pHeader->size = desc.size; pHeader->pCpuData = pData; BufferCreator creatorInfo{}; diff --git a/engine/xmake/rule_plugin/xmake.lua b/engine/xmake/rule_plugin/xmake.lua index cbdddc1..e87a77a 100644 --- a/engine/xmake/rule_plugin/xmake.lua +++ b/engine/xmake/rule_plugin/xmake.lua @@ -3,6 +3,6 @@ rule("engine.plugin") on_config(function (target) import("make_plugin") local file = target:extraconf("rules", "engine.plugin", "file") - --make_plugin(target, file or "module.h") + make_plugin(target, file or "module.h") end) \ No newline at end of file