use VAB instead of VBO

This commit is contained in:
hyzboy 2024-04-24 01:44:01 +08:00
parent d8140ae64e
commit 3bbbe18c40
15 changed files with 36 additions and 36 deletions

View File

@ -74,8 +74,8 @@ private:
{
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.SetVBO(VAN::Color, VF_V4UN8, color_data ))return(false);
if(!rpc.SetVAB(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.SetVAB(VAN::Color, VF_V4UN8, color_data ))return(false);
render_obj=rpc.Create(material_instance,pipeline);

View File

@ -86,7 +86,7 @@ private:
{
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.SetVAB(VAN::Position, VF_V2F, position_data))return(false);
for(uint i=0;i<DRAW_OBJECT_COUNT;i++)
{

View File

@ -114,8 +114,8 @@ private:
Float32toFloat16(position_data_hf,position_data_float,VERTEX_COUNT*2);
#endif//USE_HALF_FLOAT_POSITION
if(!rpc.SetVBO(VAN::Position, PositionFormat, position_data))return(false);
if(!rpc.SetVBO(VAN::Color, ColorFormat, color_data ))return(false);
if(!rpc.SetVAB(VAN::Position, PositionFormat, position_data))return(false);
if(!rpc.SetVAB(VAN::Color, ColorFormat, color_data ))return(false);
render_obj=rpc.Create(material_instance,pipeline);
return(render_obj);

View File

@ -57,10 +57,10 @@ private:
// ^
// + 这上下两种格式要配套,否则会出错
// v
vil_config.Add(VAN::Position,VF_V2U16); //这里指定VBO中使用RG16U当做顶点数据格式
vil_config.Add(VAN::Position,VF_V2U16); //这里指定VAB中使用RG16U当做顶点数据格式
#endif//USE_ZERO2ONE_COORD
vil_config.Add(VAN::Color,VF_V4UN8); //这里指定VBO中使用RGBA8UNorm当做颜色数据格式
vil_config.Add(VAN::Color,VF_V4UN8); //这里指定VAB中使用RGBA8UNorm当做颜色数据格式
cfg.local_to_world=false;
@ -82,12 +82,12 @@ private:
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
#ifdef USE_ZERO2ONE_COORD //使用0 to 1坐标系
if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data_float ))return(false);
if(!rpc.SetVAB(VAN::Position, VF_V2F, position_data_float ))return(false);
#else //使用ortho坐标系
if(!rpc.SetVBO(VAN::Position, VF_V2U16, position_data_u16 ))return(false);
if(!rpc.SetVAB(VAN::Position, VF_V2U16, position_data_u16 ))return(false);
#endif//USE_ZERO2ONE_COORD
if(!rpc.SetVBO(VAN::Color, VF_V4UN8, color_data ))return(false);
if(!rpc.SetVAB(VAN::Color, VF_V4UN8, color_data ))return(false);
render_obj=rpc.Create(material_instance,pipeline);
return(true);

View File

@ -38,11 +38,11 @@ private:
Pipeline * pipeline =nullptr;
Primitive * prim_plane_grid =nullptr;
Primitive * prim_plane_grid =nullptr;
Primitive * ro_line =nullptr;
VBO * vbo_pos =nullptr;
VAB * vab_pos =nullptr;
Ray ray;
@ -106,7 +106,7 @@ private:
ro_line=db->CreatePrimitive("Line",2);
if(!ro_line)return(false);
if(!ro_line->Set(VAN::Position, vbo_pos= db->CreateVAB(VF_V3F,2,position_data )))return(false);
if(!ro_line->Set(VAN::Position, vab_pos= db->CreateVAB(VF_V3F,2,position_data )))return(false);
if(!ro_line->Set(VAN::Luminance, db->CreateVAB(VF_V1F,2,lumiance_data )))return(false);
}
@ -156,7 +156,7 @@ public:
const Vector3f pos=ray.ClosestPoint(Vector3f(0,0,0)); //求射线上与点(0,0,0)最近的点的坐标
vbo_pos->Write(&pos,3*sizeof(float)); //更新VBO上这个点的位置
vab_pos->Write(&pos,3*sizeof(float)); //更新VAB上这个点的位置
SceneAppFramework::BuildCommandBuffer(index);
}

View File

@ -87,8 +87,8 @@ private:
{
RenderablePrimitiveCreater rpc(db,"Quad",VERTEX_COUNT);
if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.SetVBO(VAN::TexCoord, VF_V2F, tex_coord_data))return(false);
if(!rpc.SetVAB(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.SetVAB(VAN::TexCoord, VF_V2F, tex_coord_data))return(false);
render_obj=rpc.Create(material_instance,pipeline);
return(render_obj);

View File

@ -83,8 +83,8 @@ private:
{
RenderablePrimitiveCreater rpc(db,"Rectangle",1);
if(!rpc.SetVBO(VAN::Position,VF_V4F,position_data))return(false);
if(!rpc.SetVBO(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
if(!rpc.SetVAB(VAN::Position,VF_V4F,position_data))return(false);
if(!rpc.SetVAB(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
render_obj=rpc.Create(material_instance,pipeline);
return(render_obj);

View File

@ -132,8 +132,8 @@ private:
position_data[2]=1.0f/float(TexCount);
if(!rpc.SetVBO(VAN::Position,VF_V4F,position_data))return(false);
if(!rpc.SetVBO(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
if(!rpc.SetVAB(VAN::Position,VF_V4F,position_data))return(false);
if(!rpc.SetVAB(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
Vector3f offset(1.0f/float(TexCount),0,0);

View File

@ -75,7 +75,7 @@ public:
const uint32_t GetVertexCount ()const {return vertex_count;}
bool GetVBOAccessData (const AnsiString &,VABAccess *);
bool GetVABAccess (const AnsiString &,VABAccess *);
const int GetBufferCount ()const {return buffer_list.GetCount();}
const IndexBufferData * GetIndexBufferData ()const {return &index_buffer_data;}

View File

@ -103,7 +103,7 @@ public: //Add
TextureID Add(Texture * t ){return rm_textures.Add(t);}
RenderableID Add(Renderable * r ){return rm_renderables.Add(r);}
public: // VBO/VAO
public: // VAB/VAO
VAB *CreateVAB(VkFormat format,uint32_t count,const void *data, SharingMode sm=SharingMode::Exclusive);
VAB *CreateVAB(VkFormat format,uint32_t count, SharingMode sm=SharingMode::Exclusive){return CreateVAB(format, count, nullptr, sm);}

View File

@ -22,9 +22,9 @@ public:
prim=rr->CreatePrimitive(name,vertex_count);
}
VBO *SetVBO(const AnsiString &name,const VkFormat &fmt,const void *buf)
VAB *SetVAB(const AnsiString &name,const VkFormat &fmt,const void *buf)
{
VBO *vab=rr->CreateVAB(fmt,vertex_count,buf);
VAB *vab=rr->CreateVAB(fmt,vertex_count,buf);
if(!vab)
return(nullptr);

View File

@ -182,7 +182,7 @@ bool MaterialRenderList::Bind(const VertexInputData *vid,const uint ri_index)
vbo_list->Restart();
//Basic组它所有的VBO信息均来自于Primitive由vid参数传递进来
//Basic组它所有的VAB信息均来自于Primitive由vid参数传递进来
{
vbo_list->Add(vid->buffer_list,vid->buffer_offset,vid->binding_count);
}

View File

@ -32,7 +32,7 @@ namespace hgl
/**
*
* @param vbo_size VBO大小
* @param vbo_size VAB大小
* @param ibo_size IBO大小
* @param index_type
*/

View File

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

View File

@ -64,12 +64,12 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
for(uint i=0;i<input_count;i++)
{
//注: VIF来自于材质但VBO来自于Primitive。
//注: VIF来自于材质但VAB来自于Primitive。
// 两个并不一定一样排序也不一定一样。所以不能让PRIMTIVE直接提供BUFFER_LIST/OFFSET来搞一次性绑定。
if(!prim->GetVBOAccessData(vif->name,&vad))
if(!prim->GetVABAccess(vif->name,&vad))
{
LOG_ERROR("[FATAL ERROR] not found VBO \""+AnsiString(vif->name)+"\" in Material: "+mtl_name);
LOG_ERROR("[FATAL ERROR] not found VAB \""+AnsiString(vif->name)+"\" in Material: "+mtl_name);
return(nullptr);
}
@ -77,20 +77,20 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
if(vab->GetFormat()!=vif->format)
{
LOG_ERROR( "[FATAL ERROR] VBO \""+UTF8String(vif->name)+
LOG_ERROR( "[FATAL ERROR] VAB \""+UTF8String(vif->name)+
UTF8String("\" format can't match Renderable, Material(")+mtl_name+
UTF8String(") Format(")+GetVulkanFormatName(vif->format)+
UTF8String("), VBO Format(")+GetVulkanFormatName(vab->GetFormat())+
UTF8String("), VAB Format(")+GetVulkanFormatName(vab->GetFormat())+
")");
return(nullptr);
}
if(vab->GetStride()!=vif->stride)
{
LOG_ERROR( "[FATAL ERROR] VBO \""+UTF8String(vif->name)+
LOG_ERROR( "[FATAL ERROR] VAB \""+UTF8String(vif->name)+
UTF8String("\" stride can't match Renderable, Material(")+mtl_name+
UTF8String(") stride(")+UTF8String::numberOf(vif->stride)+
UTF8String("), VBO stride(")+UTF8String::numberOf(vab->GetStride())+
UTF8String("), VAB stride(")+UTF8String::numberOf(vab->GetStride())+
")");
return(nullptr);
}