ReferenceNode.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Node, { addNodeClass } from '../core/Node.js';
  2. import { NodeUpdateType } from '../core/constants.js';
  3. import { uniform } from '../core/UniformNode.js';
  4. import { texture } from './TextureNode.js';
  5. import { nodeObject } from '../shadernode/ShaderNode.js';
  6. class ReferenceNode extends Node {
  7. constructor( property, uniformType, object = null ) {
  8. super();
  9. this.property = property;
  10. this.uniformType = uniformType;
  11. this.object = object;
  12. this.reference = null;
  13. this.node = null;
  14. this.updateType = NodeUpdateType.OBJECT;
  15. this.setNodeType( uniformType );
  16. }
  17. updateReference( frame ) {
  18. this.reference = this.object !== null ? this.object : frame.object;
  19. return this.reference;
  20. }
  21. setNodeType( uniformType ) {
  22. let node = null;
  23. if ( uniformType === 'texture' ) {
  24. node = texture( null );
  25. } else {
  26. node = uniform( uniformType );
  27. }
  28. this.node = node;
  29. }
  30. getNodeType( builder ) {
  31. return this.node.getNodeType( builder );
  32. }
  33. update( /*frame*/ ) {
  34. this.node.value = this.reference[ this.property ];
  35. }
  36. setup( /*builder*/ ) {
  37. return this.node;
  38. }
  39. }
  40. export default ReferenceNode;
  41. export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
  42. addNodeClass( 'ReferenceNode', ReferenceNode );