opengl 是否需要glGetUniformLocation

xlpyo6sf  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(133)

我在Youtube和网上都有教程,他们都说要使用glGetUniformLocation来获得均匀体在着色器中的均匀位置。但是如果你知道均匀位置的索引,它可以在程序开始时节省一个绘制调用,你可以直接硬编码一个值。
我特别问的是,是否有必要在值中硬编码,而不是openGL的新特性,它让你能够得到同样的结果。
在我的程序中,我试着输入下面的. glUniform4f(0, 0.1, 0.4, 0.6, 0.3);,它工作了!它链接到着色器中的第一个统一。
我试着在stackoverflow中搜索“glGetUniformLocation的重要性”和“glGetUniformLocation是必要的吗”,发现没有人问我同样的问题。作为一个新的openGL学习者,阅读openGL书籍,我似乎也找不到任何解释。

qlckcl4x

qlckcl4x1#

在GLSL获得在文本中指定统一体位置的能力之前,对于任何特定的程序,对于该程序中你想要操作的任何特定的统一体,你都需要至少调用一次glGetUniformLocation(或等价的)。你可以将该值缓存在特定的变量或数据结构中,但你至少需要调用它一次。
但是,一旦程序可以指定制服的位置,就没有必要再这么做了。毕竟,着色器必须指定您的glGetUniformLocation调用要查找的正确名称,对吗?着色器指定名称和着色器指定数字有什么区别?它们只是表示程序中某些概念意义的标识符;一个是字符串,另一个是数字。2着色器必须使用正确的标识符,与代码期望找到的内容相匹配。
因此,如果您能够在着色器中指定位置,则应直接执行此操作,并放弃任何glGetUniformLocation用法。

相关问题