EXT_float_blend 扩展

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

The WebGL API's EXT_float_blend 扩展允许使用 32 位浮点组件进行混合和绘制缓冲区。

可以使用 WebGLRenderingContext.getExtension() 方法来访问 WebGL 扩展。有关更多信息,请参阅 WebGL 教程中的 使用扩展

注意:此扩展同时适用于 WebGL1WebGL2 上下文。但是,要使用它,您需要通过启用 WEBGL_color_buffer_float (用于 WebGL1) 或 EXT_color_buffer_float (用于 WebGL2) 来启用 32 位浮点绘制缓冲区的用法。这样做会自动启用 EXT_float_blend,仅当 EXT_float_blend 也受支持时。对 EXT_color_buffer_float 的支持并不意味着对 EXT_float_blend 的支持。

启用此扩展后,调用 drawArrays()drawElements() 时启用混合和使用具有 32 位浮点组件的绘制缓冲区将不再导致 INVALID_OPERATION 错误。

用法说明

在支持 EXT_float_blend 扩展的设备上,当启用 EXT_color_buffer_floatOES_texture_floatWEBGL_color_buffer_float 中的任何一个或多个时,它会自动隐式启用。这确保了在 WebGL 暴露 EXT_float_blend 之前写入的内容能够按预期工作。

示例

js
const gl = canvas.getContext("webgl2");

// enable necessary extensions
gl.getExtension("EXT_color_buffer_float");
gl.getExtension("EXT_float_blend");

const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);

// use floating point format
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, gl.FLOAT, null);

const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(
  gl.FRAMEBUFFER,
  gl.COLOR_ATTACHMENT0,
  gl.TEXTURE_2D,
  tex,
  0,
);

// enable blending
gl.enable(gl.BLEND);

gl.drawArrays(gl.POINTS, 0, 1);
// won't throw gl.INVALID_OPERATION with the extension enabled

规范

规范
WebGL EXT_float_blend 扩展规范

浏览器兼容性

另见