GL EXT framebuffer object: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Der Artikel war bisher noch nicht als unvollständig markiert, ist aber halb leer.)
K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
 
{{Hinweis|Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.}}
 
{{Hinweis|Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.}}
  
<br>
+
 
 +
 
 
== Abfragestring ==
 
== Abfragestring ==
 
GL_EXT_framebuffer_object
 
GL_EXT_framebuffer_object
  
 
== Beschreibung ==
 
== Beschreibung ==
Diese Extension stellt ein Interface bereit um in Ziele zu rendern welche nicht vom Fenstersystem bereitgestellt wurde. Sie ähneln damit den PBuffers, nur muss man sich hier nicht mit Plattformabhängigen wgl/glX-Befehlen herumplagen. Auch die lästigen Context-Switches entfallen.
+
Diese Extension stellt ein Interface bereit, um in Ziele zu rendern, welche nicht vom Fenstersystem bereitgestellt wurden. Sie ähneln damit den PBuffern, nur muss man sich hier nicht mit plattformabhängigen und langsamen wgl/glX-Befehlen herumplagen. Auch die lästigen Context-Switches entfallen.
  
Diese neuen Renderziele sind so genannte Framebufferobjekte. Sie selber stellen aber noch keine Puffer bereit, daher kann man an sie Renderbuffer und Texturen binden. Dies ist möglich für die bisherigen logischen standard GL Puffertypen: color, depth, und stencil.  
+
Diese neuen Renderziele sind so genannte Framebufferobjekte. Sie selbst stellen aber noch keine Puffer bereit, daher kann man an sie Renderbuffer und Texturen binden. Dies ist möglich für die bisherigen logischen Standard-GL Puffertypen: Color-, Depth- und Stencilbuffer.  
 
{{Hinweis|Ein Binden eines Framebufferbildes an den Accumationbuffer wird hier auf eine spätere Extension verschoben.}}
 
{{Hinweis|Ein Binden eines Framebufferbildes an den Accumationbuffer wird hier auf eine spätere Extension verschoben.}}
  
Zeile 16: Zeile 17:
  
  
Durch die Einführung von Framebufferbildern als Renderziel wird nichtsichtbares Rendern (offscreen rendering) ermöglicht.  
+
Durch die Einführung von Framebufferbildern als Renderziel wird Rendern in nicht sichtbare Bereiche (offscreen rendering) ermöglicht.  
 +
 
 +
Weiterhin wird das Rendern in Texturen dahingehend vereinfacht, dass man das Texturbild als Framebufferbild binden kann und so direkt in die Textur rendern kann. Dies geschieht, indem man durch die Angabe von [[Mipmap]]-Level, [[Cubemap]]-Fläche (für Cubemap Texturen) und einem Z-Offset (nur bei 3D Texturen) ein bestimmtes Bild eines Texturobjekts wählt.
 +
 
 +
Die "Render To Texture Semantik" ist vergleichbar mit dem klassischen Rendern in den Framebuffer mit anschließendem Aufruf von [[glCopyTexSubImage]]. Vorteil der neuen Methode ist, dass man das selbe Ergebnis erhält, dabei aber auf das Kopieren der Daten verzichten kann.
 +
 
 +
=== Verwendung ===
 +
 
 +
Im Folgenden soll anhand einem einfachen Beispiel die Funktionsweise der GL_EXT_framebuffer_object-Extension erklärt werden. Ziel: Es sollen eine 3D-Szene in den Framebuffer gezeichnet werden, der diese dann in eine Textur packt und diese für spätere Verwendungen zur Verfügung stellt.
 +
 
 +
 
 +
==== Initialisierung ====
 +
 
 +
Das Framebufferobjekt wird meißt beim Erzeugen des Fenster (speziell in Delphi der Form) initialisiert. Bei der Entwicklung der Extension wurde darauf geachtet, dass dies "herkömmlichen" Vorgängen - wie dem Anlegen einer Textur - ähnlich abläuft. Zuerst wird das Framebufferobjekt generiert:
 +
 
 +
<source lang="pascal">var
 +
fb: GLuint;
 +
 
 +
(...)
 +
 
 +
glGenFramebuffersEXT(1, @fb);</source>
 +
 
 +
 
 +
Anschließend müssen noch ein Renderbufferobjekt und eine Textur angelegt werden:
 +
 
 +
<source lang="pascal">render_buf, tex: GLuint;
 +
 
 +
(...)
 +
 
 +
glGenRenderbuffersEXT(1, @render_buf);
 +
glGenTextures(1, @tex);</source>
 +
 
 +
 
 +
Nun wird das Framebufferobjekt ''fb'' und die Textur ''tex'' aktiv geschalten, man erkennt, dass die Handhabung sich sehr stark ähnelt:
 +
 
 +
<source lang="pascal">glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
 +
glBindTexture(GL_TEXTURE_2D, color_tex);</source>
 +
 
 +
(Analog zu Texturen wird mit ''glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)'' das Framebufferobjekt wieder deaktiviert. {Wenn man es technisch ganz genau sieht, wird mit der ''0'' wieder der Standard-Framebuffer verwendet.} )
 +
 
 +
 
 +
Jetzt muss man die Textur erzeugen und ihre Parameter einstellen, hier kommen die "üblichen Verdächtigen" zur Anwendung:
 +
 
 +
<source lang="pascal">glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, nil);
 +
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
 +
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );</source>
 +
 
  
Weiterhin wird das Rendern in Texturen dahingehend vereinfacht, dass man das Texturbild als Framebufferbild binden kann, und so direkt in die Textur rendern kann. Dies geschieht indem man durch die Angabe von [[Mipmap]]-Level, [[Cubemap]]-Fläche (für Cubemap Texturen) und einem Z-Offset (nur bei 3D Texturen) ein bestimmtes Bild eines Texturobjekts wählt.
+
Nun werden Framebuffer, Textur und Renderbuffer verbunden:
  
Die "Render To Texture Semantik" ist vergleichbar mit dem klassischen Rendern in den Framebuffer mit anschließendem Aufruf von [[glCopyTexSubImage]]. Vorteil der neuen Methode ist, dass man ads selbe Ergebnis erhält dabei aber auf das Kopieren der Daten verzichten kann.
+
<source lang="pascal">glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
 +
      GL_TEXTURE_2D, color_tex, 0);
 +
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, render_rb);
 +
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 512, 512);
 +
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
 +
      GL_RENDERBUFFER_EXT, render_rb);</source>
  
=== '''Verwendung''' ===
 
  
 +
Da in den letzten Schritten einige sehr implementations-spezifische Dinge eingestellt wurden, bei denen es aufgrund diverser Inkompatibilitäten zu Probleme kommen kann, wird die hilfreiche Funktion [[glCheckFramebufferStatusEXT]] mitgeliefert. Als Argument erhält sie die Konstante '''GL_FRAMEBUFFER_EXT''' und liefert je nach Zustand des aktuellen Framebufferobjektes eine der folgenden Konstanten:
  
=== '''Kombinierungsarten''' ===
+
*'''FRAMEBUFFER_COMPLETE'''
 +
*'''FRAMEBUFFER_INCOMPLETE_ATTACHMENT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_FORMATS_EXT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT'''
 +
*'''FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT'''
 +
*'''FRAMEBUFFER_UNSUPPORTED'''
 +
*'''FRAMEBUFFER_STATUS_ERROR'''
  
 +
'''FRAMEBUFFER_UNSUPPORTED''' weist zum Beispiel auf falsche Formate für Texturen und/oder Buffer hin. Welche Eigenschaften für '''FRAMEBUFFER_COMPLETE''' nötig sind, hängt von der Implementation - also Grafikkartenhersteller, Treiber, etc - ab und lässt sich nicht pauschal festlegen.
  
=== '''Operanden''' ===
 
  
 +
==== Zeichenroutine ====
  
=== Weitere Sachen ===
+
In der Zeichenroutine lässt sich die Extension auch sehr einfach handhaben.
  
 +
Zuerst aktiviert man wieder das Framebufferobjekt, in das gezeichnet werden soll:
  
=== Hinweise ===
+
<source lang="pascal">glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);</source>
 +
 
 +
 
 +
Anschließend kann man einfach seinen üblichen Zeichen-Code aufrufen beziehungsweise den Teil davon, den man als Textur haben will. Ist man damit fertig, schaltet man das Framebufferobjekt wieder ab (''glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)'') und kann dann ganz nach Belieben die Textur ''tex'' verwenden.
 +
 
 +
=== Anwendungsmöglichkeiten ===
 +
 
 +
*[[High-Dynamic-Range-Rendering]], oft als HDR-Rendering abgekürzt
 +
*Allgemein Postfilter-Effekte wie Fish-Eye, (Motion-) [[Blur]], ...
 +
*Off-Screen-Rendering
 +
*Performancesteigerung durch einmaliges Rendern in eine Textur, die dann über mehrere Frames verwendet wird
 +
*...
  
 
== Neue Funktionen ==
 
== Neue Funktionen ==
Zeile 60: Zeile 134:
 
=== Neue Parameterwerte ===
 
=== Neue Parameterwerte ===
  
 +
Für den ''target'' Parameter von glBindFramebufferEXT, glCheckFramebufferStatusEXT, glFramebufferTexture{1D|2D|3D}EXT, glFramebufferRenderbufferEXT und glGetFramebufferAttachmentParameterivEXT:
 +
* GL_FRAMEBUFFER_EXT
 +
 +
Für den ''target'' Parameter von glBindRenderbufferEXT, glRenderbufferStorateEXT und glGetRenderbufferParameterivEXT und als Rückgabewert von glGetFramebufferAttachmentParamterivEXT:
 +
* GL_RENDERBUFFER_EXT
 +
 +
Für den ''internalformat'' Parameter von glRenderbufferStorageEXT:
 +
* GL_STENCIL_INDEX1_EXT
 +
* GL_STENCIL_INDEX4_EXT
 +
* GL_STENCIL_INDEX8_EXT
 +
* GL_STENCIL_INDEX16_EXT
 +
 +
Für den ''pname'' Parameter von glGetRenderbufferParameterivEXT:
 +
* GL_RENDERBUFFER_WIDTH_EXT
 +
* GL_RENDERBUFFER_HEIGHT_EXT
 +
* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT
 +
* GL_RENDERBUFFER_RED_SIZE_EXT
 +
* GL_RENDERBUFFER_GREEN_SIZE_EXT
 +
* GL_RENDERBUFFER_BLUE_SIZE_EXT
 +
* GL_RENDERBUFFER_ALPHA_SIZE_EXT
 +
* GL_RENDERBUFFER_DEPTH_SIZE_EXT
 +
* GL_RENDERBUFFER_STENCIL_SIZE_EXT
 +
 +
Für den ''pname'' Parameter von glGetFramebufferAttachmentParameterivEXT:
 +
* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT
 +
* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT
 +
* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT
 +
* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT
 +
* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT
 +
 +
Für den ''attachment'' Parameter von glFramebufferTexture{1D|2D|3D}EXT, glFramebufferRenderbufferEXT und glGetFramebufferAttachmentParameterivEXT:
 +
* GL_COLOR_ATTACHMENT0_EXT
 +
* GL_COLOR_ATTACHMENT1_EXT
 +
* GL_COLOR_ATTACHMENT2_EXT
 +
* GL_COLOR_ATTACHMENT3_EXT
 +
* GL_COLOR_ATTACHMENT4_EXT
 +
* GL_COLOR_ATTACHMENT5_EXT
 +
* GL_COLOR_ATTACHMENT6_EXT
 +
* GL_COLOR_ATTACHMENT7_EXT
 +
* GL_COLOR_ATTACHMENT8_EXT
 +
* GL_COLOR_ATTACHMENT9_EXT
 +
* GL_COLOR_ATTACHMENT10_EXT
 +
* GL_COLOR_ATTACHMENT11_EXT
 +
* GL_COLOR_ATTACHMENT12_EXT
 +
* GL_COLOR_ATTACHMENT13_EXT
 +
* GL_COLOR_ATTACHMENT14_EXT
 +
* GL_COLOR_ATTACHMENT15_EXT
 +
* GL_DEPTH_ATTACHMENT_EXT
 +
* GL_STENCIL_ATTACHMENT_EXT
 +
 +
Als Rückgabewerte von glCheckFramebufferStatusEXT:
 +
* GL_FRAMEBUFFER_COMPLETE_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
 +
* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
 +
* GL_FRAMEBUFFER_UNSUPPORTED_EXT
 +
 +
Als Parameter von glGetIntegerv:
 +
* GL_FRAMEBUFFER_BINDING_EXT
 +
* GL_RENDERBUFFER_BINDING_EXT
 +
* GL_MAX_COLOR_ATTACHMENTS_EXT
 +
* GL_MAX_RENDERBUFFER_SIZE_EXT
 +
 +
Als Rückgabewert von glGetError:
 +
* GL_INVALID_FRAMEBUFFER_OPERATION_EXT
  
 
=== '''Neue States''' ===
 
=== '''Neue States''' ===
  
 
== Abhängigkeiten ==
 
== Abhängigkeiten ==
Interne Links auf Extensions von denen die hier beschriebene abhängt
 
  
<br>
+
*OpenGL 1.1
  
 
== Ressourcen ==
 
== Ressourcen ==
 
http://www.opengl.org/documentation/extensions/EXT_framebuffer_object.txt
 
http://www.opengl.org/documentation/extensions/EXT_framebuffer_object.txt
 
http://download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_FrameBuffer_Object.pdf
 
http://download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_FrameBuffer_Object.pdf
 +
 +
== Siehe auch ==
 +
[[Tutorial_Framebufferobject]]

Aktuelle Version vom 10. März 2009, 19:05 Uhr

Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

{{{1}}}

Incomplete.jpg

EXT_framebuffer_object

Info DGL.png Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.


Abfragestring

GL_EXT_framebuffer_object

Beschreibung

Diese Extension stellt ein Interface bereit, um in Ziele zu rendern, welche nicht vom Fenstersystem bereitgestellt wurden. Sie ähneln damit den PBuffern, nur muss man sich hier nicht mit plattformabhängigen und langsamen wgl/glX-Befehlen herumplagen. Auch die lästigen Context-Switches entfallen.

Diese neuen Renderziele sind so genannte Framebufferobjekte. Sie selbst stellen aber noch keine Puffer bereit, daher kann man an sie Renderbuffer und Texturen binden. Dies ist möglich für die bisherigen logischen Standard-GL Puffertypen: Color-, Depth- und Stencilbuffer.

Info DGL.png Ein Binden eines Framebufferbildes an den Accumationbuffer wird hier auf eine spätere Extension verschoben.

Wenn ein Framebufferbild an den Framebuffer gebunden wurde, dient es als Quelle für Readoperationen wie glReadPixels und als Ziel für Fragmentoperationen.


Durch die Einführung von Framebufferbildern als Renderziel wird Rendern in nicht sichtbare Bereiche (offscreen rendering) ermöglicht.

Weiterhin wird das Rendern in Texturen dahingehend vereinfacht, dass man das Texturbild als Framebufferbild binden kann und so direkt in die Textur rendern kann. Dies geschieht, indem man durch die Angabe von Mipmap-Level, Cubemap-Fläche (für Cubemap Texturen) und einem Z-Offset (nur bei 3D Texturen) ein bestimmtes Bild eines Texturobjekts wählt.

Die "Render To Texture Semantik" ist vergleichbar mit dem klassischen Rendern in den Framebuffer mit anschließendem Aufruf von glCopyTexSubImage. Vorteil der neuen Methode ist, dass man das selbe Ergebnis erhält, dabei aber auf das Kopieren der Daten verzichten kann.

Verwendung

Im Folgenden soll anhand einem einfachen Beispiel die Funktionsweise der GL_EXT_framebuffer_object-Extension erklärt werden. Ziel: Es sollen eine 3D-Szene in den Framebuffer gezeichnet werden, der diese dann in eine Textur packt und diese für spätere Verwendungen zur Verfügung stellt.


Initialisierung

Das Framebufferobjekt wird meißt beim Erzeugen des Fenster (speziell in Delphi der Form) initialisiert. Bei der Entwicklung der Extension wurde darauf geachtet, dass dies "herkömmlichen" Vorgängen - wie dem Anlegen einer Textur - ähnlich abläuft. Zuerst wird das Framebufferobjekt generiert:

var
 fb: GLuint;

(...)

glGenFramebuffersEXT(1, @fb);


Anschließend müssen noch ein Renderbufferobjekt und eine Textur angelegt werden:

render_buf, tex: GLuint;

(...)

glGenRenderbuffersEXT(1, @render_buf);
glGenTextures(1, @tex);


Nun wird das Framebufferobjekt fb und die Textur tex aktiv geschalten, man erkennt, dass die Handhabung sich sehr stark ähnelt:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
glBindTexture(GL_TEXTURE_2D, color_tex);

(Analog zu Texturen wird mit glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0) das Framebufferobjekt wieder deaktiviert. {Wenn man es technisch ganz genau sieht, wird mit der 0 wieder der Standard-Framebuffer verwendet.} )


Jetzt muss man die Textur erzeugen und ihre Parameter einstellen, hier kommen die "üblichen Verdächtigen" zur Anwendung:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, nil);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );


Nun werden Framebuffer, Textur und Renderbuffer verbunden:

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, 
      GL_TEXTURE_2D, color_tex, 0);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, render_rb);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 512, 512);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, 
      GL_RENDERBUFFER_EXT, render_rb);


Da in den letzten Schritten einige sehr implementations-spezifische Dinge eingestellt wurden, bei denen es aufgrund diverser Inkompatibilitäten zu Probleme kommen kann, wird die hilfreiche Funktion glCheckFramebufferStatusEXT mitgeliefert. Als Argument erhält sie die Konstante GL_FRAMEBUFFER_EXT und liefert je nach Zustand des aktuellen Framebufferobjektes eine der folgenden Konstanten:

  • FRAMEBUFFER_COMPLETE
  • FRAMEBUFFER_INCOMPLETE_ATTACHMENT
  • FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
  • FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT
  • FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
  • FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
  • FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
  • FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
  • FRAMEBUFFER_UNSUPPORTED
  • FRAMEBUFFER_STATUS_ERROR

FRAMEBUFFER_UNSUPPORTED weist zum Beispiel auf falsche Formate für Texturen und/oder Buffer hin. Welche Eigenschaften für FRAMEBUFFER_COMPLETE nötig sind, hängt von der Implementation - also Grafikkartenhersteller, Treiber, etc - ab und lässt sich nicht pauschal festlegen.


Zeichenroutine

In der Zeichenroutine lässt sich die Extension auch sehr einfach handhaben.

Zuerst aktiviert man wieder das Framebufferobjekt, in das gezeichnet werden soll:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);


Anschließend kann man einfach seinen üblichen Zeichen-Code aufrufen beziehungsweise den Teil davon, den man als Textur haben will. Ist man damit fertig, schaltet man das Framebufferobjekt wieder ab (glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)) und kann dann ganz nach Belieben die Textur tex verwenden.

Anwendungsmöglichkeiten

  • High-Dynamic-Range-Rendering, oft als HDR-Rendering abgekürzt
  • Allgemein Postfilter-Effekte wie Fish-Eye, (Motion-) Blur, ...
  • Off-Screen-Rendering
  • Performancesteigerung durch einmaliges Rendern in eine Textur, die dann über mehrere Frames verwendet wird
  • ...

Neue Funktionen

Neue Tokens

Neue Parameterwerte

Für den target Parameter von glBindFramebufferEXT, glCheckFramebufferStatusEXT, glFramebufferTexture{1D|2D|3D}EXT, glFramebufferRenderbufferEXT und glGetFramebufferAttachmentParameterivEXT:

  • GL_FRAMEBUFFER_EXT

Für den target Parameter von glBindRenderbufferEXT, glRenderbufferStorateEXT und glGetRenderbufferParameterivEXT und als Rückgabewert von glGetFramebufferAttachmentParamterivEXT:

  • GL_RENDERBUFFER_EXT

Für den internalformat Parameter von glRenderbufferStorageEXT:

  • GL_STENCIL_INDEX1_EXT
  • GL_STENCIL_INDEX4_EXT
  • GL_STENCIL_INDEX8_EXT
  • GL_STENCIL_INDEX16_EXT

Für den pname Parameter von glGetRenderbufferParameterivEXT:

  • GL_RENDERBUFFER_WIDTH_EXT
  • GL_RENDERBUFFER_HEIGHT_EXT
  • GL_RENDERBUFFER_INTERNAL_FORMAT_EXT
  • GL_RENDERBUFFER_RED_SIZE_EXT
  • GL_RENDERBUFFER_GREEN_SIZE_EXT
  • GL_RENDERBUFFER_BLUE_SIZE_EXT
  • GL_RENDERBUFFER_ALPHA_SIZE_EXT
  • GL_RENDERBUFFER_DEPTH_SIZE_EXT
  • GL_RENDERBUFFER_STENCIL_SIZE_EXT

Für den pname Parameter von glGetFramebufferAttachmentParameterivEXT:

  • GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT
  • GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT
  • GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT
  • GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT
  • GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT

Für den attachment Parameter von glFramebufferTexture{1D|2D|3D}EXT, glFramebufferRenderbufferEXT und glGetFramebufferAttachmentParameterivEXT:

  • GL_COLOR_ATTACHMENT0_EXT
  • GL_COLOR_ATTACHMENT1_EXT
  • GL_COLOR_ATTACHMENT2_EXT
  • GL_COLOR_ATTACHMENT3_EXT
  • GL_COLOR_ATTACHMENT4_EXT
  • GL_COLOR_ATTACHMENT5_EXT
  • GL_COLOR_ATTACHMENT6_EXT
  • GL_COLOR_ATTACHMENT7_EXT
  • GL_COLOR_ATTACHMENT8_EXT
  • GL_COLOR_ATTACHMENT9_EXT
  • GL_COLOR_ATTACHMENT10_EXT
  • GL_COLOR_ATTACHMENT11_EXT
  • GL_COLOR_ATTACHMENT12_EXT
  • GL_COLOR_ATTACHMENT13_EXT
  • GL_COLOR_ATTACHMENT14_EXT
  • GL_COLOR_ATTACHMENT15_EXT
  • GL_DEPTH_ATTACHMENT_EXT
  • GL_STENCIL_ATTACHMENT_EXT

Als Rückgabewerte von glCheckFramebufferStatusEXT:

  • GL_FRAMEBUFFER_COMPLETE_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
  • GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
  • GL_FRAMEBUFFER_UNSUPPORTED_EXT

Als Parameter von glGetIntegerv:

  • GL_FRAMEBUFFER_BINDING_EXT
  • GL_RENDERBUFFER_BINDING_EXT
  • GL_MAX_COLOR_ATTACHMENTS_EXT
  • GL_MAX_RENDERBUFFER_SIZE_EXT

Als Rückgabewert von glGetError:

  • GL_INVALID_FRAMEBUFFER_OPERATION_EXT

Neue States

Abhängigkeiten

  • OpenGL 1.1

Ressourcen

http://www.opengl.org/documentation/extensions/EXT_framebuffer_object.txt http://download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_FrameBuffer_Object.pdf

Siehe auch

Tutorial_Framebufferobject