我似乎找不到任何超过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_linear
和OES_texture_half_float_linear
)的能力仍然是可选的。
此外,许多移动设备不允许像笔记本电脑/台式机那样渲染浮动或半浮动纹理。要检查它们是否允许渲染,请尝试在WebGL1上启用WEBGL_color_buffer_float
或在WebGL2上启用EXT_color_buffer_float
。
另一个相关的可选功能是是否可以启用与浮点纹理的混合。该扩展名为EXT_float_blend
。它通常在笔记本电脑/台式电脑上可用,但在移动设备上不可用,尽管自从苹果将其WebGL实现切换为基于ANGLE/Metal以来,移动设备(至少自iPhone 6S以来的iOS)允许渲染到32位浮动纹理。