建立独立的VulkanBuffer数据结构,原Buffer添加派生类型VertexBuffer专门用于顶点类数据

This commit is contained in:
hyzboy 2019-04-16 02:20:54 +08:00
parent e8889118cf
commit 33194750f8
2 changed files with 55 additions and 15 deletions

View File

@ -3,28 +3,28 @@
VK_NAMESPACE_BEGIN
Buffer::~Buffer()
{
vkDestroyBuffer(device,buf,nullptr);
vkFreeMemory(device,mem,nullptr);
vkDestroyBuffer(device,buf.buffer,nullptr);
vkFreeMemory(device,buf.memory,nullptr);
}
uint8_t *Buffer::Map(uint32_t start,uint32_t size)
{
uint8_t *p;
if(start>buffer_info.range
||start+size>buffer_info.range)
if(start>buf.info.range
||start+size>buf.info.range)
return(nullptr);
if(start==0&&size==0)
size=buffer_info.range;
size=buf.info.range;
if(vkMapMemory(device,mem,start,size,0,(void **)&p)==VK_SUCCESS)
if(vkMapMemory(device,buf.memory,start,size,0,(void **)&p)==VK_SUCCESS)
return p;
return nullptr;
}
void Buffer::Unmap()
{
vkUnmapMemory(device,mem);
vkUnmapMemory(device,buf.memory);
}
VK_NAMESPACE_END

View File

@ -3,31 +3,71 @@
#include"VK.h"
VK_NAMESPACE_BEGIN
struct VulkanBuffer
{
VkBuffer buffer;
VkDeviceMemory memory;
VkDescriptorBufferInfo info;
};//struct VulkanBuffer
class Buffer
{
protected:
VkDevice device;
VkBuffer buf;
VkDeviceMemory mem;
VkDescriptorBufferInfo buffer_info;
VulkanBuffer buf;
private:
friend class RenderSurface;
friend class VertexBuffer;
Buffer(VkDevice d,VkBuffer b,VkDeviceMemory dm,VkDescriptorBufferInfo dbi)
Buffer(VkDevice d,const VulkanBuffer &vb)
{
device=d;
buf=b;
mem=dm;
buffer_info=dbi;
buf=vb;
}
public:
virtual ~Buffer();
uint8_t *Map(uint32_t start=0,uint32_t size=0);
VkBuffer GetBuffer(){return buf.buffer;}
virtual uint8_t *Map(uint32_t start=0,uint32_t size=0);
void Unmap();
};//class Buffer
class VertexBuffer:public Buffer
{
VkFormat format; ///<数据格式
uint32_t stride; ///<单个数据字节数
uint32_t count; ///<数据数量
private:
friend class RenderSurface;
VertexBuffer(VkDevice d,const VulkanBuffer &vb,VkFormat fmt,uint32_t _stride,uint32_t _count):Buffer(d,vb)
{
format=fmt;
stride=_stride;
count=_count;
}
public:
~VertexBuffer()=default;
const VkFormat GetFormat()const { return format; }
const uint32_t GetStride()const { return stride; }
const uint32_t GetCount()const{return count;}
uint8_t *Map(uint32_t start=0,uint32_t size=0) override
{
return Buffer::Map(start*stride,size*stride);
}
};//class VertexBuffer:public Buffer
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_BUFFER_INCLUDE