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