GL ARB multisample: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (GL_ARB_multisample: Hinweis auf Bearbeitung entfernt)
K (Neue Prozeduren: Prozedur verlinkt)
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
 
== Abfragestring ==
 
== Abfragestring ==
 
GL_ARB_multisample
 
GL_ARB_multisample
 
  
  
Zeile 14: Zeile 13:
  
 
Multisample-Antialiasing ist für das Zeichnen von Polygonen von großem Vorteil, da es keine Sortierung erfordert, um versteckte Objekte zu eliminieren und angrenzende Polygone, Objektsilhouetten und sogar schneidende Polygone korrekt dargestellt werden können. Wenn nur Punkte oder Linien gezeichnet werden, erzeugt das "Smooth"-Antialiasing, das die Basis-GL erzeugt, bessere Ergebnisse. Diese Extension wurde so gestaltet, dass sowohl "Smooth" als auch Multisample Antialiasing alternierend beim Zeichnen einer Szene verwendet werden können.
 
Multisample-Antialiasing ist für das Zeichnen von Polygonen von großem Vorteil, da es keine Sortierung erfordert, um versteckte Objekte zu eliminieren und angrenzende Polygone, Objektsilhouetten und sogar schneidende Polygone korrekt dargestellt werden können. Wenn nur Punkte oder Linien gezeichnet werden, erzeugt das "Smooth"-Antialiasing, das die Basis-GL erzeugt, bessere Ergebnisse. Diese Extension wurde so gestaltet, dass sowohl "Smooth" als auch Multisample Antialiasing alternierend beim Zeichnen einer Szene verwendet werden können.
 +
 +
 +
== Abhängigkeiten ==
 +
GL_ARB_multisample ist abhängig von folgenden Extensions: <br>
 +
'''[[WGL_ARB_extensions_string]]''' <br>
 +
'''[[WGL_ARB_pixel_format]]''' <br>
 +
  
 
== Neue Prozeduren ==
 
== Neue Prozeduren ==
  
procedure '''SampleCoverageARB''' (value: TGLclampf; invert: TGLboolean);
+
procedure '''[[glSampleCoverageARB]]''' (value: TGLclampf; invert: TGLboolean); <br>
 +
 
 +
 
 +
Die Prozedur SampleCoverageARB setzt die beiden Werte SAMPLE_COVERAGE_VALUE_ARB und SAMPLE_COVERAGE_INVERT_ARB.
  
 
== Neue Tokens ==
 
== Neue Tokens ==
Zeile 50: Zeile 59:
 
== Anwendung ==
 
== Anwendung ==
  
Die folgenden Erläuterungen gelten nur für Windows: <br>
+
HINWEIS: Die folgenden Erläuterungen gelten nur für Windows: <br>
Das Multisampling wird mithilfe der Prozedur wglChoosePixelFormatARB ausgewählt, mit der Prozedur SetPixelFormat gesetzt und anschließend kann ein Rendering Context erstellt werden.  
+
Das Multisampling wird mithilfe der Prozedur [[wglChoosePixelFormatARB]] ausgewählt, mit der Windows API Prozedur SetPixelFormat gesetzt und anschließend kann ein Rendering Context mit [[wglCreateContext]] erstellt werden.  
  
Das ist problematisch, wenn nicht bekannt ist, ob auf dem gegebenen System die Extension GL_ARB_multisample zur Verfügung steht. Denn die Prozedur wglChoosePixelFormatARB ist ebenfalls Bestandteil einer Extension, und Extensions stehen nur zur Verfügung, wenn bereits ein Rendering Context aktiviert ist. Da für einen Rendering Context anläßlich der Erstellung nur einmal ein Pixelformat vergeben wird, kann man das Multisampling-Pixelformat auf diese Weise zwar in Erfahrung bringen, aber nicht mehr setzen.
+
Das erfordert aber eine besondere Vorgangsweise, denn die Prozedur wglChoosePixelFormatARB ist ebenfalls Bestandteil einer Extension, und Extensions stehen nur zur Verfügung, wenn bereits ein Rendering Context aktiviert ist. Da für einen Rendering Context anläßlich der Erstellung nur einmal ein Pixelformat vergeben werden darf, kann man das Multisampling-Pixelformat auf diese Weise zwar in Erfahrung bringen, aber nicht mehr setzen.
  
Daher ist die korrekte Vorgangsweise auf einem unbekannten System die Folgende: <br>
+
Daher ist die korrekte Vorgangsweise die Folgende: <br>
 
1. Einen temporären Rendering Context mit einem gültigen Pixelformat erstellen <br>
 
1. Einen temporären Rendering Context mit einem gültigen Pixelformat erstellen <br>
 
2. Prüfen, ob ein Pixelformat mit Multisampling zur Verfügung steht und das Ergebnis speichern <br>
 
2. Prüfen, ob ein Pixelformat mit Multisampling zur Verfügung steht und das Ergebnis speichern <br>
 
3. Den temporären Context wieder löschen <br>
 
3. Den temporären Context wieder löschen <br>
4. Einen neuen Rendering Context mit aufgrund des Ergebnisses gemäß Pkt.2 erstellen. <br>
+
4. Einen neuen Rendering Context aufgrund des Ergebnisses gemäß Pkt.2 erstellen. <br>
  
 
== Ressourcen ==
 
== Ressourcen ==
 
[http://opengl.org/registry/specs/ARB/multisample.txt Original Extension-Spezifikation]
 
[http://opengl.org/registry/specs/ARB/multisample.txt Original Extension-Spezifikation]

Aktuelle Version vom 13. Juli 2008, 15:51 Uhr

GL_ARB_multisample

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


Abfragestring

GL_ARB_multisample


Beschreibung

GL_ARB_multisample ermöglicht Antialiasing bezüglich aller GL Primitiven: Punkte, Linien, Polygone, Bitmaps und Bilder. Dabei werden bei jedem Pixel alle Primitive mehrere Male geprüft. Die erhaltenen einzelnen Farbwerte werden jedes Mal, wenn ein Pixel neu gezeichnet werden muss, zu einer einzigen ausgabefähigen Farbe zusammengefasst. Das geschieht automatisch, sodass für ein Programm kein zusätzlicher Aufwand anfällt.Weil jeder einzelne geprüfte Wert Tiefen- und Stencilinformation beinhaltet, werden die Tiefen- und Stencilfunktionen in ihrer Schnelligkeit nicht beeinträchtigt.

Ein zusätzlicher Puffer, der Multisample buffer, wird zum Framebuffer hinzugefügt. Die einzelnen Pixelwerte, einschließlich Farbe, Tiefe- und Stencilwerte werden hier gespeichert. Wenn der Framebuffer einen Multisample buffer hat, gibt es keinen separaten Tiefenpuffer oder Stencilpuffer (Schablonenpuffer), sogar auch dann nicht, wenn der Multisample buffer Tiefen- oder Stencilwerte gar nicht speichert. Farbpuffer (links/rechts/vorne/hinten/aux) koexistieren aber jedenfalls mit dem Multisample buffer.

Multisample-Antialiasing ist für das Zeichnen von Polygonen von großem Vorteil, da es keine Sortierung erfordert, um versteckte Objekte zu eliminieren und angrenzende Polygone, Objektsilhouetten und sogar schneidende Polygone korrekt dargestellt werden können. Wenn nur Punkte oder Linien gezeichnet werden, erzeugt das "Smooth"-Antialiasing, das die Basis-GL erzeugt, bessere Ergebnisse. Diese Extension wurde so gestaltet, dass sowohl "Smooth" als auch Multisample Antialiasing alternierend beim Zeichnen einer Szene verwendet werden können.


Abhängigkeiten

GL_ARB_multisample ist abhängig von folgenden Extensions:
WGL_ARB_extensions_string
WGL_ARB_pixel_format


Neue Prozeduren

procedure glSampleCoverageARB (value: TGLclampf; invert: TGLboolean);


Die Prozedur SampleCoverageARB setzt die beiden Werte SAMPLE_COVERAGE_VALUE_ARB und SAMPLE_COVERAGE_INVERT_ARB.

Neue Tokens

Für den <attrib> Parameter von glXGetConfig und
für den <attribList> Parameter von glXChooseVisual:
GLX_SAMPLE_BUFFERS_ARB
GLX_SAMPLES_ARB

Für den <piAttributes> Parameter von wglGetPixelFormatAttribivARB, wglGetPixelFormatAttribfvARB und
für <piAttribIList> und <pfAttribIList> von wglChoosePixelFormatARB:
WGL_SAMPLE_BUFFERS_ARB
WGL_SAMPLES_ARB

Für den <cap> Parameter von Enable, Disable und IsEnabled und
für den <pname> Parameter von GetBooleanv, GetIntegerv, GetFloatv, und GetDoublev:
MULTISAMPLE_ARB
SAMPLE_ALPHA_TO_COVERAGE_ARB
SAMPLE_ALPHA_TO_ONE_ARB
SAMPLE_COVERAGE_ARB

Für den <mask> Parameter von PushAttrib:
MULTISAMPLE_BIT_ARB

Für den <pname> Parameter von GetBooleanv, GetDoublev, GetIntegerv und GetFloatv:
SAMPLE_BUFFERS_ARB
SAMPLES_ARB
SAMPLE_COVERAGE_VALUE_ARB
SAMPLE_COVERAGE_INVERT_ARB

Anwendung

HINWEIS: Die folgenden Erläuterungen gelten nur für Windows:
Das Multisampling wird mithilfe der Prozedur wglChoosePixelFormatARB ausgewählt, mit der Windows API Prozedur SetPixelFormat gesetzt und anschließend kann ein Rendering Context mit wglCreateContext erstellt werden.

Das erfordert aber eine besondere Vorgangsweise, denn die Prozedur wglChoosePixelFormatARB ist ebenfalls Bestandteil einer Extension, und Extensions stehen nur zur Verfügung, wenn bereits ein Rendering Context aktiviert ist. Da für einen Rendering Context anläßlich der Erstellung nur einmal ein Pixelformat vergeben werden darf, kann man das Multisampling-Pixelformat auf diese Weise zwar in Erfahrung bringen, aber nicht mehr setzen.

Daher ist die korrekte Vorgangsweise die Folgende:
1. Einen temporären Rendering Context mit einem gültigen Pixelformat erstellen
2. Prüfen, ob ein Pixelformat mit Multisampling zur Verfügung steht und das Ergebnis speichern
3. Den temporären Context wieder löschen
4. Einen neuen Rendering Context aufgrund des Ergebnisses gemäß Pkt.2 erstellen.

Ressourcen

Original Extension-Spezifikation