glProgramUniform()和glUniform()有什么区别?

时间:2018-08-02 07:47:15

标签: opengl glsl

我已经从khronos阅读了规范,我知道glProgramUniform *()将数据上传到指定的程序对象,而glUniform *()将数据上传到当前绑定的程序对象。但是我想知道这两个类似的性能之间是否还有其他区别。

2 个答案:

答案 0 :(得分:2)

该规范所保证的唯一区别是您已经提到的差异:使用glProgramUniform*命令系列之前无需绑定着色器。

如果有任何性能差异,则它们是特定于供应商/驱动程序/版本的。

请注意,glUniform*从2.0开始可用,而glProgramUniform是在4.1中引入的。

答案 1 :(得分:2)

通常来说,“减少GL指令”是一件好事。这是因为,在现代硬件中,瓶颈在于CPU和GPU之间的通信。

所以在这里避免绑定是关键区别。

新的glProgramUniform()Direct State Access (DSA)的一部分。
一种更接近当今硬件工作方式的模型,旨在逼近理想的零驱动程序开销。