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 和最小代码量中受益。
快速入门(摘要)
- 安装 Emscripten。
- 克隆仓库,将
lib/文件复制到项目中,并将库添加到 Emscripten 链接步骤(--js-library …)。 - 使用
samples/中提供的 CMakeLists 作为模板。 - 使用
emcmake cmake … && ninja构建,然后用emrun .提供生成的 HTML。
局限 / 注意事项
- 该库精确反映当前 WebGPU 规范;规范演进时可能出现破坏性更改,并且不保证 ABI 稳定性。
- Dawn 后端已过时,且未积极维护。
- 它仅是一个绑定层——您仍然需要编写实际的渲染逻辑;提供的示例有意保持简洁,并不花哨。
- 使用 JSPI 可能会引入意外的事件循环交互,因此建议对生产级代码进行分析。
总结
wasm_webgpu 是一个真正的低级桥接层,使 WebGPU 可从编译为 WebAssembly 的 C/C++ 访问。它面向关心性能、代码大小以及贴近官方 WebGPU 规范的开发人员,而不是那些寻找高级图形引擎的人。
相关
- 项目
- 项目
- 项目
- 项目
- 项目