【问题标题】:OGL_ES 2.0: Using multiple texture units vs rebinding textures for separate shadersOGL_ES 2.0:使用多个纹理单元与为单独的着色器重新绑定纹理
【发布时间】:2012-11-12 16:35:35
【问题描述】:

在我目前制作的游戏中,我有两个着色器:

  • 一个用于纹理图集上的精灵和
  • 一个单独加载的粒子形状纹理。 (我决定将此纹理保留在图集中,因为我的生成器中的粒子是 GL_POINTS)。

目前,我将它们中的每一个绑定到一个单独的纹理单元,然后将每个着色器的统一设置为各自的纹理单元。我发现以这种方式绑定纹理一次是干净的,但想知道是否有任何理由说明这是一种不好的方法。

我已经广泛搜索了有关此方法的任何讨论,但似乎没有多少人这样做,我自己对它的安全性产生了怀疑。

有没有人自己使用过这种方法,或者知道为什么它可能不是一个好主意?

【问题讨论】:

  • 我认为这是安全的。您正在做的是: 1. 将 2 个纹理绑定到 2 个纹理单元。形成文档:'使用 glBindTexture 创建的纹理绑定保持活动状态,直到将不同的纹理绑定到同一目标,或者直到使用 glDeleteTextures 删除绑定的纹理。 2.设置着色器的纹理单元。在您再次设置此制服之前,这不会改变。 AFAIK 统一值存储在程序对象中。

标签: iphone ios optimization opengl-es textures


【解决方案1】:

间接,是的,我使用这种方法,它是安全的。但这是渲染引擎级别优化的副作用。

如果您避免多次绑定相同的纹理,您可以(也许)获得一些性能。 在我的引擎中,在渲染某些东西之前,我只绑定尚未绑定的材质纹理。 (按材质和纹理对实体进行排序后效率高)

因为可以同时使用多个纹理单元,所以测试是在纹理单元级别进行的。

这种优化对于大场景来说是值得的。 (数百个绘制调用,至少有 30 个纹理)。

在你的情况下,因为只有两个纹理和两个着色器,你为什么要尝试删除一些纹理绑定? 你能衡量你赢得了多少表现吗? 你是否为此牺牲了灵活性?

薇薇安

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多