|
|
@@ -9,6 +9,10 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
|
|
|
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
|
|
|
|
+import { Texture } from '../../textures/Texture.js';
|
|
|
+
|
|
|
+const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
|
+
|
|
|
/**
|
|
|
* This type of uniform node represents a 2D texture.
|
|
|
*
|
|
|
@@ -25,12 +29,12 @@ class TextureNode extends UniformNode {
|
|
|
/**
|
|
|
* Constructs a new texture node.
|
|
|
*
|
|
|
- * @param {Texture} value - The texture.
|
|
|
+ * @param {Texture} [value=EmptyTexture] - The texture.
|
|
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
|
*/
|
|
|
- constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
|
+ constructor( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) {
|
|
|
|
|
|
super( value );
|
|
|
|
|
|
@@ -737,20 +741,64 @@ export default TextureNode;
|
|
|
*
|
|
|
* @tsl
|
|
|
* @function
|
|
|
- * @param {Texture} value - The texture.
|
|
|
+ * @param {?Texture} value - The texture.
|
|
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
|
* @returns {TextureNode}
|
|
|
*/
|
|
|
-export const texture = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 );
|
|
|
+const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );
|
|
|
+
|
|
|
+/**
|
|
|
+ * TSL function for creating a texture node or sample a texture node already existing.
|
|
|
+ *
|
|
|
+ * @tsl
|
|
|
+ * @function
|
|
|
+ * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
|
+ * @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
|
+ * @param {?Node<int>} [levelNode=null] - The level node.
|
|
|
+ * @param {?Node<float>} [biasNode=null] - The bias node.
|
|
|
+ * @returns {TextureNode}
|
|
|
+ */
|
|
|
+export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
|
|
|
+
|
|
|
+ let textureNode;
|
|
|
+
|
|
|
+ if ( value && value.isTextureNode === true ) {
|
|
|
+
|
|
|
+ textureNode = nodeObject( value.clone() );
|
|
|
+ textureNode.referenceNode = value.getSelf(); // Ensure the reference is set to the original node
|
|
|
+
|
|
|
+ if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
|
+ if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
|
+ if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ textureNode = textureBase( value, uvNode, levelNode, biasNode );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return textureNode;
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * TSL function for creating a uniform texture node.
|
|
|
+ *
|
|
|
+ * @tsl
|
|
|
+ * @function
|
|
|
+ * @param {?Texture} value - The texture.
|
|
|
+ * @returns {TextureNode}
|
|
|
+ */
|
|
|
+export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
|
|
|
|
/**
|
|
|
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
|
*
|
|
|
* @tsl
|
|
|
* @function
|
|
|
- * @param {Texture} value - The texture.
|
|
|
+ * @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|