Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it worth caching glsl uniform location in code?

Tags:

opengl

glsl

I would like to have ability to set uniforms via their actual names in the shader

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

do I have to cache locations in some form of a map?

std::map<std::string, unsigned int> // or unordered_map 

or maybe OpenGL (on desktop) caches this anyway, so I would not have any performance difference?

like image 886
fen Avatar asked Feb 06 '13 08:02

fen


1 Answers

The OpenGL specification defines functionality, not performance. So there's no way to know how any particular OpenGL implementation will store the list of active uniforms or how fast glGetUniformLocation will be, relative to std::map performance.

So really, it's up to you. If you want consistent, known performance, do it yourself. If you want to take a chance on the vagaries of the OpenGL implementation, then query it whenever you want. Personally, I'd say ditch names and go with locations. That way you get maximum performance.

like image 91
Nicol Bolas Avatar answered Nov 07 '22 00:11

Nicol Bolas