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
{
/**
* <br>
* 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:

View File

@ -10,18 +10,6 @@ namespace hgl
{
namespace graph
{
using RenderableList=List<Renderable *>;
struct MaterialRenderableList
{
Material *mtl;
RenderableList ri_list;
GPUArrayBuffer *.........array;
};
/**
* <br>
* 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();

View File

@ -10,9 +10,23 @@ namespace hgl
{
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;
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<RenderNode3D *>;
}//namespace graph
}//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 RenderNode3DComparator=Comparator<RenderNode3DPointer>;
#endif//HGL_GRAPH_RENDER_NODE_INCLUDE

View File

@ -2,11 +2,13 @@
#define HGL_GRAPH_RENDER_NODE_2D_INCLUDE
#include<hgl/math/Math.h>
#include<hgl/type/Map.h>
namespace hgl
{
namespace graph
{
class Renderable;
class Material;
struct RenderNode2D
{
@ -16,6 +18,30 @@ namespace hgl
};
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 hgl

View File

@ -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();

View File

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

View File

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