Signatur
Beschreibung
clearColor() legt die Löschfarbe des WebGL-Kontexts fest. Die Methode löscht selbst nichts. Sie setzt nur einen Zustandswert, den der nächste Aufruf von gl.clear(gl.COLOR_BUFFER_BIT) verwendet. Die Farbe bleibt gültig, bis sie erneut gesetzt wird. Deshalb reicht es, sie einmal bei der Initialisierung zu setzen, wenn sie sich nicht ändert.
Die Farbwerte werden als Gleitkommazahlen im Bereich 0.0 bis 1.0 übergeben, nicht als 0–255 wie bei CSS. Werte außerhalb dieses Bereichs werden in WebGL 1 auf [0, 1] begrenzt. Der Standardwert ist (0, 0, 0, 0), also transparentes Schwarz.
Typischerweise ruft man clearColor() und clear() am Anfang jedes Frames in der Render-Schleife auf. So wird der Inhalt des vorherigen Bildes entfernt, bevor neu gezeichnet wird. Der aktuelle Wert lässt sich mit gl.getParameter(gl.COLOR_CLEAR_VALUE) auslesen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $red Pflicht | number | 0 | Rotanteil der Löschfarbe, 0.0–1.0. |
| $green Pflicht | number | 0 | Grünanteil der Löschfarbe, 0.0–1.0. |
| $blue Pflicht | number | 0 | Blauanteil der Löschfarbe, 0.0–1.0. |
| $alpha Pflicht | number | 0 | Alpha-Wert (Deckkraft) der Löschfarbe, 0.0 (transparent) bis 1.0 (deckend). |
Rückgabewert
undefined).Beispiele
Canvas mit Farbe füllen
const canvas = document.querySelector('#glcanvas');
const gl = canvas.getContext('webgl');
if (!gl) {
throw new Error('WebGL wird nicht unterstützt');
}
// Dunkles Blaugrau, voll deckend
gl.clearColor(0.1, 0.15, 0.2, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
Aktuelle Löschfarbe auslesen
const gl = document.createElement('canvas').getContext('webgl');
gl.clearColor(1, 0.5, 0, 1);
const farbe = gl.getParameter(gl.COLOR_CLEAR_VALUE);
console.log(farbe);
Render-Schleife mit animierter Hintergrundfarbe
const gl = document.querySelector('#glcanvas').getContext('webgl');
const render = (zeit) => {
const t = zeit / 1000;
const r = (Math.sin(t) + 1) / 2; // pendelt zwischen 0 und 1
gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
gl.clearColor(r, 0.2, 1 - r, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// ... hier Geometrie zeichnen ...
requestAnimationFrame(render);
};
requestAnimationFrame(render);
Hex-Farbe in clearColor-Werte umrechnen
const hexZuGl = (hex) => {
const n = parseInt(hex.replace('#', ''), 16);
return [(n >> 16 & 255) / 255, (n >> 8 & 255) / 255, (n & 255) / 255];
};
const gl = document.createElement('canvas').getContext('webgl');
const [r, g, b] = hexZuGl('#3366cc');
gl.clearColor(r, g, b, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
console.log([r, g, b].map((v) => v.toFixed(2)));
// Wichtig · Fallstricke
- Häufiger Fehler: Farbwerte im Bereich 0–255 statt 0–1 übergeben.
gl.clearColor(255, 0, 0, 1)funktioniert zwar zufällig, weil der Wert auf 1 begrenzt wird, aber Zwischenwerte wie128ergeben ebenfalls volle Intensität. clearColor()allein zeigt keine Wirkung. Erstgl.clear(gl.COLOR_BUFFER_BIT)wendet die Farbe an.- Ein Alpha-Wert unter
1.0macht den Canvas durchsichtig, sodass der Seitenhintergrund durchscheint. Das gilt, solange der Kontext mitalpha: trueerstellt wurde, was der Standard ist. BeipremultipliedAlpha: true(ebenfalls Standard) sollten die RGB-Werte nicht größer als der Alpha-Wert sein, sonst entstehen undefinierte Farbwerte. - Das Löschen wird durch
gl.colorMask()und bei aktiviertemSCISSOR_TESTdurchgl.scissor()eingeschränkt. - Ist der Kontext verloren (
webglcontextlost), wird der Aufruf still ignoriert. - Auch in
WebGL2RenderingContextverfügbar. Für Integer-Farbpuffer in WebGL 2 stattdessenclearBufferiv()/clearBufferuiv()verwenden.