bgfx Emscripten 应用程序的编译

在本说明中,我将描述通过Emscripten组装Web(WebAssembly)的BGFX应用程序的方法。

安装平台是Linux X86-64,例如Arch Linux。

首先,我们将安装EMSCRIPEN版本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 -Emscripten:

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;在不同的汇编中,这些文件的一个不同名称,具体取决于汇编的类型(发布/调试)

添加到cmakelists.txt中使用.bc文件的文件,例如,从BGFX实验项目中的文件的绝对方法:

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");
}

十字架 – 120岁以下的杂交GLSL着色器:

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

欧盟但.glsl文件必须添加到cmakelists.txt as -preload-file:

set(CMAKE_CXX_FLAGS ... <Остальная часть>
--preload-file VertexShader.glsl \
--preload-file FragmentShader.glsl \

还需要用emscripten_setn_main_loop来替换应用程序中渲染的主要周期。

您可以在此处阅读有关此信息:
https://demensdeum.com/blog/ru/2017/03/29/porting-sdl-c-game-to-html5-emscripten/
接下来,为通常的一个项目收集您的emscripten项目,一切都应该起作用。
有趣的是 – 在大会上,emscripten 3.1.51似乎没有开放式(或仅是我的)。

与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