Das Beispielprogramm zeigt die Verwendung der Shading Language GLSL ES für die Berechnung eines Fraktals auf der GPU.
Das Programm steht in zwei Versionen zur Verfügung, die sich in ihrer Funktion für den Betrachter nicht unterscheiden. Der Unterschied betrifft die Art der Bilderzeugung:
Archivdatei mit diesem Beispielprogramm: Cpp-Gtk3-GLES2-Fraktal003.tar.gz.
Beide Programme sind in C++ geschrieben und verwenden Gtk-3. Die benötigten Pakete sind:
libgtkmm-3.0-dev
libegl1-mesa-dev
Wird für die Datei wayland-egl.pc benötigt
Die Installation der benötigten Pakete geschieht mit dem Befehl
sudo apt-get install libgtkmm-3.0-dev libegl1-mesa-dev
Wenn Gtk-3 ohne GNOME verwendet wird - was in TinkerOS meist der Fall sein wird - tritt eine irritierende Warnung auf, wenn ein Programm gestartet wird ,das Gtk-3 verwendet. Ursache der Warnung ist der Versuch, eine Verbindung zu nicht installierten Infrastrukturkomponenten von GNOME herzustellen. Zur Vermeidung dieses Fehlers ist in der Datei /etc/environment der folgende Eintrag vorzunehmen:
export NO_AT_BRIDGE=1
Die genannte Datei ist ursprünglich leer. Um sie zu bearbeiten, benötigst du die Rechte des Systemverwalters. Ein mögliches Vorgehen ist:
cd /etc sudo leafpad environment
Im Editor leafpad kannst du die Datei nun bearbeiten und anschließend speichern.
Die Eintragung wird mit dem nächsten Neustart des Betriebssystems wirksam.
Nach der Installation aller erforderlichen Pakete geschieht die Compilierung im Hauptverzeichnis des Projekts wie folgt:
make
Das compilierte Programm wird im Hauptverzeichnis des Projekts abgelegt umd mit dem Befehl
./demo
gestartet.
Anmerkungen
GLSL ES ist strikter als beim Raspberry Pi: Bei der Initialisierung globaler Variablen dürfen keine uniform deklarierten Parameter verwendet werden. Eine Initialisierung, die uniform deklarierte Variablen verwendet, muss im Hauptprogramm niedergeschrieben werden.
Fehlermeldung: S0012: Global variable initializer must be a constant expression
Für floats muss eine Genauigkeitsangabe gemacht werden:
precision highp float;