窗口系统集成 (WSI)
由于 Vulkan API 可以在不显示结果的情况下使用,因此 WSI 通过使用可选的 Vulkan 扩展提供。大多数实现都将包含 WSI 支持。WSI 设计旨在将每个平台的窗口机制从核心 Vulkan API 中抽象出来。

表面
VkSurfaceKHR
对象是与平台无关的,并且设计为 Vulkan API 的其余部分可以将其用于所有 WSI 操作。它使用 VK_KHR_surface
扩展启用。
每个支持 Vulkan Surface 的平台都有其自己的方法来从其各自的平台特定 API 创建 VkSurfaceKHR
对象。
-
Android - vkCreateAndroidSurfaceKHR
-
DirectFB - vkCreateDirectFBSurfaceEXT
-
Fuchsia - vkCreateImagePipeSurfaceFUCHSIA
-
iOS - vkCreateIOSSurfaceMVK
-
macOS - vkCreateMacOSSurfaceMVK
-
Metal - vkCreateMetalSurfaceEXT
-
VI - vkCreateViSurfaceNN
-
Wayland - vkWaylandSurfaceCreateInfoKHR
-
QNX - vkCreateScreenSurfaceQNX
-
Windows - vkCreateWin32SurfaceKHR
-
XCB - vkCreateXcbSurfaceKHR
-
Xlib - vkCreateXlibSurfaceKHR
-
直接到显示 - vkCreateDisplayPlaneSurfaceKHR
预旋转
移动设备可以旋转,因此应用程序窗口的逻辑方向和显示器的物理方向可能不匹配。应用程序需要在两种模式下运行:纵向
和横向
。这两种模式之间的差异可以简化为仅分辨率的变化。但是,某些显示子系统始终在显示面板的“原生”(或“物理”)方向上工作。由于设备已旋转,要实现所需的效果,应用程序输出也必须旋转。
为了使您的应用程序在移动平台(如 Android)上充分利用 Vulkan,必须实现预旋转。Google 的一篇详细的博客文章介绍了如何在创建交换链期间通过指定方向来处理表面旋转,并附带独立示例。Vulkan-Samples 还对为什么预旋转是一个问题进行了精彩的阐述,以及运行示例,展示了在着色器中解决该问题的方法。如果使用 Adreno GPU 供电的设备,Qualcomm 建议使用VK_QCOM_render_pass_transform扩展来实现预旋转。