获得呈现表面的功能
译者注:示例代码点击此处
当我们创建交换链时,需要指定创建参数。 必须提供符合支持限制的值, 但我们并不清楚这些值。它们可以从呈现表面获得。 因此,为了正确创建交换链,我们需要获取表面的功能。
怎么做...
1.使用vkEnumeratePhysicalDevices()函数获取所有枚举的物理设备句柄,并将其存储在名为physical_device的VkPhysicalDevice类型的变脸中。
2.获取创建的呈现表面句柄。将其储存在名为presentation_surface的VkSurfaceKHR类型的变脸中。
3.创建名为surface_capabilities的VkSurfaceCapabilitiesKHR类型变量。
4.调用vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device,presentation_surface,&surface_capabilities),第一个参数提供物理设备,第二个参数传入呈现表面的句柄,第三个参数指向surface_capabilities的变量。
5.如果函数调用成功,则surface_capabilities变量将包含可用于创建交换连的呈现表面参数,限制和功能。
这个怎么运作...
获取在创建交换链期间可以使用的功能和参数范围非常简单:
VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR( physical_device, presentation_surface, &surface_capabilities)
if( VK_SUCCESS != result ) {
std::cout << "Could not get the capabilities of a presentation surface." << std::endl;
return false;
}
return true;
我们只调用一个vkGetPhysicalDeviceSurfaceCapabilitiesKHR()函数,该函数讲参数储存在VkSurfaceCapabilitiesKHR类型变量中。它包含以下参数成员的结构:
·交换图像的最小和最大准许数量。
·呈现表面的最小,最大和当前范围。
·支持的图像转换(可在呈现之前应用)和当前使用的转换。
·支持的图像层的最大数量。
·支持的用法。
·表面alpha值支持的合成列表(图像的alpha组建应如何影响应用程序的窗口桌面组合)。