diff --git a/examples/webgpu_tsl_editor.html b/examples/webgpu_tsl_editor.html
index 7a8d6600f3ec69..1aaa83bef2efac 100644
--- a/examples/webgpu_tsl_editor.html
+++ b/examples/webgpu_tsl_editor.html
@@ -52,10 +52,6 @@
import * as THREE from 'three';
- import WebGPURenderer from '../src/renderers/webgpu/WebGPURenderer.js';
- import WGSLNodeBuilder from '../src/renderers/webgpu/nodes/WGSLNodeBuilder.js';
- import GLSLNodeBuilder from '../src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js';
-
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
init();
@@ -76,7 +72,7 @@
const rendererDOM = document.getElementById( 'renderer' );
- const renderer = new WebGPURenderer( { antialias: true } );
+ const renderer = new THREE.WebGPURenderer( { antialias: true } );
renderer.outputColorSpace = THREE.LinearSRGBColorSpace;
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( 200, 200 );
@@ -88,8 +84,14 @@
const mesh = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), material );
scene.add( mesh );
+ //
+
+ let compiling = false;
+
renderer.setAnimationLoop( () => {
+ if ( compiling ) return;
+
renderer.render( scene, camera );
} );
@@ -108,7 +110,7 @@
};
let timeout = null;
- let nodeBuilder = null;
+ let rawShader = null;
const editorDOM = document.getElementById( 'source' );
const resultDOM = document.getElementById( 'result' );
@@ -158,12 +160,14 @@
const showCode = () => {
- result.setValue( nodeBuilder[ options.shader + 'Shader' ] );
+ result.setValue( rawShader[ options.shader + 'Shader' ] );
result.revealLine( 1 );
};
- const build = () => {
+ const webGLRenderer = new THREE.WebGPURenderer( { forceWebGL: true } );
+
+ const build = async () => {
try {
@@ -173,20 +177,20 @@
mesh.material.fragmentNode = nodes.output;
mesh.material.needsUpdate = true;
- let NodeBuilder;
+ compiling = true;
if ( options.output === 'WGSL' ) {
- NodeBuilder = WGSLNodeBuilder;
+ rawShader = await renderer.debug.getRawShaderAsync( scene, camera, mesh );
+
} else if ( options.output === 'GLSL ES 3.0' ) {
- NodeBuilder = GLSLNodeBuilder;
+ rawShader = await webGLRenderer.debug.getRawShaderAsync( scene, camera, mesh );
}
- nodeBuilder = new NodeBuilder( mesh, renderer );
- nodeBuilder.build();
+ compiling = false;
showCode();
@@ -195,9 +199,9 @@
/*const style = 'background-color: #333; color: white; font-style: italic; border: 2px solid #777; font-size: 22px;';
console.log( '%c [ WGSL ] Vertex Shader ', style );
- console.log( nodeBuilder.vertexShader );
+ console.log( rawShader.vertexShader );
console.log( '%c [ WGSL ] Fragment Shader ', style );
- console.log( nodeBuilder.fragmentShader );*/
+ console.log( rawShader.fragmentShader );/**/
} catch ( e ) {
diff --git a/src/renderers/common/Backend.js b/src/renderers/common/Backend.js
index d0c5ae4a1f3ca2..9dde1c8f77f51f 100644
--- a/src/renderers/common/Backend.js
+++ b/src/renderers/common/Backend.js
@@ -99,6 +99,8 @@ class Backend {
hasFeature( /*name*/ ) { } // return Boolean
+ getRawShader( /*object*/ ) { } // return { vertexShader, fragmentShader }
+
getInstanceCount( renderObject ) {
const { object, geometry } = renderObject;
diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js
index 41a2a4be917144..174a2c003f3e44 100644
--- a/src/renderers/common/Renderer.js
+++ b/src/renderers/common/Renderer.js
@@ -147,7 +147,23 @@ class Renderer {
this.debug = {
checkShaderErrors: true,
- onShaderError: null
+ onShaderError: null,
+ getRawShaderAsync: async ( scene, camera, object ) => {
+
+ await this.compileAsync( scene, camera );
+
+ const renderList = this._renderLists.get( scene, camera );
+ const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
+
+ const material = scene.overrideMaterial || object.material;
+
+ const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext );
+
+ const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
+
+ return { fragmentShader, vertexShader };
+
+ }
};
}
diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js
index 50f8e4521fc080..5c769c62bec341 100644
--- a/src/renderers/webgl-fallback/WebGLBackend.js
+++ b/src/renderers/webgl-fallback/WebGLBackend.js
@@ -1218,7 +1218,6 @@ class WebGLBackend extends Backend {
}
-
getMaxAnisotropy() {
return this.capabilities.getMaxAnisotropy();