improved VKBufferMap and added newly IBMap/VABMap

This commit is contained in:
2024-06-12 00:23:09 +08:00
parent cd4733a491
commit 7f8fbbd3a0
10 changed files with 364 additions and 365 deletions

View File

@@ -4,29 +4,75 @@
#include<hgl/graph/VertexAttribDataAccess.h>
VK_NAMESPACE_BEGIN
class VKBufferMap
template<typename T> class VKBufferMap
{
protected:
DeviceBuffer *buffer;
VkDeviceSize offset;
VkDeviceSize size;
T *buffer;
int32_t offset;
uint32_t stride;
uint32_t count;
void *map_ptr;
public:
VKBufferMap();
VKBufferMap(DeviceBuffer *buf,VkDeviceSize off,VkDeviceSize s);
~VKBufferMap();
VKBufferMap()
{
buffer=nullptr;
offset=0;
stride=count=0;
}
void Set(DeviceBuffer *buf_ptr,VkDeviceSize off,VkDeviceSize s);
virtual ~VKBufferMap()
{
Unmap();
}
void Set(T *buf,const int32_t off,const uint32_t s,const uint32_t c)
{
buffer=buf;
offset=off;
stride=s;
count=c;
map_ptr=nullptr;
}
const int32_t GetOffset ()const{ return offset;}
const uint32_t GetStride ()const{ return stride;}
const uint32_t GetCount ()const{ return count; }
const VkDeviceSize GetSize()const{ return size; }
const bool IsValid()const{ return buffer; }
void Clear();
void *Map();
void Unmap();
void Clear()
{
Unmap();
buffer=nullptr;
offset=0;
stride=count=0;
}
void *Map()
{
if(map_ptr)
return(map_ptr);
if(!buffer)
return(nullptr);
map_ptr=buffer->Map(offset,count);
return map_ptr;
}
void Unmap()
{
if(buffer&&map_ptr)
{
buffer->Unmap();
map_ptr=nullptr;
}
}
};//class VKBufferMap
VK_NAMESPACE_END