Swapchain是一系列最终会展示给用户的图像的集合。

/*
* Set up swapchain:
* - Get supported uses for all queues
* - Try to find a queue that supports both graphics and present
* - If no queue supports both, find a present queue and make sure we have a
* graphics queue
* - Get a list of supported formats and use the first one
* - Get surface properties and present modes and use them to create a swap
* chain
* - Create swap chain buffers
* - For each buffer, create a color attachment view and set its layout to
* color attachment
*/

Vulkan and the Windowing System

1、跟其他图形API不同,vulkan 将window相关的操作和图形核心的API隔离;窗口使用对应的扩展,KHR 代表了这是一种Khronos Extension.

VK_USE_PLATFORM_ANDROID_KHR - Android
VK_USE_PLATFORM_WAYLAND_KHR - Wayland
VK_USE_PLATFORM_WIN32_KHR - Microsoft Windows
VK_USE_PLATFORM_XCB_KHR - X Window System, using the XCB library
VK_USE_PLATFORM_XLIB_KHR - X Window System, using the Xlib library

2、VkSurfaceKHR 是对原生平台设备表面或者窗口的一种抽象;

Revisiting Instance and Device Extensions

Instance Extensions

Device Extensions

1、swapchain只是一系列需要展示的图片,具体要将这些图片显示到显示器上,需要硬件进行操作,这个时候需要用到 VK_KHR_SWAPCHAIN_EXTENSION_NAME;

Queue Family and Present

1、vkQueuePresentKHR()  需要找到一个同时指出graphics和present的famaliy;

Device Surface Formats

1、 VkSurfaceFormatKHR  能获取当前显示设备指出的VkFormat;

Surface Capabilities

1、Swapchain的创建需要提供一些额外的信息,可以通过vkGetPhysicalDeviceSurfaceCapabilitiesKHR() 和 vkGetPhysicalDeviceSurfacePresentModesKHR()获取;

2、 minImageCount用来决定当前使用的是双缓冲还是三缓冲区。 双缓冲区一个render,一个present; 三缓冲区一个用来present,其他两个用来render;

Different Queue Families for Graphics and Present

1、如果graphics queue和 present queue family是不同的,需要做一些额外的工作可以让imagine在各个queue之间进行共享;

swapchain_ci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
swapchain_ci.queueFamilyIndexCount = ;
swapchain_ci.pQueueFamilyIndices = NULL;
uint32_t queueFamilyIndices[] = {
(uint32_t)info.graphics_queue_family_index,
(uint32_t)info.present_queue_family_index};
if (info.graphics_queue_family_index != info.present_queue_family_index) {
// If the graphics and present queues are from different queue families,
// we either have to explicitly transfer ownership of images between the
// queues, or we have to create the swapchain with imageSharingMode
// as VK_SHARING_MODE_CONCURRENT
swapchain_ci.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
swapchain_ci.queueFamilyIndexCount = ;
swapchain_ci.pQueueFamilyIndices = queueFamilyIndices;
}

Create Swapchain

1、vkCreateSwapchainKHR 创建了一系列的图像来组成swapchain,但在实际使用的过程中,我们需要告诉GPU当前使用的是哪个image,这个时候就用到如下的接口 vkGetSwapchainImagesKHR;通过这个接口你可以获得
一系列images的handle;

Create Image Views

1、swapchain是一系列的images,但是当我们需要使用这些image的时候,我们就需要为image创建imagin view。 “view”用来告诉vulkan如何使用这些imagin。

2、VkImageViewCreateInfo 用来创建所需的imageview;

 

Vulkan SDK之 Swapchain的更多相关文章

  1. Vulkan SDK Demo 之一 熟悉

    DiligentEngine的API是D3d11和D3D12风格的,vulkan也被封装成了这种风格的API. 在了解Diligent Engine是如何对vulkan进行封装之前,我准备先学习下Vu ...

  2. Vulkan SDK 之 Instance

    上一篇 Vulkan SDK Demo 熟悉 粗略的了解了下,一个app是如何调用vulkan的api来展示一个立方体的,但是对其中的每一个api了解并不深刻,后面的系列会根据sample的tutor ...

  3. Vulkan SDK 之 Depth Buffer

    深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的i ...

  4. Vulkan SDK 之 DrawCube

    Waiting for a Swapchain Buffer Beginning the Render Pass Bind the Pipeline Bind the Descriptor Sets ...

  5. Vulkan SDK之 FrameBuffer

    The Vulkan Framebuffer Framebuffers represent a collection of memory attachments that are used by a ...

  6. Vulkan SDK 之 Shaders

    Compiling GLSL Shaders into SPIR-V 1.SPIR-V 是vulkan的底层shader语言.GLSL可以通过相关接口转换为SPIR-V. Creating Vulka ...

  7. Vulkan SDK 之Render Pass

    Create a Render Pass A render pass describes the scope of a rendering operation by specifying the co ...

  8. Vulkan SDK 之 Descriptor Set Layouts and Pipeline Layouts

    当我们有了一个uniform buff之后,vulkan 还不知道这个信息,需要通过descriptor进行描述. Descriptors and Descriptor Sets A descript ...

  9. Vulkan SDK 之 Device

     Enumerate Physical Devices Vulkan instance创建完成之后,vulkan loader是知道你有几个物理设备(显卡),但是程序不知道,需要通过 相关接口获取设备 ...

随机推荐

  1. 如何使用Docker部署PHP开发环境

    本文主要介绍了如何使用Docker构建PHP的开发环境,文中作者也探讨了构建基于Docker的开发环境应该使用单容器还是多容器,各有什么利弊.推荐PHP开发者阅读.希望对大家有所帮助. 环境部署一直是 ...

  2. 装系统:Win7,机子是Dell 5460,有半高的mSATA SSD

    问题描述:Dell Vostro 5460有一个机械盘,有一个半高的mSATA SSD,现在想将系统重装到mSATA SSD上,但是机子BIOS的Boot选项没有mSATA,只有机械盘,怎么办? 解决 ...

  3. java多线程知识回顾(笔记)

    线程创建的方式 有两种 第一种是继承Thread类 重写run方法 (个人偏向这一种实际中这种用的较多) 例如 public class MyThead extends Thread { int j= ...

  4. Pie Chart _Study

    1.Select a theme 2.Experiment with visual customization 3.Creat a script 4.Name should be as defined ...

  5. 在GNOME开发人员的努力下,Pango 1.44即将问世

    早在5月份,Red Hat的Matthias Clasen共同制定了计划,在近年来相当陈旧的情况下,对Pango布局引擎库进行了一些改进. 这项工作将随着Pango1.44版本的发布而实现,看起来它很 ...

  6. day01-Python运维开发基础

    还是用思维导图来一遍,印象更深!

  7. mongodb - 关联字段

    1,博客表结构  Blog.js var mongoose = require('mongoose') mongoose.connect('mongodb://localhost/test',{ us ...

  8. 清北学堂例题 LUOGU2523【HAOI2011】problem c

    题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...

  9. 001.Oracle数据库 , 查询日期在两者之间

    /*Oracle数据库查询日期在两者之间*/ SELECT OCCUR_DATE FROM LM_FAULT WHERE ( ( OCCUR_DATE >= to_date( '2017-05- ...

  10. Word 写论文的一些教训和经验

    参考文献 写正文时就在引用位置添加参考文献的title,写完后,在百度学术或谷歌学术中搜索参考文献获取GB/T 7714的参考格式,在参考文献的章节为文献编号,在引用位置插入交叉引用. 插图 可以先在 ...