GLSL Shadertoy,如何存储变量数据?

GLSL Shadertoy, how to storage variables data?

如何在 https://www.shadertoy.com/new 的 GLSL 中为所有调用使用变量?

为每个 mainImage() 调用清除变量 float buffer;vec2 buffer2[1024];

是的,我可以将数据保存到视频缓冲区 fragColor = data; 并获取它 vec3 buf = texture(iChannel0, fragCoord / iResolution.xy).rgb; 但是太难了。

如何将数据保存到普通变量中并使用?

Shadertoy 不支持变量存储。这就是重点。 Shadertoy 是一个有趣的谜题 “我如何只使用一个只需要像素位置和时间作为输入的函数来制作漂亮的图片”。它与最佳实践或使用变量的灵活编程无关。困难的事实也是 中的重点“天啊!你成功地 that 没有变量!太棒了!”

要跨帧在 shadertoy 中存储任何内容,您必须写入纹理。您为每个要存储的东西选择纹理中的位置,然后编写适当的着色器代码来读取

vec4 values = textureFetch(texture, pixelCoordOfVariable, 0);

并写

if (int(gl_FragCoord.x) == pixelCoordOfVariable.x &&
    int(gl_FragCoord.y) == pixelCoordOfVariable.y) {
  fragColor = valueToStore;
}

高性能和灵活的 WebGL 应用程序通常不使用 shadertoy 上的技术。

如果您查看 this shadertoy shader 并单击“常用”选项卡,您会看到常量,它们定义了在哪些像素中存储变量。然后您可以在代码中查找这些常量的用法.