coded PrimitiveDataVDM, next step is test.

This commit is contained in:
2024-05-25 02:48:37 +08:00
parent 6de3cf789a
commit 9a4e495027
9 changed files with 140 additions and 134 deletions

View File

@@ -14,6 +14,7 @@ class PrimitiveCreater
protected:
GPUDevice * device;
VertexDataManager * vdm;
const VIL * vil;
@@ -31,6 +32,7 @@ protected:
public:
PrimitiveCreater(GPUDevice *,const VIL *,const AnsiString &name);
PrimitiveCreater(VertexDataManager *,const VIL *,const AnsiString &name);
virtual ~PrimitiveCreater();
virtual bool Init(const VkDeviceSize vertices_count,const VkDeviceSize index_count,IndexType it=IndexType::AUTO); ///<初始化,参数为顶点数量
@@ -39,10 +41,10 @@ public: //顶点缓冲区
const VkDeviceSize GetVertexCount()const{ return vertices_number; } ///<取得顶点数量
VABAccess * AcquirePVB (const AnsiString &name,const VkFormat &format,const void *data=nullptr,const VkDeviceSize bytes=0); ///<请求一个顶点属性数据区
VABAccess * AcquireVAB (const AnsiString &name,const VkFormat &format,const void *data=nullptr,const VkDeviceSize bytes=0); ///<请求一个顶点属性数据区
bool WriteVAB (const AnsiString &name,const VkFormat &format,const void *data,const uint32_t bytes) ///<直接写入顶点属性数据
{
return AcquirePVB(name,format,data,bytes);
return AcquireVAB(name,format,data,bytes);
}
public: //索引缓冲区
@@ -52,10 +54,10 @@ public: //索引缓冲区
void * MapIBO();
void UnmapIBO();
bool WriteIBO(const void *data,const VkDeviceSize bytes);
bool WriteIBO(const void *data,const VkDeviceSize count);
template<typename T>
bool WriteIBO(const T *data){return WriteIBO(data,index_number*sizeof(T));}
bool WriteIBO(const T *data){return WriteIBO(data,index_number);}
public: //创建可渲染对象
@@ -74,7 +76,7 @@ public:
VABRawMap(PrimitiveCreater *pc,const VkFormat &format,const AnsiString &name)
{
vaba=pc->AcquirePVB(name,format);
vaba=pc->AcquireVAB(name,format);
if(vaba)
map_ptr=(T *)(vaba->vab->Map(vaba->start,vaba->count));
@@ -114,7 +116,7 @@ public:
VABMap(PrimitiveCreater *pc,const AnsiString &name)
{
vaba=pc->AcquirePVB(name,T::GetVulkanFormat(),nullptr);
vaba=pc->AcquireVAB(name,T::GetVulkanFormat(),nullptr);
if(vaba)
{

View File

@@ -1,51 +0,0 @@
#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

@@ -1,4 +1,4 @@
#ifndef HGL_GRAPH_VULKAN_INDEX_BUFFER_INCLUDE
#ifndef HGL_GRAPH_VULKAN_INDEX_BUFFER_INCLUDE
#define HGL_GRAPH_VULKAN_INDEX_BUFFER_INCLUDE
#include<hgl/graph/VKBuffer.h>

View File

@@ -2,7 +2,7 @@
#include<hgl/graph/VK.h>
#include<hgl/graph/VKIndexBuffer.h>
#include<hgl/graph/VDMAccess.h>
#include<hgl/type/DataChain.h>
VK_NAMESPACE_BEGIN
@@ -28,20 +28,12 @@ protected:
DataChain vbo_data_chain; ///<数据链
DataChain ibo_data_chain; ///<数据链
protected:
friend struct IBAccessVDM;
friend struct VABAccessVDM;
bool ReleaseIB(DataChain::UserNode *);
bool ReleaseVAB(DataChain::UserNode *);
public:
VertexDataManager(GPUDevice *dev,const VIL *_vil);
~VertexDataManager();
GPUDevice * GetDevice ()const{return device;} ///<取得GPU设备
GPUDevice * GetDevice ()const{return device;} ///<取得GPU设备
const VIL * GetVIL ()const{return vil;} ///<取得顶点输入格式列表
@@ -56,10 +48,13 @@ public:
bool Init(const VkDeviceSize vbo_size,const VkDeviceSize ibo_size,const IndexType index_type);
IBAccessVDM *AcquireIB(const VkDeviceSize count);
VABAccessVDM *AcquireVAB(const VkDeviceSize count);
DataChain::UserNode *AcquireIB(const VkDeviceSize count);
DataChain::UserNode *AcquireVAB(const VkDeviceSize count);
void Release(VABAccessVDM *);
void Release(IBAccessVDM *);
bool ReleaseIB(DataChain::UserNode *);
bool ReleaseVAB(DataChain::UserNode *);
IndexBuffer *GetIBO(){return ibo;}
VAB *GetVAB(const uint index){return vab[index];}
};//class VertexDataManager
VK_NAMESPACE_END