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

fen*_*fen 7 opengl glsl

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

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f);
Run Code Online (Sandbox Code Playgroud)

我是否必须以某种形式的地图缓存位置?

std::map<std::string, unsigned int> // or unordered_map 
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*las 6

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

真的,这取决于你.如果您想要一致的,已知的性能,请自己动手.如果你想抓住OpenGL实现的变幻莫测的机会,那么随时查询它.就个人而言,我会说沟渠的名字和地点.这样你就可以获得最大的性能.