代码之家  ›  专栏  ›  技术社区  ›  NJGUY

OpenGL ES中使用帧缓冲区纹理的多路径渲染

  •  0
  • NJGUY  · 技术社区  · 10 年前

    在OpenGL ES中,我正在绘制帧缓冲区纹理对象。是否有一种方法可以使用上一次绘制的纹理自身数据在同一纹理上进行多遍绘制?您必须在第一次绘制后清除纹理,但随后似乎会删除第二次绘制所需的数据。我需要创建两个单独的纹理吗?然后将第二个纹理绑定到帧缓冲区?我讨厌使用VRAM。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Reto Koradi    10 年前

    不,在大多数情况下,不能同时将同一纹理用作渲染目标和纹理。这就是规范所称的“渲染反馈循环”,它会产生未定义的结果。根据ES 2.0规范第4.4.4节:

    当纹理对象同时用作GL操作的源和目标时,可能存在反馈循环。当反馈回路存在时,会产生未定义的行为。

    在定义结果时有一些例外,特别是如果渲染目标和纹理未使用相同的mipmap级别。但这是一个有点深奥的情况(例如,如果您想实现自己的mipmap生成,可以使用它)。这无助于你做你想做的事。

    因此,对于您想要的那种多遍渲染,需要两个纹理,其中一个用作源,另一个用作目标。请注意,即使需要两个以上的过程,通常仍只需要两个纹理。你可以在每一次传球中在两人之间“乒乓球”,以便从传球中到达目的地 n 成为传递中的源 n + 1 ,以及来自传递的源 n 成为通行证中的目的地 n+1个 .