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

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

#1 楼

Nvidia对在现代GL中创建命令缓冲区进行了扩展。状态不同。例如,更改混合状态需要在某些硬件上修补片段着色器。

NVidia通过捕获所有状态并在分派后重置为状态来解决该问题: > 1)是什么激发了设计的动力?

主要目的是能够重用经过预先验证的命令缓冲区。命令列表或状态对象,但是一个经常出现的问题是,流水线各个阶段之间的交互会阻止这种预验证和重用。这些交互通常是
特定于硬件的(并且各供应商之间甚至各代之间都不相同),并且新的交互是由新的功能引入的,而这些功能在预验证方案为
建议。

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

23)在分派调用之后,由令牌修改的状态处于什么状态?


RESOLVED:状态已重置。


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

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