From 011fbdb55d7e1b8dca87ada87279770935e8b410 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Thu, 20 Apr 2023 21:49:48 +0800 Subject: [PATCH] update codes...but can't compile --- CMCore | 2 +- CMSceneGraph | 2 +- CMUtil | 2 +- inc/hgl/graph/mtl/MaterialVertexFormat.h | 46 +++++++++++++++++++ inc/hgl/graph/mtl/ShaderBuffer.h | 18 ++++++++ inc/hgl/graph/mtl/StdMaterial.h | 40 ++++++++-------- inc/hgl/shadergen/MaterialCreateInfo.h | 4 +- src/SceneGraph/PrimitiveCreater.cpp | 6 +-- src/SceneGraph/RenderList2D.cpp | 1 + src/SceneGraph/Vulkan/VKArrayBuffer.cpp | 39 ++++++++-------- .../Vulkan/VKDescriptorBindingManage.cpp | 8 ++-- src/SceneGraph/Vulkan/VKDeviceMaterial.cpp | 2 +- .../Vulkan/VKDeviceRenderPassManage.cpp | 2 +- .../Vulkan/VKMaterialDescriptorManager.cpp | 2 +- src/SceneGraph/Vulkan/VKMaterialInstance.cpp | 13 ++++-- src/SceneGraph/font/FontSourceMulti.cpp | 6 +-- src/ShaderGen/CMakeLists.txt | 4 +- src/ShaderGen/MaterialDescriptorInfo.cpp | 4 +- src/ShaderGen/StandardMaterial.cpp | 10 ++-- 19 files changed, 141 insertions(+), 70 deletions(-) create mode 100644 inc/hgl/graph/mtl/MaterialVertexFormat.h create mode 100644 inc/hgl/graph/mtl/ShaderBuffer.h diff --git a/CMCore b/CMCore index 3b1a62eb..a377fe8d 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 3b1a62eb78ed7cf3d6d186b8b7e4c7d4b57eba18 +Subproject commit a377fe8d05d9486379c1da6007a940a90898e956 diff --git a/CMSceneGraph b/CMSceneGraph index fd78d7e1..fe635b58 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit fd78d7e14b95e01e37eb5e631cbd6967e284fb95 +Subproject commit fe635b5851cd651f570a88b84a9353edf18a55ed diff --git a/CMUtil b/CMUtil index 9f94d508..f4d19fc8 160000 --- a/CMUtil +++ b/CMUtil @@ -1 +1 @@ -Subproject commit 9f94d5082bbbba65d55ae259deebbfc72b4a672a +Subproject commit f4d19fc898e9434e93f77843975369744e59350a diff --git a/inc/hgl/graph/mtl/MaterialVertexFormat.h b/inc/hgl/graph/mtl/MaterialVertexFormat.h new file mode 100644 index 00000000..632803d3 --- /dev/null +++ b/inc/hgl/graph/mtl/MaterialVertexFormat.h @@ -0,0 +1,46 @@ +#ifndef HGL_GRAPH_MATERIAL_VERTEX_FORMAT_INCLUDE +#define HGL_GRAPH_MATERIAL_VERTEX_FORMAT_INCLUDE + +#include + +namespace hgl +{ + namespace graph + { +/** +* Local 2 World 矩阵存放方案 +* +* 1.Push Constants 放弃 +* +* 2.UBO 中存放matrix4f阵列,vertex attrib中存放ID +* UBO通常情况为16k/64k,一个matrix4f为64字节。 +* +* 3.Vertex Attribute +*/ + + + /** + * 材质顶点结构 + */ + union MaterialVertexFormat + { + struct + { + uint position:3; + bool normal:1; + bool tangent:1; + bool bitangent:1; + uint color:4; + uint texcoord:4; + + bool local2world:1; + bool skeleton:1; + }; + + uint32 format; + };//union MaterialVertexFormat + + + }//namespace graph +}//namespace hgl +#endif//HGL_GRAPH_MATERIAL_VERTEX_FORMAT_INCLUDE \ No newline at end of file diff --git a/inc/hgl/graph/mtl/ShaderBuffer.h b/inc/hgl/graph/mtl/ShaderBuffer.h new file mode 100644 index 00000000..8e136bf9 --- /dev/null +++ b/inc/hgl/graph/mtl/ShaderBuffer.h @@ -0,0 +1,18 @@ +锘#ifndef HGL_GRAPH_MTL_SHADER_BUFFER_INCLUDE +#define HGL_GRAPH_MTL_SHADER_BUFFER_INCLUDE + +#include + +namespace hgl +{ + namespace graph + { + struct ShaderBufferSource + { + const char *struct_name; + const char *value_name; + const char *codes; + }; + }//namespace graph +}//namespace hgl +#endif//HGL_GRAPH_MTL_SHADER_BUFFER_INCLUDE diff --git a/inc/hgl/graph/mtl/StdMaterial.h b/inc/hgl/graph/mtl/StdMaterial.h index c26f4806..f0e0c5f4 100644 --- a/inc/hgl/graph/mtl/StdMaterial.h +++ b/inc/hgl/graph/mtl/StdMaterial.h @@ -3,7 +3,11 @@ #define STD_MTL_NAMESPACE_BEGIN namespace hgl{namespace graph{namespace mtl{ #define STD_MTL_NAMESPACE_END }}} -#define STD_MTL_NAMESPACE_USING using namespace hgl::graph::mtl +#define STD_MTL_NAMESPACE_USING using namespace hgl::graph::mtl; + +#include + +STD_MTL_NAMESPACE_BEGIN enum class CoordinateSystem2D { @@ -12,35 +16,26 @@ enum class CoordinateSystem2D Ortho //宸︿笂瑙掍负0,0锛涘彸涓嬭涓(width-1),(height-1) }; -namespace InlineDescriptor +constexpr const ShaderBufferSource SBS_ViewportInfo= { - struct ShaderStruct - { - const char *struct_name; - const char *name; - const char *codes; - }; + "ViewportInfo", + "viewport", - constexpr const ShaderStruct ViewportInfo= - { - "ViewportInfo", - "viewport", - - R"( + R"( mat4 ortho_matrix; vec2 canvas_resolution; vec2 viewport_resolution; vec2 inv_viewport_resolution; )" - }; +}; - constexpr const ShaderStruct CameraInfo= - { - "CameraInfo", - "camera", +constexpr const ShaderBufferSource SBS_CameraInfo= +{ + "CameraInfo", + "camera", - R"( + R"( mat4 projection; mat4 inverse_projection; @@ -57,5 +52,6 @@ vec3 view_line; //pos-target vec3 world_up; float znear,zfar;)" - }; -} +}; + +STD_MTL_NAMESPACE_END diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index dbd76449..b02f8b96 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -53,7 +53,7 @@ public: ~MaterialCreateInfo()=default; bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes); - bool AddStruct(const InlineDescriptor::ShaderStruct &ss) + bool AddStruct(const InlineDescriptor::ShaderBufferSource &ss) { return AddStruct(ss.struct_name,ss.codes); } @@ -61,7 +61,7 @@ public: bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name); bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name); - bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType &set_type,const InlineDescriptor::ShaderStruct &ss) + bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType &set_type,const InlineDescriptor::ShaderBufferSource &ss) { if(!mdi.hasStruct(ss.struct_name)) mdi.AddStruct(ss.struct_name,ss.codes); diff --git a/src/SceneGraph/PrimitiveCreater.cpp b/src/SceneGraph/PrimitiveCreater.cpp index b86789b6..5fe30027 100644 --- a/src/SceneGraph/PrimitiveCreater.cpp +++ b/src/SceneGraph/PrimitiveCreater.cpp @@ -117,10 +117,10 @@ namespace hgl const auto *sp=ssb_map.GetDataList(); for(uint i=0;iright->vbo) - primitive->Set((*sp)->left,(*sp)->right->vbo); + if((*sp)->value->vbo) + primitive->Set((*sp)->key,(*sp)->value->vbo); else - primitive->Set((*sp)->left,db->CreateVBO((*sp)->right->data)); + primitive->Set((*sp)->key,db->CreateVBO((*sp)->value->data)); ++sp; } diff --git a/src/SceneGraph/RenderList2D.cpp b/src/SceneGraph/RenderList2D.cpp index 677ed63b..2364571c 100644 --- a/src/SceneGraph/RenderList2D.cpp +++ b/src/SceneGraph/RenderList2D.cpp @@ -9,6 +9,7 @@ #include /** +* * 鐞嗚涓婅锛屾垜浠渶瑕佹寜浠ヤ笅椤哄簭鎺掑簭 * * for(material) diff --git a/src/SceneGraph/Vulkan/VKArrayBuffer.cpp b/src/SceneGraph/Vulkan/VKArrayBuffer.cpp index 595d9c36..773f7ef9 100644 --- a/src/SceneGraph/Vulkan/VKArrayBuffer.cpp +++ b/src/SceneGraph/Vulkan/VKArrayBuffer.cpp @@ -6,6 +6,27 @@ namespace hgl { + namespace graph + { + GPUArrayBuffer *GPUDevice::CreateUBO(const VkDeviceSize &item_length) + { + const uint unit_size=hgl_align(item_length,GetUBOAlign()); + + auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,unit_size); + + return(new GPUArrayBuffer(vk_ma,unit_size)); + } + + GPUArrayBuffer *GPUDevice::CreateSSBO(const VkDeviceSize &item_length) + { + const uint unit_size=hgl_align(item_length,GetSSBOAlign()); + + auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,unit_size); + + return(new GPUArrayBuffer(vk_ma,unit_size)); + } + }//namespace graph + namespace graph { GPUArrayBuffer::GPUArrayBuffer(VKMemoryAllocator *va,const uint us) @@ -50,23 +71,5 @@ namespace hgl { vk_ma->Flush(count*unit_size); } - - GPUArrayBuffer *GPUDevice::CreateUBO(const VkDeviceSize &item_length) - { - const uint unit_size=hgl_align(item_length,GetUBOAlign()); - - auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,unit_size); - - return(new GPUArrayBuffer(vk_ma,unit_size)); - } - - GPUArrayBuffer *GPUDevice::CreateSSBO(const VkDeviceSize &item_length) - { - const uint unit_size=hgl_align(item_length,GetSSBOAlign()); - - auto vk_ma=new VKMemoryAllocator(this,VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,unit_size); - - return(new GPUArrayBuffer(vk_ma,unit_size)); - } }//namespace graph }//namespace hgl diff --git a/src/SceneGraph/Vulkan/VKDescriptorBindingManage.cpp b/src/SceneGraph/Vulkan/VKDescriptorBindingManage.cpp index 225a7964..5c3647d6 100644 --- a/src/SceneGraph/Vulkan/VKDescriptorBindingManage.cpp +++ b/src/SceneGraph/Vulkan/VKDescriptorBindingManage.cpp @@ -32,10 +32,10 @@ bool DescriptorBinding::Bind(MaterialInstance *mi) for(uint i=0;ileft); + buf=GetUBO((*dp)->key); if(buf) - mp->BindUBO((*dp)->right,buf,false); + mp->BindUBO((*dp)->value,buf,false); ++dp; } @@ -48,10 +48,10 @@ bool DescriptorBinding::Bind(MaterialInstance *mi) for(uint i=0;ileft); + buf=GetUBO((*dp)->key); if(buf) - mp->BindUBO((*dp)->right,buf,true); + mp->BindUBO((*dp)->value,buf,true); ++dp; } diff --git a/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp b/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp index bf50b708..1023a3da 100644 --- a/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp @@ -69,7 +69,7 @@ void CreateShaderStageList(List &shader_stage_l auto **itp=shader_maps->GetDataList(); for(int i=0;iright; + sm=(*itp)->value; hgl_cpy(p,sm->GetCreateInfo(),1); ++p; diff --git a/src/SceneGraph/Vulkan/VKDeviceRenderPassManage.cpp b/src/SceneGraph/Vulkan/VKDeviceRenderPassManage.cpp index 976768ff..fcc06a4f 100644 --- a/src/SceneGraph/Vulkan/VKDeviceRenderPassManage.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceRenderPassManage.cpp @@ -202,7 +202,7 @@ DeviceRenderPassManage::~DeviceRenderPassManage() for(int i=0;iright; + delete (*obj)->value; ++obj; } diff --git a/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp b/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp index 5bf00746..770adae9 100644 --- a/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialDescriptorManager.cpp @@ -107,7 +107,7 @@ MaterialDescriptorManager::MaterialDescriptorManager(const UTF8String &name,cons for(int j=0;jright; + sd=(*sp)->value; binding_map[size_t(sd->set_type)][size_t(sd->desc_type)].Add(sd->name,sd->binding); diff --git a/src/SceneGraph/Vulkan/VKMaterialInstance.cpp b/src/SceneGraph/Vulkan/VKMaterialInstance.cpp index 7abd9662..cc9fa7a8 100644 --- a/src/SceneGraph/Vulkan/VKMaterialInstance.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialInstance.cpp @@ -1,4 +1,4 @@ -#include +锘#include #include #include #include @@ -21,10 +21,13 @@ MaterialInstance::MaterialInstance(Material *mtl,VIL *v) vil=v; - mp_per_mi= - device->CreateMP(desc_manager,pld,(DescriptorSetType)dst); -PerMaterial的属性每个MaterialInstance不一样,所以需要在这里分配自己的MP做绑定记录 -mtl->GetMP(DescriptorSetType::PerMaterial); + mp_per_mi=mtl->GetMP(DescriptorSetType::PerMaterial); + + /* + 鐢变簬PerMaterial鐨勫睘鎬ф瘡涓狹aterialInstance涓嶄竴鏍凤紝 + 鎵浠ョ悊璁轰笂闇瑕佸湪杩欓噷鍒嗛厤灞炰簬瀹冭嚜宸辩殑MP鍋氱粦瀹氳褰 + + */ } bool MaterialInstance::BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic) diff --git a/src/SceneGraph/font/FontSourceMulti.cpp b/src/SceneGraph/font/FontSourceMulti.cpp index 5b008300..b4a0fc2e 100644 --- a/src/SceneGraph/font/FontSourceMulti.cpp +++ b/src/SceneGraph/font/FontSourceMulti.cpp @@ -42,7 +42,7 @@ namespace hgl for(int i=0;iright->GetCharHeight()); + get_max(max_char_height,(*fsp)->value->GetCharHeight()); ++fsp; } @@ -93,8 +93,8 @@ namespace hgl for(int i=0;ileft,ch)) - return (*fsp)->right; + if(IsInUnicodeBlock((*fsp)->key,ch)) + return (*fsp)->value; ++fsp; } diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index 4d317f66..bef51b46 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -42,7 +42,9 @@ SET(STD_MTL_2D_HEADER_PATH ${STD_MTL_HEADER_PATH}/2d) SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/VertexColor2D.h 2d/VertexColor2D.cpp) -SET(STANDARD_MATERIAL_SOURCE ${STD_MTL_HEADER_PATH}/StdMaterial.h) +SET(STANDARD_MATERIAL_SOURCE ${STD_MTL_HEADER_PATH}/StdMaterial.h + ${STD_MTL_HEADER_PATH}/ShaderBuffer.h + StandardMaterial.cpp) SOURCE_GROUP("Standard Material" FILES ${STANDARD_MATERIAL_SOURCE}) SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES}) diff --git a/src/ShaderGen/MaterialDescriptorInfo.cpp b/src/ShaderGen/MaterialDescriptorInfo.cpp index d455f345..7dd72bc2 100644 --- a/src/ShaderGen/MaterialDescriptorInfo.cpp +++ b/src/ShaderGen/MaterialDescriptorInfo.cpp @@ -92,8 +92,8 @@ void MaterialDescriptorInfo::Resort() auto *sdp=p.descriptor_map.GetDataList(); for(int i=0;iright->set=set; - (*sdp)->right->binding=i; + (*sdp)->value->set=set; + (*sdp)->value->binding=i; ++sdp; } diff --git a/src/ShaderGen/StandardMaterial.cpp b/src/ShaderGen/StandardMaterial.cpp index 1b313d55..15b7c175 100644 --- a/src/ShaderGen/StandardMaterial.cpp +++ b/src/ShaderGen/StandardMaterial.cpp @@ -1,7 +1,9 @@ -#include +#include -namespace hgl{namespace graph{ +STD_MTL_NAMESPACE_BEGIN +namespace +{ +}//namespace - -}}//namespace hgl::graph +STD_MTL_NAMESPACE_END