【问题标题】:Is it worth caching glsl uniform location in code?是否值得在代码中缓存 glsl 统一位置?
【发布时间】: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(在桌面上)无论如何都会缓存这个,所以我不会有任何性能差异?

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

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

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

    【讨论】:

    • 所以在大多数情况下,我们不能依赖假设(关于驱动程序实现),最好自己做这样简单的缓存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多