first RenderList2D
This commit is contained in:
parent
1ec88c65f8
commit
48b5479ade
@ -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:
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);}";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user