GLFW ist eine quelloffene, plattformübergreifende Bibliothek für die Entwicklung von OpenGL, OpenGL ES und Vulkan auf dem Desktop. Sie bietet eine einfache API zum Erstellen von Fenstern, Kontexten und Oberflächen sowie zum Empfangen von Eingaben und Ereignissen.

Damit wir uns voll und ganz auf die Arbeit mit OpenGL konzentrieren können, delegieren wir einige Funktionen, die auf jedem Betriebssystem etwas anders funktionieren an GLFW. So läuft unser Code später problemlos unter Linux, macOS und Windows.

Bibliothek herunterladen

Laden Sie die für Ihr Betriebssystem passende Version von GLFW von der GLFW Website herunter. Sie benötigen entweder die Windows pre-compiled binaries (64 bit) und/oder die macOS pre-compiled binaries. Falls Sie Linux nutzen, folgenden Sie den Anweisungen zum Download aus den Paketquellen.

Unter Ubuntu können Sie die Bibliothek mit folgendem Befehl installieren:

sudo apt install libglfw3 libglfw3-dev

Anschließend entpacken Sie die Bibliothek in einen passenden Unterordner libraries in Ihrem Projektordner.

Makefile anpassen

Damit die Bibliothek auch beim Kompilieren mit integriert wird, müssen wir unser makefile wie folgt anpassen:

UNAME = $(shell uname -s)
ifeq ($(findstring NT-10,$(UNAME)),NT-10)
    # Windows 10
	INC = -I../libraries/glfw-3.3.4.bin.WIN64/include
	LIB = -L../libraries/glfw-3.3.4.bin.WIN64/lib-mingw-w64
	LNK = -l glfw3 -l gdi32 -l opengl32
	OPT =
else ifeq ($(findstring Darwin,$(UNAME)),Darwin)
	# macOS
	INC = -I../libraries/glfw-3.3.4.bin.MACOS/include
	LIB = -L../libraries/glfw-3.3.4.bin.MACOS/lib-universal
	LNK = -l glfw3 -framework Cocoa -framework OpenGL -framework IOKit
	OPT = -arch arm64 -arch x86_64
else ifeq ($(findstring Linux,$(UNAME)),Linux)
	# Linux
	INC =
	LIB =
	LNK = -lglfw -lrt -lm -ldl -lGL
	OPT =
endif

bin/engine: obj/main.o bin
	gcc -g obj/*.o -o bin/engine $(LIB) $(LNK) $(OPT)

obj/main.o: main.c obj
	gcc -g -c main.c -o obj/main.o $(INC) $(OPT)

bin:
	mkdir -p bin

obj:
	mkdir -p obj

run: bin/engine
	@bin/engine

clean:
	rm -rf obj
	rm -rf bin

Wie sie sehen, haben wir nun oberhalb unserer Regeln einen if/else Block indem abhängig vom Betriebssystem entprechende Variablen gesetzt werden. Diese Variablen enthalten die Pfade zur GLFW Bibliothek die Sie gerade heruntergeladen haben und zusätzlich die nötigen Kommandos um die passenden Bibliotheken des Betriebssystems einzubinden. Die Variablen werden dann in den Regeln weiter unten eingebunden.

Unterschiede zwischen C und C++

Wenn Sie diesen Aufgabenteil im Masterkurs machen, achten Sie darauf, dass Sie die gcc Anweisung im obigen Codebeispiel wieder durch g++ ersetzen.