哪个更快,只需拨打一次glUseProgram
,或发送,例如6个左右通过glUniform
(批量或单独)浮动,大约多少?
答案 0 :(得分:1)
您能否更详细地描述您认为这会影响渲染管道性能的场景?它们提供了完全不同的功能,我不明白为什么你会关心glUseProgram对glUniform的性能。
现在让我们分析一下当您使用这些函数来了解它们的成本时会发生什么。
当你调用glUseProgram时,它会改变几个OpenGL渲染状态,因为我们将使用附加到程序对象的新着色器。规范说,当您调用此函数时,顶点和片段程序将安装在处理器中。仅这一点似乎足以掩盖glUniform的成本。此外,当您安装新的顶点和片段程序时,渲染管道的其他状态也会更改,以适应程序使用的纹理单元和数据布局的数量。
glUniform将数据从一个内存位置复制到另一个位置,以指定统一变量的值。最糟糕的情况是复制矩阵,这似乎不如glUseProgram复杂。
但最终,这一切都取决于您使用glUniform传输的数据量以及glUseProgram的底层实现(它可以由驱动程序进行超级优化并且成本非常低)并且如果您的引擎足够智能分组使用相同程序的几何体并在不更改状态的情况下绘制它。