Open4

WebGL-Native: Godotのサポート

okuokuokuoku

prev: https://zenn.dev/okuoku/scraps/53012e52ba545c
next: https://zenn.dev/okuoku/scraps/8bfeea6f22c418

Godotのサポート

とりあえずUnityと並んでWebGLエクスポートのあるエンジンということでGodotもサポートしたい。

... 今のところ描画が変だが、これは圧縮テクスチャをサポートしていない & Unityと違ってfallbackしてくれないことによる。

↓ (気合でテクスチャを圧縮解除して再importした)

動作は紙芝居。。あとシャドウマップの生成がなんかおかしい気がする。

okuokuokuoku

TPS DemoをWebGL対応にする

https://godotengine.org/asset-library/asset/678

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))
okuokuokuoku

stat してきたファイルをRegular fileに見せる

Godotは何故かファイルがRegular fileでないと読んでくれないので、ファイルを stat した際に REG ビットを立てておく必要がある。

オープンソースのエンジンだとソースコードから原因を追えるから簡単で良いね。。

https://github.com/okuoku/cwgl-proto/commit/05db4390aa6ff2def2806ceb9d597d0eb2a32f6e

okuokuokuoku

WebGL側の対応

WebGL側も多少修正する必要があった。

getVertexAttrib, getVertexAttribPointer

blitOffscreenFramebuffer でコンテキストの保存/復帰を行っているため必要になってしまうようだ。 ...まぁ正確な値は要らないので今回は適当にstubした。

uniform2iv に異常なuniform locationが渡される

たぶんシェーダが正常にビルドできていないケースがあるな。。エラーを無視するようにした。

Unityはシェーダのビルドに失敗するとコンソールにエラーを出力するが、Godotは無いんだろうか。