2

哪个更快,一次调用glUseProgram,或通过(批量或单独)发送例如 6 个左右的浮点数glUniform,大约多少?

4

1 回答 1

1

您能否更详细地描述您认为这会影响渲染管道性能的场景?它们提供了完全不同的功能,我不明白为什么你会关心 glUseProgram 与 glUniform 的性能。

现在让我们分析一下当你使用这个函数来了解它们的成本时会发生什么。

当您调用 glUseProgram 时,它会更改几个 OpenGL 渲染状态,因为我们将使用附加到程序对象的新着色器。规范说,当您调用此函数时,顶点和片段程序会安装在处理器中。仅此一项似乎就足以掩盖 glUniform 的成本。此外,当您安装新的顶点和片段程序时,渲染管道的其他状态会更改以适应程序使用的纹理单元数量和数据布局。

glUniform 将数据从内存的一个位置复制到另一个位置以指定统一变量的值。最坏的情况是复制看起来没有 glUseProgram 复杂的矩阵。

但最终,这一切都取决于您使用 glUniform 传输的数据量和 glUseProgram 的底层实现(它可以由驱动程序进行超级优化并且成本非常低),以及您的引擎是否足够智能以将几何图形使用相同的程序并在不改变状态的情况下绘制它。

于 2013-04-29T02:34:59.017 回答