Probleme mit DirectX unter Proton

Dank dem auf Wine aufbauenden Proton, können unter Linux in Verbindung mit Steam mittlerweile viele Windows-Spiele problemlos gespielt werden. Auf dem Steam Deck funktioniert dies in den meisten Fällen noch besser, da hier die Hardware seitens der Treiber gut unterstützt wird.

Das Steam Deck

Problematisch kann die Unterstützung bei manchen Grafikkarten wie der AMD Radeon 780M sein. So ist es möglich mit ChimeraOS, auch andere PC-Systeme mit dem Steam Deck-System zu benutzen. Bei manchen Spielen wie z.B. Castle Crashers kommt es zu Abstürzen beim Start des Spieles. Andere Spiele liefern in solchen Fällen Fehlermeldungen die auf DirectX 11 als Fehlerquelle bzw. Problem der Inkompatiblität mit der Grafikkarte hinweisen:

DX 11 could not switch resolution

Je nach Spiel können hierbei unterschiedliche Fehlertexte erscheinen:

Failed to create D3D11 device

In der Steam-Oberfläche kann dieses Problem für einige Spiele mit dem zusätzlichen Startparameter:

PROTON_USE_WINED3D=1 %command%

umgangen werden. Dieser kann in den Einstellungen zum jeweiligen Spiel unter dem Punkt Allgemein hinzugefügt werden. Damit wird WINED3D genutzt, welches die Schnittstellenaufrufe zu OpenGL hin übersetzt, während dies standardmäßig gegen die Vulkan-Schnittstelle geschieht.

jMonkeyEngine

Mit libGDX hatte ich vor einem Jahr bereits eine Game Engine für Java vorgestellt. Daneben existieren natürlich noch weitere Game Engines. Eine dieser Engines ist die jMonkeyEngine, welche seit 2003 entwickelt wird. Technisch basiert der SDK-Editor auf NetBeans-Plattform. Die Engine selbst nutzt OpenGL für die Darstellung der Grafik und verfügt über unterschiedlichste Features wie die Unterstützung für Beleuchtung, die Nutzung von Shadern, eine Reihe von Filtern und Effekten und eine Physikunterstützung. Daneben werden auch andere Dinge wie die Eingabe des Nutzers von der Engine abstrahiert.

Das jMonkeyEngine SDK

Lizenziert ist jMonkeyEngine unter der BSD-Lizenz und damit freie Software. Der Quelltext kann über GitHub bezogen werden. Die offizielle Seite des Projektes ist unter jmonkeyengine.org zu finden.

libGDX; Multiplattform-Game-Engine für Java

Für ein kleineres Projekt war ich auf der Suche nach einer Game-Engine für Java. Empfohlen wurde mir schlussendlich libGDX. Dabei handelt es sich um eine Game-Engine welche ursprünglich für Android entwickelt wurde. Mario Zechner, der ursprüngliche Entwickler der Engine, baute allerdings nach relativ kurzer Zeit eine Unterstützung für Desktopsysteme ein. Mittlerweile werden als Zielsysteme Linux, macOS, Windows, Android, iOS und der Webbrowser unterstützt.

Ein kleines Projekt in libGDX, nach ein paar Stunden Entwicklungszeit

libGDX eignet sich für 2D- als auch 3D-Spiele und ist relativ einfach strukturiert, so dass man in wenigen Stunden von einer Idee zu einem Ergebnis kommen kann. Die seit mittlerweile 2009 in der Entwicklung befindliche Engine wurde 2010 erstmalig veröffentlicht und hat sich seitdem stetig weiterentwickelt. Technisch basiert die Engine neben Java auf OpenGL, welches zum Rendering der Spieleszenen genutzt wird.

Die Liste der implementierten Features von libGDX ist lang. So wird Audio ebenso unterstützt wie die abstrakte Behandlung von Eingabegeräten, so das ein Spiel auf Touchscreen ebenso läuft wie auf gewöhnlichen Rechnern. Im Bereich der Grafik werden Partikelsyssteme, die Nutzung von Tile-Maps (mit einer nativen Unterstützung des TMX-Dateiformates) und vieles mehr unterstützt. Der Entwickler nutzt dazu die entsprechenden High-Level-APIs und muss sich nicht mit der konkreten Implementierung herumschlagen. Daneben existieren entsprechende Hilfs- bzw. Datenklassen, welche die verwendete Mathematik wie Matrizen, Vektoren und ähnliches abdeckt.

Aktivieren Sie JavaScript um das Video zu sehen.
Video-Link: https://www.youtube.com/watch?v=hA2e3xIuNlk

Neben den im Kern vorhandenen Features, existiert ebenfalls eine Unterstützung für zusätzliche Module, so können unter anderem Box2D und das Entity-System Ashley als zusätzliche Module eingebunden werden.

Die offizielle Seite des Projektes ist unter libgdx.badlogicgames.com zu finden. Neben der spartanischen Dokumentation auf der offiziellen Webseite, ist die Wiki des GitHub-Projektes ein guter Einstiegspunkt für den Start mit libGDX. Der Quelltext der Engine ist ebenfalls auf GitHub zu finden. Die Engine ist unter der Apache License in Version 2 lizenziert und somit freie Software.

NaN und Infinity in GLSL definieren

In der OpenGL Shading Language (kurz GLSL) gibt es Funktionen um Zahlen auf Infinity und NaN zu prüfen. Diese Funktionen sind dabei isinf und isnan. Problematisch wird es wenn man NaN oder Infinity im Quelltext selbst benötigt, da es für diese in GLSL keine vordefinierten Konstanten gibt. Stattdessen muss man diese selbst definieren:

const float infinity = 1.0 / 0.0;
const float nan = 0.0 / 0.0;

Damit kann man NaN und Infinity in seinen Shadern nutzen.

Blend-Modi unter OpenGL ausprobieren

Unter OpenGL gibt es eine Reihe von Blend-Modi, welche sich auf die Kombinationen von Texturen verstehen. Das Problem an diesem Modi ist, das die wenigsten Entwickler die Auswirkungen all dieser Modi im Kopf haben. Für diesen Zweck gibt es nun eine Webseite von Anders Riggelsen auf der die unterschiedlichsten Modi getestet werden können.

andersriggelsen.dk

andersriggelsen.dk

Auf der Webseite kann mit Hilfe unterschiedlicher Bilder (vorgegebene oder eigene) mit den unterschiedlichen Blend-Optionen gespielt werden. Für OpenGL Entwickler sollte die Webseite damit ein hilfreiches Werkzeug darstellen.