use VAB instead of VBO
This commit is contained in:
parent
d8140ae64e
commit
3bbbe18c40
@ -74,8 +74,8 @@ private:
|
|||||||
{
|
{
|
||||||
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
|
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);
|
||||||
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);
|
render_obj=rpc.Create(material_instance,pipeline);
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ private:
|
|||||||
{
|
{
|
||||||
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
|
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++)
|
for(uint i=0;i<DRAW_OBJECT_COUNT;i++)
|
||||||
{
|
{
|
||||||
|
@ -114,8 +114,8 @@ private:
|
|||||||
Float32toFloat16(position_data_hf,position_data_float,VERTEX_COUNT*2);
|
Float32toFloat16(position_data_hf,position_data_float,VERTEX_COUNT*2);
|
||||||
#endif//USE_HALF_FLOAT_POSITION
|
#endif//USE_HALF_FLOAT_POSITION
|
||||||
|
|
||||||
if(!rpc.SetVBO(VAN::Position, PositionFormat, position_data))return(false);
|
if(!rpc.SetVAB(VAN::Position, PositionFormat, position_data))return(false);
|
||||||
if(!rpc.SetVBO(VAN::Color, ColorFormat, color_data ))return(false);
|
if(!rpc.SetVAB(VAN::Color, ColorFormat, color_data ))return(false);
|
||||||
|
|
||||||
render_obj=rpc.Create(material_instance,pipeline);
|
render_obj=rpc.Create(material_instance,pipeline);
|
||||||
return(render_obj);
|
return(render_obj);
|
||||||
|
@ -57,10 +57,10 @@ private:
|
|||||||
// ^
|
// ^
|
||||||
// + 这上下两种格式要配套,否则会出错
|
// + 这上下两种格式要配套,否则会出错
|
||||||
// v
|
// v
|
||||||
vil_config.Add(VAN::Position,VF_V2U16); //这里指定VBO中使用RG16U当做顶点数据格式
|
vil_config.Add(VAN::Position,VF_V2U16); //这里指定VAB中使用RG16U当做顶点数据格式
|
||||||
#endif//USE_ZERO2ONE_COORD
|
#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;
|
cfg.local_to_world=false;
|
||||||
|
|
||||||
@ -82,12 +82,12 @@ private:
|
|||||||
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
|
RenderablePrimitiveCreater rpc(db,"Triangle",VERTEX_COUNT);
|
||||||
|
|
||||||
#ifdef USE_ZERO2ONE_COORD //使用0 to 1坐标系
|
#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坐标系
|
#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
|
#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);
|
render_obj=rpc.Create(material_instance,pipeline);
|
||||||
return(true);
|
return(true);
|
||||||
|
@ -42,7 +42,7 @@ private:
|
|||||||
|
|
||||||
Primitive * ro_line =nullptr;
|
Primitive * ro_line =nullptr;
|
||||||
|
|
||||||
VBO * vbo_pos =nullptr;
|
VAB * vab_pos =nullptr;
|
||||||
|
|
||||||
Ray ray;
|
Ray ray;
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ private:
|
|||||||
ro_line=db->CreatePrimitive("Line",2);
|
ro_line=db->CreatePrimitive("Line",2);
|
||||||
if(!ro_line)return(false);
|
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);
|
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)最近的点的坐标
|
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);
|
SceneAppFramework::BuildCommandBuffer(index);
|
||||||
}
|
}
|
||||||
|
@ -87,8 +87,8 @@ private:
|
|||||||
{
|
{
|
||||||
RenderablePrimitiveCreater rpc(db,"Quad",VERTEX_COUNT);
|
RenderablePrimitiveCreater rpc(db,"Quad",VERTEX_COUNT);
|
||||||
|
|
||||||
if(!rpc.SetVBO(VAN::Position, VF_V2F, position_data))return(false);
|
if(!rpc.SetVAB(VAN::Position, VF_V2F, position_data))return(false);
|
||||||
if(!rpc.SetVBO(VAN::TexCoord, VF_V2F, tex_coord_data))return(false);
|
if(!rpc.SetVAB(VAN::TexCoord, VF_V2F, tex_coord_data))return(false);
|
||||||
|
|
||||||
render_obj=rpc.Create(material_instance,pipeline);
|
render_obj=rpc.Create(material_instance,pipeline);
|
||||||
return(render_obj);
|
return(render_obj);
|
||||||
|
@ -83,8 +83,8 @@ private:
|
|||||||
{
|
{
|
||||||
RenderablePrimitiveCreater rpc(db,"Rectangle",1);
|
RenderablePrimitiveCreater rpc(db,"Rectangle",1);
|
||||||
|
|
||||||
if(!rpc.SetVBO(VAN::Position,VF_V4F,position_data))return(false);
|
if(!rpc.SetVAB(VAN::Position,VF_V4F,position_data))return(false);
|
||||||
if(!rpc.SetVBO(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
|
if(!rpc.SetVAB(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
|
||||||
|
|
||||||
render_obj=rpc.Create(material_instance,pipeline);
|
render_obj=rpc.Create(material_instance,pipeline);
|
||||||
return(render_obj);
|
return(render_obj);
|
||||||
|
@ -132,8 +132,8 @@ private:
|
|||||||
|
|
||||||
position_data[2]=1.0f/float(TexCount);
|
position_data[2]=1.0f/float(TexCount);
|
||||||
|
|
||||||
if(!rpc.SetVBO(VAN::Position,VF_V4F,position_data))return(false);
|
if(!rpc.SetVAB(VAN::Position,VF_V4F,position_data))return(false);
|
||||||
if(!rpc.SetVBO(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
|
if(!rpc.SetVAB(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
|
||||||
|
|
||||||
Vector3f offset(1.0f/float(TexCount),0,0);
|
Vector3f offset(1.0f/float(TexCount),0,0);
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ public:
|
|||||||
|
|
||||||
const uint32_t GetVertexCount ()const {return vertex_count;}
|
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 int GetBufferCount ()const {return buffer_list.GetCount();}
|
||||||
|
|
||||||
const IndexBufferData * GetIndexBufferData ()const {return &index_buffer_data;}
|
const IndexBufferData * GetIndexBufferData ()const {return &index_buffer_data;}
|
||||||
|
@ -103,7 +103,7 @@ public: //Add
|
|||||||
TextureID Add(Texture * t ){return rm_textures.Add(t);}
|
TextureID Add(Texture * t ){return rm_textures.Add(t);}
|
||||||
RenderableID Add(Renderable * r ){return rm_renderables.Add(r);}
|
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,const void *data, SharingMode sm=SharingMode::Exclusive);
|
||||||
VAB *CreateVAB(VkFormat format,uint32_t count, SharingMode sm=SharingMode::Exclusive){return CreateVAB(format, count, nullptr, sm);}
|
VAB *CreateVAB(VkFormat format,uint32_t count, SharingMode sm=SharingMode::Exclusive){return CreateVAB(format, count, nullptr, sm);}
|
||||||
|
@ -22,9 +22,9 @@ public:
|
|||||||
prim=rr->CreatePrimitive(name,vertex_count);
|
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)
|
if(!vab)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
@ -182,7 +182,7 @@ bool MaterialRenderList::Bind(const VertexInputData *vid,const uint ri_index)
|
|||||||
|
|
||||||
vbo_list->Restart();
|
vbo_list->Restart();
|
||||||
|
|
||||||
//Basic组,它所有的VBO信息均来自于Primitive,由vid参数传递进来
|
//Basic组,它所有的VAB信息均来自于Primitive,由vid参数传递进来
|
||||||
{
|
{
|
||||||
vbo_list->Add(vid->buffer_list,vid->buffer_offset,vid->binding_count);
|
vbo_list->Add(vid->buffer_list,vid->buffer_offset,vid->binding_count);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ namespace hgl
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化顶点数据管理器
|
* 初始化顶点数据管理器
|
||||||
* @param vbo_size VBO大小
|
* @param vbo_size VAB大小
|
||||||
* @param ibo_size IBO大小
|
* @param ibo_size IBO大小
|
||||||
* @param index_type 索引类型
|
* @param index_type 索引类型
|
||||||
*/
|
*/
|
||||||
|
@ -45,15 +45,15 @@ bool Primitive::Set(const AnsiString &name,VAB *vab,VkDeviceSize offset)
|
|||||||
|
|
||||||
if(du)
|
if(du)
|
||||||
{
|
{
|
||||||
du->SetBuffer(vab->GetBuffer(),prim_name+":VBO:Buffer:"+name);
|
du->SetBuffer(vab->GetBuffer(),prim_name+":VAB:Buffer:"+name);
|
||||||
du->SetDeviceMemory(vab->GetVkMemory(),prim_name+":VBO:Memory:"+name);
|
du->SetDeviceMemory(vab->GetVkMemory(),prim_name+":VAB:Memory:"+name);
|
||||||
}
|
}
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Primitive::GetVBOAccessData(const AnsiString &name,VABAccess *vad)
|
bool Primitive::GetVABAccess(const AnsiString &name,VABAccess *vad)
|
||||||
{
|
{
|
||||||
if(name.IsEmpty())return(false);
|
if(name.IsEmpty())return(false);
|
||||||
if(!vad)return(false);
|
if(!vad)return(false);
|
||||||
|
@ -64,12 +64,12 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
|
|||||||
|
|
||||||
for(uint i=0;i<input_count;i++)
|
for(uint i=0;i<input_count;i++)
|
||||||
{
|
{
|
||||||
//注: VIF来自于材质,但VBO来自于Primitive。
|
//注: VIF来自于材质,但VAB来自于Primitive。
|
||||||
// 两个并不一定一样,排序也不一定一样。所以不能让PRIMTIVE直接提供BUFFER_LIST/OFFSET来搞一次性绑定。
|
// 两个并不一定一样,排序也不一定一样。所以不能让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);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,20 +77,20 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
|
|||||||
|
|
||||||
if(vab->GetFormat()!=vif->format)
|
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 can't match Renderable, Material(")+mtl_name+
|
||||||
UTF8String(") Format(")+GetVulkanFormatName(vif->format)+
|
UTF8String(") Format(")+GetVulkanFormatName(vif->format)+
|
||||||
UTF8String("), VBO Format(")+GetVulkanFormatName(vab->GetFormat())+
|
UTF8String("), VAB Format(")+GetVulkanFormatName(vab->GetFormat())+
|
||||||
")");
|
")");
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(vab->GetStride()!=vif->stride)
|
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 can't match Renderable, Material(")+mtl_name+
|
||||||
UTF8String(") stride(")+UTF8String::numberOf(vif->stride)+
|
UTF8String(") stride(")+UTF8String::numberOf(vif->stride)+
|
||||||
UTF8String("), VBO stride(")+UTF8String::numberOf(vab->GetStride())+
|
UTF8String("), VAB stride(")+UTF8String::numberOf(vab->GetStride())+
|
||||||
")");
|
")");
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user