ULRE/src/SceneGraph/Vulkan/VKPrimitiveData.h

60 lines
2.1 KiB
C
Raw Normal View History

#include<hgl/graph/VK.h>
VK_NAMESPACE_BEGIN
/*
1.2024.4.27vulkan.gpuinfo.org统计9%maxVertexInputAttributes为1616
9.0%28 - 31
70.7%32
9.6%64
使16使16
()
2.va_name使用char[][]String以及动态分配内存
memcpy处理
*/
class PrimitiveData
{
protected:
2024-05-28 02:21:33 +08:00
const VIL * vil;
2024-05-28 02:21:33 +08:00
uint32_t vertex_count;
uint32_t index_count;
2024-05-28 02:21:33 +08:00
VAB ** vab_list;
IndexBuffer * ibo;
public:
PrimitiveData(const VIL *_vil,const uint32_t vc);
virtual ~PrimitiveData();
public:
const uint32_t GetVertexCount ()const{return vertex_count;}
const int GetVABCount ()const;
const int GetVABIndex (const AnsiString &name)const;
2024-05-28 02:21:33 +08:00
VAB * GetVAB (const int index);
VAB * GetVAB (const AnsiString &name){return GetVAB(GetVABIndex(name));}
2024-05-28 02:21:33 +08:00
IndexBuffer * GetIBO (){return ibo;}
uint32_t GetIndexCount ()const{return index_count;}
2024-05-28 02:21:33 +08:00
virtual int32_t GetVertexOffset ()const=0; ///<取得顶点偏移(注意是顶点不是字节)
virtual uint32_t GetFirstIndex ()const=0; ///<取得第一个索引
virtual VertexDataManager * GetVDM()const=0; ///<取得顶点数据管理器
public:
2024-05-28 02:21:33 +08:00
virtual IndexBuffer * InitIBO(const uint32_t index_count,IndexType it)=0;
virtual VAB * InitVAB(const int vab_index,const void *data)=0;
};//class PrimitiveData
PrimitiveData *CreatePrimitiveData(GPUDevice *dev,const VIL *_vil,const uint32_t vc);
PrimitiveData *CreatePrimitiveData(VertexDataManager *vdm,const uint32_t vc);
2024-05-28 02:21:33 +08:00
VK_NAMESPACE_END