juj/wasm_webgpu

System headers for interfacing WebGPU from C programs compiled via Emscripten to WebAssembly

概述

wasm_webgpu 是一个小型开源库,可让使用 Emscripten 编译为 WebAssembly 的 C/C++ 程序与浏览器的 WebGPU 图形 API 进行通信。它提供了浏览器端 WebGPU JavaScript API 的薄型 1:1 映射,因此开发人员可以用原生 C/C++ 编写 GPU 加速的渲染代码,并在浏览器中运行(或实验性地通过浏览器外的 Dawn 运行)。

功能

功能 对您意味着什么
头文件 + 实现文件 (lib_webgpu.*) 将这些文件放入任何 Emscripten 项目,包含 lib_webgpu.h,即可获得诸如 wgpu_adapter_request_device_sync() 之类的 C 风格包装器,它们会调用底层的 WebGPU JS 函数。
精确的 API 映射 GPUAdapter 等类型变成 WGpuAdapter;函数保持相同的形式(wgpu_canvas_context_configure)。这使得规范成为编写 C 代码时可靠的参考。
性能优先 绑定层刻意保持低级,避免额外的 JavaScript 对象。它与 Closure Compiler 配合,实现积极压缩,并力求将运行时开销和生成的代码大小降至最低。
自定义辅助函数 读写映射缓冲区和从 URL 加载图像的函数简化了在 JS 和 Wasm 之间传递很麻烦的常见 WebGPU 任务。
JSPI(同步 API)支持 可选标志(-sJSPI)公开了通常异步的 WebGPU 调用的同步版本,便于快速原型或测试工具。
OffscreenCanvas 与 Worker 提供 API 可从 WebWorker 或 pthread 创建和控制 OffscreenCanvas,从而支持在后台线程上渲染。
内存模型灵活性 适用于 Emscripten 的 2 GB、4 GB 和 Wasm64 内存配置,因此您可以根据需要面向大数据集。
Dawn 后端(实验性) 单独的源文件(lib_webgpu_dawn.cpp)允许您在浏览器之外针对 WebGPU 的 Dawn 实现进行编译,但这并非主要焦点。

适用人群

  • 游戏或图形引擎开发人员:希望将核心渲染代码保留在 C/C++ 中,并在不重写为 JavaScript 或 WebGL 的情况下发布到 Web。
  • 研究代码库:已在本机 C++ 中使用 GPU 计算,并需要快速在浏览器中运行以进行演示或复现。
  • 工具作者:构建基于 WebGPU 的可视化器、编辑器或测试套件,这些工具可从同步 API 和最小代码量中受益。

快速入门(摘要)

  1. 安装 Emscripten。
  2. 克隆仓库,将 lib/ 文件复制到项目中,并将库添加到 Emscripten 链接步骤(--js-library …)。
  3. 使用 samples/ 中提供的 CMakeLists 作为模板。
  4. 使用 emcmake cmake … && ninja 构建,然后用 emrun . 提供生成的 HTML。

局限 / 注意事项

  • 该库精确反映当前 WebGPU 规范;规范演进时可能出现破坏性更改,并且不保证 ABI 稳定性。
  • Dawn 后端已过时,且未积极维护。
  • 它仅是一个绑定层——您仍然需要编写实际的渲染逻辑;提供的示例有意保持简洁,并不花哨。
  • 使用 JSPI 可能会引入意外的事件循环交互,因此建议对生产级代码进行分析。

总结

wasm_webgpu 是一个真正的低级桥接层,使 WebGPU 可从编译为 WebAssembly 的 C/C++ 访问。它面向关心性能、代码大小以及贴近官方 WebGPU 规范的开发人员,而不是那些寻找高级图形引擎的人。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目