Explorar o código

WebGPURenderer: Introduce `hasFeature()`. (#25878)

* WebGPURenderer: Introduce `hasFeature()`.

* WebGPURenderer: Use Error instead of warning.
Michael Herzog %!s(int64=2) %!d(string=hai) anos
pai
achega
fbc3a0d6a7

+ 3 - 5
examples/jsm/loaders/KTX2Loader.js

@@ -114,13 +114,11 @@ class KTX2Loader extends Loader {
 
 
 		if ( renderer.isWebGPURenderer === true ) {
 		if ( renderer.isWebGPURenderer === true ) {
 
 
-			const adapter = renderer._adapter;
-
 			this.workerConfig = {
 			this.workerConfig = {
-				astcSupported: adapter.features.has( 'texture-compression-astc' ),
+				astcSupported: renderer.hasFeature( 'texture-compression-astc' ),
 				etc1Supported: false,
 				etc1Supported: false,
-				etc2Supported: adapter.features.has( 'texture-compression-etc2' ),
-				dxtSupported: adapter.features.has( 'texture-compression-bc' ),
+				etc2Supported: renderer.hasFeature( 'texture-compression-etc2' ),
+				dxtSupported: renderer.hasFeature( 'texture-compression-bc' ),
 				bptcSupported: false,
 				bptcSupported: false,
 				pvrtcSupported: false
 				pvrtcSupported: false
 			};
 			};

+ 24 - 0
examples/jsm/renderers/webgpu/WebGPURenderer.js

@@ -721,6 +721,30 @@ class WebGPURenderer {
 
 
 	}
 	}
 
 
+	hasFeature( name ) {
+
+		if ( this._initialized === false ) {
+
+			throw new Error( 'THREE.WebGPURenderer: Renderer must be initialized before testing features.' );
+
+		}
+
+		//
+
+		const features = Object.values( GPUFeatureName );
+
+		if ( features.includes( name ) === false ) {
+
+			throw new Error( 'THREE.WebGPURenderer: Unknown WebGPU GPU feature: ' + name );
+
+		}
+
+		//
+
+		return this._adapter.features.has( name );
+
+	}
+
 	_projectObject( object, camera, groupOrder ) {
 	_projectObject( object, camera, groupOrder ) {
 
 
 		const currentRenderList = this._currentRenderList;
 		const currentRenderList = this._currentRenderList;