From 33194750f88a023e4524c6851b2039581c9ba6cd Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 16 Apr 2019 02:20:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=BA=E7=AB=8B=E7=8B=AC=E7=AB=8B=E7=9A=84Vu?= =?UTF-8?q?lkanBuffer=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E5=8E=9FBuffer=E6=B7=BB=E5=8A=A0=E6=B4=BE=E7=94=9F=E7=B1=BB?= =?UTF-8?q?=E5=9E=8BVertexBuffer=E4=B8=93=E9=97=A8=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E9=A1=B6=E7=82=B9=E7=B1=BB=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/VKBuffer.cpp | 14 +++++----- example/Vulkan/VKBuffer.h | 56 +++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/example/Vulkan/VKBuffer.cpp b/example/Vulkan/VKBuffer.cpp index cfaf5210..ef11ae42 100644 --- a/example/Vulkan/VKBuffer.cpp +++ b/example/Vulkan/VKBuffer.cpp @@ -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 diff --git a/example/Vulkan/VKBuffer.h b/example/Vulkan/VKBuffer.h index 26e10f00..666a4046 100644 --- a/example/Vulkan/VKBuffer.h +++ b/example/Vulkan/VKBuffer.h @@ -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