Device建立专有的CreateIBO系列函数

This commit is contained in:
HuYingzhuo 2019-04-25 14:10:01 +08:00
parent 89d53c615c
commit 34ae77c8fc
2 changed files with 26 additions and 7 deletions

View File

@ -98,7 +98,7 @@ Device::~Device()
delete attr; 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); const uint32_t stride=GetStrideByFormat(format);
@ -112,12 +112,30 @@ VertexBuffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,
VulkanBuffer vb; 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(nullptr);
return(new VertexBuffer(attr->device,vb,format,stride,count)); 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) Buffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode)
{ {
VulkanBuffer vb; VulkanBuffer vb;

View File

@ -11,6 +11,7 @@ VK_NAMESPACE_BEGIN
struct PhysicalDevice; struct PhysicalDevice;
class Buffer; class Buffer;
class VertexBuffer; class VertexBuffer;
class IndexBuffer;
class CommandBuffer; class CommandBuffer;
class RenderPass; class RenderPass;
class Fence; class Fence;
@ -68,12 +69,12 @@ public:
public: public:
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); 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);
#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);} VertexBuffer * CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
CREATE_FORMAT_BUFFER_OBJECT(VBO,VERTEX)
CREATE_FORMAT_BUFFER_OBJECT(IBO,INDEX) IndexBuffer * CreateIBO(VkIndexType index_type,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
#undef CREATE_FORMAT_BUFFER_OBJECT 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);} #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);}