Einsteigerguide: Was ist GLKit?
Der erfahrene Entwickler Erik Buck, Autor von „Cocao Design Patterns and the upcoming Learning OpenGL ES for iOS: A Hands-on Guide to Modern 3D Graphics Programming“, sprach mit InformIT Senior Editor Dustin Sullivan und erklärte, wie Apples GLKit ihnen dabei helfen kann, ihren iOS-Code für optimale Grafikleistung mit minimalem Aufwand und Overhead zu entwerfen.
Dieses Interview ist eine deutsche Übersetzung. Zur englischen Original-Version gelangen Sie durch einen Klick auf den folgenden Link.
Sullivan: Was ist GLKit?
Buck: GLKit ist neues Framework, das in iOS 5 eingeführt wurde. Es ist eine Sammlung von C-Funktionen und Objective-C-Klassen, die die 3D-Grafikprogrammierung für iOS vereinfachen soll. Um die Rolle von GLKit zu verstehen, müssen Sie es losgelöst von der Landschaft betrachten.
IOS unterstützt zwei weitgehend inkompatible Bibliotheken für hardwarebeschleunigte 3D-Grafiken. Die erste, OpenGL ES 1.1, heißt „fixed-function“, weil sie einen festen Satz von Funktionen zur Erzeugung von 3D-Grafiken bietet. Einige dieser Funktionen sind sehr leistungsfähig und helfen ihnen grundlegende 3D-Anwendungen schnell zum Laufen zu bringen, aber kein endlicher Satz von Funktionen wird jemals alle Anforderungen erfüllen. Im Gegensatz dazu ist OpenGL ES 2.0 „programmierbar“ in dem Sinne, dass benutzerdefinierte Programme, die in der „C-ähnlichen“ OpenGL ES Shading Language geschrieben wurden, direkt auf der Graphics Processing Unit (GPU) in iOS-Geräten ausgeführt werden können. Das Problem ist, dass OpenGL ES 2.0 die meisten dieser leistungsstarken Funktionen in OpenGL ES 1.1 nicht enthält. Sie müssen benutzerdefinierte Shading Language-Programme schreiben, um auch die einfachste Grafikausgabe zu erhalten.
Vor GLKit standen iOS-Anwendungsentwickler vor einer kritischen Entscheidung: Welche Version von OpenGL ES sollte verwendet werden, da die Portierung einer Anwendung von einer Version auf andere schwierig ist? OpenGL ES 1.1 ist die Vergangenheit und OpenGL ES 2.0 ist die Zukunft, aber 1.1 bietet ihnen so viele kostenlose Funktionen und 2.0 erfordert enorme Vorleistungen. OpenGL 2.0 hat das Potenzial, Grafiken schneller als 1.1 zu erzeugen, aber wenn Sie ein Anfänger bei Shading Language sind, können ihre eigenen Programme langsamer laufen als die optimierten 1.1-Funktionen, die über Jahrzehnte von Experten entwickelt und verfeinert wurden.
GLKit funktioniert unabhängig davon, ob Sie OpenGL ES 1.1 oder OpenGL ES 2.0 wählen. Wenn Sie ihren Code schreiben, um GLKit zu verwenden, ist die Portierung von einem zum anderen so trivial, dass Sie möglicherweise keine einzige Zeile ihres Codes ändern müssen.
Sullivan: Ist GLKit Kompatibilitäts-Layer?
Buck: GLKit bietet sicherlich einen Kompatibilitäts-Layer, aber es ist viel mehr als das. Es ist eine übergeordnete Programmierschnittstelle für 3D-Grafiken. GLKit bietet Objective-C-Klassen, um Programmierer produktiver zu machen, genauso wie die Objective-C-Klassen von Cocoa Programmierer produktiver machen. GLKit enthält leistungsstarke wiederverwendbare Komponenten. GLKit reduziert die Menge an Code, die benötigt wird, um anspruchscolle 3D-Anwendungen für wissenschaftliche Modellierung, Augmented Reality, Image Processing und Spiele zu schreiben. Ich würde sagen, GLKit ist auf dem Weg zu einer kompletten Game Programming Engine.
Buck: Funktioniert GLKit also über dem Level von OpenGL wie Cocoa über dem Niveau von Apples alten prozeduralen Carbon Framework funktioniert?
Buck: In gewisser Weise ist das wahr. Cocoa war ursprünglich eine Sammlung von plattformübergreifenden Frameworks, die auf der Standard C Posix Funktionsbibliothek aufbaut. Schreiben eines Programms mit Cocoa ermöglicht trivale Portierung zwischen Unix-Varianten wie Solaris, HP-UX und OpenStep sowie Microsoft Windows. Das war aber nie der eigentliche Grund, die Cocoa-Technologie einzusetzen. Der eigentliche Grund war schon immer, von einer enormen Verbesserung der Produktivität der Programmierer zu profitieren. GLKit ist noch klein und verbessert bereits die Produktivität der Programmierer. Es ist leicht vorstellbar, dass sich GLKit zum Cocoa der 3D-Grafik entwickelt.
Sullivan: Wie macht GLKit das? Wie erhöht es die Produktivität der Programmierer?
Buck: GLKit kapselt und standardisiert viele Grundfunktionen, die jede 3D-iOS-Anwendung benötigt. Beispielsweise kapselt die GLKView-Klasse die gesamte Code-Infrastruktur, die für die Integration von 3D-Grafiken benötigt wird. Es verbindet Cocoa, Core Animation Layers und OpenGL ES. Die GLKViewController-Klasse kapselt die gesamte Code-Infrastruktur, die für die zeitsynchrone Anzeige von Aktualisierungen benötigt wird, verwaltet automatisch Ressourcen und bietet iOS-Standardverhalten wie Orientierungsänderungen und Unterbrechungen, wenn ein Anruf eintritt. Nur diese beiden Klassen eliminieren Hunderte von Codezeilen, die sonst für jede 3D-Anwendung neu erstellt werden, aber was noch wichtiger ist, sie standardisieren das Verhalten. Die Alternative ist, dass jeder Entwickler das zu erwartende Verhalten wiederherstellt und einige werden das Verhalten unweigerlich suboptimal oder völlig falsch implementieren.
Als weiteres Beispiel enthält GLKit eine Standard-Mathematik-Bibliothek für 3D-Grafiken. Diese mathematischen Funktionen können Hunderte von Millionen pro Sekunde aufgerufen werden, daher ist es wichtig, dass sie schnell sind. Jeder kann eine kostenlose Mathematik-Bibliothek aus dem Internet herunterladen, aber Apple ist einzigartig positioniert, um seine Bibliothek zur schnellsten auf Apple-Geräten zu machen. Durch die Aufnahme in GLKit übernimmt Apple die Verantwortung, die Bibliothek zu debuggen und zu optimieren. Das sind noch ein paar hundert zeilen Code, die nicht mehr in jeder 3D-Anwendung benötigt werden.
Hinweis: GLKView, GLKViewController und die Mathematik-Bibliothek implementieren Funktionen, die es in keiner Version von OpenGL ES gibt. GLKit ist nicht nur ein „Abstraction Layer“ für OpenGL ES. GLKit verfügt über Fähigkeiten, die weit darüber hinausgehen.
Nicht unerwähnt soll an dieser Stelle die GLKTextureLoader-Klasse bleiben. Es macht es trivial, Bilder zu laden und zu konfigurieren, die „Texturen“ genannt werden, um moderne 3D-Grafiken realistisch aussehen zu lassen. Das sind noch ein paar hundert Zeilen Code, die Sie nicht schreiben müssen. GLKTextureLoader nutzt das bewährte Core Graphics-Framework von Apple in seiner Implementierung und schützt Sie davor, auch diese Bibliothek kennen zu müssen.
Sullivan: Sie haben erwähnt, dass GLKit noch klein ist und wachsen kann. Wie sehen Sie die Veränderung?
Buck: Für die erste Version von GLKit konzentrierte sich Apple meiner Meinung nach darauf, es einfach zu machen, eine 3D-Anwendung auf iOS-Geräten zum Laufen zu bringen. Das ist besonders wichtig, weil Apple möchte, dass Entwickler OpenGL ES 2.0 verwenden. GLKit eliminiert einen der Hauptgründe, warum sich Entwickler weiterhin für die alte Version 1.1 entschieden haben. GLKit macht den Einstieg mit OpenGL ES 2.0 genauso einfach wie mit 1.1.
Ich sehe GLKit auf dem Desktop auf Mac OS X migrieren. Ich kenne die Pläne von Apple nicht, aber es gibt keinen technischen Grund für GLKit, nicht auf dem Desktop zu arbeiten. Entwickler können dann einen 3D-Code zwischen iOS und Mac OS X austauschen.
Vor allem zeigt uns Apple die Richtung in die Zukunft. GLKit-Klassen wie GLKReflectionMapEffect und GLKSkyboxEffect bieten leistungsstarke Funktionen, die lange Zeit für Grafikassistenten und Spieleentwickler gedacht waren. GLKit implementiert sie auf einem Niveau hoch über OpenGL und macht sie einfach und für jedermann zugänglich. Apple hat die Oberfläche kaum verkratzt. Ich stelle mir eine zukünftige GLKParticle-Effect-Klasse, eine GLKArticulatedModelEffect-Klasse und eine GLKBillboardEffect-Klasse vor. Partikel, gegliederte Modelle und Billboards sind allesamt gängige 3D-Grafikkomponenten auf Assistentenebene, wie z.B. Reflectionmaps und Skyboxen. In der Tat, die Beispiele für mein neues Buch, Learning OpenGL ES für iOS: Eine praktische Anleitung zur modernen 3D-Grafikprogrammierung mit Beispielimplementierungen von Partikeleffekten, gegliederten Modellen und Billboards. Die Beispiele zeigen grafische Konzepte, die im Buch erklärt werden und implementieren einige der Beispiel-Minispiele des Buches. Ich hoffe und vermute, dass die Proben die Absichten von Apple vorwegnehmen. Zumindestens für mich schienen sie offensichtliche Erweiterungen von GLKit zu sein.
Sullivan: Handelt ihr neues Buch über GLKit? Erweitert es die Dokumentation von Apple?
Buck: Das Buch handelt von moderner 3D-Grafikprogrammierung für iOS-Geräte. Es ist für die Programmierer gedacht, die 3D-Grafik von Grund auf lernen wollen. Es geht nicht wirklich um GLKit, aber GLKit ist jetzt die modernste und leistungsfähigste Art, 3D-Grafiken zu verwenden. Das Buch verwendet GLKit-Klassen und Funktionen als Führung durch die zugehörigen 3D-Programmierkonzepte. Einige GLKit-Features werden in Beispielen teilweise neu implementiert, um die zugrundeliegende Technologien und Konzepte zu verdeutlichen. Nachdem Sie das Buch gelesen haben, werden Sie nicht nur wissen, wie man GLKit verwendet, sondern auch, wie man es implementiert.