当我查看 OpenGL 4.5 规范时,我注意到您可以通过调用以下命令获取制服的位置:
glGetProgramResourceLocation(program, GL_UNIFORM, name);
这非常类似于:
glGetUniformLocation(program, name);
我想知道使用前者而不是后者是否有任何优势。
最佳答案
OpenGL 的 program introspection APIs设计得不是很好。它们从最初的 3DLabs GLSL 提案中半有机地发展而来。但最初的设计是基于仅查询属性/统一位置和统一资源。
随着 GLSL 的发展,它添加了更多种类的资源:UBO、着色器子例程、SSBO 等。此外,人们意识到查询片段着色器输出变量也很有用。
这导致了弗兰肯斯坦的 API。每次他们添加新资源进行内省(introspection)时,他们都必须添加更多的 API 入口点。在 OpenGL 4.3 中,他们最终决定彻底改造整个系统。
generic program introspection system可以查询 old queries could do 的所有内容.该规范根据新的通用系统重新定义了旧查询。但是现在,当您向 OpenGL 添加新资源时,只需向现有的通用查询添加几个新的枚举器,而不是整个 API 函数。
只要您使用的是最新版本的 OpenGL,就应该使用更新的查询机制。如果没有其他原因,只是为了让您的代码看起来更统一。
关于opengl - 使用 glGetProgramResourceLocation 而不是 glGetUniformLocation 有优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52633905/