Browse Source

Add more functions to the ShaderNode (#23539)

* Update ShaderNode.js

* Add remainder operator

* Add xor

* Update OperatorNode.getNodeType

* Fix % operator
LeviPesin 3 years ago
parent
commit
31df72c8b5

+ 17 - 0
examples/jsm/renderers/nodes/ShaderNode.js

@@ -5,6 +5,7 @@ import VarNode from './core/VarNode.js';
 // inputs
 import ColorNode from './inputs/ColorNode.js';
 import FloatNode from './inputs/FloatNode.js';
+import IntNode from './inputs/IntNode.js';
 import Vector2Node from './inputs/Vector2Node.js';
 import Vector3Node from './inputs/Vector3Node.js';
 import Vector4Node from './inputs/Vector4Node.js';
@@ -198,6 +199,12 @@ export const float = ( val ) => {
 
 };
 
+export const int = ( val ) => {
+
+	return nodeObject( new IntNode( val ).setConst( true ) );
+
+};
+
 export const color = ( ...params ) => {
 
 	return nodeObject( new ColorNode( new Color( ...params ) ).setConst( true ) );
@@ -294,11 +301,21 @@ export const add = ShaderNodeProxy( OperatorNode, '+' );
 export const sub = ShaderNodeProxy( OperatorNode, '-' );
 export const mul = ShaderNodeProxy( OperatorNode, '*' );
 export const div = ShaderNodeProxy( OperatorNode, '/' );
+export const remainder = ShaderNodeProxy( OperatorNode, '%' );
 export const equal = ShaderNodeProxy( OperatorNode, '==' );
 export const assign = ShaderNodeProxy( OperatorNode, '=' );
+export const lessThan = ShaderNodeProxy( OperatorNode, '<' );
 export const greaterThan = ShaderNodeProxy( OperatorNode, '>' );
 export const lessThanEqual = ShaderNodeProxy( OperatorNode, '<=' );
+export const greaterThanEqual = ShaderNodeProxy( OperatorNode, '>=' );
 export const and = ShaderNodeProxy( OperatorNode, '&&' );
+export const or = ShaderNodeProxy( OperatorNode, '||' );
+export const xor = ShaderNodeProxy( OperatorNode, '^^' );
+export const bitAnd = ShaderNodeProxy( OperatorNode, '&' );
+export const bitOr = ShaderNodeProxy( OperatorNode, '|' );
+export const bitXor = ShaderNodeProxy( OperatorNode, '^' );
+export const shiftLeft = ShaderNodeProxy( OperatorNode, '<<' );
+export const shiftRight = ShaderNodeProxy( OperatorNode, '>>' );
 
 export const element = ShaderNodeProxy( ArrayElementNode );
 

+ 7 - 3
examples/jsm/renderers/nodes/math/OperatorNode.js

@@ -41,15 +41,19 @@ class OperatorNode extends TempNode {
 
 			return 'void';
 
-		} else if ( op === '=' ) {
+		} else if ( op === '=' || op === '%' ) {
 
 			return typeA;
 
-		} else if ( op === '==' || op === '&&' ) {
+		} else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
+			
+			return 'int';
+			
+		} else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) {
 
 			return 'bool';
 
-		} else if ( op === '<=' || op === '>' ) {
+		} else if ( op === '<=' || op === '>=' || op === '<' || op === '>' ) {
 
 			const length = builder.getTypeLength( output );