Das Problem, das ich mit dem Hyperweb-Testgame (Allegria-Game) auf meinem Rechner unter Linux habe, scheint viel komplexer zu sein als ich zunächst erwartet hatte. Nachdem ich mich rund 2 Tage lang damit beschäftigt habe, werde ich es zumindest vorläufig wieder auf Eis legen.
Was auch immer die Ursache für das Problem ist, es handelt sich um ein grenzwertiges Problem, denn es ist mir zweimal gelungen, dass ich das Spiel aus dem Godot Editor heraus fehlerfrei durchlaufen lassen konnte. Es ist mir nach dutzenden Versuchen auch zweimal gelungen das fertig compilierte Allegria-Game.x86_64 aus dem Download von Mareta fehlerfrei zu durchlaufen.
Das Problem geht aber über das Laufzeitverhalten hinaus, denn es zeigt sich schon wenn ich den Quell-Code im Godot Editor lade. Sobald ich das Projekt Hyperweb-Testgame lade werden im Viewport im Level Node die Skybox, der Ground und das Terrain schwarz angezeigt. Einzig der blaue Himmel mit den Wolken wird in der Perspektive richtig angezeigt. Aber auch im Editor wurden mir bis jetzt nach dem Laden des Projektes die Texturen zweimal richtig angezeigt.
Nachdem ich im Ausschlussverfahren mit dem Hyperweb-Testgame Quellcode im Godot Editor verschiedene Versuche durchgeführt habe, kann ich auschliessen, dass das eigentliche Problem im Bereich des Terrain Nodes oder des Avatars, bzw. des Characters (character.tscn) und des Players (Player.tscn) selbst liegt. Diese stellen für sich allein betrachtet kein Problem dar.
Meine Recherchen haben ergeben, dass ich nicht der einzige bin, der mit Godot unter Linux schon ähnliche Phänomene erlebt hat. Eine Lösung habe ich aber keine gefunden. Relevante "Issues" wurden von den Entwicklern geschlossen, weil sie nicht reproduziert werden konnten und diesbezügliche Fragen in Foren wurden gar nicht oder nicht abschliessend beantwortet.
Beim Start von Allegria-Game.x86_64 aus einem Terminalfenster mit dem Parameter --verbose ist mir noch aufgefallen, dass während des Ladens der Resourcen unmittelbar vor dem Laden des Hauptmenüs ein Fehler angezeigt wird:
Code:
$ ./Allegria-Game.x86_64 --verbose
Godot Engine v3.2.3.stable.official - https://godotengine.org
XInput: Refreshing devices.
XInput: No touch devices found.
Detecting GPUs, set DRI_PRIME in the environment to override GPU detection logic.
Only one GPU found, using default.
Using GLES3 video driver
OpenGL ES 3.0 Renderer: GeForce GTX 660/PCIe/SSE2
PulseAudio: detected 2 channels
PulseAudio: audio buffer frames: 512 calculated latency: 11ms
CORE API HASH: 0
EDITOR API HASH: 0
Loading resource: res://internal/Environment.tres
Loading resource: res://internal/Globals.gdc
Loading resource: res://internal/menues/Pause_Popup.tscn
Loading resource: res://internal/Vegur-Regular.otf
Loading resource: res://internal/menues/Debug_Display.tscn
Loading resource: res://internal/menues/Debug_Display.gdc
Loading resource: res://internal/Main.tscn
Loading resource: res://internal/Main.gdc
Loading resource: res://internal/player/Player.tscn
Loading resource: res://internal/player/characters/character.tscn
Loading resource: res://internal/player/Player.gdc
Loading resource: res://level/Level.tscn
Loading resource: res://level-assets/terrain/Terrain.gltf
Loading resource: res://level-assets/terrain/Terrain.material
Loading resource: res://level-assets/terrain/Terrain.png
Loading resource: res://level-assets/terrain/Terrain_ORM.png
Loading resource: res://level-assets/terrain/Terrain_N.png
Loading resource: res://game-assets/textures/GravelGround.png
Loading resource: res://game-assets/Skybox.tscn
Loading resource: res://internal/skybox/Lightning.png
Loading resource: res://internal/skybox/Moon.png
Loading resource: res://internal/skybox/Sky.shader
Loading resource: res://internal/skybox/Clouds.shader
Loading resource: res://internal/skybox/Skybox.gdc
Loading resource: res://internal/skybox/Thunder.wav
Loading resource: res://internal/skybox/Water.material
Loading resource: res://internal/skybox/Water.shader
Loading resource: res://internal/skybox/Water_UV.png
Loading resource: res://internal/skybox/Water_N_A.png
Loading resource: res://internal/skybox/Water_N_B.png
Loading resource: res://internal/skybox/Foam.png
Loading resource: res://internal/skybox/Caustic.png
< =========== HIER KOMMT MITTEN DRIN EIN FEHLER =================>
ERROR: _gl_debug_print: GL ERROR: Source: OpenGL Type: Error
ID: 1281 Severity: High Message: GL_INVALID_VALUE error generated.
At: drivers/gles3/rasterizer_gles3.cpp:123.
Loading resource: res://internal/menues/Main_Menu.tscn
Loading resource: res://internal/menues/Main_Menu.gdc
Loading resource: res://Title.jpg
< =============== HIER IST DAS SPIEL GELADEN. ===================>
<== DIE FOLGENDEN MELDUNGEN ERSCHEINEN ERST BEIM VERLASSEN DES SPIELS == >
WARNING: cleanup: ObjectDB instances leaked at exit (run with --verbose for details).
At: core/object.cpp:2135.
Leaked instance: SpatialVelocityTracker:1449
Leaked instance: Camera:1448 - Node name: Camera
Hint: Leaked instances typically happen when nodes are removed from the scene tree (with `remove_child()`) but not freed (with `free()` or `queue_free()`).
Orphan StringName: Camera
Orphan StringName: SpatialVelocityTracker
StringName: 2 unclaimed string names at exit.
Nach meinen Recherchen bedeutet OpenGL Error 1281, dass ein ungültiger Wert an OpenGL übergeben wurde. Meine Vermutung geht jetzt dahin, dass zum Zeitpunkt des Fehlers bereits OpenGL-spezifischer Code ausgeführt wird, der auf Resourcen zugreift, die noch nicht vollständig geladen und initialisiert sind.
Da ich die Probleme vor allem im Zusammenhang mit den Shadern für das Wetter und/oder dem Wasser vermute (alles was mit dem Wasser zu tun hat zu entfernen reichte nicht), werde ich mal die Version 4 von Godot abwarten, die, wenn ich es richtig gelesen habe, im Bereich Skybox Neuigkeiten mitbringt.
Bis dahin werde ich die Zeit nutzen um mich etwas vertiefter mit Godot zu befassen. Den Einblick, den ich jetzt bekommen konnte, war recht beeindruckend und hat mich auf ein paar Ideen gebracht, die ich unbedingt noch ausloten muss.