建立独立的VulkanBuffer数据结构,原Buffer添加派生类型VertexBuffer专门用于顶点类数据
This commit is contained in:
parent
e8889118cf
commit
33194750f8
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user