ebonyifinance.com

  

Beste Artikel:

  
Main / Wann wird prepareopengl aufgerufen?

Wann wird prepareopengl aufgerufen?

OpenGL war in macOS 10 veraltet. Verwenden Sie stattdessen das Metal-Framework, um Hochleistungscode auf GPUs zu erstellen. Siehe Metall. Die OpenGL-Programmierschnittstelle bietet Hunderte von Zeichenbefehlen, die die Grafikhardware steuern.

Es werden keine Befehle bereitgestellt, die mit dem Fenstersystem eines Betriebssystems verbunden sind. Abbildung 2-1 zeigt einen Würfel, der in eine Kakaoansicht gezeichnet wurde. Dieses Kapitel zeigt nicht, wie GLUT verwendet wird. Der erste Abschnitt beschreibt den allgemeinen Ansatz zum Zeichnen auf dem Bildschirm und bietet einen Überblick über die Funktionen und Methoden, die von jeder API verwendet werden.

Um Ihren Inhalt in eine Ansicht oder einen Layer zu zeichnen, verwendet Ihre Anwendung die NSOpenGL-Klassen aus dem Cocoa-Anwendungsframework heraus. Fordern Sie vom Betriebssystem ein Pixelformatobjekt an, das Pixelspeicherinformationen sowie die von Ihrer Anwendung benötigten Renderer- und Pufferattribute kapselt. Das zurückgegebene Pixelformatobjekt enthält alle möglichen Kombinationen von Renderern und Anzeigen, die auf dem System verfügbar sind, auf dem Ihr Programm ausgeführt wird und das die durch die Attribute angegebenen Anforderungen erfüllt.

Die Kombinationen werden als virtuelle Bildschirme bezeichnet. Siehe Virtuelle Bildschirme. Es kann Situationen geben, für die Sie sicherstellen möchten, dass Ihr Programm einen bestimmten Renderer verwendet. Wenn Sie Renderer- und Pufferattribute auswählen, wird erläutert, wie Sie ein Attributarray einrichten, das garantiert, dass das System ein Pixelformatobjekt zurückgibt, das nur diesen Renderer verwendet.

Wenn ein Fehler auftritt, empfängt Ihre Anwendung möglicherweise ein Objekt im NULL-Pixelformat. Ihre Anwendung muss diese Bedingung erfüllen. Erstellen Sie einen Renderkontext und binden Sie das Pixelformatobjekt daran. Der Renderkontext verfolgt Statusinformationen, die beispielsweise Zeichnungsfarbe, Ansichts- und Projektionsmatrizen, Lichteigenschaften und Konventionen zum Packen von Pixeln steuern.

Geben Sie das Pixelformatobjekt frei. Sobald das Pixelformatobjekt an einen Renderkontext gebunden ist, werden seine Ressourcen nicht mehr benötigt. Binden Sie ein zeichnbares Objekt an den Renderkontext. Bei einem Fensterkontext ist dies normalerweise eine Kakaoansicht.

Machen Sie den Rendering-Kontext zum aktuellen Kontext. Das System sendet OpenGL-Zeichnungen an den Rendering-Kontext, der als aktueller bezeichnet wird. Es ist möglich, dass Sie mehr als einen Rendering-Kontext einrichten. Stellen Sie daher sicher, dass derjenige, zu dem Sie zeichnen möchten, der aktuelle ist.

Die spezifischen Funktionen oder Methoden, mit denen Sie die einzelnen Schritte ausführen, werden in den folgenden Abschnitten erläutert. Es gibt zwei Möglichkeiten, OpenGL-Inhalte in eine Cocoa-Ansicht zu zeichnen. Ein Tutorial. Wenn Ihre Anwendung komplexer ist und das Zeichnen in mehreren Renderkontexten unterstützen muss, sollten Sie die NSView-Klasse in Unterklassen unterteilen.

Wenn Ihre Anwendung beispielsweise das gleichzeitige Zeichnen in mehrere Ansichten unterstützt, müssen Sie eine benutzerdefinierte NSView-Klasse einrichten. Es bietet Methoden für den Zugriff auf und die Verwaltung des Pixelformatobjekts und des Renderkontexts sowie die Benachrichtigung über Änderungen im sichtbaren Bereich. Mit der OpenGL-Funktion glViewport können Sie die Ansicht jedoch in mehrere Rendering-Bereiche unterteilen.

Dieser Abschnitt enthält schrittweise Anweisungen zum Erstellen einer einfachen Cocoa-Anwendung, mit der OpenGL-Inhalte in eine Ansicht gezeichnet werden. In diesem Lernprogramm wird davon ausgegangen, dass Sie mit Xcode und Interface Builder vertraut sind.

Wenn Sie noch nie eine Anwendung mit der Xcode-Entwicklungsumgebung erstellt haben, lesen Sie Erste Schritte mit Tools. Fügen Sie Ihrem Projekt mithilfe der Objective-C-Klassenvorlage eine neue Datei hinzu. Implementieren Sie drawRect: Die Methode setzt die klare Farbe auf Schwarz und löscht den Farbpuffer zur Vorbereitung des Zeichnens.

Dann drawRect: Der OpenGL-Befehl glFlush zeichnet den von Ihrer Routine bereitgestellten Inhalt in die Ansicht. Fügen Sie den Code hinzu, um Ihre Zeichnung auszuführen. In Ihrer eigenen Anwendung würden Sie jede geeignete Zeichnung ausführen. Fügen Sie jedoch den in Listing 2-4 gezeigten Code hinzu, um zu lernen, wie Sie OpenGL-Inhalte in eine Ansicht zeichnen. Dieser Code zeichnet ein goldfarbenes 2D-Dreieck, dessen Abmessungen nicht ganz den Abmessungen eines echten goldenen Dreiecks entsprechen, aber gut genug sind, um zu zeigen, wie OpenGL-Zeichnungen ausgeführt werden.

Stellen Sie sicher, dass Sie diese Routine vor dem drawRect einfügen: Passen Sie die Größe der Ansicht an das Fenster an. Öffnen Sie den Bereich Attribute des Inspektors für die Ansicht und sehen Sie sich die Renderer- und Pufferattribute an, die zum Festlegen verfügbar sind. Diese Einstellungen ersparen Ihnen das programmgesteuerte Festlegen von Attributen. Nur die im Interface Builder-Inspektor aufgelisteten Attribute werden festgelegt, wenn die Ansicht instanziiert wird. Wenn Sie zusätzliche Attribute benötigen, müssen Sie diese programmgesteuert festlegen.

Erstellen Sie Ihre Anwendung und führen Sie sie aus. Sie sollten Inhalte sehen, die dem in Abbildung 2-2 gezeigten Dreieck ähnlich sind. Ersetzen Sie die Zeichenbefehle im Sofortmodus durch Befehle, die Ihre Scheitelpunktdaten in OpenGL beibehalten. Deklarieren Sie in der Benutzeroberfläche für die Ansicht eine Variable, die angibt, ob die Ansicht zum Akzeptieren von Zeichnungen bereit ist. Eine Ansicht kann nur gezeichnet werden, wenn sie an einen Renderkontext gebunden ist und dieser Kontext auf den aktuellen Kontext festgelegt ist. Cocoa ruft keine Initialisierungsroutinen für Objekte auf, die in Interface Builder erstellt wurden.

Wenn Sie Initialisierungsaufgaben ausführen müssen, tun Sie dies in der awakeFromNib-Methode für die Ansicht. Da Sie Attribute im Inspektor festlegen, müssen Sie diese nicht programmgesteuert einrichten, es sei denn, Sie benötigen zusätzliche Attribute. Es ist auch nicht erforderlich, ein Objekt im Pixelformat programmgesteuert zu erstellen. Es wird erstellt und geladen, wenn Cocoa die NIB-Datei lädt. Ihr drawRect: Sie müssen Code bereitstellen, der den Fall behandelt, wenn die Ansicht nicht zum Zeichnen bereit ist.

OpenGL ist am besten, wenn es um Echtzeit- und interaktive Grafiken geht. Ihre Anwendung muss einen Timer bereitstellen oder die Benutzerinteraktion unterstützen. Dieser Abschnitt bietet einen Überblick über die wichtigsten Aufgaben, die Sie zum Anpassen der NSView-Klasse für OpenGL-Zeichnungen ausführen müssen. Wenn Sie die NSView-Klasse in Unterklassen unterteilen, um eine benutzerdefinierte Ansicht für OpenGL-Zeichnungen zu erstellen, überschreiben Sie alle Quarzzeichnungen oder anderen Inhalte in dieser Ansicht.

Sie müssen das Update und initWithFrame überschreiben: Siehe Listing 2-6. Wenn nicht garantiert wird, dass sich die benutzerdefinierte Ansicht in einem Fenster befindet, müssen Sie auch die lockFocus-Methode der NSView-Klasse überschreiben. Siehe Listing 2-7. Diese Methode stellt sicher, dass die Ansicht vor dem Zeichnen gesperrt ist und der Kontext der aktuelle ist. Die Umformmethode wird von der NSView-Klasse nicht unterstützt. Sie müssen die Grenzen in drawRect aktualisieren: Möglicherweise möchten Sie andere Methoden hinzufügen. Sie können beispielsweise den Kontext vom zeichnbaren Objekt trennen, wenn die benutzerdefinierte Ansicht aus dem Fenster verschoben wird (siehe Listing 2-9).

Alle Rechte vorbehalten. Nutzungsbedingungen Datenschutzrichtlinie aktualisiert: Dokumentationsarchiv Entwicklersuche. Weiter zurück. Zurückgezogenes Dokument Wichtig: NSRect-Grenzen; Ende.

NSRect frameRect pixelFormat:

(с) 2019 ebonyifinance.com