opengl - 是否值得在代码中缓存 glsl 统一位置?

标签 opengl glsl

我希望能够通过着色器中的实际名称设置制服

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f);

我必须以某种形式的 map 缓存位置吗?
std::map<std::string, unsigned int> // or unordered_map 

或者也许OpenGL(在桌面上)无论如何都会缓存这个,所以我不会有任何性能差异?

最佳答案

OpenGL 规范定义了功能,而不是性能。所以没有办法知道任何特定的 OpenGL 实现将如何存储事件制服列表或多快 glGetUniformLocation将是,相对于 std::map表现。

所以真的,这取决于你。如果您想要一致的、已知的性能,请自己动手。如果您想捕获 OpenGL 实现的变幻莫测的机会,请随时查询。就个人而言,我会说沟名称和地点。这样您就可以获得最佳性能。

关于opengl - 是否值得在代码中缓存 glsl 统一位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724324/

相关文章:

c - 手动控制 GTK 小部件重绘滴答率

opengl - glStencilFunc中mask参数的作用是什么

opengl - 是否还有 OpenGL 1.2 的教程?

c++ - 对于确实存在并被使用的制服,OpenGL 返回 -1

javascript - 如何使用 gl.readPixels 读取点数 > 1 的绘制的 gl.POINTS?

android - 如何在 Opengl es 2.x 中加载多个纹理(在带有 libgdx 的 android 中)

javascript - 如何通过GLSL在THREE.js中实现MeshNormalMaterial?

c++ - 使用glUniform1i函数无法加载均匀的纹理

javascript - 在 WebGL 着色器中使用 UInt8Array 数据

wpf - SharpGL - 使用选择和拾取检测鼠标点击 OpenGL 元素