当我查看OpenGL 4.5规范时,我注意到你可以通过调用获得统一的位置:
glGetProgramResourceLocation(program, GL_UNIFORM, name);
Run Code Online (Sandbox Code Playgroud)
这非常类似于:
glGetUniformLocation(program, name);
Run Code Online (Sandbox Code Playgroud)
我想知道使用前者而不是后者是否有任何优势.
OpenGL的程序内省API设计得不是很好.他们从最初的3DLabs GLSL提案中半有机地发展.但原始设计的前提是仅查询属性/统一位置和统一资源.
作为GLSL的成长,它加入了很多更多种类的资源:UBOs,着色子程序,SSBOs,等等.此外,人们意识到查询片段着色器输出变量也很有用.
这导致了Frankenstein的API.每次他们为内省添加新资源时,他们都必须添加更多API入口点.在OpenGL 4.3中,他们最终决定只对整个系统进行大修.
该通用程序反省系统可以查询一切旧的查询可以做.该规范根据新的通用系统重新定义了旧查询.但是现在,当您向OpenGL添加新资源时,您只需要向现有的通用查询添加一些新的枚举器,而不是整个API函数.
只要您使用最新版本的OpenGL,就应该使用更新的查询机制.如果没有其他原因,请保持您的代码看起来更加统一.