建立独立的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 VK_NAMESPACE_BEGIN
Buffer::~Buffer() Buffer::~Buffer()
{ {
vkDestroyBuffer(device,buf,nullptr); vkDestroyBuffer(device,buf.buffer,nullptr);
vkFreeMemory(device,mem,nullptr); vkFreeMemory(device,buf.memory,nullptr);
} }
uint8_t *Buffer::Map(uint32_t start,uint32_t size) uint8_t *Buffer::Map(uint32_t start,uint32_t size)
{ {
uint8_t *p; uint8_t *p;
if(start>buffer_info.range if(start>buf.info.range
||start+size>buffer_info.range) ||start+size>buf.info.range)
return(nullptr); return(nullptr);
if(start==0&&size==0) 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 p;
return nullptr; return nullptr;
} }
void Buffer::Unmap() void Buffer::Unmap()
{ {
vkUnmapMemory(device,mem); vkUnmapMemory(device,buf.memory);
} }
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -3,31 +3,71 @@
#include"VK.h" #include"VK.h"
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
struct VulkanBuffer
{
VkBuffer buffer;
VkDeviceMemory memory;
VkDescriptorBufferInfo info;
};//struct VulkanBuffer
class Buffer class Buffer
{ {
protected:
VkDevice device; VkDevice device;
VkBuffer buf; VulkanBuffer buf;
VkDeviceMemory mem;
VkDescriptorBufferInfo buffer_info;
private: private:
friend class RenderSurface; friend class RenderSurface;
friend class VertexBuffer;
Buffer(VkDevice d,VkBuffer b,VkDeviceMemory dm,VkDescriptorBufferInfo dbi) Buffer(VkDevice d,const VulkanBuffer &vb)
{ {
device=d; device=d;
buf=b; buf=vb;
mem=dm;
buffer_info=dbi;
} }
public: public:
virtual ~Buffer(); 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(); void Unmap();
};//class Buffer };//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 VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_BUFFER_INCLUDE #endif//HGL_GRAPH_VULKAN_BUFFER_INCLUDE