save full SceneNode in RenderNode,added length sort.
This commit is contained in:
@@ -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();
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
@@ -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>;
|
||||
|
Reference in New Issue
Block a user