From db80f1de518f95cd56b4ac846936eab96bdbec2a Mon Sep 17 00:00:00 2001 From: HuYingzhuo Date: Thu, 11 Apr 2019 20:33:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Swapchain=E7=9A=84Image/Image?= =?UTF-8?q?View=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/RenderSurfaceAttribute.h | 3 ++ example/Vulkan/RenderSurfaceCreater.cpp | 52 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/example/Vulkan/RenderSurfaceAttribute.h b/example/Vulkan/RenderSurfaceAttribute.h index 7c1e1b1e..ede0df1b 100644 --- a/example/Vulkan/RenderSurfaceAttribute.h +++ b/example/Vulkan/RenderSurfaceAttribute.h @@ -35,6 +35,9 @@ struct RenderSurfaceAttribute VkCommandPool cmd_pool =nullptr; VkSwapchainKHR swap_chain =nullptr; + List sc_images; + List sc_image_views; + public: RenderSurfaceAttribute(VkInstance inst,VkPhysicalDevice pd,VkSurfaceKHR s); diff --git a/example/Vulkan/RenderSurfaceCreater.cpp b/example/Vulkan/RenderSurfaceCreater.cpp index 741a1a1e..024e31f4 100644 --- a/example/Vulkan/RenderSurfaceCreater.cpp +++ b/example/Vulkan/RenderSurfaceCreater.cpp @@ -122,6 +122,55 @@ namespace return(nullptr); } + + bool CreateImageView(RenderSurfaceAttribute *rsa) + { + uint32_t count; + + if(vkGetSwapchainImagesKHR(rsa->device,rsa->swap_chain,&count,nullptr)!=VK_SUCCESS) + return(false); + + rsa->sc_images.SetCount(count); + + if(vkGetSwapchainImagesKHR(rsa->device,rsa->swap_chain,&count,rsa->sc_images.GetData())!=VK_SUCCESS) + { + rsa->sc_images.Clear(); + return(false); + } + + rsa->sc_image_views.SetCount(count); + + VkImage *ip=rsa->sc_images.GetData(); + VkImageView *vp=rsa->sc_image_views.GetData(); + for(uint32_t i=0; iformat; + color_image_view.components.r=VK_COMPONENT_SWIZZLE_R; + color_image_view.components.g=VK_COMPONENT_SWIZZLE_G; + color_image_view.components.b=VK_COMPONENT_SWIZZLE_B; + color_image_view.components.a=VK_COMPONENT_SWIZZLE_A; + color_image_view.subresourceRange.aspectMask=VK_IMAGE_ASPECT_COLOR_BIT; + color_image_view.subresourceRange.baseMipLevel=0; + color_image_view.subresourceRange.levelCount=1; + color_image_view.subresourceRange.baseArrayLayer=0; + color_image_view.subresourceRange.layerCount=1; + + if(vkCreateImageView(rsa->device,&color_image_view,nullptr,vp)!=VK_SUCCESS) + return(false); + + ++ip; + ++vp; + } + + return(true); + } }//namespace RenderSurface *CreateRenderSuface(VkInstance inst,VkPhysicalDevice physical_device,Window *win) @@ -153,6 +202,9 @@ RenderSurface *CreateRenderSuface(VkInstance inst,VkPhysicalDevice physical_devi if(!rsa->swap_chain) return(nullptr); + if(!CreateImageView(rsa)) + return(nullptr); + return(new RenderSurface(rsa)); } VK_NAMESPACE_END