【问题标题】:What are the latest versions of OpenGL ES supported by emscripten, and how do I use them?emscripten 支持哪些最新版本的 OpenGL ES,我该如何使用它们?
【发布时间】:2022-01-25 16:34:28
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: opengl-es webgl emscripten webgl2


    【解决方案1】:

    首先要意识到,体面的浏览器目前只实现了 WebGL 1.0(基于 OpenGL ES 2.0)和 WebGL 2.0(基于 OpenGL ES 3.0)。因此 Emscripten SDK 可能只实现 WebGL 2.0 + 扩展提供的功能,不幸的是,Compute Shaders 在 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。

    我认为documentation 或多或少清楚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 模块所取代——但在遥远的未来。同样也可以为 Emscripten SDK 带来 OpenGL ES 3.1/3.2 功能 - 至少在理论上,如果有人仍然对此感兴趣的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2011-08-05
      • 2023-04-11
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多