diff --git a/inc/hgl/graph/VKPrimitive.h b/inc/hgl/graph/VKPrimitive.h index be712357..6d72fda8 100644 --- a/inc/hgl/graph/VKPrimitive.h +++ b/inc/hgl/graph/VKPrimitive.h @@ -6,6 +6,7 @@ #include #include #include +#include VK_NAMESPACE_BEGIN /** * 单一图元数据 @@ -60,7 +61,7 @@ public: const uint32_t GetVertexCount ()const {return vertex_count;} - VBO * GetVBO (const AnsiString &,VkDeviceSize *); + bool GetVBOAccessData (const AnsiString &,VBOAccessData *); const int GetBufferCount ()const {return buffer_list.GetCount();} const IndexBufferData * GetIndexBufferData ()const {return &index_buffer_data;} diff --git a/src/SceneGraph/Vulkan/VKPrimitive.cpp b/src/SceneGraph/Vulkan/VKPrimitive.cpp index 3910ef31..0b58aad8 100644 --- a/src/SceneGraph/Vulkan/VKPrimitive.cpp +++ b/src/SceneGraph/Vulkan/VKPrimitive.cpp @@ -32,12 +32,13 @@ bool Primitive::Set(const AnsiString &name,VBO *vbo,VkDeviceSize offset) if(!vbo)return(false); if(buffer_list.KeyExist(name))return(false); - VBOAccessData bd; - - bd.buf=vbo; - bd.offset=offset; + VBOAccessData vad; - buffer_list.Add(name,bd); + vad.vbo=vbo; + vad.offset=offset; + vad.size=vbo->GetBytes(); + + buffer_list.Add(name,vad); #ifdef _DEBUG DebugUtils *du=device->GetDebugUtils(); @@ -52,20 +53,12 @@ bool Primitive::Set(const AnsiString &name,VBO *vbo,VkDeviceSize offset) return(true); } -VBO *Primitive::GetVBO(const AnsiString &name,VkDeviceSize *offset) +bool Primitive::GetVBOAccessData(const AnsiString &name,VBOAccessData *vad) { - if(!offset)return(nullptr); - if(name.IsEmpty())return(nullptr); + if(name.IsEmpty())return(false); + if(!vad)return(false); - VBOAccessData bd; - - if(buffer_list.Get(name,bd)) - { - *offset=bd.offset; - return bd.buf; - } - - return(nullptr); + return buffer_list.Get(name,*vad); } bool Primitive::Set(IndexBuffer *ib,VkDeviceSize offset)