You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在moderngl中将帧缓冲用作下一帧的纹理?

曼德博集合动画实现问题:帧缓冲纹理循环复用

我正在制作曼德博集合逐步显现的动画,以下是我的片段着色器代码:

#version 330

uniform sampler2D previousIteration;
in vec2 uv; /* from -1 to 1 */

out vec4 color;
layout (location=1) out vec4 zValue;

void main() {
  vec4 state = texture(previousIteration, uv);
  float newReal = state.x * state.x - state.y * state.y + uv.x;
  float newImag = 2 * state.x * state.y + uv.y;
  float newAbs2 = newReal * newReal + newImag * newImag;
  if (newAbs2 < 4) {
    color = vec4(0.0, 0.0, 0.0, 1.0);
  } else {
    color = vec4(1.0, 1.0, 1.0, 1.0);
  }
  zValue = vec4(newReal, newImag, 0.0, 0.0);
}

我的需求和问题:

  • 已实现将color输出的帧缓冲渲染到moderngl-window屏幕上,但不知道如何把zValue输出的帧缓冲作为下一帧的previousIteration纹理传入着色器。

尝试过的思路与困惑:

  • 看过相关示例,但示例使用image2D而非纹理,我更倾向于使用纹理,希望通过直接赋值zValue = ...的方式保存数据,不想使用imageStore。
  • 知道可以将帧缓冲内容复制到numpy数组,再将数组作为纹理传回GPU,但这种方式会导致数据在RAM和GPU之间往返,我想避免这种性能开销。
  • 看到有回答提到不需要“复制FBO到纹理”,但我无法理解这句话的含义。
  • 找到过C语言中的glCopyTexImage2D()函数,功能似乎正是我需要的,但在moderngl的Python API中找不到对应的方法,而且该函数在现代代码中已被弃用或很少使用。

内容的提问来源于stack exchange,提问作者Георгий Тимофеевский

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:05:19