Immediate Mode (Computergrafik)
Immediate Mode (wörtlich übersetzt: Unmittelbar-Modus) ist ein Entwurfsmuster in der Computergrafik für die Gestaltung der Programmierschnittstelle (API) in Grafikbibliotheken, wo
- die Client-Aufrufe direkt das Rendern von Grafikobjekten auf dem Bildschirm bewirken oder wo
- die Daten zur Beschreibung von grafischen Primitiven (im Falle eines Renderns von grafischen Primitiven im immediate mode) vom Client jeweils Bild für Bild direkt in eine Grafikpipeline eingefügt werden,
ohne Nutzung – also unmittelbar - umfangreicher Umleitungen auf gespeicherte Ressourcen.[1] Das schließt die Verwendung von Doppelpufferung nicht aus.
Der Retained Mode ist ein alternativer Ansatz. Historisch betrachtet ist der Retained Mode der vorherrschende Stil in Programmbibliotheken für grafische Benutzeroberflächen (GUI)[2]; jedoch können beide Modi auch in ein und derselben Programmbibliothek koexistieren und sind in der Praxis nicht unbedingt einander ausschließend.
Übersicht
[Bearbeiten | Quelltext bearbeiten]Im Immediate Mode wird die Szene (Liste der grafischen Objekte, die gerendert werden sollen) im Speicherbereich des Clients statt der Grafikbibliothek gespeichert. Die Anwendung muss jedes Mal, wenn ein neues Bild benötigt wird, alle Zeichenbefehle, unabhängig von den tatsächlichen Änderungen, zur Beschreibung der gesamten Szene neu bereitstellen. Diese Methode bietet einerseits ein Höchstmaß an Kontrolle und Flexibilität für das Anwendungsprogramm, andererseits erzeugt sie aber auch eine kontinuierliche Arbeitsbelastung der CPU.
Beispiele für Immediate-Mode-Rendering-Systeme sind Direct2D[1], OpenGL[3] and Quartz[4]. Es existieren einige Immediate Mode GUIs, die besonders für eine Verwendung in Verbindung mit Immediate Mode Rendering-Systemen geeignet sind.
Es gibt ein weiteres bedeutendes Entwurfsmuster der Programmierschnittstelle in Grafikbibliotheken – den Retained Mode.
Rendern von grafischen Primitiven im Immediate Mode
[Bearbeiten | Quelltext bearbeiten]Einfache Vertex-Eigenschaften können durch ein Renderer-API Bild für Bild in einen Befehlspuffer eingefügt werden. Dies ist mit erheblicher Bandbreite und Prozessorzeit verbunden (insbesondere, wenn sich der Grafikprozessor auf einem separaten Bus befindet), kann aber für Daten, die dynamisch von der CPU erzeugt werden, von Vorteil sein. Seit dem Aufkommen immer vielseitigerer Shader, mit denen eine Grafikprozessor immer komplexere Effekte ohne die Notwendigkeit eines Eingriffs der CPU erzeugen kann, ist dies seltener geworden.
Rendern mit Vertex Puffern in Immediate Mode
[Bearbeiten | Quelltext bearbeiten]Obwohl Zeichenbefehle für jedes Bild neu bereitgestellt werden müssen, können moderne Systeme, die diese Methode verwenden, im Allgemeinen die unnötige Duplizierung speicherintensiverer Anzeigedaten vermeiden, indem sie in den Zeichenbefehlen auf diese unveränderlichen Daten (über Indirekte Adressierung) verweisen (z. B. Texturen und Vertexpuffer).
Verwendung bei grafischen Benutzeroberflächen
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ a b Quinn Radich: Retained Mode Versus Immediate Mode. In: Win32 apps. Microsoft, 30. Mai 2018, abgerufen am 21. Dezember 2019.
- ↑ Alex Feldmeier: GUI Programming. In: UWP Computer Science and Software Engineering Technical Report. 12. Oktober 2013, abgerufen am 22. Dezember 2019: „Retained mode has been the standard for years. Just about every GUI is in retained mode.“
- ↑ OpenGL. Abgerufen am 4. Mai 2020.
- ↑ Marcel Weiher: iOS and macOS Performance Tuning: Cocoa, Cocoa Touch, Objective-C, and Swift. Addison-Wesley Professional, 2017, ISBN 978-0-13-308553-2 (google.com [abgerufen am 22. Dezember 2019]): „The primary graphics API Quartz and OpenGL are both immediate-mode APIs“