emscripten 支持哪些最新版本的 OpenGL ES?如何使用它们?

trb*_*abb 5 opengl-es webgl emscripten webgl2

我正在尝试使用一些 ES 3.1 功能,目前尚不清楚是否支持:

我注意到 emscripten 存储库中有一个 OpenGL ES 3.1 标头,它定义了我正在寻找的一些函数,我可以将它们成功地包含在我的项目中。但是,当我尝试链接时它们不可用:

error: undefined symbol: glDispatchCompute (referenced by top-level compiled C/C++ code)
warning: _glDispatchCompute may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Run Code Online (Sandbox Code Playgroud)

文档说,如果我指定(我正在这样做),支持 OpenGL ES3 。-s FULL_ES3=1

既然有它的标题,那么这个功能可用吗?如果是这样,我如何启用对其的支持?(例如,是否需要手动加载扩展或在 emscripten 中启用实验支持?)

gkv*_*311 5

首先要认识到的是,像样的浏览器目前仅实现 WebGL 1.0(基于 OpenGL ES 2.0)和 WebGL 2.0(基于 OpenGL ES 3.0)。因此 Emscripten SDK 可能只实现 WebGL 2.0 + 扩展提供的功能,不幸的是,计算着色器在 WebGL 中没有以任何方式提供(并且将来没有更多计划添加此功能)。

顺便说一句,WebGL 2.0 支持仅在今年(2021 年)才添加到 Safari 15(iOS 15),因此即使 OpenGL ES 2.0 也无法在所有设备上运行。

我注意到 emscripten 中有一个 OpenGL ES 3.1 标头

存在额外<GLES3\gl3*.h>标头并不是因为 Emscripten 实现了所有这些标头,而是因为这是分发 OpenGL ES 3.x 标头的常见方法,现有应用程序可能依赖于在运行时有条件地加载/使用 OpenGL ES 3.x 函数。可用的。

文档说,如果我指定 -s FULL_ES3=1 (我正在这样做),则支持 OpenGL ES3。

我认为文档或多或少清楚地说明了FULL_ES3=1添加的内容:

要启用 OpenGL ES 3.0 模拟,请在链接项目的最终可执行文件 (.js/.html) 时指定 emcc 选项 -s FULL_ES3=1。这增加了将内存块映射到客户端内存的模拟。

这里没有关于 OpenGL ES 3.1 的任何信息,也没有理由期待 Emscripten 带来奇迹,因为我几乎无法想象一种合理的硬件加速方式来模拟 OpenGL ES 3.0 之上的计算着色器等东西。软件模拟对于大多数应用程序来说肯定没有用处。

WebGPU 1.0承诺将于 2022 年中期出现,比 WebGL 2.0 功能更强大。因此, WebGPU开发人员已经看到,浏览器中的本机 WebGL 2.0 实现可能会被在 WebGPU 之上实现这一遗留 API 的 WebAssembly 模块所取代 - 但在遥远的未来。同样也可以将 OpenGL ES 3.1/3.2 功能引入 Emscripten SDK - 至少在理论上,如果有人仍然有兴趣从事这方面的工作的话。