From 86cfa03c52a6d6cf4b180a0467878b3792868d47 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sat, 10 Aug 2024 03:42:47 +0200 Subject: [PATCH] WebGPURenderer: Premultiply alpha for clear color. (#29103) * WebGPURenderer: Premultiply alpha for clear color. * WebGPUBackend: Honor `alpha` paramter when configuring clear values. --- src/renderers/webgl-fallback/WebGLBackend.js | 6 ++++++ src/renderers/webgpu/WebGPUBackend.js | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index 438443399b7423..8f91e0ffcdc38e 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -441,6 +441,12 @@ class WebGLBackend extends Backend { const clearColor = descriptor.clearColorValue || this.getClearColor(); + // premultiply alpha + + clearColor.r *= clearColor.a; + clearColor.g *= clearColor.a; + clearColor.b *= clearColor.a; + if ( depth ) this.state.setDepthMask( true ); if ( descriptor.textures === null ) { diff --git a/src/renderers/webgpu/WebGPUBackend.js b/src/renderers/webgpu/WebGPUBackend.js index 0c864c4e3717eb..4e5d60ad969289 100644 --- a/src/renderers/webgpu/WebGPUBackend.js +++ b/src/renderers/webgpu/WebGPUBackend.js @@ -604,7 +604,19 @@ class WebGPUBackend extends Backend { const clearColor = this.getClearColor(); - clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a }; + if ( this.renderer.alpha === true ) { + + // premultiply alpha + + const a = clearColor.a; + + clearValue = { r: clearColor.r * a, g: clearColor.g * a, b: clearColor.b * a, a: a }; + + } else { + + clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a }; + + } }