174 lines
7.3 KiB
C
174 lines
7.3 KiB
C
|
#ifndef HGL_GRAPH_VULKAN_BUFFER_DATA_INCLUDE
|
|||
|
#define HGL_GRAPH_BUFFER_DATA_INCLUDE
|
|||
|
|
|||
|
#include"VK.h"
|
|||
|
VK_NAMESPACE_BEGIN
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
class BufferData
|
|||
|
{
|
|||
|
protected:
|
|||
|
|
|||
|
VkFormat format; ///<<3C><><EFBFBD>ݸ<EFBFBD>ʽ
|
|||
|
|
|||
|
uint32_t count; ///<<3C><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
|||
|
uint32_t stride; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|||
|
uint8_t * buffer_data; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint32_t total_bytes; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|||
|
protected:
|
|||
|
|
|||
|
friend BufferData *CreateBufferData(void *data,const VkFormat f,const uint32_t count,const uint32_t stride);
|
|||
|
|
|||
|
BufferData(uint8_t *data,const VkFormat f,const uint32_t c,const uint32_t s)
|
|||
|
{
|
|||
|
buffer_data =data;
|
|||
|
|
|||
|
format=f;
|
|||
|
count=c;
|
|||
|
stride=s;
|
|||
|
|
|||
|
total_bytes=stride*count;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
virtual ~BufferData()=default;
|
|||
|
|
|||
|
uint GetStride ()const { return data_stride; } ///<ȡ<><C8A1>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
uint32_t GetCount ()const { return data_count; } ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint32_t GetTotalBytes ()const { return total_bytes; } ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
void * GetData ()const { return buffer_data; } ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
};//class BufferData
|
|||
|
|
|||
|
BufferData *CreateBufferData(const uint32_t &length);
|
|||
|
BufferData *CreateBufferData(void *data,const uint32_t &length);
|
|||
|
|
|||
|
#define DATA_COMPOMENT_RED 0x01
|
|||
|
#define DATA_COMPOMENT_GREEN 0x02
|
|||
|
#define DATA_COMPOMENT_BLUE 0x04
|
|||
|
#define DATA_COMPOMENT_ALPHA 0x08
|
|||
|
#define DATA_COMPOMENT_X DATA_COMPOMENT_RED
|
|||
|
#define DATA_COMPOMENT_Y DATA_COMPOMENT_GREEN
|
|||
|
#define DATA_COMPOMENT_Z DATA_COMPOMENT_BLUE
|
|||
|
#define DATA_COMPOMENT_W DATA_COMPOMENT_ALPHA
|
|||
|
|
|||
|
#define DATA_COMPOMENT_DEPTH 0x10
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><Br>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӶԳɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
class BufferDataDirect:public BufferData
|
|||
|
{
|
|||
|
VkFormat
|
|||
|
};//
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><Br>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><EFBFBD>ж<EFBFBD>д
|
|||
|
*/
|
|||
|
class BufferDataPack:public BufferData
|
|||
|
{
|
|||
|
VkFormat format; ///<<3C><><EFBFBD>ݸ<EFBFBD>ʽ
|
|||
|
uint byte; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|||
|
uint compoment; ///<<3C><><EFBFBD>ݳɷ<DDB3>
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
|
|||
|
};//
|
|||
|
|
|||
|
class VertexBufferData:public BufferData
|
|||
|
{
|
|||
|
uint32_t data_type; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT<41><54>)
|
|||
|
uint data_bytes; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> (GL_BYTEΪ1,GL_UNSIGNED_SHORTΪ2,GL_FLOATΪ4<CEAA><34>)
|
|||
|
uint data_comp; ///<<3C><><EFBFBD>ݳ<EFBFBD>Ա<EFBFBD><D4B1> (1/2/3/4<><34><EFBFBD><EFBFBD>2D<32><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>3D<33><44><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3)
|
|||
|
|
|||
|
uint data_stride; ///<ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|||
|
uint32_t data_count; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
protected:
|
|||
|
|
|||
|
friend VertexBufferData *CreateVertexBufferData(void *data,const uint32_t &dt,const uint &dbytes,const uint &dcm,const uint32_t &count);
|
|||
|
|
|||
|
VertexBufferData(const uint32_t &dt,const uint &dbytes,const uint &dcm,const uint32_t &count,char *data):BufferData(data,dbytes*dcm*count)
|
|||
|
{
|
|||
|
data_type=dt;
|
|||
|
data_bytes=dbytes;
|
|||
|
data_comp=dcm;
|
|||
|
|
|||
|
data_stride=data_comp*data_bytes;
|
|||
|
|
|||
|
data_count=count;
|
|||
|
}
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
virtual ~VertexBufferData()=default;
|
|||
|
|
|||
|
uint32_t GetDataType ()const{return data_type;} ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint GetComponent ()const{return data_comp;} ///<ȡ<><C8A1>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint GetStride ()const{return data_stride;} ///<ȡ<><C8A1>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|||
|
uint32_t GetCount ()const{return data_count;} ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint32_t GetTotalBytes ()const{return total_bytes;} ///<ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><br>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
|
|||
|
* @param dt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT<EFBFBD><EFBFBD>)
|
|||
|
* @param dbytes <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD> (GL_BYTEΪ1,GL_UNSIGNED_SHORTΪ2,GL_FLOATΪ4<EFBFBD><EFBFBD>)
|
|||
|
* @param dcm <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>Ա<EFBFBD><EFBFBD> (1/2/3/4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2D<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3D<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3)
|
|||
|
* @param count <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
VertexBufferData *CreateVertexBufferData(const uint32_t &dt,const uint &dbytes,const uint &dcm,const uint32_t &count);
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param data <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @param dt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (GL_BYTE,GL_UNSIGNED_SHORT,GL_FLOAT<EFBFBD><EFBFBD>)
|
|||
|
* @param dbytes <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD> (GL_BYTEΪ1,GL_UNSIGNED_SHORTΪ2,GL_FLOATΪ4<EFBFBD><EFBFBD>)
|
|||
|
* @param dcm <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>Ա<EFBFBD><EFBFBD> (1/2/3/4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2D<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3D<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3)
|
|||
|
* @param count <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
VertexBufferData *CreateVertexBufferData(void *data,const uint32_t &dt,const uint &dbytes,const uint &dcm,const uint32_t &count);
|
|||
|
|
|||
|
#define VBDATA_CREATE_FUNC(short_name,type,comp_count,vk_type) \
|
|||
|
inline VertexBufferData *VB##comp_count##short_name(const uint32_t &count){return CreateVertexBufferData(vk_type,sizeof(type),comp_count,count);} \
|
|||
|
inline VertexBufferData *VB##comp_count##short_name(const uint32_t &count,const type *data){return CreateVertexBufferData((void *)data,vk_type,sizeof(type),comp_count,count);}
|
|||
|
|
|||
|
// UNORM ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ת<EFBFBD><D7AA>Ϊ 0.0 to 1.0 <20>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// SNORM ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ת<EFBFBD><D7AA>Ϊ-1.0 to +1.0 <20>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define VBDATA_NSI(comp_count,type,vk_type_start) \
|
|||
|
VBDATA_CREATE_FUNC(type,comp_count,
|
|||
|
|
|||
|
|
|||
|
#define VBDATA_UIF(comp_count,utype,itype,ftype,vk_type_start) \
|
|||
|
VBDATA_CREATE_FUNC(u,utype,comp_count,vk_type_start);
|
|||
|
VBDATA_CREATE_FUNC(i,itype,comp_count,vk_type_start+1);
|
|||
|
VBDATA_CREATE_FUNC(f,ftype,comp_count,vk_type_start+2);
|
|||
|
|
|||
|
#define VBDATA_UIF_1234(utype,itype,ftype,vk_type_start) \
|
|||
|
VBDATA_UIF(1,utype,itype,ftype,vk_type_start) \
|
|||
|
VBDATA_UIF(2,utype,itype,ftype,vk_type_start+3) \
|
|||
|
VBDATA_UIF(3,utype,itype,ftype,vk_type_start+6) \
|
|||
|
VBDATA_UIF(4,utype,itype,ftype,vk_type_start+9)
|
|||
|
|
|||
|
VBDATA_UIF_1234(uint32,int32,float ,VK_FORMAT_R32_UINT)
|
|||
|
VBDATA_UIF_1234(uint64,int64,double,VK_FORMAT_R64_UINT)
|
|||
|
#undef VBDATA_CREATE_FUNC
|
|||
|
|
|||
|
//inline VertexBufferData *EB16(const uint16 &count){return CreateVertexBufferData(GL_UNSIGNED_SHORT, 2,1,count);}
|
|||
|
//inline VertexBufferData *EB32(const uint32 &count){return CreateVertexBufferData(GL_UNSIGNED_INT, 4,1,count);}
|
|||
|
VK_NAMESPACE_END
|
|||
|
#endif//HGL_GRAPH_VULKAN_BUFFER_DATA_INCLUDE
|