GLSL Shadertoy, как хранить данные переменных? - PullRequest
0 голосов
/ 15 апреля 2020

Как использовать переменную в GLSL для https://www.shadertoy.com/new для всех вызовов?

Переменные float buffer; или vec2 buffer2[1024]; очищаются для каждого mainImage() вызова.

Да, я могу сохранить данные в видеобуфере fragColor = data; и получить его vec3 buf = texture(iChannel0, fragCoord / iResolution.xy).rgb;, но это так сложно.

Как сохранить данные в обычные переменные и использовать их?

1 Ответ

0 голосов
/ 15 апреля 2020

Shadertoy не поддерживает хранение переменных. В этом вся суть. Shadertoy - забавная головоломка из «как сделать красивые картинки, не используя ничего, кроме функции, которая принимает на вход только позицию и время в пикселях» . Это не отдаленно о лучших практиках или гибком программировании с переменными. Дело в том, что это сложно, и в этом смысл, как в «О Боже! через рамки вы должны написать текстуру. Вы выбираете местоположения в текстуре для каждой вещи, которую хотите сохранить, и затем пишете соответствующий код шейдера для чтения

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

и записи

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

Производительные и гибкие приложения WebGL обычно не использовать приемы по шадертой.

...