2012-04-14 8 views
0

Muss ich für jeden von mir erstellten Renderpuffer einen Framebuffer generieren und binden? Oder gibt es eine Chance, nur renderbuffer zu erstellen (und es einer Textur zuzuordnen oder irgendwie an die sahders zu senden)?Nur renderbuffer (ohne Framebuffer) zum Zeichnen von Bildschirminhalten?

Ich möchte nur zu einem Einkanalpuffer rendern, um eine Maske für die spätere Verwendung zu erstellen. Ich denke, das Einrichten eines kompletten Framebuffers würde für diese Aufgabe ein Overhead sein.

Danke.

Antwort

4

Ein renderbuffer ist nur ein Bild. Sie können einen nicht als Textur binden; Wenn Sie ein Bild erstellen möchten, das als Textur verwendet werden soll, müssen Sie eine Textur erstellen. Deshalb haben wir renderbuffers und textures: einer von ihnen ist für Dinge, die Sie nicht beabsichtigen, aus zu lesen.

Framebuffer sind Sammlungen von Bildern. Sie können nicht auf einen Renderbuffer oder eine Textur rendern. Sie rendern in den Framebuffer, die selbst Renderbuffers und/oder Texturen haben müssen.

Sie können entweder auf den Standard-Framebuffer oder auf ein Framebuffer-Objekt rendern. Die Bilder im Standard-Framebuffer können nicht als Texturen verwendet werden. Wenn Sie also zu einer Textur rendern möchten, müssen Sie ein Framebuffer-Objekt verwenden. So funktioniert OpenGL.

"Einrichten eines vollständigen Framebuffers" kann Overhead verursachen, aber Sie müssen es tun, wenn Sie eine Textur rendern möchten.

+0

Danke. Jetzt kann ich sehen, dass es keine Renderbuffer ohne FBOs gibt. – Geri

1

Sie könnten stattdessen einen Stencil-Puffer verwenden und den Schablonentest einfach deaktivieren, bis Sie Ihre Ausgabe maskieren möchten.

edit: haben einen Blick auf die folgenden Aufrufe in den opengl docs:

glClearStencil 
glClear(GL_STENCIL_BUFFER_BIT) 
glEnable(GL_STENCIL_TEST) 
glDisable(GL_STENCIL_TEST) 
glStencilFunc 
glStencilOp 

http://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml
http://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml
http://developer.nvidia.com/system/files/akamai/gamedev/docs/stencil.pdf?download=1

+0

Whoa. Ton genau das, was ich brauche. Kann ich den Stencil Buffer direkt rendern? Einfach als Renderpuffer vor dem Rendern binden (und Framebuffer deaktivieren)? – Geri

+0

im Grunde, wie Sie dies verwenden würden, deaktivieren Sie den Farbpuffer, aktivieren Sie den Stencil-Puffer, dann zeichnen Sie einige Formen. Diese Formen würden zum Schablonenpuffer gezogen werden. Nachdem Sie Ihre Maske gezeichnet haben, können Sie den Farbpuffer wieder aktivieren und Ihre Szene zeichnen. Ihre Zeichnung wird ausgeblendet, abhängig vom Inhalt des Stencil-Puffers und den Einstellungen, die Sie in glStencilFunc() verwendet haben. glStencilFunc() und glStencilOp() sind die zwei wichtigsten oben genannten Funktionen, da sie bestimmen, wie der Stencil Buffer aktualisiert wird und wie er das Rendering beeinflusst. – bitwise

+0

Ah sehen. Maske mit aktivierter Schablone zeichnen, Inhalt mit deaktivierter Schablone zeichnen. StencilFunc ist etwas wie BlendFunc? So legen Sie die Quell-/Zielmultiplikatoren fest? – Geri

Verwandte Themen