Просмотр исходного кода

Guard against missing HTML-in-Canvas API in WebGPU path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mr.doob 1 неделя назад
Родитель
Сommit
afa04a07ef

+ 6 - 0
examples/webgpu_materials_texture_html.html

@@ -82,6 +82,12 @@
 				renderer = new THREE.WebGPURenderer( { antialias: true } );
 				await renderer.init();
 
+				if ( ! ( 'requestPaint' in renderer.domElement ) ) {
+
+					info.innerHTML += '<br>This browser does not support the <a href="https://github.com/WICG/html-in-canvas" target="_blank">HTML-in-Canvas API</a>.';
+
+				}
+
 				renderer.toneMapping = THREE.NeutralToneMapping;
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );

+ 9 - 5
src/renderers/common/Textures.js

@@ -226,15 +226,19 @@ class Textures extends DataMap {
 
 			const canvas = this.renderer.domElement;
 
-			if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
+			if ( 'requestPaint' in canvas ) {
 
-				canvas.setAttribute( 'layoutsubtree', 'true' );
+				if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
 
-			}
+					canvas.setAttribute( 'layoutsubtree', 'true' );
+
+				}
 
-			if ( texture.image.parentNode !== canvas ) {
+				if ( texture.image.parentNode !== canvas ) {
 
-				canvas.appendChild( texture.image );
+					canvas.appendChild( texture.image );
+
+				}
 
 			}
 

+ 2 - 0
src/renderers/webgpu/utils/WebGPUTextureUtils.js

@@ -581,6 +581,8 @@ class WebGPUTextureUtils {
 			const canvas = this.backend.renderer.domElement;
 			const image = texture.image;
 
+			if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
+
 			// Set up paint callback if not already done.
 			if ( ! textureData.hasPaintCallback ) {
 

粤ICP备19079148号