【问题标题】:Most efficient way to texture splat opengl?纹理splat opengl的最有效方法?
【发布时间】:2011-06-18 00:21:52
【问题描述】:

我必须组合多达 17 个纹理,然后使用 openGL 将其渲染为四边形(嗯,2 个三角形)。我必须渲染大量这些四边形——也许是 500 个。

我想知道最快/最好的方法是什么:

A.多次渲染 B. 在 FBO 中组合纹理并渲染一次 C. 使用 opengl 多重纹理并在几遍中渲染 D.将纹理与CPU结合,上传到opengl纹理,然后渲染 E. 其他?

【问题讨论】:

  • 你需要做什么样的组合? (所有的 Alpha 混合?)给定四边形的所有纹理是否都相同大小,它们是否在每帧的基础上发生变化?
  • 嗯……听起来有点 Minecraft 的感觉。 ;)

标签: c++ opengl textures splat


【解决方案1】:

多次传递意味着多个像素着色器执行以及多个 ROP/混合操作,这很容易成为上一代和当前一代硬件的瓶颈。 因此,将其全部塞进一次或几遍(C)应该是有利的。

我不确定“在 FBO 中合并”这件事,尽管我无法为此提供确凿的证据,但“感觉”它可能会更慢(因为您将至少有 2 次 FBO 重新绑定,并且至少一个管道停顿)。当然,这取决于...如果您将相同的 17 个纹理组合一次并绘制单个组合纹理一千次,它可能会更快。如果这 17 种纹理的组合方式有十几种不同的组合,那么看起来可能会有所不同。

现代 GPU 在片段着色器中采样多达 17 个纹理应该没有问题(GL 3.x 硬件至少有 48 个),而且很简单。

【讨论】:

    【解决方案2】:

    A、B 和 C 在性能方面应该是相同的。

    这一切都取决于您的 GPU 和 CPU 的强大程度。这将决定是否使用 a、b 或 c 或 d 之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2013-01-08
      • 2021-05-29
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多