WebGL是否支持超过32位的颜色格式



我似乎找不到任何超过32位的纹理格式(GL.RGBA)。WebGL不支持这一点吗?

您所说的32位是指每个元素本身是32位,还是每个元素是8位,加起来是32位(8位红色,8位绿色,8位蓝色,8位阿尔法)?

在任何情况下,WebGL1中都有32位浮点格式的扩展,因此32位红色、32位绿色、32位蓝色、32位alpha是128位纹理格式。

这些扩展是

  • OES_texture_float。让我们为每个通道创建32位浮点纹理
  • OES_texture_halffloat让您为每个通道创建16位半浮点纹理
  • OES_texture_float_Lineral。让我们在使用浮点纹理时将过滤设置为gl.NEAREST以外的值
  • OES_texture_hal_float_Lineral。让我们在使用半浮点纹理时将过滤设置为gl.NEAREST以外的值

要使用其中任何一个,您必须像在中一样启用每个

var ext = gl.getExtension("OES_texture_float");
if (!ext) {
alertNoFloatSupportOrFallbackToOtherOption();
}

几乎所有的桌面GPU都支持所有4个。移动设备通常只支持半格式,有时不支持过滤。

在WebGL2中,这两种格式都是自动存在的,但过滤它们(OES_texture_float_linearOES_texture_half_float_linear)的能力仍然是可选的。

此外,许多移动设备不允许像笔记本电脑/台式机那样渲染浮动或半浮动纹理。要检查它们是否允许渲染,请尝试在WebGL1上启用WEBGL_color_buffer_float或在WebGL2上启用EXT_color_buffer_float

另一个相关的可选功能是是否可以启用与浮点纹理的混合。该扩展名为EXT_float_blend。它通常在笔记本电脑/台式电脑上可用,但在移动设备上不可用,尽管自从苹果将其WebGL实现切换为基于ANGLE/Metal以来,移动设备(至少自iPhone 6S以来的iOS)允许渲染到32位浮动纹理。

最新更新