增加CreateVB函数,用于根据基础类型创建VertexBuffer

This commit is contained in:
hyzboy 2020-07-11 16:49:52 +08:00
parent b4dcd029f9
commit 4950a33ae5
6 changed files with 86 additions and 11 deletions

@ -1 +1 @@
Subproject commit 5530bcc0dc92f76adc0716a4c3c0ca64d8240642
Subproject commit 321991587905e07076574f104831bc8457f630b3

2
CMCore

@ -1 +1 @@
Subproject commit 77a570d6beb4d7bc68333b7063cadcf69b891589
Subproject commit 353bdef68b704d92a82adc55e65a0627bc857b54

@ -1 +1 @@
Subproject commit cdd9d4eb14f4c7f852362f59c14d680f39370685
Subproject commit c041a934174d21e75a37d1315abcd8f89503f5e6

@ -1 +1 @@
Subproject commit c4f5e3d339dac74cfb48f7cf17ea18e51990c709
Subproject commit 3acc9851166e41f2560b968791f43477ab524cc7

View File

@ -1128,6 +1128,14 @@ namespace hgl
typedef VertexBuffer4<uint32> VB4u32 ,VB4ui; template<> inline VkFormat VertexBuffer4<uint32 >::GetDataType()const{return FMT_RGBA32U; }
typedef VertexBuffer4<float > VB4f; template<> inline VkFormat VertexBuffer4<float >::GetDataType()const{return FMT_RGBA32F; }
typedef VertexBuffer4<double> VB4d; template<> inline VkFormat VertexBuffer4<double >::GetDataType()const{return FMT_RGBA64F; }
/**
* VBC
* @param base_type ,spirv_cross/spirv_common.hpp中的spirv_cross::SPIRType
* @param vecsize vec数量
* @param vertex_count
*/
VertexBufferCreater *CreateVB(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count);
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_VERTEX_BUFFER_INCLUDE

View File

@ -9,13 +9,80 @@ Buffer::~Buffer()
vkDestroyBuffer(device,buf.buffer,nullptr);
}
VertexBufferCreater *CreateVBO(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count)
VertexBufferCreater *CreateVB(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count)
{
if(vecsize==1)return(new VB1f(vertex_count));else
if(vecsize==2)return(new VB2f(vertex_count));else
if(vecsize==3)return(new VB3f(vertex_count));else
if(vecsize==4)return(new VB4f(vertex_count));else
if(base_type==spirv_cross::SPIRType::SByte)
{
if(vecsize==1)return(new VB1i8(vertex_count));else
if(vecsize==2)return(new VB2i8(vertex_count));else
//if(vecsize==3)return(new VB3i8(vertex_count));else
if(vecsize==4)return(new VB4i8(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::UByte)
{
if(vecsize==1)return(new VB1u8(vertex_count));else
if(vecsize==2)return(new VB2u8(vertex_count));else
//if(vecsize==3)return(new VB3u8(vertex_count));else
if(vecsize==4)return(new VB4u8(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::Short)
{
if(vecsize==1)return(new VB1i16(vertex_count));else
if(vecsize==2)return(new VB2i16(vertex_count));else
//if(vecsize==3)return(new VB3i16(vertex_count));else
if(vecsize==4)return(new VB4i16(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::UShort)
{
if(vecsize==1)return(new VB1u16(vertex_count));else
if(vecsize==2)return(new VB2u16(vertex_count));else
//if(vecsize==3)return(new VB3u16(vertex_count));else
if(vecsize==4)return(new VB4u16(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::Int)
{
if(vecsize==1)return(new VB1i32(vertex_count));else
if(vecsize==2)return(new VB2i32(vertex_count));else
if(vecsize==3)return(new VB3i32(vertex_count));else
if(vecsize==4)return(new VB4i32(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::UInt)
{
if(vecsize==1)return(new VB1u32(vertex_count));else
if(vecsize==2)return(new VB2u32(vertex_count));else
if(vecsize==3)return(new VB3u32(vertex_count));else
if(vecsize==4)return(new VB4u32(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::Half)
{
//if(vecsize==1)return(new VB1hf(vertex_count));else
//if(vecsize==2)return(new VB2hf(vertex_count));else
//if(vecsize==3)return(new VB3hf(vertex_count));else
//if(vecsize==4)return(new VB4hf(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::Float)
{
if(vecsize==1)return(new VB1f(vertex_count));else
if(vecsize==2)return(new VB2f(vertex_count));else
if(vecsize==3)return(new VB3f(vertex_count));else
if(vecsize==4)return(new VB4f(vertex_count));
}
else
if(base_type==spirv_cross::SPIRType::Double)
{
if(vecsize==1)return(new VB1d(vertex_count));else
if(vecsize==2)return(new VB2d(vertex_count));else
if(vecsize==3)return(new VB3d(vertex_count));else
if(vecsize==4)return(new VB4d(vertex_count));
}
return nullptr;
}
VK_NAMESPACE_END