[WIP] comments VDM, preparing double PrimitiveCreater

This commit is contained in:
hyzboy 2024-05-23 13:15:47 +08:00
parent c49feac2e6
commit cfd67e1a42
7 changed files with 122 additions and 89 deletions

View File

@ -10,7 +10,7 @@
#include<hgl/graph/VKVertexAttribBuffer.h> #include<hgl/graph/VKVertexAttribBuffer.h>
#include<hgl/graph/mtl/Material3DCreateConfig.h> #include<hgl/graph/mtl/Material3DCreateConfig.h>
#include<hgl/graph/mtl/BlinnPhong.h> #include<hgl/graph/mtl/BlinnPhong.h>
#include<hgl/graph/VertexDataManager.h> //#include<hgl/graph/VertexDataManager.h>
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
@ -49,7 +49,7 @@ private:
private: //sphere private: //sphere
Material * mtl_blinnphong =nullptr; Material * mtl_blinnphong =nullptr;
VertexDataManager * vdm_blinnphong =nullptr; //VertexDataManager * vdm_blinnphong =nullptr;
MaterialInstance * mi_blinnphong[4]{}; MaterialInstance * mi_blinnphong[4]{};
Pipeline * p_blinnphong =nullptr; Pipeline * p_blinnphong =nullptr;
@ -100,7 +100,7 @@ private:
mtl_blinnphong->BindUBO(DescriptorSetType::Global,"sun",ubo_sun); mtl_blinnphong->BindUBO(DescriptorSetType::Global,"sun",ubo_sun);
mtl_blinnphong->Update(); mtl_blinnphong->Update();
vdm_blinnphong=new VertexDataManager(device,mtl_blinnphong->GetDefaultVIL()); //vdm_blinnphong=new VertexDataManager(device,mtl_blinnphong->GetDefaultVIL());
Color4f mi_data; Color4f mi_data;
for(uint i=0;i<4;i++) for(uint i=0;i<4;i++)

View File

@ -38,7 +38,7 @@ protected:
public: public:
PrimitiveCreater(GPUDevice *,const VIL *,const AnsiString &name); PrimitiveCreater(GPUDevice *,const VIL *,const AnsiString &name);
//PrimitiveCreater(VertexDataManager *); PrimitiveCreater(VertexDataManager *);
virtual ~PrimitiveCreater() virtual ~PrimitiveCreater()
{ {
ClearAllData(); ClearAllData();

51
inc/hgl/graph/VDMAccess.h Normal file
View File

@ -0,0 +1,51 @@
#pragma once
#include<hgl/graph/VK.h>
#include<hgl/type/DataChain.h>
VK_NAMESPACE_BEGIN
class VDMAccess
{
protected:
VertexDataManager *vdm;
DataChain::UserNode *dc_node;
const VIL *vil;
public:
VDMAccess(VertexDataManager *_vdm,const VIL *_vil)
{
vdm=_vdm;
vil=_vil;
dc_node=nullptr;
}
virtual ~VDMAccess()=default;
const VIL * GetVIL ()const{ return vil; }
const DataChain::UserNode * GetDCNode ()const{ return dc_node; }
};//class VDMAccess
class VABAccessVDM:public VDMAccess
{
VABAccess **vab;
public:
~VABAccessVDM() override
{
vdm->ReleaseVAB(dc_node);
}
};//class VABAccessVDM:public VDMAccess
class IBAccessVDM:public VDMAccess
{
IBAccess *iba;
public:
};//class IBAccessVDM:public VDMAccess
VK_NAMESPACE_END

View File

@ -2,97 +2,64 @@
#include<hgl/graph/VK.h> #include<hgl/graph/VK.h>
#include<hgl/graph/VKIndexBuffer.h> #include<hgl/graph/VKIndexBuffer.h>
#include<hgl/type/DataChain.h> #include<hgl/graph/VDMAccess.h>
#include<hgl/type/Pair.h>
namespace hgl VK_NAMESPACE_BEGIN
class VertexDataManager
{ {
namespace graph GPUDevice *device;
{
struct IBAccessNode:public IBAccess
{
private:
VertexDataManager *vdm; protected:
DataChain::UserNode *dc_node;
public: const VIL * vil; ///<顶点输入格式列表
uint vi_count; ///<顶点输入流数量
const VIF * vif_list; ///<顶点输入格式列表
friend class VertexDataManager; VkDeviceSize vab_max_size; ///<顶点缓冲区分配空间大小
VkDeviceSize vab_cur_size; ///<顶点缓冲区当前使用大小
VAB ** vab; ///<顶点缓冲区列表
~IBAccessNode(); VkDeviceSize ibo_cur_size; ///<索引缓冲区当前使用大小
}; IndexBuffer * ibo; ///<索引缓冲区
struct VABAccessNode protected:
{
private:
VertexDataManager *vdm; DataChain vbo_data_chain; ///<数据链
DataChain::UserNode *dc_node; DataChain ibo_data_chain; ///<数据链
const VIL *vil;
VABAccess **vab; protected:
public: friend struct IBAccessVDM;
friend struct VABAccessVDM;
friend class VertexDataManager; bool ReleaseIB(DataChain::UserNode *);
bool ReleaseVAB(DataChain::UserNode *);
~VABAccessNode(); public:
};
class VertexDataManager VertexDataManager(GPUDevice *dev,const VIL *_vil);
{ ~VertexDataManager();
GPUDevice *device;
protected: GPUDevice * GetDevice ()const{return device;} ///<取得GPU设备
const VIL * vil; ///<顶点输入格式列表 const VIL * GetVIL ()const{return vil;} ///<取得顶点输入格式列表
uint vi_count; ///<顶点输入流数量
const VIF * vif_list; ///<顶点输入格式列表
VkDeviceSize vab_max_size; ///<顶点缓冲区分配空间大小 const VkDeviceSize GetVABMaxCount ()const{return vab_max_size;} ///<取得顶点属性缓冲区分配的空间最大数量
VkDeviceSize vab_cur_size; ///<顶点缓冲区当前使用大小 const VkDeviceSize GetVABCurCount ()const{return vab_cur_size;} ///<取得顶点属性缓冲区当前数量
VAB ** vab; ///<顶点缓冲区列表
VkDeviceSize ibo_cur_size; ///<索引缓冲区当前使用大小 const IndexType GetIBOType ()const{return ibo?ibo->GetType():IndexType::ERR;} ///<取得索引缓冲区类型
IndexBuffer * ibo; ///<索引缓冲区 const VkDeviceSize GetIBOMaxCount ()const{return ibo?ibo->GetCount():-1;} ///<取得索引缓冲区分配的空间最大数量
const VkDeviceSize GetIBOCurCount ()const{return ibo?ibo_cur_size:-1;} ///<取得索引缓冲区当前数量
protected: public:
DataChain vbo_data_chain; ///<数据链 bool Init(const VkDeviceSize vbo_size,const VkDeviceSize ibo_size,const IndexType index_type);
DataChain ibo_data_chain; ///<数据链
protected: IBAccessVDM *AcquireIB(const VkDeviceSize count);
VABAccessVDM *AcquireVAB(const VkDeviceSize count);
friend struct IBAccessNode; void Release(VABAccessVDM *);
friend struct VABAccessNode; void Release(IBAccessVDM *);
};//class VertexDataManager
bool ReleaseIB(DataChain::UserNode *); VK_NAMESPACE_END
bool ReleaseVAB(DataChain::UserNode *);
public:
VertexDataManager(GPUDevice *dev,const VIL *_vil);
~VertexDataManager();
GPUDevice * GetDevice ()const{return device;} ///<取得GPU设备
const VIL * GetVIL ()const{return vil;} ///<取得顶点输入格式列表
const VkDeviceSize GetVABMaxCount ()const{return vab_max_size;} ///<取得顶点属性缓冲区分配的空间最大数量
const VkDeviceSize GetVABCurCount ()const{return vab_cur_size;} ///<取得顶点属性缓冲区当前数量
const IndexType GetIBOType ()const{return ibo?ibo->GetType():IndexType::ERR;} ///<取得索引缓冲区类型
const VkDeviceSize GetIBOMaxCount ()const{return ibo?ibo->GetCount():-1;} ///<取得索引缓冲区分配的空间最大数量
const VkDeviceSize GetIBOCurCount ()const{return ibo?ibo_cur_size:-1;} ///<取得索引缓冲区当前数量
public:
bool Init(const VkDeviceSize vbo_size,const VkDeviceSize ibo_size,const IndexType index_type);
IBAccessNode *AcquireIB(const VkDeviceSize count);
VABAccessNode *AcquireVAB(const VkDeviceSize count);
};//class VertexDataManager
}//namespace graph
}//namespace hgl

View File

@ -9,6 +9,7 @@ SOURCE_GROUP("Texture" FILES ${SG_TEXTURE_SOURCE})
SET(SG_VDM_SOURCE ${SG_INCLUDE_PATH}/VertexAttribDataAccess.h SET(SG_VDM_SOURCE ${SG_INCLUDE_PATH}/VertexAttribDataAccess.h
${SG_INCLUDE_PATH}/VertexDataManager.h ${SG_INCLUDE_PATH}/VertexDataManager.h
${SG_INCLUDE_PATH}/VDMAccess.h
VertexDataManager.cpp) VertexDataManager.cpp)
SOURCE_GROUP("VertexDataManager" FILES ${SG_VDM_SOURCE}) SOURCE_GROUP("VertexDataManager" FILES ${SG_VDM_SOURCE})
@ -307,7 +308,7 @@ add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_HEADER}
${SG_TEXTURE_SOURCE} ${SG_TEXTURE_SOURCE}
${TILE_SOURCE} ${TILE_SOURCE}
${SG_VDM_SOURCE} #${SG_VDM_SOURCE}
# ${FONT_MANAGE_SOURCE} # ${FONT_MANAGE_SOURCE}
# ${FONT_SOURCE} # ${FONT_SOURCE}

View File

@ -2,7 +2,7 @@
#include<hgl/graph/VKShaderModule.h> #include<hgl/graph/VKShaderModule.h>
#include<hgl/graph/VKVertexAttribBuffer.h> #include<hgl/graph/VKVertexAttribBuffer.h>
#include<hgl/graph/VKPrimitive.h> #include<hgl/graph/VKPrimitive.h>
#include<hgl/graph/VertexDataManager.h> //#include<hgl/graph/VertexDataManager.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN

View File

@ -8,15 +8,29 @@ namespace hgl
{ {
namespace graph namespace graph
{ {
IBAccessNode::~IBAccessNode() class IBAccessVDM:public VDMAccess
{ {
vdm->ReleaseIB(dc_node); IBAccess *iba;
}
VABAccessNode::~VABAccessNode() public:
~IBAccessVDM() override
{
vdm->ReleaseIB(dc_node);
}
};//struct IBAccessVDM
class VABAccessVDM:public VDMAccess
{ {
vdm->ReleaseVAB(dc_node); VABAccess **vab;
}
public:
~VABAccessVDM() override
{
vdm->ReleaseVAB(dc_node);
}
};//struct VABAccessVDM
}//namespace graph }//namespace graph
namespace graph namespace graph
@ -84,7 +98,7 @@ namespace hgl
return(true); return(true);
} }
IBAccessNode *VertexDataManager::AcquireIB(const VkDeviceSize count) IBAccessVDM *VertexDataManager::AcquireIB(const VkDeviceSize count)
{ {
if(count<=0)return(false); if(count<=0)return(false);
@ -92,7 +106,7 @@ namespace hgl
if(!un)return(false); if(!un)return(false);
IBAccessNode *node=new IBAccessNode; IBAccessVDM *node=new IBAccessVDM;
node->vdm=this; node->vdm=this;
node->dc_node=un; node->dc_node=un;
@ -119,7 +133,7 @@ namespace hgl
return(true); return(true);
} }
VABAccessNode *VertexDataManager::AcquireVAB(const VkDeviceSize count) VABAccessVDM *VertexDataManager::AcquireVAB(const VkDeviceSize count)
{ {
if(count<=0)return(false); if(count<=0)return(false);
@ -127,7 +141,7 @@ namespace hgl
if(!un)return(false); if(!un)return(false);
VABAccessNode *node=new VABAccessNode; VABAccessVDM *node=new VABAccessVDM;
node->vdm=this; node->vdm=this;
node->dc_node=un; node->dc_node=un;