#pragma once #include #include VK_NAMESPACE_BEGIN struct RenderExtraBuffer; /** * 同一材质的对象渲染列表 */ class MaterialRenderList { GPUDevice *device; RenderCmdBuffer *cmd_buf; Material *mtl; RenderNodeList rn_list; private: RenderExtraBuffer *extra_buffer; struct RenderItem { uint32_t first; uint32_t count; Pipeline * pipeline; MaterialInstance * mi; const VertexInputData * vid; public: void Set(Renderable *); }; MaterialInstanceSets mi_set; DataArray ri_array; uint ri_count; void Stat(); protected: VBOList * vbo_list; MaterialInstance * last_mi; Pipeline * last_pipeline; const VertexInputData * last_vid; uint last_index; void Bind(MaterialInstance *); bool Bind(const VertexInputData *,const uint); void Render(RenderItem *); public: MaterialRenderList(GPUDevice *d,Material *m); ~MaterialRenderList(); void Add(Renderable *ri,const Matrix4f &mat); void Clear() { rn_list.Clear(); } void End(); void Render(RenderCmdBuffer *); };//class MaterialRenderList VK_NAMESPACE_END