Vulkan Cookbook 第二章 7 选择一些交换链图像

选择一些交换链图像

译者注:示例代码点击此处

当应用程序想要渲染到交换链图像时,必须从呈现引擎获取它。 应用程序可以获取更多图像; 我们不仅限于一次只有一个图像。 但是,可用的图像数量(在给定时间由呈现引擎未使用)取决于指定的呈现模式,应用程序的当前情况(呈现/呈现历史记录)和图像数量 - 当我们创建交换链时, 我们必须指定应该创建的(最小)图像数量。

怎么做...

1.获取呈现表面功能(请参阅获得呈现表面的功能)。将它们储存在名为surface_capabilitiesVkSurfaceCapabilitiesKHR类型变量中。
2.创建名为number_of_imagesuint32_t类型变量。
3.将surface_capabilities.minImageCount + 1的值赋给number_of_images变量。
4.检查surface_capabilities变量的maxImageCount成员的值是否大于0,如果是,则表示创建的图像最大准许数量存在限制。在这种情况下,请检查number_of_images变量的值是否大于surface_capabilities.maxImageCount的值。如果是,则将number_of_images变量的值设置成surface_capabilities.maxImageCount

这个怎么运作...

与交互一起创建(自动)的图像主要用于呈现目的。但是它们也准许呈现引擎正常工作。一个图像(总是)显示在屏幕上。应用程序不能使用它,直到它被另一个图像替换为止。所呈现的图像将立即替换所显示的图像,或者根据所选模式,在队列中等待适当的时刻(v-sync)来替换它。显示并正在被替换的图像变得未被使用,并且可以由应用程序获取。

应用程序只能获取当前处于未使用状态的图像(请参阅选择期望的呈现模式),我们可以获取所有这些,但是一旦获取所有未使用的图像,需要呈现它们中的至少一个以便能够获得另一个。如果我们不这样做,获取操作可能会无限期被阻止。

未使用图像的数量主要取决于呈现模式和使用交换连创建的图像总数。因此我们想要创建的图像数量应该根据想要实现的渲染场景(应用程序想要同时拥有多少图像)和所选的当前模式来选择。

选择最少数量的图像可能如下所示:

number_of_images = surface_capabilities.minImageCount + 1; 
if( (surface_capabilities.maxImageCount > 0) && (number_of_images > surface_capabilities.maxImageCount) ) 
{ 
  number_of_images = surface_capabilities.maxImageCount;
}
return true;

通常,在最典型的渲染场景中,我们将在给定时间渲染单个图像。因此,支持的最小图像数量可能就足够了。创建更多图像准许我们同时获取更多图像,但更重要的是如果实现了正确的渲染算法,它还可以提高应用程序的性能。但我们不能忘记图像消耗了大量的内存。因此我们为交换连选择的图像数量应该看具体需求,内存使用和应用程序性能之间的折衷。

在上面的示例中,给出了这样的折衷方案,其中应用程序选择一个图像多于准许呈现引擎正常工作的最小值。之后我们还需要检查是否存在上限以及是否超过了上限。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值