Skip to content

Commit

Permalink
Added getRawShaderAsync()
Browse files Browse the repository at this point in the history
  • Loading branch information
sunag committed Jul 27, 2024
1 parent 61da2cb commit 7be37da
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 25 deletions.
19 changes: 14 additions & 5 deletions examples/webgpu_tsl_editor.html
Original file line number Diff line number Diff line change
Expand Up @@ -84,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 );

} );
Expand Down Expand Up @@ -160,9 +166,8 @@
};

const webGLRenderer = new THREE.WebGPURenderer( { forceWebGL: true } );
webGLRenderer.init();

const build = () => {
const build = async () => {

try {

Expand All @@ -172,17 +177,21 @@
mesh.material.fragmentNode = nodes.output;
mesh.material.needsUpdate = true;

compiling = true;

if ( options.output === 'WGSL' ) {

rawShader = renderer.debug.getRawShader( mesh );
rawShader = await renderer.debug.getRawShaderAsync( scene, camera, mesh );


} else if ( options.output === 'GLSL ES 3.0' ) {

rawShader = webGLRenderer.debug.getRawShader( mesh );
rawShader = await webGLRenderer.debug.getRawShaderAsync( scene, camera, mesh );

}

compiling = false;

showCode();

// extra debug info
Expand All @@ -192,7 +201,7 @@
console.log( '%c [ WGSL ] Vertex Shader ', style );
console.log( rawShader.vertexShader );
console.log( '%c [ WGSL ] Fragment Shader ', style );
console.log( rawShader.fragmentShader );*/
console.log( rawShader.fragmentShader );/**/

} catch ( e ) {

Expand Down
15 changes: 13 additions & 2 deletions src/renderers/common/Renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,20 @@ class Renderer {
this.debug = {
checkShaderErrors: true,
onShaderError: null,
getRawShader: ( object ) => {
getRawShaderAsync: async ( scene, camera, object ) => {

return backend.getRawShader( 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 };

}
};
Expand Down
9 changes: 0 additions & 9 deletions src/renderers/webgl-fallback/WebGLBackend.js
Original file line number Diff line number Diff line change
Expand Up @@ -1218,15 +1218,6 @@ class WebGLBackend extends Backend {

}

getRawShader( object ) {

const nodeBuilder = new GLSLNodeBuilder( object, this.renderer );
nodeBuilder.build();

return { vertexShader: nodeBuilder.vertexShader, fragmentShader: nodeBuilder.fragmentShader };

}

getMaxAnisotropy() {

return this.capabilities.getMaxAnisotropy();
Expand Down
9 changes: 0 additions & 9 deletions src/renderers/webgpu/WebGPUBackend.js
Original file line number Diff line number Diff line change
Expand Up @@ -1339,15 +1339,6 @@ class WebGPUBackend extends Backend {

}

getRawShader( object ) {

const nodeBuilder = new WGSLNodeBuilder( object, this.renderer );
nodeBuilder.build();

return { vertexShader: nodeBuilder.vertexShader, fragmentShader: nodeBuilder.fragmentShader };

}

copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {

let dstX = 0;
Expand Down

0 comments on commit 7be37da

Please sign in to comment.