소스 검색

WebGPURenderer: Premultiply alpha for clear color. (#29103)

* WebGPURenderer: Premultiply alpha for clear color.

* WebGPUBackend: Honor `alpha` paramter when configuring clear values.
Michael Herzog 1 년 전
부모
커밋
86cfa03c52
2개의 변경된 파일19개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 0
      src/renderers/webgl-fallback/WebGLBackend.js
  2. 13 1
      src/renderers/webgpu/WebGPUBackend.js

+ 6 - 0
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 ) {

+ 13 - 1
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 };
+
+			}
 
 		}
 

粤ICP备19079148号