save full SceneNode in RenderNode,added length sort.

This commit is contained in:
2024-08-02 23:17:07 +08:00
parent 7f074c6c79
commit 3768507169
9 changed files with 73 additions and 31 deletions

View File

@@ -7,6 +7,7 @@
VK_NAMESPACE_BEGIN
class RenderAssignBuffer;
class SceneNode;
struct CameraInfo;
/**
* 同一材质的对象渲染列表
@@ -18,6 +19,8 @@ class MaterialRenderList
Material *material;
CameraInfo *camera_info;
RenderNodeList rn_list;
private:
@@ -76,6 +79,11 @@ public:
void Add(SceneNode *);
void SetCameraInfo(CameraInfo *ci)
{
camera_info=ci;
}
void Clear()
{
rn_list.Clear();

View File

@@ -9,10 +9,13 @@ public:
MaterialRenderMap()=default;
virtual ~MaterialRenderMap()=default;
void Begin()
void Begin(CameraInfo *ci)
{
for(auto *it:data_list)
{
it->value->SetCameraInfo(ci);
it->value->Clear();
}
}
void End()

View File

@@ -20,6 +20,8 @@ namespace hgl
GPUDevice * device;
CameraInfo * camera_info; ///<相机信息
uint renderable_count; ///<可渲染对象数量
MaterialRenderMap mrl_map; ///<按材质分类的渲染列表
@@ -32,11 +34,12 @@ namespace hgl
RenderList(GPUDevice *);
virtual ~RenderList()=default;
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
virtual void SetCamera(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
virtual void Clear(); ///<彻底清理
virtual void Clear(); ///<彻底清理
};//class RenderList
}//namespace graph
}//namespace hgl

View File

@@ -9,12 +9,14 @@ namespace hgl
{
class Renderable;
class MaterialInstance;
class SceneNode;
struct RenderNode
{
Matrix4f local_to_world;
SceneNode *scene_node;
Renderable *ri;
Vector3f world_position;
float to_camera_distance;
};
using RenderNodeList=List<RenderNode>;