first RenderList2D

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-04-25 18:08:26 +08:00
parent 1ec88c65f8
commit 48b5479ade
7 changed files with 58 additions and 51 deletions

View File

@ -13,9 +13,10 @@ namespace hgl
{ {
namespace graph namespace graph
{ {
/** /**
* <br> * <br>
* mvp用UBO/SSBO等数据RenderCommandBuffer * RenderCommandBuffer
*/ */
class RenderList class RenderList
{ {
@ -26,13 +27,11 @@ namespace hgl
private: private:
GPUArrayBuffer * mvp_array;
CameraInfo camera_info; CameraInfo camera_info;
RenderNode3DList render_node_list; ///<场景节点列表 MaterialRenderMap mrl_map;
MaterialSets material_sets; ///<材质合集
RenderNode3DComparator *render_node_comparator; RenderNodeComparator *render_node_comparator;
private: private:

View File

@ -10,18 +10,6 @@ namespace hgl
{ {
namespace graph namespace graph
{ {
using RenderableList=List<Renderable *>;
struct MaterialRenderableList
{
Material *mtl;
RenderableList ri_list;
GPUArrayBuffer *.........array;
};
/** /**
* <br> * <br>
* mvp用UBO/SSBO等数据RenderCommandBuffer * mvp用UBO/SSBO等数据RenderCommandBuffer
@ -35,25 +23,15 @@ namespace hgl
private: private:
// GPUArrayBuffer * mvp_array; MaterialRenderMap2D mrl_map; ///<按材质分类的渲染列表
RenderNode2DList render_node_list; ///<场景节点列表
MaterialSets material_sets; ///<材质合集
RenderNode2DComparator render_node_comparator; RenderNode2DComparator render_node_comparator;
private: private:
RenderableList ri_list;
*ri_list_by_mtl;
VkDescriptorSet ds_list[DESCRIPTOR_SET_TYPE_COUNT]; VkDescriptorSet ds_list[DESCRIPTOR_SET_TYPE_COUNT];
DescriptorSet *renderable_desc_sets; DescriptorSet *renderable_desc_sets;
uint32_t ubo_offset;
uint32_t ubo_align;
protected: protected:
virtual bool Begin(); virtual bool Begin();

View File

@ -10,9 +10,23 @@ namespace hgl
{ {
class Renderable; class Renderable;
struct RenderNode
{
Renderable *render_obj;
};
using RenderNodeList=List<RenderNode *>;
struct RenderNode2D:public RenderNode
{
Matrix3x4f local_to_world;
};
using RenderNode2DList=List<RenderNode2D *>;
constexpr double RenderNode3DDistanceFactor=100.0; constexpr double RenderNode3DDistanceFactor=100.0;
struct RenderNode3D struct RenderNode3D:public RenderNode
{ {
MVPMatrix matrix; MVPMatrix matrix;
@ -22,20 +36,18 @@ namespace hgl
double distance_to_camera; double distance_to_camera;
Renderable *ri;
public:
/**
* ubo独占区大小
*/
virtual const uint32 GetUBOBytes()const{return sizeof(MVPMatrix);}
};//struct RenderNode };//struct RenderNode
using RenderNode3DList=List<RenderNode3D *>; using RenderNode3DList=List<RenderNode3D *>;
}//namespace graph }//namespace graph
}//namespace hgl }//namespace hgl
using RenderNodePointer=hgl::graph::RenderNode *;
using RenderNodeComparator=Comparator<RenderNodePointer>;
using RenderNode2DPointer=hgl::graph::RenderNode2D *;
using RenderNode2DComparator=Comparator<RenderNode2DPointer>;
using RenderNode3DPointer=hgl::graph::RenderNode3D *; using RenderNode3DPointer=hgl::graph::RenderNode3D *;
using RenderNode3DComparator=Comparator<RenderNode3DPointer>; using RenderNode3DComparator=Comparator<RenderNode3DPointer>;
#endif//HGL_GRAPH_RENDER_NODE_INCLUDE #endif//HGL_GRAPH_RENDER_NODE_INCLUDE

View File

@ -2,11 +2,13 @@
#define HGL_GRAPH_RENDER_NODE_2D_INCLUDE #define HGL_GRAPH_RENDER_NODE_2D_INCLUDE
#include<hgl/math/Math.h> #include<hgl/math/Math.h>
#include<hgl/type/Map.h>
namespace hgl namespace hgl
{ {
namespace graph namespace graph
{ {
class Renderable; class Renderable;
class Material;
struct RenderNode2D struct RenderNode2D
{ {
@ -16,6 +18,30 @@ namespace hgl
}; };
using RenderNode2DList=List<RenderNode2D *>; using RenderNode2DList=List<RenderNode2D *>;
/**
*
*/
struct MaterialRenderList2D
{
Material *mtl;
RenderNode2DList rn_list;
};
class MaterialRenderMap2D:public ObjectMap<Material *,MaterialRenderList2D>
{
public:
MaterialRenderMap2D()=default;
virtual ~MaterialRenderMap2D()=default;
void ClearData()
{
for(auto *it:data_list)
it->value->rn_list.ClearData();
}
};
}//namespace graph }//namespace graph
}//namespace hgl }//namespace hgl

View File

@ -53,7 +53,7 @@ public:
~MaterialCreateInfo()=default; ~MaterialCreateInfo()=default;
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes); 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); 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 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 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)) if(!mdi.hasStruct(ss.struct_name))
mdi.AddStruct(ss.struct_name,ss.codes); 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(); bool CreateShader();

View File

@ -79,15 +79,10 @@ namespace hgl
device =dev; device =dev;
cmd_buf =nullptr; cmd_buf =nullptr;
ubo_offset =0;
ubo_align =0;
last_mtl =nullptr; last_mtl =nullptr;
last_pipeline =nullptr; last_pipeline =nullptr;
hgl_zero(last_mp); hgl_zero(last_mp);
last_vbo =0; last_vbo =0;
// mvp_array =new GPUArrayBuffer(device,VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,MVPMatrixBytes);
} }
RenderList2D::~RenderList2D() RenderList2D::~RenderList2D()
@ -96,10 +91,7 @@ namespace hgl
bool RenderList2D::Begin() bool RenderList2D::Begin()
{ {
render_node_list.ClearData(); mrl_map.ClearData();
ri_list.ClearData();
material_sets.ClearData();
return(true); return(true);
} }

View File

@ -24,7 +24,7 @@ MaterialCreateInfo *CreateVertexColor2D(const CoordinateSystem2D &cs)
{ {
mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT, mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT,
DescriptorSetType::Global, DescriptorSetType::Global,
InlineDescriptor::ViewportInfo); SBS_ViewportInfo);
sfGetPosition="vec4 GetPosition(){return viewport.ortho_matrix*vec4(Position,0,1);}"; sfGetPosition="vec4 GetPosition(){return viewport.ortho_matrix*vec4(Position,0,1);}";
} }