GL ARB multisample: Unterschied zwischen den Versionen
Traude (Diskussion | Beiträge) (→Ressourcen) |
Traude (Diskussion | Beiträge) K (→Neue Prozeduren: Prozedur verlinkt) |
||
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= GL_ARB_multisample = | = GL_ARB_multisample = | ||
− | |||
{{Hinweis|Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.}} | {{Hinweis|Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels.}} | ||
Zeile 6: | Zeile 5: | ||
== Abfragestring == | == Abfragestring == | ||
GL_ARB_multisample | GL_ARB_multisample | ||
− | |||
Zeile 15: | 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 '''[[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 == | ||
+ | ''Für den <attrib> Parameter von glXGetConfig und'' <br> | ||
+ | ''für den <attribList> Parameter von glXChooseVisual:'' <br> | ||
+ | '''GLX_SAMPLE_BUFFERS_ARB''' <br> | ||
+ | '''GLX_SAMPLES_ARB''' <br> | ||
+ | <br> | ||
+ | ''Für den <piAttributes> Parameter von wglGetPixelFormatAttribivARB, wglGetPixelFormatAttribfvARB und '' <br> | ||
+ | ''für <piAttribIList> und <pfAttribIList> von wglChoosePixelFormatARB:'' <br> | ||
+ | '''WGL_SAMPLE_BUFFERS_ARB''' <br> | ||
+ | '''WGL_SAMPLES_ARB''' <br> | ||
+ | <br> | ||
+ | ''Für den <cap> Parameter von Enable, Disable und IsEnabled und '' <br> | ||
+ | ''für den <pname> Parameter von GetBooleanv, GetIntegerv, GetFloatv, und GetDoublev:'' <br> | ||
+ | '''MULTISAMPLE_ARB''' <br> | ||
+ | '''SAMPLE_ALPHA_TO_COVERAGE_ARB''' <br> | ||
+ | '''SAMPLE_ALPHA_TO_ONE_ARB''' <br> | ||
+ | '''SAMPLE_COVERAGE_ARB''' <br> | ||
+ | <br> | ||
+ | ''Für den <mask> Parameter von PushAttrib:'' <br> | ||
+ | '''MULTISAMPLE_BIT_ARB''' <br> | ||
+ | <br> | ||
+ | ''Für den <pname> Parameter von GetBooleanv, GetDoublev, GetIntegerv und GetFloatv:'' <br> | ||
+ | '''SAMPLE_BUFFERS_ARB''' <br> | ||
+ | '''SAMPLES_ARB''' <br> | ||
+ | '''SAMPLE_COVERAGE_VALUE_ARB''' <br> | ||
+ | '''SAMPLE_COVERAGE_INVERT_ARB''' <br> | ||
+ | <br> | ||
+ | == Anwendung == | ||
− | + | HINWEIS: Die folgenden Erläuterungen gelten nur für Windows: <br> | |
+ | 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: <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> | ||
+ | 3. Den temporären Context wieder löschen <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
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 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.