From 34ae77c8fc4c9188adf994ce2335b08769f4a436 Mon Sep 17 00:00:00 2001 From: HuYingzhuo Date: Thu, 25 Apr 2019 14:10:01 +0800 Subject: [PATCH] =?UTF-8?q?Device=E5=BB=BA=E7=AB=8B=E4=B8=93=E6=9C=89?= =?UTF-8?q?=E7=9A=84CreateIBO=E7=B3=BB=E5=88=97=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/VKDevice.cpp | 22 ++++++++++++++++++++-- example/Vulkan/VKDevice.h | 11 ++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/example/Vulkan/VKDevice.cpp b/example/Vulkan/VKDevice.cpp index 23897cc1..422e9590 100644 --- a/example/Vulkan/VKDevice.cpp +++ b/example/Vulkan/VKDevice.cpp @@ -98,7 +98,7 @@ Device::~Device() delete attr; } -VertexBuffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,uint32_t count,VkSharingMode sharing_mode) +VertexBuffer *Device::CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode) { const uint32_t stride=GetStrideByFormat(format); @@ -112,12 +112,30 @@ VertexBuffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format, VulkanBuffer vb; - if(!CreateVulkanBuffer(vb,attr,buf_usage,size,sharing_mode)) + if(!CreateVulkanBuffer(vb,attr,VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,size,sharing_mode)) return(nullptr); return(new VertexBuffer(attr->device,vb,format,stride,count)); } +IndexBuffer *Device::CreateIBO(VkIndexType index_type,uint32_t count,VkSharingMode sharing_mode) +{ + uint32_t stride; + + if(index_type==VK_INDEX_TYPE_UINT16)stride=2;else + if(index_type==VK_INDEX_TYPE_UINT32)stride=4;else + return(nullptr); + + const VkDeviceSize size=stride*count; + + VulkanBuffer vb; + + if(!CreateVulkanBuffer(vb,attr,VK_BUFFER_USAGE_INDEX_BUFFER_BIT,size,sharing_mode)) + return(nullptr); + + return(new IndexBuffer(attr->device,vb,index_type,count)); +} + Buffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode) { VulkanBuffer vb; diff --git a/example/Vulkan/VKDevice.h b/example/Vulkan/VKDevice.h index 98c38c39..70c20669 100644 --- a/example/Vulkan/VKDevice.h +++ b/example/Vulkan/VKDevice.h @@ -11,6 +11,7 @@ VK_NAMESPACE_BEGIN struct PhysicalDevice; class Buffer; class VertexBuffer; +class IndexBuffer; class CommandBuffer; class RenderPass; class Fence; @@ -68,12 +69,12 @@ public: public: Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); - VertexBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); + + VertexBuffer * CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); -#define CREATE_FORMAT_BUFFER_OBJECT(LargeName,type) VertexBuffer *Create##LargeName(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,format,count,sharing_mode);} - CREATE_FORMAT_BUFFER_OBJECT(VBO,VERTEX) - CREATE_FORMAT_BUFFER_OBJECT(IBO,INDEX) -#undef CREATE_FORMAT_BUFFER_OBJECT + IndexBuffer * CreateIBO(VkIndexType index_type,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); + IndexBuffer * CreateIBO16(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,sharing_mode);} + IndexBuffer * CreateIBO32(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,sharing_mode);} #define CREATE_BUFFER_OBJECT(LargeName,type) Buffer *Create##LargeName(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,size,sharing_mode);}