CubeTextureNode.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 = null, levelNode = null ) {
  6. super( value, uvNode, levelNode );
  7. }
  8. getInputType( /*builder*/ ) {
  9. return 'cubeTexture';
  10. }
  11. generate( builder, output ) {
  12. const texture = this.value;
  13. const uvNode = this.uvNode || builder.context.uvNode || new ReflectNode();
  14. if ( ! texture || texture.isCubeTexture !== true ) {
  15. throw new Error( 'CubeTextureNode: Need a three.js cube texture.' );
  16. }
  17. const textureProperty = UniformNode.prototype.generate.call( this, builder, 'cubeTexture' );
  18. if ( output === 'sampler' ) {
  19. return textureProperty + '_sampler';
  20. } else if ( builder.isReference( output ) ) {
  21. return textureProperty;
  22. } else {
  23. const nodeData = builder.getDataFromNode( this );
  24. let snippet = nodeData.snippet;
  25. if ( builder.context.tempRead === false || snippet === undefined ) {
  26. const uvSnippet = uvNode.build( builder, 'vec3' );
  27. const levelNode = this.levelNode || builder.context.levelNode;
  28. if ( levelNode?.isNode === true ) {
  29. const levelOutNode = builder.context.levelShaderNode ? builder.context.levelShaderNode.call( { texture, levelNode }, builder ) : levelNode;
  30. const levelSnippet = levelOutNode.build( builder, 'float' );
  31. snippet = builder.getCubeTextureLevel( textureProperty, uvSnippet, levelSnippet );
  32. } else {
  33. snippet = builder.getCubeTexture( textureProperty, uvSnippet );
  34. }
  35. nodeData.snippet = snippet;
  36. }
  37. return builder.format( snippet, 'vec4', output );
  38. }
  39. }
  40. }
  41. CubeTextureNode.prototype.isCubeTextureNode = true;
  42. export default CubeTextureNode;