2016-05-07 3 views
0

Я изо всех сил пытаюсь понять концепцию, и я надеялся, что кто-то может установить меня прямо на нее.Сохранение данных через вызовы шейдеров GLSL

Я пытаюсь построить симуляции GLSL, которые сохранят данные по каждому призыву на рисование, но я хочу, чтобы все это было сделано на графическом процессоре, чтобы оно было быстрым и эффективным. Я понимаю, что вы делаете это, визуализируя данные, которые хотите текстуры, а затем читаете эту текстуру.

У меня есть простая демонстрация, где у меня есть rendertarget, который я рисую цветом, и каждый призыв к рисованию Я хочу увеличить значение цвета на 0,01, прочитав текущий цвет и добавив к нему 0.01, однако Я получаю ошибку:

Source and destination textures of the draw are the same. 

Что заставляет меня думать, что я неправильно понял эту концепцию полностью, потому что я получаю впечатление, которое вы не можете передать текущий RenderTarget в качестве текстуры. Может кто-то прояснит это для меня, потому что сейчас я чувствую себя довольно запутанным.

ответ

1

Ну, это очевидно, что вы делаете, как чтение, так и запись на ту же текстуру. Просто создайте две текстуры, которые будут установлены как rendertarget, а вторая - для чтения. Итак, вы читаете tex1, пишите в tex2, затем в следующем кадре своп их использования, поэтому вы пишете tex1 и читаете с tex2. Просто чередуйте их использование над кадрами.

Одновременное чтение/запись не поддерживается в webGL. Только у самой последней версии OpenGL есть объекты Image, которые можно использовать таким образом, но webGL их еще не поддерживает, поэтому вам нужно использовать две текстуры и пинг-понг взад и вперед, чередуя их использование.

+0

Ahhh I seeeeeeeee, спасибо, это имеет смысл сейчас – user1157885