CubeTextureNode.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import TextureNode from './TextureNode.js';
  2. import UniformNode from '../core/UniformNode.js';
  3. import ReflectNode from './ReflectNode.js';
  4. class CubeTextureNode extends TextureNode {
  5. constructor( value, uvNode = new ReflectNode(), biasNode = null ) {
  6. super( value, uvNode, biasNode );
  7. }
  8. getInputType( /*builder*/ ) {
  9. return 'cubeTexture';
  10. }
  11. generate( builder, output ) {
  12. const texture = this.value;
  13. if ( ! texture || texture.isCubeTexture !== true ) {
  14. throw new Error( 'CubeTextureNode: Need a three.js cube texture.' );
  15. }
  16. const textureProperty = UniformNode.prototype.generate.call( this, builder, 'cubeTexture' );
  17. if ( output === 'sampler' ) {
  18. return textureProperty + '_sampler';
  19. } else if ( builder.isReference( output ) ) {
  20. return textureProperty;
  21. } else {
  22. const nodeData = builder.getDataFromNode( this );
  23. let snippet = nodeData.snippet;
  24. if ( snippet === undefined ) {
  25. const uvSnippet = this.uvNode.build( builder, 'vec3' );
  26. const biasNode = this.biasNode;
  27. if ( biasNode !== null ) {
  28. const biasSnippet = biasNode.build( builder, 'float' );
  29. snippet = builder.getCubeTextureBias( textureProperty, uvSnippet, biasSnippet );
  30. } else {
  31. snippet = builder.getCubeTexture( textureProperty, uvSnippet );
  32. }
  33. nodeData.snippet = snippet;
  34. }
  35. return builder.format( snippet, 'vec4', output );
  36. }
  37. }
  38. }
  39. CubeTextureNode.prototype.isCubeTextureNode = true;
  40. export default CubeTextureNode;