不支持OES_纹理_浮动,但WebGL2可用

不支持OES_纹理_浮动,但WebGL2可用,webgl,webgl-extensions,Webgl,Webgl Extensions,我惊讶地发现,我的Android手机不支持OES_texture_float扩展,但完全支持WebGL2,它的基线是浮动纹理功能。除了在着色器中模拟浮动纹理或将所有内容迁移到WebGL2(这将需要大量重写所有内容以支持这两个选项)之外,是什么原因导致WebGL1中缺少对它们的支持 编辑:答案似乎涵盖了这个问题的一部分,但奇怪的是,他们希望我们转向WebGL2,这需要大量工作来保持向后兼容性。如果您坚持使用WebGL1功能,使用WebGL2并不需要很多工作。您仍然可以使用GLSL 1.0,否则大多

我惊讶地发现,我的Android手机不支持OES_texture_float扩展,但完全支持WebGL2,它的基线是浮动纹理功能。除了在着色器中模拟浮动纹理或将所有内容迁移到WebGL2(这将需要大量重写所有内容以支持这两个选项)之外,是什么原因导致WebGL1中缺少对它们的支持


编辑:答案似乎涵盖了这个问题的一部分,但奇怪的是,他们希望我们转向WebGL2,这需要大量工作来保持向后兼容性。

如果您坚持使用WebGL1功能,使用WebGL2并不需要很多工作。您仍然可以使用GLSL 1.0,否则大多数情况都是一样的。您可以轻松地在WebGL1上下文上启用所有可用的扩展,并使用WebGL2 api显示它们,因此我猜这相当简单。基本上获取webgl2上下文,如果获取webgl1上下文失败,请启用所有扩展并添加到webgl1上下文,如链接的示例所示。然后将WebGL2 API用于WebGL1中的任何扩展,如果您使用的唯一扩展是OES_texture_float,那么您需要做的一件不同的事情就是浮动纹理本身,在WebGL2中,您将
RGBA32F
作为内部格式传递,在WebGL1中,您传递
RGBA
,它是从类型推断出来的。这似乎是一个非常简单的检查,在init time
const floatInternalFormat=isWebGL2?gl.RGBA32F:gl.RGBA
啊,我记得当我尝试使用WebGL2制作一些东西时,有很多东西我必须更改,但可能是因为我想使用更多功能。在任何一种情况下,我都希望纹理阵列支持回退到地图集,因为这是我的应用程序可以真正受益的东西。如果你坚持使用WebGL1功能,使用WebGL2并不是很多工作。您仍然可以使用GLSL 1.0,否则大多数情况都是一样的。您可以轻松地在WebGL1上下文上启用所有可用的扩展,并使用WebGL2 api显示它们,因此我猜这相当简单。基本上获取webgl2上下文,如果获取webgl1上下文失败,请启用所有扩展并添加到webgl1上下文,如链接的示例所示。然后将WebGL2 API用于WebGL1中的任何扩展,如果您使用的唯一扩展是OES_texture_float,那么您需要做的一件不同的事情就是浮动纹理本身,在WebGL2中,您将
RGBA32F
作为内部格式传递,在WebGL1中,您传递
RGBA
,它是从类型推断出来的。这似乎是一个非常简单的检查,在init time
const floatInternalFormat=isWebGL2?gl.RGBA32F:gl.RGBA
啊,我记得当我尝试使用WebGL2制作一些东西时,有很多东西我必须更改,但可能是因为我想使用更多功能。在任何一种情况下,我都希望纹理阵列支持回退到地图集,因为这是我的应用程序可以真正受益的东西。