现代的显示列表等效项是什么?


9

显示列表是OpenGL的一项功能,从理论上讲,可以通过存储一组命令供以后使用来加速API的任何部分。以我的理解,就当前减少驱动程序开销的努力而言,这很有意义。

虽然在3.1版中不推荐使用显示列表。现代API的等效功能是什么,DirectX是否提供类似的功能?如果再也没有这样的功能,那么原理是什么?

Answers:


12

Nvidia 扩展了在现代GL中创建命令缓冲区的功能

缺少相似功能的原因是,关于如何呈现存在很多状态,并且显示列表受许多不同状态的影响。例如,更改混合状态需要在某些硬件上修补片段着色器。

NVidia通过捕获所有状态并在分派后重置为状态来解决该问题:

1)是什么激发了设计?

主要目标是能够重用预先验证的命令缓冲区。其他API和提议已经使用各种命令列表或状态对象来解决此问题,但是一个经常出现的问题是,管道的各个阶段之间的交互会阻止这种预验证和重用。这些交互通常是特定于硬件的(并且各供应商之间甚至各代之间都不相同),并且新交互是由提出预验证方案时没有想到的新功能引入的。

我们试图通过使整体状态对象包含(几乎)管道的整个状态来解决这个问题。这应该为所有实现提供足够的信息,以执行任何需要的交叉验证。我们尝试以最小化新API占用空间的方式来创建它们-因为我们想要ALL状态(包括将来添加的任何状态),所以我们只是从上下文的当前状态捕获它。

[...]

23)在分派调用之后,处于何种状态的状态可以通过令牌修改?

解决:状态已重置。

(来自上面链接的扩展名文字)

但是,真正的后继者是DX12和vulkan中的命令缓冲区功能。它们还将捕获所有渲染状态到单个对象中,以在创建和填充命令缓冲区时使用。NVidia的扩展基于NVidia参与Vulkan设计的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.