ULRE/inc/hgl/graph/RenderList.h

80 lines
1.9 KiB
C
Raw Normal View History

2019-05-25 00:50:04 +08:00
#ifndef HGL_GRAPH_RENDER_LIST_INCLUDE
#define HGL_GRAPH_RENDER_LIST_INCLUDE
#include<hgl/graph/VK.h>
2019-05-25 00:50:04 +08:00
#include<hgl/graph/Camera.h>
#include<hgl/graph/SceneNode.h>
2019-05-25 01:06:33 +08:00
#include<hgl/type/Color4f.h>
2019-05-25 00:50:04 +08:00
namespace hgl
{
namespace graph
{
struct MVPArray;
2019-05-25 00:50:04 +08:00
class RenderList
{
2020-12-18 16:52:45 +08:00
GPUDevice *device;
RenderCmdBuffer *cmd_buf;
2019-05-25 00:50:04 +08:00
private:
Camera *camera;
MVPArray *mvp_array;
List<SceneNode *> scene_node_list;
2019-05-25 00:50:04 +08:00
2020-10-21 12:47:06 +08:00
Pipeline * last_pipeline;
RenderableInstance *last_ri;
2019-05-25 00:50:04 +08:00
2020-10-21 12:47:06 +08:00
void Render(SceneNode *,RenderableInstance *);
void Render(SceneNode *,List<RenderableInstance *> &);
2019-05-25 00:50:04 +08:00
2020-12-18 16:52:45 +08:00
private:
friend class GPUDevice;
RenderList(GPUDevice *);
2019-05-25 00:50:04 +08:00
public:
2020-12-18 16:52:45 +08:00
virtual ~RenderList();
void Begin ();
void Add (SceneNode *);
void End (CameraMatrix *);
2019-05-25 00:50:04 +08:00
bool Render (RenderCmdBuffer *);
2019-05-25 00:50:04 +08:00
};//class RenderList
class SceneTreeToRenderList
{
GPUDevice *device;
public:
Camera * camera;
CameraMatrix * camera_matrix;
Frustum frustum;
public:
virtual uint32 CameraLength(SceneNode *,SceneNode *); ///<摄像机距离比较函数
virtual bool InFrustum(const SceneNode *,void *); ///<平截头截剪函数
public:
SceneTreeToRenderList(GPUDevice *d)
{
device=d;
camera=nullptr;
camera_matrix=nullptr;
}
virtual bool Expend(RenderList *,Camera *,SceneNode *);
};//class SceneTreeToRenderList
2019-05-25 00:50:04 +08:00
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_RENDER_LIST_INCLUDE