From 29d71bf43e9f3d592296722e3375804d66c6f85b Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 16 Nov 2022 22:37:38 +1100 Subject: [PATCH 1/3] Update OperatorNode.js --- examples/jsm/nodes/math/OperatorNode.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/jsm/nodes/math/OperatorNode.js b/examples/jsm/nodes/math/OperatorNode.js index b2d199729216ec..41581f58afbdf6 100644 --- a/examples/jsm/nodes/math/OperatorNode.js +++ b/examples/jsm/nodes/math/OperatorNode.js @@ -47,7 +47,7 @@ class OperatorNode extends TempNode { } else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) { - return 'int'; + return builder.getIntegerType( typeA ); } else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) { @@ -124,6 +124,11 @@ class OperatorNode extends TempNode { } + } else if ( op === '>>' || op === '<<' ) { + + typeA = type; + typeB = builder.changeComponentType( typeB, 'uint' ); + } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) { // matrix x vector From 262bac8ed71423f910110672e33468d322158c08 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 16 Nov 2022 22:40:27 +1100 Subject: [PATCH 2/3] Update NodeBuilder.js --- examples/jsm/nodes/core/NodeBuilder.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/examples/jsm/nodes/core/NodeBuilder.js b/examples/jsm/nodes/core/NodeBuilder.js index 803f2e016e8d14..7603474bdc1cef 100644 --- a/examples/jsm/nodes/core/NodeBuilder.js +++ b/examples/jsm/nodes/core/NodeBuilder.js @@ -365,6 +365,8 @@ class NodeBuilder { type = this.getVectorType( type ); + if ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type; + const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type ); if ( componentType === null ) return null; @@ -386,9 +388,11 @@ class NodeBuilder { } - getTypeFromLength( length ) { + getTypeFromLength( length, componentType = 'float' ) { - return typeFromLength.get( length ); + const baseType = typeFromLength.get( length ); + const prefix = componentType === 'float' ? '' : componentType[ 0 ]; + return prefix + baseType; } @@ -412,6 +416,22 @@ class NodeBuilder { } + changeComponentType( type, newComponentType ) { + + return this.getTypeFromLength( this.getTypeLength( type ), newComponentType ); + + } + + getIntegerType( type ) { + + const componentType = this.getComponentType( type ); + + if ( componentType === 'int' || componentType === 'uint' ) return type; + + return this.changeComponentType( type, 'int' ); + + } + getDataFromNode( node, shaderStage = this.shaderStage ) { let nodeData = this.nodesData.get( node ); From 52d126018ed11b5be6123c5f4065435e0cdd8321 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 16 Nov 2022 23:37:40 +1100 Subject: [PATCH 3/3] Fix --- examples/jsm/nodes/core/NodeBuilder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/jsm/nodes/core/NodeBuilder.js b/examples/jsm/nodes/core/NodeBuilder.js index 7603474bdc1cef..f7aade71d40ace 100644 --- a/examples/jsm/nodes/core/NodeBuilder.js +++ b/examples/jsm/nodes/core/NodeBuilder.js @@ -13,7 +13,6 @@ export const shaderStages = [ ...defaultShaderStages, 'compute' ]; export const vector = [ 'x', 'y', 'z', 'w' ]; const typeFromLength = new Map(); -typeFromLength.set( 1, 'float' ); typeFromLength.set( 2, 'vec2' ); typeFromLength.set( 3, 'vec3' ); typeFromLength.set( 4, 'vec4' ); @@ -390,6 +389,7 @@ class NodeBuilder { getTypeFromLength( length, componentType = 'float' ) { + if ( length === 1 ) return componentType; const baseType = typeFromLength.get( length ); const prefix = componentType === 'float' ? '' : componentType[ 0 ]; return prefix + baseType;