ULRE/inc/hgl/graph/RenderList.h

71 lines
1.5 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
{
template<typename T> struct GPUArray
{
List<T> list;
GPUBuffer *buffer;
public:
GPUArray()
{
buffer=nullptr;
}
~GPUArray()
{
SAFE_CLEAR(buffer);
}
void Clear()
{
list.ClearData();
}
void Add(const T &data)
{
list.Add(data);
}
};//
2019-05-25 00:50:04 +08:00
class RenderList
{
RenderCmdBuffer *cmd_buf;
2019-05-25 00:50:04 +08:00
private:
GPUArray<Matrix4f> LocalToWorld;
List<SceneNode *> scene_node_list;
2019-05-25 00:50:04 +08:00
2020-10-21 12:47:06 +08:00
Pipeline * last_pipeline;
MaterialInstance * last_mat_inst;
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
public:
RenderList();
2020-11-30 18:05:23 +08:00
virtual ~RenderList()=default;
void Begin ();
void Add (SceneNode *);
void End ();
2019-05-25 00:50:04 +08:00
bool Render (RenderCmdBuffer *);
2019-05-25 00:50:04 +08:00
};//class RenderList
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_RENDER_LIST_INCLUDE