Was sind OpenGL-Erweiterungen und welche Vorteile bzw. Nachteile bietet ihre Verwendung?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

Frage

In Bezug auf diese Frage auf Verwendung von OpenGL-Erweiterungen, was ist der Zweck dieser Erweiterungsfunktionen?Warum sollte ich sie verwenden wollen?Gibt es darüber hinaus irgendwelche Kompromisse oder Fallstricke, die mit ihrer Verwendung verbunden sind?

War es hilfreich?

Lösung

Der OpenGL-Standard ermöglicht es einzelnen Anbietern, bei der Entwicklung neuer Technologien zusätzliche Funktionen durch Erweiterungen bereitzustellen.Erweiterungen können neue Funktionen und neue Konstanten einführen und Einschränkungen für bestehende OpenGL-Funktionen lockern oder aufheben.

Jeder Anbieter verfügt über eine alphabetische Abkürzung, die zur Benennung seiner neuen Funktionen und Konstanten verwendet wird.Beispielsweise wird die Abkürzung (NV) von NVIDIA bei der Definition ihrer proprietären Funktion glCombinerParameterfvNV() und ihrer Konstante GL_NORMAL_MAP_NV verwendet.

Es kann vorkommen, dass mehr als ein Anbieter sich bereit erklärt, die gleiche erweiterte Funktionalität zu implementieren.In diesem Fall wird die Abkürzung EXT verwendet.Es kann weiterhin vorkommen, dass das Architecture Review Board die Erweiterung „segnet“.Es wird dann als Standarderweiterung bezeichnet und die Abkürzung ARB verwendet.Die erste ARB-Erweiterung war GL_ARB_multitexture, eingeführt in Version 1.2.1.Dem offiziellen Erweiterungs-Promotion-Pfad folgend, ist Multitexturing keine optional implementierte ARB-Erweiterung mehr, sondern seit Version 1.3 Teil der OpenGL-Kern-API.

Bevor ein Programm eine Erweiterung verwenden kann, muss es zunächst deren Verfügbarkeit ermitteln und dann Zeiger auf alle neuen Funktionen erhalten, die die Erweiterung definiert.Der Mechanismus hierfür ist plattformspezifisch und es gibt Bibliotheken wie GLEW und GLEE, um den Prozess zu vereinfachen.

Andere Tipps

OpenGL-Erweiterungen Es wurden neue Funktionen hinzugefügt OpenGL-Spezifikation, sie werden vom OpenGL-Standardisierungsgremium und von den verschiedenen Grafikkartenherstellern hinzugefügt.Diese werden dem Programmierer als neue Funktionsaufrufe oder Variablen zugänglich gemacht.Jede neue Version der OpenGL-Spezifikation wird mit neueren Funktionen ausgeliefert und enthält (normalerweise) alle vorherigen Funktionen und Erweiterungen.

Das eigentliche Problem mit OpenGL-Erweiterungen besteht nur unter Windows.Microsoft hat keine Erweiterungen unterstützt, die später veröffentlicht wurden OpenGL v1.1.Die Grafikkartenhersteller überwinden dieses Problem, indem sie ihre eigene Version dieser Funktionalität über Header-Dateien und Bibliotheken bereitstellen.Allerdings kann die Verwendung dieser Funktion etwas mühsam sein, wie die von Ihnen verlinkte Frage zeigt.Aber dieses Problem ist mit der Popularität von weitgehend verschwunden GLÜCKLICH, das dafür sorgt, dass all dies in ein benutzerfreundliches Paket verpackt wird.

Wenn Sie eine sehr aktuelle OpenGL-Erweiterung verwenden, beachten Sie, dass diese möglicherweise auf älterer Grafikhardware nicht unterstützt wird.Abgesehen davon gibt es bei der Verwendung dieser Erweiterungen keinen weiteren Nachteil.Die meisten Erweiterungen, die zum Standard werden, sind ziemlich beschissen nützlich und es gibt kaum eine Logik, sie nicht zu verwenden.

Erweiterungen sind im Allgemeinen eine Möglichkeit für Grafikkartenhersteller, neue Funktionen zu OpenGL hinzuzufügen, ohne auf die nächste Überarbeitung der OpenGL-Spezifikation warten zu müssen.Es gibt verschiedene Arten von Erweiterungen:

  1. Anbietererweiterung – nur ein Anbieter bietet eine bestimmte Art von Funktionalität.
    • Beispiel: NV_vertex_program
  2. Multivendor-Erweiterung – mehrere Anbieter haben sich zusammengetan und sich auf die Funktionalität geeinigt.
    • Beispiel: EXT_vertex_program
  3. ARB-Erweiterung – das OpenGL Architecture Review Board hat die Erweiterung gesegnet.Sie haben eine berechtigte Erwartung, dass es diese Art von Erweiterung noch eine Weile geben wird.
    • Beispiel: ARB_vertex_program

Erweiterungen müssen nicht alle diese Schritte durchlaufen.Manchmal wird eine Erweiterung immer nur von einem Anbieter implementiert, bevor die Hardware-Designs einen anderen Weg einschlagen und die Erweiterung aufgegeben wird.In anderen Fällen kann es sein, dass eine Erweiterung den ARB-Status erreicht, bevor alle entscheiden, dass es einen besseren Weg gibt.(Der ARB_vertex_program Der Ansatz wurde beispielsweise zugunsten des High-Level-Shading-Language-Ansatzes von aufgegeben ARB_vertex_shader als es an der Zeit war, Shader in die Kernspezifikation von OpenGL zu integrieren.) Selbst ARB-Erweiterungen halten nicht ewig;Ich würde heute nichts schreiben, was es erfordert ARB_matrix_palette, zum Beispiel.

Vor diesem Hintergrund ist es eine sehr gute Idee, über Erweiterungen auf dem Laufenden zu bleiben, insbesondere über die neuesten ARB- und EXT-Erweiterungen.In der Vergangenheit war es so, dass einige der „schnellen Wege“ durch die Hardware nur über Erweiterungen zugänglich waren.Wenn Sie wissen möchten, welche Funktionen eine Hardware insgesamt bieten kann, gibt es keinen besseren Ort als eine herstellerspezifische Erweiterung.

Wenn Sie gerade erst mit OpenGL beginnen, würde ich Ihnen Folgendes empfehlen:

  • ARB_vertex_buffer_object (Eckpunkte)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / GLSL-Spezifikation (Shader)

Fortgeschrittener:

  • ARB/EXT_framebuffer_object (Offscreen-Rendering)

Hierbei handelt es sich um alle Funktionen, die in den Kern integriert wurden. Es kann jedoch sinnvoll sein, sie isoliert zu betrachten, damit Sie ein besseres Gefühl dafür bekommen, wo ihre Grenzen liegen.(Die OpenGL-Kernspezifikation mischt nahtlos das Alte mit dem Neuen, daher kann dies sehr wichtig sein, wenn Sie auf dem schnellen Weg bleiben und das Legacy vermeiden und manchmal in Softwarepfaden implementiert werden möchten.)

Was auch immer Sie tun, stellen Sie sicher, dass Sie über geeignete Überprüfungen für die Erweiterungen verfügen, die Sie verwenden möchten, und bei Bedarf über Fallbacks.Auch wenn Ihre Karte möglicherweise über eine bestimmte Erweiterung verfügt, gibt es keine Garantie dafür, dass die Erweiterung auf der Karte eines anderen Anbieters oder sogar auf einem anderen Betriebssystem mit derselben Karte vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top