跳转至

vkGetPhysicalDeviceSurfacePresentModesKHR

函数原型

1
2
3
4
5
VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
    VkPhysicalDevice                            physicalDevice,
    VkSurfaceKHR                                surface,
    uint32_t*                                   pPresentModeCount,
    VkPresentModeKHR*                           pPresentModes);

描述

查询surface支持的显式模式。

参数

  • physicalDevice : 创建交换链的物理设备。

  • surface : 与交换链关联的surface。

  • pPresentModeCount : 可用显示模式数量的整数指针。

  • pPresentModes : NULL或者 VkPresentModeKHR 结构体数组指针。

    • pPresentModes 为NULL时,pPresentModeCount 返回显示模式的数量;
    • pPresentModes 不为NULL时,写入 pPresentModeCount 个显式模式到 pPresentModes中。

补充

VkPresentModeKHR 枚举定义:

typedef enum VkPresentModeKHR {
    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
    VK_PRESENT_MODE_MAILBOX_KHR = 1,
    VK_PRESENT_MODE_FIFO_KHR = 2,
    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
  // Provided by VK_KHR_shared_presentable_image
    VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
  // Provided by VK_KHR_shared_presentable_image
    VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
} VkPresentModeKHR;

返回值

  • VK_SUCCESS : 查询成功。
  • 其他 : 查询失败。

代码示例

// 查询表面支持呈现模式
uint32_t presentModeCount;
// 可用的呈现模式
vector<VkPresentModeKHR> presentModes; 
vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, nullptr);

if (presentModeCount != 0) {
    presentModes.resize(presentModeCount);
    vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, presentModes.data());
}