Vulkan选择使用交换链图像的场景

选择使用交换链图像的场景
随交换链创建的图像通常作为着色材料,这意味着会将这些图像作为渲染目标,但这些图像的用途并不仅限于此。我们可以通过其他方式使用交换链图像,可以从交换链图像中提取颜色样本,在复制操作中将交换链图像作为数据源,还可以向交换链图像中复制数据。可在创建交换链的过程中,设置这些使用交换链图像的方式。但是,在这样做之前还需要查明这些使用方式是否得到了支持。

具体处理过程
(1)获取显示曲面的功能(请参阅“获取显示曲面的功能”小节)。将这些数据存储在一个VkSurfaceCapabilitiesKHR类型的变量中,将该变量命名为surface_capabilities。
(2)选择想要的图像使用方式,将这些数据存储到一个VkImageUsageFlags位域类型的变量中,将该变量命名为desired_usages。
(3)创建一个VkImageUsageFlags类型的变量,将其命名为image_usage,该变量用于存储指定硬件平台支持的图像使用方式,将0赋予image_usage变量。
(4)循环遍历位域变量desired_usages中的每个位,对该变量中的每个位都执行下列操作:

  • 检查当前位是否已经被设置了(值等于1)。
  • 检查surface_capabilities变量中的supportedUsageFlags成员是否已经被设置。
  • 如果前面两项检查操作的结果都为真,就设置image_usage变量中相同的位。
    (5)通过查明变量desired_usages和image_usage的值相等,确认我们想要的图像使用方式得到了指定硬件平台的支持。

具体运行情况
通过存储显示曲面功能的结构中的supportedUsageFlags成员,可以获取可供选择的(得到显示曲面支持的)交换链图像使用方式。supportedUsageFlags成员的数据类型为位域,其中的每个位都对应一种特定的使用方式。如果某个位被设置了,就意味着对应的使用方式得到了支持。
TIP 颜色附着用法(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)会一直得到支持。
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT是强制所有Vulkan实例都必须支持的用法,其他用法都是可选的。这就是需要根据具体情况使用这些用法的原因。而且,不应在程序的源代码中添加不必要的用法,因为这会影响应用程序的性能。
使用下面的代码可以选择用法。

Vulkan选择使用交换链图像的场景
只需获取通用用法和得到支持的用法,然后查明所有选中的用法是否都得到了支持,通过将想要使用的用法列表与指定硬件平台支持的图像使用方式列表进行比较即可。如果指定硬件平台支持的图像使用方式列表没有全部包含我们想要的图像使用方式,就说明我们想要的图像使用方式没有全部得到支持。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战