Open4
WebGL-Native: Godotのサポート
prev: https://zenn.dev/okuoku/scraps/53012e52ba545c
next: https://zenn.dev/okuoku/scraps/8bfeea6f22c418
Godotのサポート
とりあえずUnityと並んでWebGLエクスポートのあるエンジンということでGodotもサポートしたい。
... 今のところ描画が変だが、これは圧縮テクスチャをサポートしていない & Unityと違ってfallbackしてくれないことによる。
↓ (気合でテクスチャを圧縮解除して再importした)
動作は紙芝居。。あとシャドウマップの生成がなんかおかしい気がする。
TPS DemoをWebGL対応にする
TPS Demoはロード時のみスレッドを使用している。というわけで、スレッドを使わないようにしないとin-gameに進めない。
func _on_play_pressed():
main.hide()
loading.show()
var path = "res://level/level.tscn"
if ResourceLoader.has_cached(path):
emit_signal("replace_main_scene", ResourceLoader.load(path))
else:
res_loader = ResourceLoader.load_interactive(path)
loading_thread = Thread.new()
#warning-ignore:return_value_discarded
loading_thread.start(self, "interactive_load", res_loader)
↓
func _on_play_pressed():
main.hide()
loading.show()
var path = "res://level/level.tscn"
emit_signal("replace_main_scene", ResourceLoader.load(path))
stat
してきたファイルをRegular fileに見せる
Godotは何故かファイルがRegular fileでないと読んでくれないので、ファイルを stat
した際に REG
ビットを立てておく必要がある。
- Godotソースの該当箇所: https://github.com/godotengine/godot/blob/2abe996414b8b551e69e29461de3ff1bcaf5a28f/drivers/unix/file_access_unix.cpp#L106-L107
オープンソースのエンジンだとソースコードから原因を追えるから簡単で良いね。。
WebGL側の対応
WebGL側も多少修正する必要があった。
getVertexAttrib, getVertexAttribPointer
blitOffscreenFramebuffer
でコンテキストの保存/復帰を行っているため必要になってしまうようだ。 ...まぁ正確な値は要らないので今回は適当にstubした。
uniform2iv に異常なuniform locationが渡される
たぶんシェーダが正常にビルドできていないケースがあるな。。エラーを無視するようにした。
Unityはシェーダのビルドに失敗するとコンソールにエラーを出力するが、Godotは無いんだろうか。