Start · Sprachen · JavaScript · Referenz · OES_draw_buffers_indexed

OES_draw_buffers_indexed

Schnittstelle

WebGL2-Erweiterung, mit der sich Blending, Blend-Gleichung, Blend-Funktion und Farbmaske für jeden Draw-Buffer eines Framebuffers einzeln festlegen lassen.

seit JavaScript WebGL2-Erweiterung – Chromium-Browser und Firefox; Kategorie: webapi

Signatur

interface OES_draw_buffers_indexed

Beschreibung

OES_draw_buffers_indexed ist eine Erweiterung der WebGL-API und steht nur in WebGL2-Kontexten zur Verfügung. Wer mit gl.drawBuffers() in mehrere Render-Targets (MRT) schreibt, hat ohne diese Erweiterung nur einen gemeinsamen Blending-Zustand (gl.enable(gl.BLEND), gl.blendFunc(), gl.blendEquation()) und eine gemeinsame Farbmaske (gl.colorMask()) für alle Farbanhänge. Mit der Erweiterung lassen sich diese Zustände für jeden Draw-Buffer einzeln einstellen.

Nützlich ist das vor allem beim Deferred Shading und bei Order-Independent Transparency (z. B. Weighted Blended OIT). Dort wird etwa ein Anhang additiv gemischt, ein zweiter multiplikativ und ein dritter (Normalen oder Objekt-IDs im G-Buffer) gar nicht. Ohne die Erweiterung wären dafür mehrere Render-Durchgänge nötig.

Das Erweiterungsobjekt erhält man mit gl.getExtension("OES_draw_buffers_indexed"). Es definiert keine eigenen Konstanten, sondern nur Methoden:

  • enableiOES(target, index) / disableiOES(target, index): schaltet gl.BLEND für einen einzelnen Draw-Buffer ein oder aus.
  • blendEquationiOES(buf, mode) und blendEquationSeparateiOES(buf, modeRGB, modeAlpha): legen die Blend-Gleichung pro Buffer fest.
  • blendFunciOES(buf, src, dst) und blendFuncSeparateiOES(buf, srcRGB, dstRGB, srcAlpha, dstAlpha): legen die Blend-Faktoren pro Buffer fest.
  • colorMaskiOES(buf, r, g, b, a): legt fest, welche Farbkanäle in einen bestimmten Buffer geschrieben werden.

Den aktuellen Zustand pro Buffer fragt man mit gl.getIndexedParameter() ab, z. B. mit gl.BLEND_EQUATION_RGB, gl.BLEND_SRC_RGB, gl.BLEND_DST_ALPHA oder gl.COLOR_WRITEMASK.

Parameter

Name Typ Default Beschreibung
$target Pflicht GLenum Nur bei enableiOES()/disableiOES(): muss gl.BLEND sein, sonst gibt es INVALID_ENUM.
$index / buf Pflicht GLuint Index des Draw-Buffers (entspricht gl.COLOR_ATTACHMENTi in der Liste von gl.drawBuffers()). Gültiger Bereich: 0 bis gl.MAX_DRAW_BUFFERS - 1, sonst gibt es INVALID_VALUE.
$mode / modeRGB / modeAlpha Pflicht GLenum Blend-Gleichung: gl.FUNC_ADD, gl.FUNC_SUBTRACT, gl.FUNC_REVERSE_SUBTRACT, gl.MIN oder gl.MAX.
$src / dst / srcRGB / dstRGB / srcAlpha / dstAlpha Pflicht GLenum Blend-Faktoren wie bei gl.blendFunc(), z. B. gl.ONE, gl.ZERO, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA.
$r, g, b, a Pflicht GLboolean Nur bei colorMaskiOES(): legt fest, ob der jeweilige Kanal in den Buffer geschrieben wird.