zu www.bildungsgueter.de zur Inhaltsübersicht des Kapitels

Beispielprogramme

Verwendung von OpenGL ES 2.0


Kurzbeschreibung

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.

Erforderliche Pakete

Beide Programme sind in C++ geschrieben und verwenden Gtk-3. Die benötigten Pakete sind:

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 Infrastruktur­komponenten 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.

Compilierung

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;

zur Inhaltsübersicht des Kapitels