2023-09-05 20:48:47 +08:00
|
|
|
|
#pragma once
|
2023-06-01 15:08:45 +08:00
|
|
|
|
#include<hgl/graph/RenderNode.h>
|
2024-05-25 22:57:29 +08:00
|
|
|
|
#include<hgl/graph/VKVABList.h>
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
VK_NAMESPACE_BEGIN
|
2024-05-25 17:58:39 +08:00
|
|
|
|
class RenderAssignBuffer;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
2024-05-25 22:08:01 +08:00
|
|
|
|
|
2023-06-01 15:08:45 +08:00
|
|
|
|
/**
|
2023-09-05 20:48:47 +08:00
|
|
|
|
* 同一材质的对象渲染列表
|
2023-06-01 15:08:45 +08:00
|
|
|
|
*/
|
|
|
|
|
class MaterialRenderList
|
|
|
|
|
{
|
|
|
|
|
GPUDevice *device;
|
|
|
|
|
RenderCmdBuffer *cmd_buf;
|
|
|
|
|
|
2023-10-12 02:24:58 +08:00
|
|
|
|
Material *material;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
RenderNodeList rn_list;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
2024-05-25 17:58:39 +08:00
|
|
|
|
RenderAssignBuffer *assign_buffer;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
struct RenderItem
|
|
|
|
|
{
|
|
|
|
|
uint32_t first;
|
|
|
|
|
uint32_t count;
|
|
|
|
|
|
|
|
|
|
Pipeline * pipeline;
|
|
|
|
|
MaterialInstance * mi;
|
|
|
|
|
const VertexInputData * vid;
|
2024-05-25 22:08:01 +08:00
|
|
|
|
const DrawData * dd;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
void Set(Renderable *);
|
|
|
|
|
};
|
|
|
|
|
|
2023-09-05 10:28:03 +08:00
|
|
|
|
DataArray<RenderItem> ri_array;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
uint ri_count;
|
|
|
|
|
|
|
|
|
|
void Stat();
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
2024-05-25 22:57:29 +08:00
|
|
|
|
VABList * vbo_list;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
Pipeline * last_pipeline;
|
|
|
|
|
const VertexInputData * last_vid;
|
2024-05-25 22:08:01 +08:00
|
|
|
|
const DrawData * last_dd;
|
2023-06-01 15:08:45 +08:00
|
|
|
|
uint last_index;
|
|
|
|
|
|
2024-05-25 22:08:01 +08:00
|
|
|
|
bool BindVAB(const VertexInputData *,const DrawData *,const uint);
|
2023-06-01 15:08:45 +08:00
|
|
|
|
|
|
|
|
|
void Render(RenderItem *);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
2024-03-26 01:20:20 +08:00
|
|
|
|
MaterialRenderList(GPUDevice *d,bool l2w,Material *m);
|
2023-06-01 15:08:45 +08:00
|
|
|
|
~MaterialRenderList();
|
|
|
|
|
|
|
|
|
|
void Add(Renderable *ri,const Matrix4f &mat);
|
|
|
|
|
|
2023-08-14 21:03:20 +08:00
|
|
|
|
void Clear()
|
2023-06-01 15:08:45 +08:00
|
|
|
|
{
|
2023-08-14 21:03:20 +08:00
|
|
|
|
rn_list.Clear();
|
2023-06-01 15:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void End();
|
|
|
|
|
|
|
|
|
|
void Render(RenderCmdBuffer *);
|
|
|
|
|
};//class MaterialRenderList
|
|
|
|
|
VK_NAMESPACE_END
|