【问题标题】:Which is faster: calling glGetUniformLocation or using std::map?哪个更快:调用 glGetUniformLocation 还是使用 std::map?
【发布时间】:2013-12-06 02:26:27
【问题描述】:

我正在尝试将我的 GL 调用包装在外部函数和类中。所以,这就为我的着色器设置制服提出了一个问题:glGetUniformLocation 是一个缓慢的操作吗?如果是这样,使用 std::map 存储由字符串中的制服名称索引的制服索引会更慢还是更快?我试图避免在制服中静态编码(即使用宏等)

【问题讨论】:

  • 充其量,glGetUniformLocation 将在内部实现为映射或 hash_map 查找,因此使用您自己的映射不会更慢。问题是它是否值得。为什么你需要多次进行基于字符串的查找?
  • 我试图抽象出尽可能多的细节。不过没什么大不了的,我想我会使用宏来引用它们。
  • 糟糕,抱歉,我搜索了这个,但没有看到那个问题。

标签: c++ 3d glsl opengl-3


【解决方案1】:

编译/加载着色器时只调用一次glGetUniformLocation,然后自己缓存结果;在帧内使用它会导致停顿,因为大多数驱动程序不会将其实现为热路径,并且会在执行之前等待任何排队的管道操作完成(这适用于大多数 glGet 函数,永远不要在帧内调用这些,调用它们一次并自己缓存结果)。

【讨论】:

  • 谢谢。我可能只使用 std::map 并硬编码一个枚举来索引每个 GLint 的地图。
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 2013-07-27
  • 2014-05-16
  • 2011-03-26
  • 2012-06-12
  • 2010-09-29
  • 2011-03-14
  • 2012-07-15
相关资源
最近更新 更多