three
Version:
JavaScript 3D library
36 lines (20 loc) • 804 B
JavaScript
import Node, { addNodeClass } from '../core/Node.js';
import { add, mul, bitXor, shiftRight } from './OperatorNode.js';
import { addNodeElement, nodeProxy, uint } from '../shadernode/ShaderNode.js';
class HashNode extends Node {
constructor( seedNode ) {
super();
this.seedNode = seedNode;
}
construct( /*builder*/ ) {
const seed = this.seedNode;
const state = add( mul( uint( seed ), 747796405 ), 2891336453 );
const word = mul( bitXor( shiftRight( state, add( shiftRight( state, 28 ), 4 ) ), state ), 277803737 );
const uintResult = bitXor( shiftRight( word, 22 ), word );
return mul( 1 / 2 ** 32, uintResult ); // Convert to range [0, 1)
}
}
export default HashNode;
export const hash = nodeProxy( HashNode );
addNodeElement( 'hash', hash );
addNodeClass( HashNode );