使用 glGetProgramResourceLocation 而不是 glGetUniformLocation 有什么



当我查看OpenGL 4.5规范时,我注意到你可以通过调用以下命令来获取制服的位置:

glGetProgramResourceLocation(program, GL_UNIFORM, name);

这与以下非常相似:

glGetUniformLocation(program, name);

我想知道使用前者而不是后者是否有任何优势。

OpenGL的程序自省API设计得不是很好。它们从最初的3DLabs GLSL提案中半有机地发展而来。但最初的设计是基于仅查询属性/统一位置和统一资源。

随着 GLSL 的发展,它添加了更多种类的资源:UBO、着色器子例程、SSBO 等。此外,人们意识到查询片段着色器输出变量也很有用。

这导致了一个弗兰肯斯坦的API。每次他们添加新资源进行内省时,他们都必须添加更多 API 入口点。在OpenGL 4.3中,他们最终决定对整个系统进行大修。

通用程序自省系统可以查询旧查询可以执行的所有操作。该规范根据新的通用系统重新定义了旧查询。但是现在,当您向 OpenGL 添加新资源时,您只需要向现有的通用查询添加一些新的枚举器,而不是整个 API 函数。

只要您使用的是最新版本的 OpenGL,就应该使用较新的查询机制。如果没有其他原因,只是为了让你的代码看起来更统一。

前者等同于后者。

请参阅 OpenGL 4.6 API 核心配置文件规范;7.6. 统一变量;第134页:

此外,还提供了几个专用命令来查询 活跃的制服。命令

int GetUniformLocation( uint program, const char *name );

相当于

GetProgramResourceLocation(program, UNIFORM, name);  

相关内容

  • 没有找到相关文章

最新更新