ClusterGL

ClusterGL ist ein verteiltes Renderingsystem für OpenGL-Anwendungen. Dabei werden OpenGL API Aufrufe von ClusterGL bei der Ausführung von OpenGL-Programmen direkt abgegriffen und über Netzwerk an entsprechend konfigurierte Rechner geschickt. Diese empfangen die Befehle von ClusterGL und wandeln sie wieder zurück in OpenGL API Aufrufe, die sie dann lokal in ein Fenster rendern.
Gegenüber anderen Lösungen wie (X-)DMX, WireGL, dessen Nachfolger Chromium, sowie BroadcastGL bietet ClusterGL ein paar Möglichkeiten zur Optimierung und läuft auch auf aktuellen Unix-artigen Betriebssystemen.

ClusterGL auf zwei Ubuntu-Rechnern

Immer wenn mir irgendwas unklar war und ich länger nachforschen musste, werde ich es hier niederschreiben. :)

Anwendung

Bei der Programmierung von Anwendungen für ClusterGL ist vor allem zu beachten, dass nicht alle (exotischen) Befehle der OpenGL API unterstützt werden - auch mit Shadern beispielsweise gibt es noch Probleme. Wenn man die Beispiele aus dem Repository hernimmt, ist es jedoch möglich, über Erweiterung dieser entsprechend Anwendungen von Grund auf zu implementieren.
Von Hause aus jedoch werden bereits Anwendungen wie MineCraft, Open Arena und ähnliche ohne jegliche Modifikation unterstützt.

OpenGL-Programme selbst können nun in verschiedenen Programmiersprachen geschrieben werden, für die es die entsprechende Bibliothek gibt. Auch mittels Processing ist es möglich unter Verwendung des OpenGL-Renderers Anwendungen zu schreiben, die anschließend mittels ClusterGL verteilt gerendert werden. Dabei ist allerdings zu beachten, dass die Javaumgebung von Processing vergleichsweise resourcenintensiv ist und es somit zu Verzögerungen bei der Ausführung auf schwachbrüstigen Rechnern kommen kann.
Mit der Berkelium-Bibliothek und den damit gelieferten Beispielprogrammen ist es auch möglich, Webseiten in OpenGL-Texturen zu rendern. Die URLs der Webseiten werden dabei durch Berklium an eine selbstkompilierte Chromiuminstallation durchgeschleust, in dieser vom bekannten Webkit gerendert und wieder an Berklium gegeben, dass eine sich aktualisierende Textur erzeugt, welche wiederum in OpenGL weiterverwendet werden kann. Das ermöglicht es nun per Javascript und all den "schönen" Dingen Anwendungen für die Darstellung in ClusterGL zu schreiben. Das geht sogar soweit, dass die Chromiuminstanz den Flashplayer auf dem System erkennt und verwendet und somit sogar Flash-Anwendungen gerendert werden können. Einzig zu bedenken ist hier selbstverständlich, dass die aufgerufene Webseite selbst für die Aktualisierung der Inhalte Sorge tragen muss.

ClusterGL bringt im Wesentlichen zwei Anwendungen und eine Bibliothek mit, welche im folgenden kurz beschrieben werden.

cgl-capture

cgl-capture ist eigentlich nur ein Bash-Skript. Es ersetzt die OpenGL Bibliothek bei der Ausführung des Programms durch die ClusterGL Biblitohek. Somit sorgt es dafür, dass die Befehle an die OpenGL API statt von OpenGL von ClusterGL verarbeitet werden.

libcgl-capture.so

libcgl-capture.so ist die eigentliche Programmbibliothek. Sie liest die Konfiguration unter /etc/cgl.conf ein und greift die Befehle an die OpenGL API ab, wenn sie aus der cgl-capture-Umgebung heraus gestartet wurde. Diese Befehle werden nach Vorverarbeitung an die in /etc/cgl.conf definierten outputs über Netzwerk verteilt. Auf diesen Knoten werden sie von derselben Bibliothek entsprechend wieder zurück in OpenGL-Befehle gewandelt und lokal gerendert.

cgl-render

cgl-render ist ein Programm, dass unter Nutzung der libcgl-capture.so und nach Einlesen der Konfiguration unter /etc/cgl.conf den im ersten Argument mitgegebenen output rendert.


Installation von ClusterGL - Mac OS X

Um ClusterGL auf Mac OS X (getestet mit 10.7 und 10.8) zu installieren, werden einige Bibliotheken aus der Linux-Umgebung benötigt, die so unter OS X noch nicht zur Verfügung stehen.
Sowohl über Homebrew, als auch über MacPorts können diese installiert werden:

MacPorts

port install libconfuse libsdl libsdl_net lzo2 glew

Homebrew

brew install confuse sdl_net lzo glew intltool gettext
brew link gettext

Kompilieren

Das Kompilieren der ClusterGL-Anwendungen aus meinem Fork des origianl Repository sollte ohne weitere Probleme vonstatten gehen.
Ein Pullrequest auf das original Repository ist gestellt - sollte also demnächst auch über das original Repository funktionieren.

Ausführen

Beim Ausführen ist die Herangehensweise ein wenig anderes, als bei Linux. Statt dem dort zu verwendenden LD_LIBRARY_PRELOAD ist unter OS X DYLD_INSERT_LIBRARIES notwendig. Doch damit nicht genug, es muss auch noch mittels DYLD_FORCE_FLAT_NAMESPACE der sog. two-level namespace deaktiviert werden:

export DYLD_INSERT_LIBRARIES=/usr/lib/libcgl-capture.so
export DYLD_FORCE_FLAT_NAMESPACE=

Anschließend werden innerhalb dieser Terminalsession ausgeführte Programme durch ClusterGL gejagt, anstatt direkt lokal angezeigt zu werden.

News - Sidebar
Ubuntu Touch Backup und Restore
Ubuntu Touch ist nun seit mehr als zwei Jahren mein Betriebssystem der Wahl auf meinem Nexus 4. Leider habe ich mir irgendwie den Update-Mechanismus zerschossen und so kurzerhand beschlossen, das System neu aufzusetzen. Den Prozess habe ich in der ubuntu touch section dokumentiert.
Ableton MIDI CC Automation
In der Audio-Sektion wird nun kurz erläutert, mit welchem Hilfsmittel man im Arrangement View von Ableton Live MIDI CC Parameter eines externen Instruments automatisieren kann.
x0xb0x und Reason 7
In der Audio-Sektion habe ich kurz niedergeschrieben, wie der Sound einer x0xb0x in Reason 7 per MIDI-Clock synchron geroutet werden kann.
LaTeX-Workshop
In der LaTeX-Sektion werden inzwischen Folien und weiteres zu einem LaTeX-Workshop verlinkt.
ClusterGL
Unter Projekte->ClusterGL habe ich ein paar Schritte zur Nutzung von ClusterGL online gestellt.
NFC MobiDoc
Unter Projekte->NFC MobiDoc habe ich eine in einer Gruppe von 5 Stundenten inklusive mir umgesetzte NFC-basierte Krankenhausanwendung dokumentiert.
VotingTool
Unter Projekte->VotingTool habe ich ein Grailsbasiertes VotingTool online gestellt.
neues Design
Heute habe ich ein Geschenk von Max bekommen - ein neues schönes Design. Vielen Dank an dieser Stelle!
ROBERTA
Heute habe ich neben der Übersetzung ins Englische auch eine Featurelist für den Server aus dem ROBERTA-Projekt erstellt.
Git + Apache
Wer sein Git-Repository über HTTP mit Apache und aber ohne VirtualHosts (also ohne Subdomain) verfügbar machen will, findet unter Anleitungen -> Vermischtes nun eine entsprechende Anleitung.
ARM-Toolchain
Wie man einen gcc Toolchain für ARM aufsetzt, findet sich ab sofort unter Anleitungen -> ARM. Diesen nutze ich beispielsweise für die Programmierung von OpenBeacon USB 2-RFID-Tags.
SD-Karte kaputt
Nach dem Netzteil nun auch die SD-Karte: Unter Anleitungen -> Sheevaplug mein Rettungsweg.
Netzteil kaputt
Wem das gleiche Glück mit dem Sheevaplug beschieden, der findet unter Sheevaplug meinen Lösungsweg.
ATMEGA verfust
Wer einen seiner AVR Mikrocontroller verfust hat, findet unter Anleitungen -> AVR nun einen rettenden Beitrag.
Abschlussarbeit
Unter Anleitungen -> LaTeX habe ich eine Vorlage für eine Abschlussarbeit verlinkt.
Etherpad
unter Anleitungen -> Vermischtes findet sich ein Tutorial zur Installation von Etherpad auf Debian Lenny

Valid XHTML 1.0 Strict CSS ist valide!