bgfx Emscripten アプリケーションの構築

この投稿では、Emscripten を使用して Web (WebAssembly) 用の bgfx アプリケーションを構築する方法について説明します。

インストール プラットフォームは、Arch Linux などの Linux x86-64 です。

まず、Emscripten バージョン 3.1.51 をインストールしましょう。そうでないと、Emscripten の最新バージョンではダイナミック ライブラリのタイプが変更されているため、成功しません。詳細はこちらでご覧いただけます:
https://github.com/bkaradzic/bgfx/Discussions/3266

これは次のように行われます:


git clone https://github.com/emscripten-core/emsdk.git



cd emsdk



./emsdk install 3.1.51



./emsdk activate 3.1.51



source ./emsdk_env.sh



WebAssembly 用に bgfx をアセンブルしましょう –エムスクリプト:


mkdir bgfx-build-test



cd bgfx-build-test



git clone https://github.com/bkaradzic/bx.git



git clone https://github.com/bkaradzic/bimg.git



git clone https://github.com/bkaradzic/bgfx.git



cd bgfx



emmake make wasm-debug



その結果、.build フォルダーには .bc 拡張子の付いたビットコード ファイルが作成されます。これは、bgfx アプリケーションにリンクする必要があります。
bgfx.bc、bx.bc、bimg.bc である必要があります。アセンブリが異なると、アセンブリのタイプ (リリース/デバッグ) に応じて、これらのファイルの名前も異なります。

.bc ファイルを含む CMakeLists.txt ファイルへのリンク (たとえば、bgfx-experiments プロジェクトのファイルへの絶対パス) を追加します。


target_link_libraries(${PROJECT_NAME} SDL2 GL /home/demensdeum_stream/Sources/bgfx-build/bgfx/.build/wasm/bin/bgfxDebug.bc /home/demensdeum_stream/Sources/bgfx-build/bgfx/.build/wasm/bin/bxDebug.bc /home/demensdeum_stream/Sources/bgfx-build/bgfx/.build/wasm/bin/bimgDebug.bc)



次に、プラットフォーム データのネイティブ ウィンドウ ハンドルを bgfx 初期化に変更します。


bgfx::PlatformData platformData{};



platformData.context = NULL;



platformData.backBuffer = NULL;



platformData.backBufferDS = NULL;



platformData.nwh = (void*)"#canvas";



レンダリング タイプを OpenGL に変更する必要もあります。


bgfx::Init init;



init.type = bgfx::RendererType::OpenGL;







init.resolution.width = screenWidth;



init.resolution.height = screenHeight;



init.resolution.reset = BGFX_RESET_VSYNC;



init.platformData = platformData;







if (!bgfx::init(init))



{



    throw std::runtime_error("Failed to initialize bgfx");



}



GLSL シェーダを 120 に再コンパイルします:


shaderc -f "VertexShader.vs" -o "VertexShader.glsl" --type "v" -p "120"



shaderc -f "FragmentShader.fs" -o "FragmentShader.glsl" --type "f" -p "120"



はい、ただし、.glsl ファイルは –preload-file: として CMakeLists.txt に追加する必要があります:


set(CMAKE_CXX_FLAGS ... <Остальная часть>



--preload-file VertexShader.glsl \



--preload-file FragmentShader.glsl \



アプリケーションのメイン レンダー ループを、emscripten_set_main_loop による while 関数呼び出しに置き換える作業が残ります。

これについてはここで読むことができます:
https ://demensdeum.com/blog/ru/2017/03/29/porting-sdl-c-game-to-html5-emscripten/

次に、通常どおり Emscripten プロジェクトをアセンブルします。すべてが機能するはずです。
興味深い – Emscripten 3.1.51 ビルドには OpenAL (または私だけ) が欠けているようです。

bgfx と Emscripten で正しくコンパイルされるプロジェクトのソース コード:
https://github.com/demensdeum/ bgfx-experiments/tree/main/2-emscripten-build

ソース

https://github.com/bkaradzic/bgfx/Discussions/3266
https://bkaradzic.github.io/bgfx/build.html
https://emscripten.org/docs/getting_started/downloads.html
https ://demensdeum.com/blog/ru/2017/03/29/porting-sdl-c-game-to-html5-emscripten/
https://llvm.org/docs/BitCodeFormat.html

Leave a Comment

Your email address will not be published. Required fields are marked *