use VAB instead of VBO

This commit is contained in:
2024-04-24 01:38:55 +08:00
parent acb69d3bf5
commit d8140ae64e
26 changed files with 167 additions and 152 deletions

View File

@@ -55,7 +55,7 @@ bool GPUDevice::CreateBuffer(DeviceBufferData *buf,VkBufferUsageFlags buf_usage,
return(false);
}
VBO *GPUDevice::CreateVBO(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode)
VAB *GPUDevice::CreateVAB(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode)
{
if(count==0)return(nullptr);

View File

@@ -27,16 +27,16 @@ VK_NAMESPACE_BEGIN
// return(true);
//}
bool Primitive::Set(const AnsiString &name,VBO *vbo,VkDeviceSize offset)
bool Primitive::Set(const AnsiString &name,VAB *vab,VkDeviceSize offset)
{
if(!vbo)return(false);
if(!vab)return(false);
if(buffer_list.KeyExist(name))return(false);
VBOAccessData vad;
VABAccess vad;
vad.vbo=vbo;
vad.vab=vab;
vad.offset=offset;
vad.size=vbo->GetBytes();
vad.size=vab->GetBytes();
buffer_list.Add(name,vad);
@@ -45,15 +45,15 @@ bool Primitive::Set(const AnsiString &name,VBO *vbo,VkDeviceSize offset)
if(du)
{
du->SetBuffer(vbo->GetBuffer(),prim_name+":VBO:Buffer:"+name);
du->SetDeviceMemory(vbo->GetVkMemory(),prim_name+":VBO:Memory:"+name);
du->SetBuffer(vab->GetBuffer(),prim_name+":VBO:Buffer:"+name);
du->SetDeviceMemory(vab->GetVkMemory(),prim_name+":VBO:Memory:"+name);
}
#endif//_DEBUG
return(true);
}
bool Primitive::GetVBOAccessData(const AnsiString &name,VBOAccessData *vad)
bool Primitive::GetVBOAccessData(const AnsiString &name,VABAccess *vad)
{
if(name.IsEmpty())return(false);
if(!vad)return(false);

View File

@@ -5,9 +5,9 @@
#include<hgl/graph/VKVertexAttribBuffer.h>
VK_NAMESPACE_BEGIN
VBO *RenderResource::CreateVBO(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode)
VAB *RenderResource::CreateVAB(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode)
{
VBO *vb=device->CreateVBO(format,count,data,sharing_mode);
VAB *vb=device->CreateVAB(format,count,data,sharing_mode);
if(!vb)
return(nullptr);

View File

@@ -55,12 +55,12 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
return(nullptr);
}
VBO *vbo;
VAB *vab;
VertexInputData *vid=new VertexInputData(input_count,prim->GetVertexCount(),prim->GetIndexBufferData());
const VertexInputFormat *vif=vil->GetVIFList(VertexInputGroup::Basic);
VBOAccessData vad;
VABAccess vad;
for(uint i=0;i<input_count;i++)
{
@@ -73,30 +73,30 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
return(nullptr);
}
vbo=vad.vbo;
vab=vad.vab;
if(vbo->GetFormat()!=vif->format)
if(vab->GetFormat()!=vif->format)
{
LOG_ERROR( "[FATAL ERROR] VBO \""+UTF8String(vif->name)+
UTF8String("\" format can't match Renderable, Material(")+mtl_name+
UTF8String(") Format(")+GetVulkanFormatName(vif->format)+
UTF8String("), VBO Format(")+GetVulkanFormatName(vbo->GetFormat())+
UTF8String("), VBO Format(")+GetVulkanFormatName(vab->GetFormat())+
")");
return(nullptr);
}
if(vbo->GetStride()!=vif->stride)
if(vab->GetStride()!=vif->stride)
{
LOG_ERROR( "[FATAL ERROR] VBO \""+UTF8String(vif->name)+
UTF8String("\" stride can't match Renderable, Material(")+mtl_name+
UTF8String(") stride(")+UTF8String::numberOf(vif->stride)+
UTF8String("), VBO stride(")+UTF8String::numberOf(vbo->GetStride())+
UTF8String("), VBO stride(")+UTF8String::numberOf(vab->GetStride())+
")");
return(nullptr);
}
vid->buffer_offset[i]=vad.offset;
vid->buffer_list[i]=vbo->GetBuffer();
vid->buffer_list[i]=vab->GetBuffer();
++vif;
}