coded PrimitiveDataVDM, next step is test.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
@@ -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
|
@@ -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>
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user