GL ARB multisample
Inhaltsverzeichnis
GL_ARB_multisample
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 SampleCoverageARB (value: TGLclampf; invert: TGLboolean);
Die Prozedur SampleCoverageARB setzt die beiden Werte SAMPLE_COVERAGE_VALUE_ARB und SAMPLE_COVERAGE_INVERT_ARB.
Wenn SAMPLE_COVERAGE_ARB aktiviert ist, wird die ermittelte Fragmentüberdeckung mit einem temporären Überdeckungswert einer bitweisen "And"-Operation unterzogen. Dieser temporäre Überdeckungswert wird mit einer Funktion erzeugt, deren Input der Wert von SAMPLE_COVERAGE_VALUE_ARB ist (die Funktion wurde nicht näher spezifiziert). Wenn SAMPLE_COVERAGE_INVERT auf "TRUE" gesetzt ist, wird der temporäre Überdeckungswert invertiert (alle Bitwerte werden invertiert), bevor der And-Operator angewendet wird.
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 Prozedur SetPixelFormat gesetzt und anschließend kann ein Rendering Context 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.
Daher ist die korrekte Vorgangsweise auf einem unbekannten System 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.