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 擴充套件規範

瀏覽器相容性

另見