diff --git a/inc/hgl/graph/RenderList.h b/inc/hgl/graph/RenderList.h index b9ee0643..44832401 100644 --- a/inc/hgl/graph/RenderList.h +++ b/inc/hgl/graph/RenderList.h @@ -13,9 +13,10 @@ namespace hgl { namespace graph { + /** * 渲染对象列表
- * 已经展开的渲染对象列表,产生mvp用UBO/SSBO等数据,最终创建RenderCommandBuffer + * 已经展开的渲染对象列表,最终创建RenderCommandBuffer */ class RenderList { @@ -26,13 +27,11 @@ namespace hgl private: - GPUArrayBuffer * mvp_array; CameraInfo camera_info; - RenderNode3DList render_node_list; ///<场景节点列表 - MaterialSets material_sets; ///<材质合集 + MaterialRenderMap mrl_map; - RenderNode3DComparator *render_node_comparator; + RenderNodeComparator *render_node_comparator; private: diff --git a/inc/hgl/graph/RenderList2D.h b/inc/hgl/graph/RenderList2D.h index 9b62fad7..5b441135 100644 --- a/inc/hgl/graph/RenderList2D.h +++ b/inc/hgl/graph/RenderList2D.h @@ -10,18 +10,6 @@ namespace hgl { namespace graph { - using RenderableList=List; - - struct MaterialRenderableList - { - Material *mtl; - - RenderableList ri_list; - - GPUArrayBuffer *.........array; - - }; - /** * 渲染对象列表
* 已经展开的渲染对象列表,产生mvp用UBO/SSBO等数据,最终创建RenderCommandBuffer @@ -35,25 +23,15 @@ namespace hgl private: -// GPUArrayBuffer * mvp_array; + MaterialRenderMap2D mrl_map; ///<按材质分类的渲染列表 - RenderNode2DList render_node_list; ///<场景节点列表 - MaterialSets material_sets; ///<材质合集 - - RenderNode2DComparator render_node_comparator; + RenderNode2DComparator render_node_comparator; private: - RenderableList ri_list; - - *ri_list_by_mtl; 按材质区分的渲染列表 - VkDescriptorSet ds_list[DESCRIPTOR_SET_TYPE_COUNT]; DescriptorSet *renderable_desc_sets; - uint32_t ubo_offset; - uint32_t ubo_align; - protected: virtual bool Begin(); diff --git a/inc/hgl/graph/RenderNode.h b/inc/hgl/graph/RenderNode.h index 0ada9607..019e6dd5 100644 --- a/inc/hgl/graph/RenderNode.h +++ b/inc/hgl/graph/RenderNode.h @@ -10,9 +10,23 @@ namespace hgl { class Renderable; + struct RenderNode + { + Renderable *render_obj; + }; + + using RenderNodeList=List; + + struct RenderNode2D:public RenderNode + { + Matrix3x4f local_to_world; + }; + + using RenderNode2DList=List; + constexpr double RenderNode3DDistanceFactor=100.0; - struct RenderNode3D + struct RenderNode3D:public RenderNode { MVPMatrix matrix; @@ -22,20 +36,18 @@ namespace hgl double distance_to_camera; - Renderable *ri; - - public: - - /** - * 取得渲染对象ubo独占区大小 - */ - virtual const uint32 GetUBOBytes()const{return sizeof(MVPMatrix);} };//struct RenderNode using RenderNode3DList=List; }//namespace graph }//namespace hgl +using RenderNodePointer=hgl::graph::RenderNode *; +using RenderNodeComparator=Comparator; + +using RenderNode2DPointer=hgl::graph::RenderNode2D *; +using RenderNode2DComparator=Comparator; + using RenderNode3DPointer=hgl::graph::RenderNode3D *; using RenderNode3DComparator=Comparator; #endif//HGL_GRAPH_RENDER_NODE_INCLUDE diff --git a/inc/hgl/graph/RenderNode2D.h b/inc/hgl/graph/RenderNode2D.h index c125bfec..f4de6737 100644 --- a/inc/hgl/graph/RenderNode2D.h +++ b/inc/hgl/graph/RenderNode2D.h @@ -2,11 +2,13 @@ #define HGL_GRAPH_RENDER_NODE_2D_INCLUDE #include +#include namespace hgl { namespace graph { class Renderable; + class Material; struct RenderNode2D { @@ -16,6 +18,30 @@ namespace hgl }; using RenderNode2DList=List; + + /** + * 同一材质的对象渲染列表 + */ + struct MaterialRenderList2D + { + Material *mtl; + + RenderNode2DList rn_list; + }; + + class MaterialRenderMap2D:public ObjectMap + { + public: + + MaterialRenderMap2D()=default; + virtual ~MaterialRenderMap2D()=default; + + void ClearData() + { + for(auto *it:data_list) + it->value->rn_list.ClearData(); + } + }; }//namespace graph }//namespace hgl diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index b02f8b96..e4c04ad2 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::ShaderBufferSource &ss) + bool AddStruct(const ShaderBufferSource &ss) { return AddStruct(ss.struct_name,ss.codes); } @@ -61,12 +61,12 @@ 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::ShaderBufferSource &ss) + bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss) { if(!mdi.hasStruct(ss.struct_name)) mdi.AddStruct(ss.struct_name,ss.codes); - return AddUBO(flag_bits,set_type,ss.struct_name,ss.name); + return AddUBO(flag_bits,set_type,ss.struct_name,ss.value_name); } bool CreateShader(); diff --git a/src/SceneGraph/RenderList2D.cpp b/src/SceneGraph/RenderList2D.cpp index 26cd9a6d..581b2613 100644 --- a/src/SceneGraph/RenderList2D.cpp +++ b/src/SceneGraph/RenderList2D.cpp @@ -79,15 +79,10 @@ namespace hgl device =dev; cmd_buf =nullptr; - ubo_offset =0; - ubo_align =0; - last_mtl =nullptr; last_pipeline =nullptr; hgl_zero(last_mp); last_vbo =0; - -// mvp_array =new GPUArrayBuffer(device,VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,MVPMatrixBytes); } RenderList2D::~RenderList2D() @@ -96,10 +91,7 @@ namespace hgl bool RenderList2D::Begin() { - render_node_list.ClearData(); - ri_list.ClearData(); - - material_sets.ClearData(); + mrl_map.ClearData(); return(true); } diff --git a/src/ShaderGen/2d/VertexColor2D.cpp b/src/ShaderGen/2d/VertexColor2D.cpp index 1ace52ed..4278e7f5 100644 --- a/src/ShaderGen/2d/VertexColor2D.cpp +++ b/src/ShaderGen/2d/VertexColor2D.cpp @@ -24,7 +24,7 @@ MaterialCreateInfo *CreateVertexColor2D(const CoordinateSystem2D &cs) { mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT, DescriptorSetType::Global, - InlineDescriptor::ViewportInfo); + SBS_ViewportInfo); sfGetPosition="vec4 GetPosition(){return viewport.ortho_matrix*vec4(Position,0,1);}"; }