diff --git a/examples/files.json b/examples/files.json index 90942731909e0f..73def8a8159447 100644 --- a/examples/files.json +++ b/examples/files.json @@ -343,6 +343,7 @@ "webgpu_display_stereo", "webgpu_equirectangular", "webgpu_fog_height", + "webgpu_furnace_test", "webgpu_hdr", "webgpu_instance_mesh", "webgpu_instance_path", diff --git a/examples/screenshots/webgpu_furnace_test.jpg b/examples/screenshots/webgpu_furnace_test.jpg new file mode 100644 index 00000000000000..0fd4bd19d59759 Binary files /dev/null and b/examples/screenshots/webgpu_furnace_test.jpg differ diff --git a/examples/webgpu_furnace_test.html b/examples/webgpu_furnace_test.html new file mode 100644 index 00000000000000..438e01dbe0bd17 --- /dev/null +++ b/examples/webgpu_furnace_test.html @@ -0,0 +1,166 @@ + + + + three.js webgpu - white furnace test + + + + + + +
+ + +
+ three.jsWhite Furnace Energy Conservation Test +
+ + +
Roughness increases left to right +
Metalness increases top to bottom +
+
+ + + + + + diff --git a/src/nodes/tsl/TSLCore.js b/src/nodes/tsl/TSLCore.js index 8494efedbd3acb..08d62ec0d56614 100644 --- a/src/nodes/tsl/TSLCore.js +++ b/src/nodes/tsl/TSLCore.js @@ -506,13 +506,15 @@ class ShaderCallNodeInternal extends Node { if ( shaderNode.layout ) { - let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor ); + const backend = builder.renderer.backend; + + let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( backend ); if ( functionNodesCacheMap === undefined ) { functionNodesCacheMap = new WeakMap(); - nodeBuilderFunctionsCacheMap.set( builder.constructor, functionNodesCacheMap ); + nodeBuilderFunctionsCacheMap.set( backend, functionNodesCacheMap ); }