opengl - 使用 glGetProgramResourceLocation 而不是 glGetUniformLocation 有优势吗?

标签 opengl opengl-4

当我查看 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/

相关文章:

c++ - glDebugMessageCallback 导致段错误

python - 3D 纹理的 OpenGL 4.2+ 和 shader_image_load_store 不起作用?

c++ - OpenGL 不绘制到 SDL2 窗口

c++ - OpenGL - 解释 glutInitDisplayMode()

opengl - 使用 OpenGL 时是否可以在 GPU 上执行浮点运算?

opengl - opengl中相机的坐标是多少

c++ - SDL2 与 OpenGL 4.4 : Triangle Not Rendering Properly

opengl - 为什么我必须 "use"着色器程序才能设置它的制服?

opengl - 如何在OpenGL中为3D模型(网格)设置动画?

c++ - SFML - Opengl VAO 问题给我一个 (1282) 错误