56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import TempNode from '../core/TempNode.js';
							 | 
						||
| 
								 | 
							
								import { addNodeClass } from '../core/Node.js';
							 | 
						||
| 
								 | 
							
								import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PackingNode extends TempNode {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									constructor( scope, node ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										super();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										this.scope = scope;
							 | 
						||
| 
								 | 
							
										this.node = node;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									getNodeType( builder ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return this.node.getNodeType( builder );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									setup() {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										const { scope, node } = this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										let result = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if ( scope === PackingNode.DIRECTION_TO_COLOR ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result = node.mul( 0.5 ).add( 0.5 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										} else if ( scope === PackingNode.COLOR_TO_DIRECTION ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result = node.mul( 2.0 ).sub( 1 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return result;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PackingNode.DIRECTION_TO_COLOR = 'directionToColor';
							 | 
						||
| 
								 | 
							
								PackingNode.COLOR_TO_DIRECTION = 'colorToDirection';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default PackingNode;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const directionToColor = nodeProxy( PackingNode, PackingNode.DIRECTION_TO_COLOR );
							 | 
						||
| 
								 | 
							
								export const colorToDirection = nodeProxy( PackingNode, PackingNode.COLOR_TO_DIRECTION );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								addNodeElement( 'directionToColor', directionToColor );
							 | 
						||
| 
								 | 
							
								addNodeElement( 'colorToDirection', colorToDirection );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								addNodeClass( 'PackingNode', PackingNode );
							 |