diff --git a/CMCMakeModule b/CMCMakeModule index 5530bcc0..32199158 160000 --- a/CMCMakeModule +++ b/CMCMakeModule @@ -1 +1 @@ -Subproject commit 5530bcc0dc92f76adc0716a4c3c0ca64d8240642 +Subproject commit 321991587905e07076574f104831bc8457f630b3 diff --git a/CMCore b/CMCore index 77a570d6..353bdef6 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 77a570d6beb4d7bc68333b7063cadcf69b891589 +Subproject commit 353bdef68b704d92a82adc55e65a0627bc857b54 diff --git a/CMPlatform b/CMPlatform index cdd9d4eb..c041a934 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit cdd9d4eb14f4c7f852362f59c14d680f39370685 +Subproject commit c041a934174d21e75a37d1315abcd8f89503f5e6 diff --git a/CMSceneGraph b/CMSceneGraph index c4f5e3d3..3acc9851 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit c4f5e3d339dac74cfb48f7cf17ea18e51990c709 +Subproject commit 3acc9851166e41f2560b968791f43477ab524cc7 diff --git a/inc/hgl/graph/VertexBuffer.h b/inc/hgl/graph/VertexBuffer.h index ef73f2b5..05853032 100644 --- a/inc/hgl/graph/VertexBuffer.h +++ b/inc/hgl/graph/VertexBuffer.h @@ -1128,6 +1128,14 @@ namespace hgl typedef VertexBuffer4 VB4u32 ,VB4ui; template<> inline VkFormat VertexBuffer4::GetDataType()const{return FMT_RGBA32U; } typedef VertexBuffer4 VB4f; template<> inline VkFormat VertexBuffer4::GetDataType()const{return FMT_RGBA32F; } typedef VertexBuffer4 VB4d; template<> inline VkFormat VertexBuffer4::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 diff --git a/src/RenderDevice/Vulkan/VKBuffer.cpp b/src/RenderDevice/Vulkan/VKBuffer.cpp index ee7cd8d6..b2620b4b 100644 --- a/src/RenderDevice/Vulkan/VKBuffer.cpp +++ b/src/RenderDevice/Vulkan/VKBuffer.cpp @@ -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