Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion examples/jsm/tsl/display/GTAONode.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ let _rendererState;
* const scenePassDepth = scenePass.getTextureNode( 'depth' );
*
* const aoPass = ao( scenePassDepth, scenePassNormal, camera );
* const aoPassOutput = aoPass.getTextureNode();
*
* renderPipeline.outputNode = aoPass.getTextureNode().mul( scenePassColor );
* renderPipeline.outputNode = scenePassColor.mul( vec4( vec3( aoPassOutput.r ), 1 ) );
* ```
*
* Reference: [Practical Real-Time Strategies for Accurate Indirect Occlusion](https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf).
Expand Down
9 changes: 5 additions & 4 deletions src/nodes/core/NodeBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -2672,25 +2672,26 @@ class NodeBuilder {
* Returns the variable definitions as a shader string for the given shader stage.
*
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
* @param {boolean} [global=false] - Whether the variables are global.
* @return {string} The variable code section.
*/
getVars( shaderStage ) {
getVars( shaderStage, global = false ) {

let snippet = '';
const snippets = [];

const vars = this.vars[ shaderStage ];

if ( vars !== undefined ) {

for ( const variable of vars ) {

snippet += `${ this.getVar( variable.type, variable.name ) }; `;
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );

}

}

return snippet;
return snippets.join( global ? '\n' : '\n\t' );

}

Expand Down
40 changes: 7 additions & 33 deletions src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -665,32 +665,6 @@ ${ flowData.code }

}

/**
* Returns the variables of the given shader stage as a GLSL string.
*
* @param {string} shaderStage - The shader stage.
* @return {string} The GLSL snippet that defines the variables.
*/
getVars( shaderStage ) {

const snippets = [];

const vars = this.vars[ shaderStage ];

if ( vars !== undefined ) {

for ( const variable of vars ) {

snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );

}

}

return snippets.join( '\n\t' );

}

/**
* Returns the uniforms of the given shader stage as a GLSL string.
*
Expand Down Expand Up @@ -1425,14 +1399,14 @@ ${shaderData.varyings}
// attributes
${shaderData.attributes}

// vars
${shaderData.vars}

// codes
${shaderData.codes}

void main() {

// vars
${shaderData.vars}

// transforms
${shaderData.transforms}

Expand Down Expand Up @@ -1474,14 +1448,14 @@ ${shaderData.uniforms}
// varyings
${shaderData.varyings}

// vars
${shaderData.vars}

// codes
${shaderData.codes}

void main() {

// vars
${shaderData.vars}

// flow
${shaderData.flow}

Expand Down Expand Up @@ -1552,7 +1526,7 @@ void main() {
stageData.uniforms = this.getUniforms( shaderStage );
stageData.attributes = this.getAttributes( shaderStage );
stageData.varyings = this.getVaryings( shaderStage );
stageData.vars = this.getVars( shaderStage );
stageData.vars = this.getVars( shaderStage, true );
stageData.structs = this.getStructs( shaderStage );
stageData.codes = this.getCodes( shaderStage );
stageData.transforms = this.getTransforms( shaderStage );
Expand Down
39 changes: 24 additions & 15 deletions src/renderers/webgpu/nodes/WGSLNodeBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -1741,11 +1741,12 @@ ${ flowData.code }
* @param {string} type - The variable's type.
* @param {string} name - The variable's name.
* @param {?number} [count=null] - The array length.
* @param {string} [qualifier=''] - The variable's qualifier.
* @return {string} The WGSL snippet that defines a variable.
*/
getVar( type, name, count = null ) {
getVar( type, name, count = null, qualifier = '' ) {

let snippet = `var ${ name } : `;
let snippet = `var${ qualifier } ${ name } : `;

if ( count !== null ) {

Expand All @@ -1767,7 +1768,15 @@ ${ flowData.code }
* @param {string} shaderStage - The shader stage.
* @return {string} The WGSL snippet that defines the variables.
*/
getVars( shaderStage ) {
getVars( shaderStage, global = false ) {

let qualifier = '';

if ( global ) {

qualifier = '<private>';

}

const snippets = [];
const vars = this.vars[ shaderStage ];
Expand All @@ -1776,13 +1785,13 @@ ${ flowData.code }

for ( const variable of vars ) {

snippets.push( `\t${ this.getVar( variable.type, variable.name, variable.count ) };` );
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count, qualifier ) };` );

}

}

return `\n${ snippets.join( '\n' ) }\n`;
return global ? snippets.join( '\n' ) : `\n\t${ snippets.join( '\n\t' ) }\n`;

}

Expand Down Expand Up @@ -2077,7 +2086,7 @@ ${ flowData.code }
stageData.attributes = this.getAttributes( shaderStage );
stageData.varyings = this.getVaryings( shaderStage );
stageData.structs = this.getStructs( shaderStage );
stageData.vars = this.getVars( shaderStage );
stageData.vars = this.getVars( shaderStage, true );
stageData.codes = this.getCodes( shaderStage );
stageData.directives = this.getDirectives( shaderStage );
stageData.scopedArrays = this.getScopedArrays( shaderStage );
Expand Down Expand Up @@ -2352,15 +2361,15 @@ ${shaderData.uniforms}
${shaderData.varyings}
var<private> varyings : VaryingsStruct;

// vars
${shaderData.vars}

// codes
${shaderData.codes}

@vertex
fn main( ${shaderData.attributes} ) -> VaryingsStruct {

// vars
${shaderData.vars}

// flow
${shaderData.flow}

Expand Down Expand Up @@ -2390,15 +2399,15 @@ ${shaderData.structs}
// uniforms
${shaderData.uniforms}

// vars
${shaderData.vars}

// codes
${shaderData.codes}

@fragment
fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {

// vars
${shaderData.vars}

// flow
${shaderData.flow}

Expand Down Expand Up @@ -2435,6 +2444,9 @@ ${ shaderData.structs }
// uniforms
${ shaderData.uniforms }

// vars
${ shaderData.vars }

// codes
${ shaderData.codes }

Expand All @@ -2446,9 +2458,6 @@ fn main( ${ shaderData.attributes } ) {
+ globalId.y * ( ${ workgroupSizeX } * numWorkgroups.x )
+ globalId.z * ( ${ workgroupSizeX } * numWorkgroups.x ) * ( ${ workgroupSizeY } * numWorkgroups.y );

// vars
${ shaderData.vars }

// flow
${ shaderData.flow }

Expand Down
Loading