結局前回 Emscripten 版がうまく動いてなかったのは、試行錯誤最中に間違えて SDL_Init()を呼ぶコードをコメントアウトしてしまっていたためだった。しょうもない…入れたら割と動いてくれるようになった。
Emscripten 版とネイティブ版は割とソースコード共通でいけるんだけど、一部違うところがある。
- OpenGL のバージョン。ネイティブ版は 3.3 core profile, Emscripten 版は 3.0 ES profile。それに伴ってシェーダの一行目に書くバージョンも変わる。
- メインループの回し方。emscripten_set_main_loop_arg()などの関数でコールバックとして呼ばれるようにしないといけない
- ファイルの読み方。一旦そのままだと無理そうだなということで、フォントファイルを使った文字描画処理は外してある
いままでは、たとえばテトリスを実装して「やった~遊んでもらうぞ~」と思っても相手の人が Windows PC を持っていない場合動かせなかったのだけど、Emscripten ならブラウザ上で動くので、より遊んでもらいやすいということになる。雑に作ったゲームは雑に遊んでほしいので、配布方法も手軽であってほしい。たとえば itch.io に埋め込むような用途も可能。
ちょっと話がそれるけど、ちょうど gs2 というサービスが「売上高 1000 万以下なら無料」という大盤振る舞いをするというニュースが出てた。こういうバックエンドサービス使えばお手軽にクラウドセーブ機能を導入できていいんじゃないかなーと思った。ただ Emscripten 用 C++は公式 SDK の対象外な気がするので、移植大変なんじゃないかなー。ちょっと試してみたい。