2016-05-07 16 views
0

Ich habe Mühe, ein Konzept zu verstehen, und ich hatte gehofft, dass jemand mich direkt darauf festlegen könnte.Daten über GLSL-Shader-Aufrufe behalten

Ich versuche GLSL-Simulationen zu erstellen, die Daten über jeden Zeichnungsaufruf behalten, aber ich will, dass alles auf der GPU getan wird, also ist es schnell und effizient. Ich verstehe, dass Sie dies tun, indem Sie die gewünschten Daten in eine Textur rendern und dann von dieser Textur lesen.

Ich habe eine einfache Demo, wo ich ein Renderziel habe, das ich eine Farbe zeichne und jeder Zeichnungsaufruf Ich möchte den Wert der Farbe um 0,01 erhöhen, indem ich die aktuelle Farbe einlese und 0,01 dazu addiere ich erhalte den Fehler:

Source and destination textures of the draw are the same. 

Was macht mich denke ich dieses Konzept völlig falsch verstanden habe, weil ich den Eindruck bekommen Sie nicht die aktuelle rendertarget in als Textur passieren kann. Könnte jemand das für mich klären, weil ich mich gerade ziemlich verwirrt fühle

Antwort

1

Nun, es ist offensichtlich, was Sie tun, sowohl Lesen von und Schreiben in die gleiche Textur. Erstellen Sie einfach zwei Texturen, eine, die als Renderziel festgelegt wird, und die zweite, von der gelesen wird. Sie lesen also tex1, schreiben in tex2 und tauschen dann im nächsten Frame ihre Verwendung aus, also schreiben Sie in tex1 und lesen Sie aus tex2. Wechseln Sie einfach ihre Verwendung über die Frames.

Gleichzeitiges Lesen/Schreiben wird in WebGL nicht unterstützt. Nur die neueste Version von OpenGL hat Image-Objekte, die auf diese Weise verwendet werden können, aber WebGL unterstützt sie noch nicht, deshalb müssen Sie zwei Texturen verwenden und sie abwechselnd ping-pong und ping-pong verwenden.

+0

Ahhh ich seheeeeeeee, danke, es macht jetzt Sinn – user1157885

Verwandte Themen