split VertexDataManager.h/.cpp
This commit is contained in:
73
src/SceneGraph/VertexDataManager.cpp
Normal file
73
src/SceneGraph/VertexDataManager.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include<hgl/graph/VertexDataManager.h>
|
||||
#include<hgl/graph/VKVertexAttribBuffer.h>
|
||||
#include<hgl/graph/VKVertexInputFormat.h>
|
||||
#include<hgl/graph/VKVertexInputLayout.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
|
||||
namespace hgl
|
||||
{
|
||||
namespace graph
|
||||
{
|
||||
VertexDataManager::VertexDataManager(GPUDevice *dev,const VIL *_vil)
|
||||
{
|
||||
device=dev;
|
||||
|
||||
vi_count=_vil->GetCount();
|
||||
vif_list=_vil->GetVIFList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Material<61><6C><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч
|
||||
|
||||
vbo_max_size=0;
|
||||
vbo_cur_size=0;
|
||||
vbo=hgl_zero_new<VBO *>(vi_count);
|
||||
|
||||
ibo_cur_size=0;
|
||||
ibo=nullptr;
|
||||
}
|
||||
|
||||
VertexDataManager::~VertexDataManager()
|
||||
{
|
||||
SAFE_CLEAR_OBJECT_ARRAY(vbo,vi_count);
|
||||
SAFE_CLEAR(ibo);
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param vbo_size VBO<42><4F>С
|
||||
* @param ibo_size IBO<42><4F>С
|
||||
* @param index_type <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
bool VertexDataManager::Init(const VkDeviceSize vbo_size,const VkDeviceSize ibo_size,const IndexType index_type)
|
||||
{
|
||||
if(vbo[0]||ibo) //<2F>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return(false);
|
||||
|
||||
if(vbo_size<=0)
|
||||
return(false);
|
||||
|
||||
vbo_max_size=vbo_size;
|
||||
ibo_cur_size=ibo_size;
|
||||
|
||||
vbo_cur_size=0;
|
||||
ibo_cur_size=0;
|
||||
|
||||
for(uint i=0;i<vi_count;i++)
|
||||
{
|
||||
vbo[i]=device->CreateVBO(vif_list[i].format,vbo_max_size);
|
||||
if(!vbo[i])
|
||||
return(false);
|
||||
}
|
||||
|
||||
vbo_data_chain.Init(vbo_max_size);
|
||||
|
||||
if(ibo_size>0)
|
||||
{
|
||||
ibo=device->CreateIBO(index_type,ibo_size);
|
||||
if(!ibo)
|
||||
return(false);
|
||||
|
||||
ibo_data_chain.Init(ibo_size);
|
||||
}
|
||||
|
||||
return(true);
|
||||
}
|
||||
}//namespace graph
|
||||
}//namespace hgl
|
Reference in New Issue
Block a user