From af8f62ddb4ab3ad6d37d1cd099006060c1f14e97 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 3 Apr 2024 00:12:03 +0800 Subject: [PATCH] move the VBOAccessData to VKVertexAttribBuffer.h from VK.h --- inc/hgl/graph/VK.h | 12 ------------ inc/hgl/graph/VKVertexAttribBuffer.h | 15 +++++++++++++++ src/SceneGraph/Vulkan/VKRenderable.cpp | 8 +++++--- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/inc/hgl/graph/VK.h b/inc/hgl/graph/VK.h index fec3aac5..78cf3b3e 100644 --- a/inc/hgl/graph/VK.h +++ b/inc/hgl/graph/VK.h @@ -59,18 +59,6 @@ struct DeviceBufferData; class VertexAttribBuffer; using VBO=VertexAttribBuffer; -struct VBOAccessData -{ - VBO *buf; - VkDeviceSize offset; - -public: - - CompOperatorMemcmp(const VBOAccessData &); -};//struct VBOAccessData - -using VBOAccessMap=Map; - class IndexBuffer; struct IndexBufferData diff --git a/inc/hgl/graph/VKVertexAttribBuffer.h b/inc/hgl/graph/VKVertexAttribBuffer.h index 84a3cf4c..7e320381 100644 --- a/inc/hgl/graph/VKVertexAttribBuffer.h +++ b/inc/hgl/graph/VKVertexAttribBuffer.h @@ -31,9 +31,24 @@ namespace hgl const VkFormat GetFormat()const { return format; } const uint32_t GetStride()const { return stride; } const uint32_t GetCount ()const { return count; } + + const VkDeviceSize GetBytes()const { return stride*count; } };//class VertexAttribBuffer:public DeviceBuffer using VBO=VertexAttribBuffer; + + struct VBOAccessData + { + VBO *vbo; + VkDeviceSize offset; + VkDeviceSize size; + + public: + + CompOperatorMemcmp(const VBOAccessData &); + };//class VBOAccessData + + using VBOAccessMap=Map; }//namespace graph }//namespace hgl #endif//HGL_GRAPH_VULKAN_VERTEX_ATTRIB_BUFFER_INCLUDE diff --git a/src/SceneGraph/Vulkan/VKRenderable.cpp b/src/SceneGraph/Vulkan/VKRenderable.cpp index f6c0e72d..372ea140 100644 --- a/src/SceneGraph/Vulkan/VKRenderable.cpp +++ b/src/SceneGraph/Vulkan/VKRenderable.cpp @@ -60,17 +60,18 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p) VertexInputData *vid=new VertexInputData(input_count,prim->GetVertexCount(),prim->GetIndexBufferData()); const VertexInputFormat *vif=vil->GetFormatList(VertexInputGroup::Basic); + VBOAccessData vad; for(uint i=0;iGetVBO(vif->name,vid->buffer_offset+i); - - if(!vbo) + if(!prim->GetVBOAccessData(vif->name,&vad)) { LOG_ERROR("[FATAL ERROR] not found VBO \""+AnsiString(vif->name)+"\" in Material: "+mtl_name); return(nullptr); } + vbo=vad.vbo; + if(vbo->GetFormat()!=vif->format) { LOG_ERROR( "[FATAL ERROR] VBO \""+UTF8String(vif->name)+ @@ -91,6 +92,7 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p) return(nullptr); } + vid->buffer_offset[i]=vad.offset; vid->buffer_list[i]=vbo->GetBuffer(); ++vif; }