Signatur
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): schaltetgl.BLENDfür einen einzelnen Draw-Buffer ein oder aus.blendEquationiOES(buf, mode)undblendEquationSeparateiOES(buf, modeRGB, modeAlpha): legen die Blend-Gleichung pro Buffer fest.blendFunciOES(buf, src, dst)undblendFuncSeparateiOES(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. |