【问题标题】:Larger GLSL fragment output without mutliple buffer attachments更大的 GLSL 片段输出,没有多个缓冲区附件
【发布时间】:2012-02-25 02:32:56
【问题描述】:

有什么方法可以发射更多,例如。来自 GLSL 片段着色器的 4 个字节,如果实现不支持多个 FBO 缓冲区附件或“深”缓冲区格式?

例如,在使用 WebGL 或 OpenGL ES 时,如果必须在多个通道中重复部分计算以获得更多输出通道,则每个片段被限制为 RGBA 输出会使复杂的计算效率极低。

【问题讨论】:

    标签: opengl-es glsl webgl fragment-shader fbo


    【解决方案1】:

    你输出的不是字节,而是组件。每个图像只能存储四个分量,因此每个输出图像只能输出四个分量。

    如果您的硬件可以输出更多数据,那么它将允许您输出更多图像。它可以通过扩展来暴露它。如果没有这样的扩展,那么硬件就不能,因此你也不能。

    请注意,NVIDIA 有such an extension,所以他们支持 ES 的硬件可能能够做到这一点。

    【讨论】:

    • 这不是一个纯粹的硬件问题,例如,WebGL 仅公开了我的系统在使用桌面 OpenGL 时看到的部分功能,这甚至可能在浏览器之间发生变化。
    • @dronus:是的,这就是你必须使用扩展的原因。 WebGL 1.0 只公开了基本的最低功能;如果硬件可以做得更多,则取决于这些实现是否公开适当的扩展来实现它。就个人而言,我不明白为什么他们不只是将其作为 GL 3.0 或 EXT_FBO 中的可查询限制......
    • 另一方面,对于计算需求,我不太感兴趣缓冲区有什么“组件”(如 RGB 或深度),但我可以从着色器中发出总共多少字节,因为我总是可以作为最后的手段,将数据从一个组件表示打包和解包到另一个。
    • 好的,谢谢,我现在将对暴露的扩展做一个小调查,看看它们是否在浏览器和桌面驱动程序之间匹配。猜猜那需要检查很多平台..
    • 我试过的一些平台都不支持多个附件的扩展。
    【解决方案2】:

    不,没有办法比通常的频道更有效地输出。这意味着需要在不止一次的过程中完成具有更多输出的计算。具有多个输出且共享代价高昂的中间结果的计算可能会将中间结果计算为之前的附加通道,但是开销很可能会消耗掉所获得的任何性能优势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多