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);}";
}