我已经从khronos阅读了规范,我知道glProgramUniform *()将数据上传到指定的程序对象,而glUniform *()将数据上传到当前绑定的程序对象。但是我想知道这两个类似的性能之间是否还有其他区别。
答案 0 :(得分:2)
该规范所保证的唯一区别是您已经提到的差异:使用glProgramUniform*
命令系列之前无需绑定着色器。
如果有任何性能差异,则它们是特定于供应商/驱动程序/版本的。
请注意,glUniform*
从2.0开始可用,而glProgramUniform
是在4.1中引入的。
答案 1 :(得分:2)
通常来说,“减少GL指令”是一件好事。这是因为,在现代硬件中,瓶颈在于CPU和GPU之间的通信。
所以在这里避免绑定是关键区别。
新的glProgramUniform()
是Direct State Access (DSA)的一部分。
一种更接近当今硬件工作方式的模型,旨在逼近理想的零驱动程序开销。