WebGL 是否支持 32 位以上的颜色格式?
Does WebGL support color formats with more than 32bit?
我似乎找不到任何超过 32 位的纹理格式 (GL.RGBA)。这是 WebGL 不支持的吗?
32 位是指每个元素本身是 32 位,或者每个元素是 8 位,总之它们是 32 位(8 位红色,8 位绿色,8 位蓝色,8 位 alpha)?
在任何情况下,WebGL 中都有 32 位浮点格式的扩展,因此 32 位红色、32 位绿色、32 位蓝色、32 位 alpha 是 128 位纹理格式。
这些扩展是
- OES_texture_float。让我们为每个通道创建 32 位浮点纹理
- OES_texture_half_float 让我们为每个通道创建 16 位半浮点纹理
- OES_texture_float_linear。让我们在使用浮点纹理时将过滤设置为
gl.NEAREST
以外的值
- OES_texture_half_float_linear。让我们在使用半浮点纹理
时将过滤设置为 gl.NEAREST
以外的值
要使用其中的任何一个,您必须像
中那样启用每个
var ext = gl.getExtension("OES_texture_float");
if (!ext) {
alertNoFloatSupportOrFallbackToOtherOption();
}
几乎所有桌面 GPU 都支持所有 4 个。移动设备通常只支持半格式,有时不支持过滤。
此外,大多数移动设备不允许呈现浮动或半浮动纹理,而台式机则可以。要检查它们是否存在,请以所需格式创建纹理,将其附加到帧缓冲区并调用 gl.checkFramebufferStatus
。如果它 returns gl.FRAMEBUFFER_COMPLETE
那么你可以渲染到纹理。否则只能作为来源使用。
我似乎找不到任何超过 32 位的纹理格式 (GL.RGBA)。这是 WebGL 不支持的吗?
32 位是指每个元素本身是 32 位,或者每个元素是 8 位,总之它们是 32 位(8 位红色,8 位绿色,8 位蓝色,8 位 alpha)?
在任何情况下,WebGL 中都有 32 位浮点格式的扩展,因此 32 位红色、32 位绿色、32 位蓝色、32 位 alpha 是 128 位纹理格式。
这些扩展是
- OES_texture_float。让我们为每个通道创建 32 位浮点纹理
- OES_texture_half_float 让我们为每个通道创建 16 位半浮点纹理
- OES_texture_float_linear。让我们在使用浮点纹理时将过滤设置为
gl.NEAREST
以外的值 - OES_texture_half_float_linear。让我们在使用半浮点纹理 时将过滤设置为
gl.NEAREST
以外的值
要使用其中的任何一个,您必须像
中那样启用每个var ext = gl.getExtension("OES_texture_float");
if (!ext) {
alertNoFloatSupportOrFallbackToOtherOption();
}
几乎所有桌面 GPU 都支持所有 4 个。移动设备通常只支持半格式,有时不支持过滤。
此外,大多数移动设备不允许呈现浮动或半浮动纹理,而台式机则可以。要检查它们是否存在,请以所需格式创建纹理,将其附加到帧缓冲区并调用 gl.checkFramebufferStatus
。如果它 returns gl.FRAMEBUFFER_COMPLETE
那么你可以渲染到纹理。否则只能作为来源使用。