Three.js 可以在没有某些 WebGL 扩展的情况下准确呈现吗?

Can Three.js render accurately without certain WebGL Extensions?

在三星 OS 的最新版本中(我正在使用 Galaxy S6 进行测试)Chrome 禁用了 WebGL。原因已记录在案 here。我 运行 Chrome 没有使用此标志的黑名单:

--ignore-gpu-blacklist

这些是 Three.js 向我吐出的错误。我很想知道如果这些 OES 扩展不存在,Three.js 是否可以成功 run/render:

如果是这样,我将如何着手改变 Three.js 以便它可以工作?如果没有,我可以在哪里进一步阅读这些扩展,以便更好地了解它们的工作原理?

所有这五个扩展都通过以下方式处理纹理:

前四个扩展支持浮点纹理,即其组件的纹理 是浮点值。

  • OES_texture_float表示最近邻的32位浮点纹理 过滤。
  • OES_texture_float_linear表示带线性的32位浮点纹理 过滤。
  • OES_texture_half_float表示最近邻的16位浮点纹理 过滤。
  • OES_texture_half_float_linear表示带线性的16位浮点纹理 过滤。

参见texture_floattexture_float_linear, 和 ARB_texture_floatOES_texture_float_linear 基于) 在 OpenGL ES 注册表中。

Three.js checks for these extensions(并在必要时输出错误信息)按顺序 启用它们的功能。


最后一个扩展(称为EXT_texture_filter_anisotropic)提供了对各向异性过滤的支持,可以提供更好的质量 过滤某些类型的纹理时。

注册表:https://www.khronos.org/registry/gles/extensions/EXT/texture_filter_anisotropic.txt

This page 包括此过滤的可视化。

这里也是,Three.jschecks for this extension看看能不能用


对于所有这些扩展,这取决于您的应用程序 "go about altering Three.js" 是否有意义。例如, 您的应用程序需要 浮点纹理来实现某些效果吗? (您可以检查 通过检查您是否使用 THREE.HalfFloatTypeTHREE.FloatType。)

虽然 Three.JS 检查这些扩展,但它本身并不依赖于这些扩展才能工作,并且只有至少一个示例 需要 使用它们。因此,问题与其说是修改Three.js,不如说是修改您的应用程序。尽管如此,here, in WebGLExtensions.js 是生成警告的地方。