【发布时间】:2013-12-06 15:19:10
【问题描述】:
我希望能够通过着色器中的实际名称设置制服
myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f);
我必须以某种形式的地图缓存位置吗?
std::map<std::string, unsigned int> // or unordered_map
或者也许 OpenGL(在桌面上)无论如何都会缓存这个,所以我不会有任何性能差异?
【问题讨论】:
我希望能够通过着色器中的实际名称设置制服
myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f);
我必须以某种形式的地图缓存位置吗?
std::map<std::string, unsigned int> // or unordered_map
或者也许 OpenGL(在桌面上)无论如何都会缓存这个,所以我不会有任何性能差异?
【问题讨论】:
OpenGL 规范定义的是功能,而不是性能。因此,没有办法知道任何特定的 OpenGL 实现将如何存储活动制服列表或glGetUniformLocation 相对于std::map 的性能有多快。
所以真的,这取决于你。如果您想要一致的、已知的性能,请自己动手。如果您想抓住 OpenGL 实现的变幻莫测的机会,请随时查询。就个人而言,我会说沟名称并选择位置。这样您就可以获得最佳性能。
【讨论】: