不再使用RefDeviceAttribute

This commit is contained in:
HuYingzhuo 2019-04-18 22:24:39 +08:00
parent 89369484da
commit ca2a20aabd
3 changed files with 62 additions and 38 deletions

View File

@ -55,6 +55,11 @@ namespace
}
}//namespace
Device::~Device()
{
delete attr;
}
VertexBuffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,uint32_t count,VkSharingMode sharing_mode)
{
const uint32_t stride=GetStrideByFormat(format);
@ -69,42 +74,42 @@ VertexBuffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,
VulkanBuffer vb;
if(!CreateVulkanBuffer(vb,rsa,buf_usage,size,sharing_mode))
if(!CreateVulkanBuffer(vb,attr,buf_usage,size,sharing_mode))
return(nullptr);
return(new VertexBuffer(rsa->device,vb,format,stride,count));
return(new VertexBuffer(attr->device,vb,format,stride,count));
}
Buffer *Device::CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode)
{
VulkanBuffer vb;
if(!CreateVulkanBuffer(vb,rsa,buf_usage,size,sharing_mode))
if(!CreateVulkanBuffer(vb,attr,buf_usage,size,sharing_mode))
return(nullptr);
return(new Buffer(rsa->device,vb));
return(new Buffer(attr->device,vb));
}
CommandBuffer *Device::CreateCommandBuffer()
{
if(!rsa->cmd_pool)
if(!attr->cmd_pool)
return(nullptr);
VkCommandBufferAllocateInfo cmd={};
cmd.sType=VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
cmd.pNext=nullptr;
cmd.commandPool=rsa->cmd_pool;
cmd.commandPool=attr->cmd_pool;
cmd.level=VK_COMMAND_BUFFER_LEVEL_PRIMARY;
cmd.commandBufferCount=1;
VkCommandBuffer cmd_buf;
VkResult res=vkAllocateCommandBuffers(rsa->device,&cmd,&cmd_buf);
VkResult res=vkAllocateCommandBuffers(attr->device,&cmd,&cmd_buf);
if(res!=VK_SUCCESS)
return(nullptr);
return(new CommandBuffer(rsa->device,rsa->cmd_pool,cmd_buf));
return(new CommandBuffer(attr->device,attr->cmd_pool,cmd_buf));
}
//DescriptorSet *Device::CreateDescSet(int count)
@ -125,7 +130,7 @@ CommandBuffer *Device::CreateCommandBuffer()
RenderPass *Device::CreateRenderPass()
{
VkAttachmentDescription attachments[2];
attachments[0].format=rsa->format;
attachments[0].format=attr->format;
attachments[0].samples=VK_SAMPLE_COUNT_1_BIT;
attachments[0].loadOp=VK_ATTACHMENT_LOAD_OP_CLEAR;
attachments[0].storeOp=VK_ATTACHMENT_STORE_OP_STORE;
@ -135,7 +140,7 @@ RenderPass *Device::CreateRenderPass()
attachments[0].finalLayout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
attachments[0].flags=0;
attachments[1].format=rsa->depth.format;
attachments[1].format=attr->depth.format;
attachments[1].samples=VK_SAMPLE_COUNT_1_BIT;
attachments[1].loadOp=VK_ATTACHMENT_LOAD_OP_CLEAR;
attachments[1].storeOp=VK_ATTACHMENT_STORE_OP_DONT_CARE;
@ -172,9 +177,9 @@ RenderPass *Device::CreateRenderPass()
VkRenderPass render_pass;
if(vkCreateRenderPass(rsa->device,&rp_info,nullptr,&render_pass)!=VK_SUCCESS)
if(vkCreateRenderPass(attr->device,&rp_info,nullptr,&render_pass)!=VK_SUCCESS)
return(nullptr);
return(new RenderPass(rsa->device,render_pass));
return(new RenderPass(attr->device,render_pass));
}
VK_NAMESPACE_END

View File

@ -13,29 +13,27 @@ class VertexBuffer;
class CommandBuffer;
class RenderPass;
using RefDeviceAttribute=SharedPtr<DeviceAttribute>;
class Device
{
RefDeviceAttribute rsa;
DeviceAttribute *attr;
private:
friend Device *CreateRenderDevice(VkInstance,const PhysicalDevice *,Window *);
Device(RefDeviceAttribute &ref_rsa)
Device(DeviceAttribute *da)
{
rsa=ref_rsa;
attr=da;
}
public:
virtual ~Device()=default;
virtual ~Device();
VkSurfaceKHR GetSurface () {return rsa->surface;}
VkDevice GetDevice () {return rsa->device;}
const PhysicalDevice *GetPhysicalDevice ()const {return rsa->physical_device;}
const VkExtent2D & GetExtent ()const {return rsa->swapchain_extent;}
VkSurfaceKHR GetSurface () {return attr->surface;}
VkDevice GetDevice () {return attr->device;}
const PhysicalDevice *GetPhysicalDevice ()const {return attr->physical_device;}
const VkExtent2D & GetExtent ()const {return attr->swapchain_extent;}
public:

View File

@ -1,10 +1,8 @@
#include"VKDevice.h"
#include"VKInstance.h"
#include"VKPhysicalDevice.h"
#include<hgl/type/Smart.h>
VK_NAMESPACE_BEGIN
VkSurfaceKHR CreateRenderDevice(VkInstance,Window *);
namespace
@ -288,6 +286,26 @@ namespace
return desc_pool;
}
struct RenderDeviceCreater
{
DeviceAttribute *attr;
public:
RenderDeviceCreater(VkInstance inst,const PhysicalDevice *pd,VkSurfaceKHR sur)
{
attr=new DeviceAttribute(inst,pd,sur);
}
~RenderDeviceCreater()
{
if(attr)
delete attr;
}
DeviceAttribute *operator -> (){return attr;}
};//struct RenderDeviceCreater
}//namespace
Device *CreateRenderDevice(VkInstance inst,const PhysicalDevice *physical_device,Window *win)
@ -297,39 +315,42 @@ Device *CreateRenderDevice(VkInstance inst,const PhysicalDevice *physical_device
if(!surface)
return(nullptr);
RefDeviceAttribute rsa=new DeviceAttribute(inst,physical_device,surface);
RenderDeviceCreater rdc(inst,physical_device,surface);
rsa->swapchain_extent=GetSwapchainExtent(rsa->surface_caps,win->GetWidth(),win->GetHeight());
rdc->swapchain_extent=GetSwapchainExtent(rdc->surface_caps,win->GetWidth(),win->GetHeight());
if(rsa->graphics_family==ERROR_FAMILY_INDEX)
if(rdc->graphics_family==ERROR_FAMILY_INDEX)
return(nullptr);
rsa->device=CreateDevice(inst,physical_device->physical_device,rsa->graphics_family);
rdc->device=CreateDevice(inst,physical_device->physical_device,rdc->graphics_family);
if(!rsa->device)
if(!rdc->device)
return(nullptr);
rsa->cmd_pool=CreateCommandPool(rsa->device,rsa->graphics_family);
rdc->cmd_pool=CreateCommandPool(rdc->device,rdc->graphics_family);
if(!rsa->cmd_pool)
if(!rdc->cmd_pool)
return(nullptr);
rsa->swap_chain=CreateSwapChain(rsa);
rdc->swap_chain=CreateSwapChain(rdc.attr);
if(!rsa->swap_chain)
if(!rdc->swap_chain)
return(nullptr);
if(!CreateSwapchainImageView(rsa))
if(!CreateSwapchainImageView(rdc.attr))
return(nullptr);
if(!CreateDepthBuffer(rsa))
if(!CreateDepthBuffer(rdc.attr))
return(nullptr);
rsa->desc_pool=CreateDescriptorPool(rsa->device,1);
rdc->desc_pool=CreateDescriptorPool(rdc->device,1);
if(!rsa->desc_pool)
if(!rdc->desc_pool)
return(nullptr);
return(new Device(rsa));
Device *dev=new Device(rdc.attr);
rdc.attr=nullptr;
return dev;
}
VK_NAMESPACE_END