diff --git a/examples-testing/changes.patch b/examples-testing/changes.patch index 80ce416b9..10e02e8fd 100644 --- a/examples-testing/changes.patch +++ b/examples-testing/changes.patch @@ -881,13 +881,13 @@ index b12b0421..c3b378aa 100644 } diff --git a/examples-testing/examples/misc_controls_fly.ts b/examples-testing/examples/misc_controls_fly.ts -index 4e58a36e..ce66548e 100644 +index 5b25c489..1210a823 100644 --- a/examples-testing/examples/misc_controls_fly.ts +++ b/examples-testing/examples/misc_controls_fly.ts @@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass } from 'three/tsl'; + import { pass, film } from 'three/tsl'; import Stats from 'three/addons/libs/stats.module.js'; @@ -15,11 +15,15 @@ const MARGIN = 0; @@ -13217,7 +13217,7 @@ index d0255e43..c924d666 100644 init(); diff --git a/examples-testing/examples/webgpu_backdrop_area.ts b/examples-testing/examples/webgpu_backdrop_area.ts -index 733fe4fb..73038ec7 100644 +index 97c224ce..579cb796 100644 --- a/examples-testing/examples/webgpu_backdrop_area.ts +++ b/examples-testing/examples/webgpu_backdrop_area.ts @@ -1,4 +1,4 @@ @@ -13226,7 +13226,7 @@ index 733fe4fb..73038ec7 100644 import { color, linearDepth, -@@ -17,8 +17,8 @@ import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; +@@ -18,8 +18,8 @@ import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; @@ -13237,7 +13237,7 @@ index 733fe4fb..73038ec7 100644 init(); -@@ -135,13 +135,13 @@ function init() { +@@ -137,13 +137,13 @@ function init() { }; const gui = new GUI(); @@ -13791,7 +13791,7 @@ index 9405b64a..60db096b 100644 init(); diff --git a/examples-testing/examples/webgpu_loader_gltf_dispersion.ts b/examples-testing/examples/webgpu_loader_gltf_dispersion.ts -index c1f1ecc8..339ff729 100644 +index c0290b98..c7c8fb59 100644 --- a/examples-testing/examples/webgpu_loader_gltf_dispersion.ts +++ b/examples-testing/examples/webgpu_loader_gltf_dispersion.ts @@ -1,10 +1,10 @@ @@ -13805,7 +13805,7 @@ index c1f1ecc8..339ff729 100644 -let camera, scene, renderer; +let camera: THREE.PerspectiveCamera, scene: THREE.Scene, renderer: THREE.WebGPURenderer; - init().then(render); + init(); diff --git a/examples-testing/examples/webgpu_loader_gltf_iridescence.ts b/examples-testing/examples/webgpu_loader_gltf_iridescence.ts index f163ea77..3f695e17 100644 @@ -14503,13 +14503,13 @@ index 9eb9922d..b75024ec 100644 function updateSun() { const phi = THREE.MathUtils.degToRad(90 - parameters.elevation); diff --git a/examples-testing/examples/webgpu_parallax_uv.ts b/examples-testing/examples/webgpu_parallax_uv.ts -index c11a18ed..bfcafe6d 100644 +index 775399bf..1deb0cb1 100644 --- a/examples-testing/examples/webgpu_parallax_uv.ts +++ b/examples-testing/examples/webgpu_parallax_uv.ts @@ -1,11 +1,11 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { texture, parallaxUV, uv } from 'three/tsl'; + import { texture, parallaxUV, overlay, uv } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; @@ -14541,13 +14541,13 @@ index 315eba25..aa01b27a 100644 init(); diff --git a/examples-testing/examples/webgpu_postprocessing.ts b/examples-testing/examples/webgpu_postprocessing.ts -index d83642f2..96b1bc0e 100644 +index 7ae63a39..31397439 100644 --- a/examples-testing/examples/webgpu_postprocessing.ts +++ b/examples-testing/examples/webgpu_postprocessing.ts @@ -1,8 +1,8 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass } from 'three/tsl'; + import { pass, dotScreen, rgbShift } from 'three/tsl'; -let camera, renderer, postProcessing; -let object; @@ -14557,14 +14557,14 @@ index d83642f2..96b1bc0e 100644 init(); diff --git a/examples-testing/examples/webgpu_postprocessing_3dlut.ts b/examples-testing/examples/webgpu_postprocessing_3dlut.ts -index 9d4ffa6e..bdb25087 100644 +index 27500a07..2401fa77 100644 --- a/examples-testing/examples/webgpu_postprocessing_3dlut.ts +++ b/examples-testing/examples/webgpu_postprocessing_3dlut.ts @@ -1,20 +1,30 @@ -import * as THREE from 'three'; --import { pass, texture3D, uniform, renderOutput } from 'three/tsl'; +-import { pass, texture3D, uniform, lut3D, renderOutput } from 'three/tsl'; +import * as THREE from 'three/webgpu'; -+import { pass, texture3D, uniform, renderOutput, ShaderNodeObject, Lut3DNode } from 'three/tsl'; ++import { pass, texture3D, uniform, lut3D, renderOutput, ShaderNodeObject, Lut3DNode } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; @@ -14645,7 +14645,7 @@ index 9d4ffa6e..bdb25087 100644 - const lut = lutMap[params.lut]; + const lut = lutMap[params.lut] as LUTCubeResult | LUT3dlResult | LUTImageResult; - lutPass = outputPass.lut3D(texture3D(lut.texture3D), lut.texture3D.image.width, uniform(1)); + lutPass = lut3D(outputPass, texture3D(lut.texture3D), lut.texture3D.image.width, uniform(1)); postProcessing.outputNode = lutPass; @@ -111,7 +125,7 @@ async function init() { @@ -14673,20 +14673,21 @@ index 9d4ffa6e..bdb25087 100644 } diff --git a/examples-testing/examples/webgpu_postprocessing_afterimage.ts b/examples-testing/examples/webgpu_postprocessing_afterimage.ts -index 4c3a1d66..4337b2c8 100644 +index d0775d49..fed02565 100644 --- a/examples-testing/examples/webgpu_postprocessing_afterimage.ts +++ b/examples-testing/examples/webgpu_postprocessing_afterimage.ts @@ -1,10 +1,10 @@ -import * as THREE from 'three'; +-import { pass, afterImage } from 'three/tsl'; +import * as THREE from 'three/webgpu'; - import { pass } from 'three/tsl'; ++import { pass, afterImage, AfterImageNode, ShaderNodeObject } from 'three/tsl'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; -let camera, scene, renderer; -let mesh, postProcessing, combinedPass; +let camera: THREE.PerspectiveCamera, scene: THREE.Scene, renderer: THREE.WebGPURenderer; -+let mesh: THREE.Mesh, postProcessing: THREE.PostProcessing, combinedPass: THREE.ShaderNodeObject; ++let mesh: THREE.Mesh, postProcessing: THREE.PostProcessing, combinedPass: ShaderNodeObject; const params = { damp: 0.96, @@ -14695,16 +14696,16 @@ index 4c3a1d66..4337b2c8 100644 const scenePassColor = scenePass.getTextureNode(); - combinedPass = scenePassColor; -- combinedPass = combinedPass.afterImage(params.damp); -+ combinedPass = scenePassColor.afterImage(params.damp); +- combinedPass = afterImage(combinedPass, params.damp); ++ combinedPass = afterImage(scenePassColor, params.damp); postProcessing.outputNode = combinedPass; diff --git a/examples-testing/examples/webgpu_postprocessing_ao.ts b/examples-testing/examples/webgpu_postprocessing_ao.ts -index 432d641a..1434cc30 100644 +index 432d641a..801f1f31 100644 --- a/examples-testing/examples/webgpu_postprocessing_ao.ts +++ b/examples-testing/examples/webgpu_postprocessing_ao.ts -@@ -1,5 +1,18 @@ +@@ -1,5 +1,17 @@ -import * as THREE from 'three'; -import { pass, mrt, output, transformedNormalView, texture, ao, denoise } from 'three/tsl'; +import * as THREE from 'three/webgpu'; @@ -14719,13 +14720,12 @@ index 432d641a..1434cc30 100644 + ShaderNodeObject, + GTAONode, + DenoiseNode, -+ OperatorNode, + Node, +} from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js'; -@@ -10,9 +23,20 @@ import { SimplexNoise } from 'three/addons/math/SimplexNoise.js'; +@@ -10,9 +22,20 @@ import { SimplexNoise } from 'three/addons/math/SimplexNoise.js'; import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; @@ -14743,8 +14743,8 @@ index 432d641a..1434cc30 100644 + +let aoPass: ShaderNodeObject, + denoisePass: ShaderNodeObject, -+ blendPassAO: ShaderNodeObject, -+ blendPassDenoise: ShaderNodeObject, ++ blendPassAO: ShaderNodeObject, ++ blendPassDenoise: ShaderNodeObject, + scenePassColor: ShaderNodeObject; const params = { @@ -14783,13 +14783,13 @@ index d38a7abb..80478cf8 100644 clock = new THREE.Clock(); diff --git a/examples-testing/examples/webgpu_postprocessing_bloom_emissive.ts b/examples-testing/examples/webgpu_postprocessing_bloom_emissive.ts -index 3cec4ebe..a0584093 100644 +index 7a6569f9..71cb1b29 100644 --- a/examples-testing/examples/webgpu_postprocessing_bloom_emissive.ts +++ b/examples-testing/examples/webgpu_postprocessing_bloom_emissive.ts @@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass, mrt, output, emissive } from 'three/tsl'; + import { pass, mrt, output, bloom, emissive } from 'three/tsl'; import { RGBELoader } from 'three/addons/loaders/RGBELoader.js'; @@ -8,8 +8,8 @@ import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; @@ -14804,14 +14804,14 @@ index 3cec4ebe..a0584093 100644 init(); diff --git a/examples-testing/examples/webgpu_postprocessing_bloom_selective.ts b/examples-testing/examples/webgpu_postprocessing_bloom_selective.ts -index 066a4766..6ce4437c 100644 +index 55d6b6bb..851d9f30 100644 --- a/examples-testing/examples/webgpu_postprocessing_bloom_selective.ts +++ b/examples-testing/examples/webgpu_postprocessing_bloom_selective.ts @@ -1,5 +1,5 @@ -import * as THREE from 'three'; --import { pass, mrt, output, float, uniform } from 'three/tsl'; +-import { pass, mrt, output, float, bloom, uniform } from 'three/tsl'; +import * as THREE from 'three/webgpu'; -+import { pass, mrt, output, float, uniform, UniformNode } from 'three/tsl'; ++import { pass, mrt, output, float, bloom, uniform, UniformNode } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; @@ -14829,13 +14829,13 @@ index 066a4766..6ce4437c 100644 } }); diff --git a/examples-testing/examples/webgpu_postprocessing_difference.ts b/examples-testing/examples/webgpu_postprocessing_difference.ts -index 49f9084f..aafb0475 100644 +index dc30eb60..2a156b13 100644 --- a/examples-testing/examples/webgpu_postprocessing_difference.ts +++ b/examples-testing/examples/webgpu_postprocessing_difference.ts @@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass, luminance } from 'three/tsl'; + import { pass, luminance, saturation } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; @@ -10,8 +10,8 @@ const params = { @@ -14850,13 +14850,13 @@ index 49f9084f..aafb0475 100644 init(); diff --git a/examples-testing/examples/webgpu_postprocessing_dof.ts b/examples-testing/examples/webgpu_postprocessing_dof.ts -index 3fb4046b..785a78f8 100644 +index 26d034fb..4c351e14 100644 --- a/examples-testing/examples/webgpu_postprocessing_dof.ts +++ b/examples-testing/examples/webgpu_postprocessing_dof.ts @@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { cubeTexture, positionWorld, oscSine, timerGlobal, pass, uniform } from 'three/tsl'; + import { cubeTexture, positionWorld, oscSine, timerGlobal, pass, dof, uniform } from 'three/tsl'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; @@ -7,7 +7,11 @@ import Stats from 'three/addons/libs/stats.module.js'; @@ -14881,7 +14881,7 @@ index 3fb4046b..785a78f8 100644 init(); -@@ -124,7 +128,7 @@ function init() { +@@ -125,7 +129,7 @@ function init() { gui.add(effectController.maxblur, 'value', 0.0, 0.01, 0.001).name('maxblur'); } @@ -14891,13 +14891,13 @@ index 3fb4046b..785a78f8 100644 mouseX = event.clientX - windowHalfX; diff --git a/examples-testing/examples/webgpu_postprocessing_fxaa.ts b/examples-testing/examples/webgpu_postprocessing_fxaa.ts -index 5e75fa7a..dfebe406 100644 +index 3221614b..ade3e809 100644 --- a/examples-testing/examples/webgpu_postprocessing_fxaa.ts +++ b/examples-testing/examples/webgpu_postprocessing_fxaa.ts @@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass, renderOutput } from 'three/tsl'; + import { pass, fxaa, renderOutput } from 'three/tsl'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; @@ -8,8 +8,12 @@ const params = { @@ -15064,13 +15064,13 @@ index d7e51008..a9decd46 100644 const worldScreenWidth = (camera.right - camera.left) / camera.zoom; const worldScreenHeight = (camera.top - camera.bottom) / camera.zoom; diff --git a/examples-testing/examples/webgpu_postprocessing_sobel.ts b/examples-testing/examples/webgpu_postprocessing_sobel.ts -index cbc5a96b..66ec682e 100644 +index 01aa16ec..4f45e231 100644 --- a/examples-testing/examples/webgpu_postprocessing_sobel.ts +++ b/examples-testing/examples/webgpu_postprocessing_sobel.ts @@ -1,12 +1,12 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { pass } from 'three/tsl'; + import { pass, sobel } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; @@ -15259,13 +15259,13 @@ index b66bad12..babbe1a9 100644 const fxSceneA = new FXScene(new THREE.BoxGeometry(2, 2, 2), new THREE.Vector3(0, -0.4, 0), 0xffffff); diff --git a/examples-testing/examples/webgpu_procedural_texture.ts b/examples-testing/examples/webgpu_procedural_texture.ts -index d4228f90..191b58f2 100644 +index 84e8ba9e..86560654 100644 --- a/examples-testing/examples/webgpu_procedural_texture.ts +++ b/examples-testing/examples/webgpu_procedural_texture.ts @@ -1,9 +1,9 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { checker, uv, uniform } from 'three/tsl'; + import { checker, uv, uniform, gaussianBlur, convertToTexture } from 'three/tsl'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; @@ -15275,7 +15275,7 @@ index d4228f90..191b58f2 100644 init(); render(); diff --git a/examples-testing/examples/webgpu_refraction.ts b/examples-testing/examples/webgpu_refraction.ts -index 912997c1..2ce61b2f 100644 +index a410c04f..64814a2b 100644 --- a/examples-testing/examples/webgpu_refraction.ts +++ b/examples-testing/examples/webgpu_refraction.ts @@ -1,13 +1,13 @@ @@ -15410,14 +15410,16 @@ index e8ebe87d..9fae06bd 100644 const data = texture.image.data; diff --git a/examples-testing/examples/webgpu_tsl_coffee_smoke.ts b/examples-testing/examples/webgpu_tsl_coffee_smoke.ts -index 506f14f1..bb42e6d1 100644 +index 5c2c8ea4..2b11fc73 100644 --- a/examples-testing/examples/webgpu_tsl_coffee_smoke.ts +++ b/examples-testing/examples/webgpu_tsl_coffee_smoke.ts -@@ -1,10 +1,10 @@ +@@ -1,4 +1,4 @@ -import * as THREE from 'three'; +import * as THREE from 'three/webgpu'; - import { mix, mul, positionLocal, smoothstep, texture, timerLocal, Fn, uv, vec2, vec3, vec4 } from 'three/tsl'; - + import { + mix, + mul, +@@ -17,7 +17,7 @@ import { import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; @@ -15426,7 +15428,7 @@ index 506f14f1..bb42e6d1 100644 init(); -@@ -22,7 +22,9 @@ function init() { +@@ -35,7 +35,9 @@ function init() { // baked model gltfLoader.load('./models/gltf/coffeeMug.glb', gltf => { diff --git a/src-testing/changes.patch b/src-testing/changes.patch index 7391385f0..02f887a68 100644 --- a/src-testing/changes.patch +++ b/src-testing/changes.patch @@ -1,8 +1,8 @@ diff --git a/src-testing/src/nodes/accessors/BufferAttributeNode.ts b/src-testing/src/nodes/accessors/BufferAttributeNode.ts -index e4a040de..c52771e6 100644 +index 44078a78..c22db46f 100644 --- a/src-testing/src/nodes/accessors/BufferAttributeNode.ts +++ b/src-testing/src/nodes/accessors/BufferAttributeNode.ts -@@ -5,10 +5,29 @@ import { nodeObject, addNodeElement } from '../shadernode/ShaderNode.js'; +@@ -5,10 +5,29 @@ import { varying } from '../core/VaryingNode.js'; import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js'; import { InterleavedBuffer } from '../../core/InterleavedBuffer.js'; @@ -125,9 +125,9 @@ index e4a040de..c52771e6 100644 this.instanced = value; return this; -@@ -119,15 +141,31 @@ class BufferAttributeNode extends InputNode { +@@ -121,14 +143,30 @@ export default BufferAttributeNode; - export default BufferAttributeNode; + registerNodeClass('BufferAttribute', BufferAttributeNode); -export const bufferAttribute = (array, type, stride, offset) => - nodeObject(new BufferAttributeNode(array, type, stride, offset)); @@ -164,21 +164,22 @@ index e4a040de..c52771e6 100644 + offset?: number, +) => dynamicBufferAttribute(array, type, stride, offset).setInstanced(true); - addNodeElement('toAttribute', bufferNode => bufferAttribute(bufferNode.value)); - + addMethodChaining('toAttribute', bufferNode => bufferAttribute(bufferNode.value)); diff --git a/src-testing/src/nodes/accessors/TextureNode.ts b/src-testing/src/nodes/accessors/TextureNode.ts -index 644c08f4..2141c761 100644 +index c7bbf3d0..3e2a3bf9 100644 --- a/src-testing/src/nodes/accessors/TextureNode.ts +++ b/src-testing/src/nodes/accessors/TextureNode.ts -@@ -3,15 +3,41 @@ import { uv } from './UVNode.js'; +@@ -1,17 +1,43 @@ +-import { registerNodeClass } from '../core/Node.js'; ++import Node, { registerNodeClass } from '../core/Node.js'; + import UniformNode, { uniform } from '../core/UniformNode.js'; + import { uv } from './UV.js'; import { textureSize } from './TextureSizeNode.js'; import { colorSpaceToLinear } from '../display/ColorSpaceNode.js'; import { expression } from '../code/ExpressionNode.js'; --import { addNodeClass } from '../core/Node.js'; -+import Node, { addNodeClass } from '../core/Node.js'; import { maxMipLevel } from '../utils/MaxMipLevelNode.js'; --import { addNodeElement, nodeProxy, vec3, nodeObject } from '../shadernode/ShaderNode.js'; -+import { addNodeElement, nodeProxy, vec3, nodeObject, ShaderNodeObject } from '../shadernode/ShaderNode.js'; +-import { nodeProxy, vec3, nodeObject } from '../tsl/TSLBase.js'; ++import { nodeProxy, vec3, nodeObject, ShaderNodeObject } from '../tsl/TSLBase.js'; import { NodeUpdateType } from '../core/constants.js'; import { IntType, UnsignedIntType } from '../../constants.js'; @@ -336,12 +337,12 @@ index 644c08f4..2141c761 100644 textureNode.levelNode = nodeObject(levelNode); textureNode.referenceNode = this.getSelf(); diff --git a/src-testing/src/nodes/code/CodeNode.ts b/src-testing/src/nodes/code/CodeNode.ts -index 06347564..1f81819b 100644 +index f2446d1e..677e9d37 100644 --- a/src-testing/src/nodes/code/CodeNode.ts +++ b/src-testing/src/nodes/code/CodeNode.ts @@ -1,7 +1,13 @@ - import Node, { addNodeClass } from '../core/Node.js'; - import { nodeProxy } from '../shadernode/ShaderNode.js'; + import Node, { registerNodeClass } from '../core/Node.js'; + import { nodeProxy } from '../tsl/TSLBase.js'; +import NodeBuilder from '../core/NodeBuilder.js'; class CodeNode extends Node { @@ -368,13 +369,13 @@ index 06347564..1f81819b 100644 for (const include of includes) { diff --git a/src-testing/src/nodes/code/FunctionNode.ts b/src-testing/src/nodes/code/FunctionNode.ts -index 6cffa933..5d5cc161 100644 +index 2132b75d..ff556801 100644 --- a/src-testing/src/nodes/code/FunctionNode.ts +++ b/src-testing/src/nodes/code/FunctionNode.ts @@ -1,21 +1,22 @@ + import { registerNodeClass } from '../core/Node.js'; import CodeNode from './CodeNode.js'; - import { addNodeClass } from '../core/Node.js'; - import { nodeObject } from '../shadernode/ShaderNode.js'; + import { nodeObject } from '../tsl/TSLBase.js'; +import NodeBuilder from '../core/NodeBuilder.js'; class FunctionNode extends CodeNode { @@ -406,16 +407,16 @@ index 6cffa933..5d5cc161 100644 super.generate(builder); const nodeFunction = this.getNodeFunction(builder); -@@ -61,7 +62,7 @@ class FunctionNode extends CodeNode { +@@ -63,7 +64,7 @@ export default FunctionNode; - export default FunctionNode; + registerNodeClass('Function', FunctionNode); -const nativeFn = (code, includes = [], language = '') => { +const nativeFn = (code: string, includes = [], language = '') => { for (let i = 0; i < includes.length; i++) { const include = includes[i]; -@@ -80,7 +81,7 @@ const nativeFn = (code, includes = [], language = '') => { +@@ -82,5 +83,5 @@ const nativeFn = (code, includes = [], language = '') => { return fn; }; @@ -423,16 +424,14 @@ index 6cffa933..5d5cc161 100644 -export const wgslFn = (code, includes) => nativeFn(code, includes, 'wgsl'); +export const glslFn = (code: string, includes) => nativeFn(code, includes, 'glsl'); +export const wgslFn = (code: string, includes) => nativeFn(code, includes, 'wgsl'); - - addNodeClass('FunctionNode', FunctionNode); diff --git a/src-testing/src/nodes/core/ContextNode.ts b/src-testing/src/nodes/core/ContextNode.ts -index 674f1cda..cfb748a8 100644 +index 2aa16e3f..38bdcd5f 100644 --- a/src-testing/src/nodes/core/ContextNode.ts +++ b/src-testing/src/nodes/core/ContextNode.ts @@ -1,8 +1,14 @@ - import Node, { addNodeClass } from './Node.js'; --import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js'; -+import { addNodeElement, nodeProxy, NodeRepresentation } from '../shadernode/ShaderNode.js'; + import Node, { registerNodeClass } from './Node.js'; +-import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js'; ++import { addMethodChaining, nodeProxy, NodeRepresentation } from '../tsl/TSLCore.js'; +import NodeBuilder from './NodeBuilder.js'; -class ContextNode extends Node { @@ -447,8 +446,8 @@ index 674f1cda..cfb748a8 100644 super(); this.isContextNode = true; -@@ -11,15 +17,15 @@ class ContextNode extends Node { - this.value = value; +@@ -15,15 +21,15 @@ class ContextNode extends Node { + return this.node.getScope(); } - getNodeType(builder) { @@ -466,7 +465,7 @@ index 674f1cda..cfb748a8 100644 const previousContext = builder.getContext(); builder.setContext({ ...builder.context, ...this.value }); -@@ -31,7 +37,7 @@ class ContextNode extends Node { +@@ -35,7 +41,7 @@ class ContextNode extends Node { return node; } @@ -475,21 +474,21 @@ index 674f1cda..cfb748a8 100644 const previousContext = builder.getContext(); builder.setContext({ ...builder.context, ...this.value }); -@@ -47,7 +53,7 @@ class ContextNode extends Node { - export default ContextNode; +@@ -53,7 +59,7 @@ export default ContextNode; + registerNodeClass('Context', ContextNode); export const context = nodeProxy(ContextNode); -export const label = (node, name) => context(node, { label: name }); +export const label = (node: NodeRepresentation, name: string) => context(node, { label: name }); - addNodeElement('context', context); - addNodeElement('label', label); + addMethodChaining('context', context); + addMethodChaining('label', label); diff --git a/src-testing/src/nodes/core/InputNode.ts b/src-testing/src/nodes/core/InputNode.ts -index 4d52ec26..5987158d 100644 +index b3af8aba..80971af9 100644 --- a/src-testing/src/nodes/core/InputNode.ts +++ b/src-testing/src/nodes/core/InputNode.ts @@ -1,8 +1,14 @@ - import Node, { addNodeClass } from './Node.js'; + import Node, { registerNodeClass } from './Node.js'; import { getValueType, getValueFromType, arrayBufferToBase64 } from './NodeUtils.js'; +import NodeBuilder from './NodeBuilder.js'; @@ -540,7 +539,7 @@ index 4d52ec26..5987158d 100644 export default InputNode; diff --git a/src-testing/src/nodes/core/Node.ts b/src-testing/src/nodes/core/Node.ts -index e67dcb70..0562802d 100644 +index d5a51581..a0ba607a 100644 --- a/src-testing/src/nodes/core/Node.ts +++ b/src-testing/src/nodes/core/Node.ts @@ -3,13 +3,91 @@ import { getNodeChildren, getCacheKey } from './NodeUtils.js'; @@ -705,8 +704,8 @@ index e67dcb70..0562802d 100644 callback(this); for (const childNode of this.getChildren()) { -@@ -110,7 +188,7 @@ class Node extends EventDispatcher { - return this._cacheKey; +@@ -114,7 +192,7 @@ class Node extends EventDispatcher { + return this; } - getHash(/*builder*/) { @@ -714,7 +713,7 @@ index e67dcb70..0562802d 100644 return this.uuid; } -@@ -126,14 +204,14 @@ class Node extends EventDispatcher { +@@ -130,14 +208,14 @@ class Node extends EventDispatcher { return this.updateAfterType; } @@ -731,7 +730,7 @@ index e67dcb70..0562802d 100644 const nodeProperties = builder.getNodeProperties(this); if (nodeProperties.outputNode) { -@@ -143,34 +221,34 @@ class Node extends EventDispatcher { +@@ -147,27 +225,27 @@ class Node extends EventDispatcher { return this.nodeType; } @@ -758,20 +757,12 @@ index e67dcb70..0562802d 100644 return null; } -- increaseUsage(builder) { -+ increaseUsage(builder: NodeBuilder) { - const nodeData = builder.getDataFromNode(this); - nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1; - - return nodeData.usageCount; - } - - analyze(builder) { + analyze(builder: NodeBuilder) { - const usageCount = this.increaseUsage(builder); + const usageCount = builder.increaseUsage(this); if (usageCount === 1) { -@@ -179,14 +257,14 @@ class Node extends EventDispatcher { +@@ -176,14 +254,14 @@ class Node extends EventDispatcher { const nodeProperties = builder.getNodeProperties(this); for (const childNode of Object.values(nodeProperties)) { @@ -789,7 +780,7 @@ index e67dcb70..0562802d 100644 const { outputNode } = builder.getNodeProperties(this); if (outputNode && outputNode.isNode === true) { -@@ -194,19 +272,19 @@ class Node extends EventDispatcher { +@@ -191,19 +269,19 @@ class Node extends EventDispatcher { } } @@ -813,7 +804,7 @@ index e67dcb70..0562802d 100644 const refNode = this.getShared(builder); if (this !== refNode) { -@@ -241,8 +319,8 @@ class Node extends EventDispatcher { +@@ -239,8 +317,8 @@ class Node extends EventDispatcher { } for (const childNode of Object.values(properties)) { @@ -824,7 +815,7 @@ index e67dcb70..0562802d 100644 } } } -@@ -278,10 +356,10 @@ class Node extends EventDispatcher { +@@ -276,10 +354,10 @@ class Node extends EventDispatcher { return getNodeChildren(this); } @@ -837,7 +828,7 @@ index e67dcb70..0562802d 100644 for (const { property, index, childNode } of nodeChildren) { if (index !== undefined) { -@@ -289,7 +367,9 @@ class Node extends EventDispatcher { +@@ -287,7 +365,9 @@ class Node extends EventDispatcher { inputNodes[property] = Number.isInteger(index) ? [] : {}; } @@ -848,7 +839,7 @@ index e67dcb70..0562802d 100644 } else { inputNodes[property] = childNode.toJSON(json.meta).uuid; } -@@ -300,39 +380,39 @@ class Node extends EventDispatcher { +@@ -298,39 +378,39 @@ class Node extends EventDispatcher { } } @@ -899,7 +890,7 @@ index e67dcb70..0562802d 100644 const { uuid, type } = this; const isRoot = meta === undefined || typeof meta === 'string'; -@@ -341,18 +421,18 @@ class Node extends EventDispatcher { +@@ -339,18 +419,18 @@ class Node extends EventDispatcher { textures: {}, images: {}, nodes: {}, @@ -921,7 +912,7 @@ index e67dcb70..0562802d 100644 metadata: { version: 4.6, type: 'Node', -@@ -360,7 +440,7 @@ class Node extends EventDispatcher { +@@ -358,7 +438,7 @@ class Node extends EventDispatcher { }, }; @@ -930,7 +921,7 @@ index e67dcb70..0562802d 100644 this.serialize(data); -@@ -369,12 +449,12 @@ class Node extends EventDispatcher { +@@ -367,12 +447,12 @@ class Node extends EventDispatcher { // TODO: Copied from Object3D.toJSON @@ -945,7 +936,7 @@ index e67dcb70..0562802d 100644 values.push(data); } -@@ -382,9 +462,9 @@ class Node extends EventDispatcher { +@@ -380,9 +460,9 @@ class Node extends EventDispatcher { } if (isRoot) { @@ -958,21 +949,21 @@ index e67dcb70..0562802d 100644 if (textures.length > 0) data.textures = textures; if (images.length > 0) data.images = images; -@@ -397,7 +477,7 @@ class Node extends EventDispatcher { +@@ -395,7 +475,7 @@ class Node extends EventDispatcher { export default Node; --export function addNodeClass(type, nodeClass) { -+export function addNodeClass(type: string, nodeClass: { new (...args: any[]): Node }) { - if (typeof nodeClass !== 'function' || !type) throw new Error(`Node class ${type} is not a class`); - if (NodeClasses.has(type)) { - console.warn(`Redefinition of node class ${type}`); -@@ -405,10 +485,10 @@ export function addNodeClass(type, nodeClass) { +-export function registerNodeClass(type, nodeClass) { ++export function registerNodeClass(type: string, nodeClass: { new (...args: any[]): Node }) { + const nodeType = type + 'Node'; + + if (typeof nodeClass !== 'function' || !type) throw new Error(`TSL.Node: Node class ${type} is not a class`); +@@ -411,10 +491,10 @@ export function registerNodeClass(type, nodeClass) { } - NodeClasses.set(type, nodeClass); -- nodeClass.type = type; -+ (nodeClass as NodeConstructor).type = type; + NodeClasses.set(nodeType, nodeClass); +- nodeClass.type = nodeType; ++ (nodeClass as NodeConstructor).type = nodeType; } -export function createNodeFromType(type) { @@ -980,6 +971,18 @@ index e67dcb70..0562802d 100644 const Class = NodeClasses.get(type); if (Class !== undefined) { +@@ -422,7 +502,10 @@ export function createNodeFromType(type) { + } + } + +-export function addNodeClass(type, nodeClass) { ++/** ++ * @deprecated Function addNodeClass() is deprecated. Use registerNodeClass() instead. ++ */ ++export function addNodeClass(type: string, nodeClass: { new (...args: any[]): Node }) { + console.warn('TSL.Node: Function addNodeClass() is deprecated. Use registerNodeClass() instead.'); + registerNodeClass(type.slice(0, -4), nodeClass); + } diff --git a/src-testing/src/nodes/core/NodeAttribute.ts b/src-testing/src/nodes/core/NodeAttribute.ts index 190fe8c5..d873bb24 100644 --- a/src-testing/src/nodes/core/NodeAttribute.ts @@ -1000,13 +1003,13 @@ index 190fe8c5..d873bb24 100644 this.name = name; diff --git a/src-testing/src/nodes/core/NodeBuilder.ts b/src-testing/src/nodes/core/NodeBuilder.ts -index b8d1f0b2..afb11879 100644 +index 62cc8b14..6bfe5839 100644 --- a/src-testing/src/nodes/core/NodeBuilder.ts +++ b/src-testing/src/nodes/core/NodeBuilder.ts @@ -7,7 +7,7 @@ import NodeCache from './NodeCache.js'; import ParameterNode from './ParameterNode.js'; import FunctionNode from '../code/FunctionNode.js'; - import { createNodeMaterialFromType, default as NodeMaterial } from '../materials/NodeMaterial.js'; + import NodeMaterial from '../../materials/nodes/NodeMaterial.js'; -import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js'; +import { NodeUpdateType, defaultBuildStages, shaderStages, NodeShaderStage } from './constants.js'; @@ -1017,9 +1020,9 @@ index b8d1f0b2..afb11879 100644 } from '../../renderers/common/nodes/NodeUniform.js'; -import { stack } from './StackNode.js'; --import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js'; +-import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js'; +import StackNode, { stack } from './StackNode.js'; -+import { getCurrentStack, setCurrentStack, ShaderNodeInternal, ShaderNodeObject } from '../shadernode/ShaderNode.js'; ++import { getCurrentStack, setCurrentStack, ShaderNodeInternal, ShaderNodeObject } from '../tsl/TSLBase.js'; import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js'; import ChainMap from '../../renderers/common/ChainMap.js'; @@ -1384,8 +1387,8 @@ index b8d1f0b2..afb11879 100644 return false; } -@@ -393,15 +504,53 @@ class NodeBuilder { - return false; +@@ -400,15 +511,53 @@ class NodeBuilder { + return nodeData.usageCount; } - generateTexture(/* texture, textureProperty, uvSnippet */) { @@ -1404,7 +1407,7 @@ index b8d1f0b2..afb11879 100644 + depthSnippet: string | null, + ): string; + -+ abstract generateTextureLevel( ++ abstract generateTextureLod( + texture: Texture, + textureProperty: string, + uvSnippet: string | null, @@ -1447,7 +1450,7 @@ index b8d1f0b2..afb11879 100644 if (value === null) { if (type === 'float' || type === 'int' || type === 'uint') value = 0; else if (type === 'bool') value = false; -@@ -412,26 +561,26 @@ class NodeBuilder { +@@ -419,26 +568,26 @@ class NodeBuilder { } if (type === 'float') return toFloat(value); @@ -1483,7 +1486,7 @@ index b8d1f0b2..afb11879 100644 } else if (typeLength > 4) { return `${this.getType(type)}()`; } -@@ -439,17 +588,17 @@ class NodeBuilder { +@@ -446,17 +595,17 @@ class NodeBuilder { throw new Error(`NodeBuilder: Type '${type}' not found in generate constant attempt.`); } @@ -1504,7 +1507,7 @@ index b8d1f0b2..afb11879 100644 const attributes = this.attributes; // find attribute -@@ -469,19 +618,19 @@ class NodeBuilder { +@@ -476,19 +625,19 @@ class NodeBuilder { return attribute; } @@ -1531,7 +1534,7 @@ index b8d1f0b2..afb11879 100644 return ( type === 'void' || type === 'property' || -@@ -498,10 +647,10 @@ class NodeBuilder { +@@ -505,10 +654,10 @@ class NodeBuilder { return false; } @@ -1544,7 +1547,7 @@ index b8d1f0b2..afb11879 100644 if (type === IntType) return 'int'; if (type === UnsignedIntType) return 'uint'; } -@@ -509,7 +658,7 @@ class NodeBuilder { +@@ -516,7 +665,7 @@ class NodeBuilder { return 'float'; } @@ -1553,7 +1556,7 @@ index b8d1f0b2..afb11879 100644 if (type === 'mat2') return 'vec2'; if (type === 'mat3') return 'vec3'; if (type === 'mat4') return 'vec4'; -@@ -517,7 +666,7 @@ class NodeBuilder { +@@ -524,7 +673,7 @@ class NodeBuilder { return this.getComponentType(type); } @@ -1562,7 +1565,7 @@ index b8d1f0b2..afb11879 100644 type = this.getVectorType(type); if (type === 'float' || type === 'bool' || type === 'int' || type === 'uint') return type; -@@ -533,7 +682,7 @@ class NodeBuilder { +@@ -540,7 +689,7 @@ class NodeBuilder { return 'float'; } @@ -1571,7 +1574,7 @@ index b8d1f0b2..afb11879 100644 if (type === 'color') return 'vec3'; if (type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'texture3D') return 'vec4'; -@@ -541,23 +690,23 @@ class NodeBuilder { +@@ -548,23 +697,23 @@ class NodeBuilder { return type; } @@ -1603,7 +1606,7 @@ index b8d1f0b2..afb11879 100644 const array = dataAttribute.array; const itemSize = attribute.itemSize; -@@ -572,28 +721,28 @@ class NodeBuilder { +@@ -579,28 +728,28 @@ class NodeBuilder { return this.getTypeFromLength(itemSize, arrayType); } @@ -1640,7 +1643,7 @@ index b8d1f0b2..afb11879 100644 const componentType = this.getComponentType(type); if (componentType === 'int' || componentType === 'uint') return type; -@@ -619,7 +768,11 @@ class NodeBuilder { +@@ -626,7 +775,11 @@ class NodeBuilder { return lastStack; } @@ -1653,7 +1656,7 @@ index b8d1f0b2..afb11879 100644 cache = cache === null ? (node.isGlobal(this) ? this.globalCache : this.cache) : cache; let nodeData = cache.getData(node); -@@ -632,16 +785,16 @@ class NodeBuilder { +@@ -639,16 +792,16 @@ class NodeBuilder { if (nodeData[shaderStage] === undefined) nodeData[shaderStage] = {}; @@ -1673,7 +1676,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node); let bufferAttribute = nodeData.bufferAttribute; -@@ -659,7 +812,7 @@ class NodeBuilder { +@@ -666,7 +819,7 @@ class NodeBuilder { return bufferAttribute; } @@ -1682,7 +1685,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node, shaderStage); if (nodeData.structType === undefined) { -@@ -674,7 +827,12 @@ class NodeBuilder { +@@ -681,7 +834,12 @@ class NodeBuilder { return node; } @@ -1696,7 +1699,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node, shaderStage, this.globalCache); let nodeUniform = nodeData.uniform; -@@ -692,7 +850,12 @@ class NodeBuilder { +@@ -699,7 +857,12 @@ class NodeBuilder { return nodeUniform; } @@ -1710,7 +1713,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node, shaderStage); let nodeVar = nodeData.variable; -@@ -712,7 +875,7 @@ class NodeBuilder { +@@ -719,7 +882,7 @@ class NodeBuilder { return nodeVar; } @@ -1719,7 +1722,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node, 'any'); let nodeVarying = nodeData.varying; -@@ -733,7 +896,7 @@ class NodeBuilder { +@@ -740,7 +903,7 @@ class NodeBuilder { return nodeVarying; } @@ -1728,7 +1731,7 @@ index b8d1f0b2..afb11879 100644 const nodeData = this.getDataFromNode(node); let nodeCode = nodeData.code; -@@ -752,7 +915,7 @@ class NodeBuilder { +@@ -759,7 +922,7 @@ class NodeBuilder { return nodeCode; } @@ -1737,7 +1740,7 @@ index b8d1f0b2..afb11879 100644 if (code === '') return this; code = this.tab + code; -@@ -766,7 +929,7 @@ class NodeBuilder { +@@ -773,7 +936,7 @@ class NodeBuilder { return this; } @@ -1746,7 +1749,7 @@ index b8d1f0b2..afb11879 100644 this.flow.code += code; return this; -@@ -784,11 +947,11 @@ class NodeBuilder { +@@ -791,11 +954,11 @@ class NodeBuilder { return this; } @@ -1760,7 +1763,7 @@ index b8d1f0b2..afb11879 100644 const output = node.getNodeType(this); const flowData = this.flowChildNode(node, output); -@@ -798,7 +961,9 @@ class NodeBuilder { +@@ -805,7 +968,9 @@ class NodeBuilder { return flowData; } @@ -1771,7 +1774,7 @@ index b8d1f0b2..afb11879 100644 const fn = new FunctionNode(); const previous = this.currentFunctionNode; -@@ -812,7 +977,7 @@ class NodeBuilder { +@@ -819,7 +984,7 @@ class NodeBuilder { return fn; } @@ -1780,7 +1783,7 @@ index b8d1f0b2..afb11879 100644 const layout = shaderNode.layout; const inputs = { -@@ -828,7 +993,7 @@ class NodeBuilder { +@@ -835,7 +1000,7 @@ class NodeBuilder { }, }; @@ -1789,7 +1792,7 @@ index b8d1f0b2..afb11879 100644 inputs[input.name] = new ParameterNode(input.type, input.name); } -@@ -844,14 +1009,14 @@ class NodeBuilder { +@@ -851,14 +1016,14 @@ class NodeBuilder { return flowData; } @@ -1806,7 +1809,7 @@ index b8d1f0b2..afb11879 100644 code: '', }; -@@ -866,7 +1031,7 @@ class NodeBuilder { +@@ -873,7 +1038,7 @@ class NodeBuilder { flow.result = node.build(this, output); } @@ -1815,7 +1818,7 @@ index b8d1f0b2..afb11879 100644 this.flow = previousFlow; this.vars = previousVars; -@@ -882,10 +1047,10 @@ class NodeBuilder { +@@ -889,10 +1054,10 @@ class NodeBuilder { return null; } @@ -1828,7 +1831,7 @@ index b8d1f0b2..afb11879 100644 code: '', }; -@@ -898,7 +1063,12 @@ class NodeBuilder { +@@ -905,7 +1070,12 @@ class NodeBuilder { return flow; } @@ -1842,7 +1845,7 @@ index b8d1f0b2..afb11879 100644 const previousShaderStage = this.shaderStage; this.setShaderStage(shaderStage); -@@ -920,19 +1090,15 @@ class NodeBuilder { +@@ -927,19 +1097,15 @@ class NodeBuilder { return this.attributes.concat(this.bufferAttributes); } @@ -1866,7 +1869,7 @@ index b8d1f0b2..afb11879 100644 let snippet = ''; const vars = this.vars[shaderStage]; -@@ -946,11 +1112,9 @@ class NodeBuilder { +@@ -953,11 +1119,9 @@ class NodeBuilder { return snippet; } @@ -1880,7 +1883,7 @@ index b8d1f0b2..afb11879 100644 const codes = this.codes[shaderStage]; let code = ''; -@@ -965,10 +1129,10 @@ class NodeBuilder { +@@ -972,10 +1136,10 @@ class NodeBuilder { } getHash() { @@ -1893,7 +1896,7 @@ index b8d1f0b2..afb11879 100644 this.shaderStage = shaderStage; } -@@ -976,7 +1140,7 @@ class NodeBuilder { +@@ -983,7 +1147,7 @@ class NodeBuilder { return this.shaderStage; } @@ -1902,7 +1905,7 @@ index b8d1f0b2..afb11879 100644 this.buildStage = buildStage; } -@@ -1034,7 +1198,7 @@ class NodeBuilder { +@@ -1049,7 +1213,7 @@ class NodeBuilder { return this; } @@ -1911,8 +1914,8 @@ index b8d1f0b2..afb11879 100644 if (type === 'float' || type === 'int' || type === 'uint') return new NumberNodeUniform(uniformNode); if (type === 'vec2' || type === 'ivec2' || type === 'uvec2') return new Vector2NodeUniform(uniformNode); if (type === 'vec3' || type === 'ivec3' || type === 'uvec3') return new Vector3NodeUniform(uniformNode); -@@ -1052,7 +1216,7 @@ class NodeBuilder { - return createNodeMaterialFromType(type); +@@ -1067,7 +1231,7 @@ class NodeBuilder { + throw new Error(`THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${type}() instead.`); } - format(snippet, fromType, toType) { @@ -2232,14 +2235,14 @@ index a1482362..0a62b23d 100644 this.needsInterpolation = false; diff --git a/src-testing/src/nodes/core/StackNode.ts b/src-testing/src/nodes/core/StackNode.ts -index 5f1871e7..62d7a250 100644 +index 536ec085..5091d5ac 100644 --- a/src-testing/src/nodes/core/StackNode.ts +++ b/src-testing/src/nodes/core/StackNode.ts @@ -1,8 +1,18 @@ - import Node, { addNodeClass } from './Node.js'; - import { select } from '../math/CondNode.js'; --import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js'; -+import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, ShaderNodeObject } from '../shadernode/ShaderNode.js'; + import Node, { registerNodeClass } from './Node.js'; + import { select } from '../math/ConditionalNode.js'; +-import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js'; ++import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, ShaderNodeObject } from '../tsl/TSLBase.js'; +import NodeBuilder from './NodeBuilder.js'; class StackNode extends Node { @@ -2301,11 +2304,11 @@ index 5f1871e7..62d7a250 100644 setCurrentStack(this); diff --git a/src-testing/src/nodes/core/StructTypeNode.ts b/src-testing/src/nodes/core/StructTypeNode.ts -index 69718799..e7574a1c 100644 +index 7f70920f..bb630985 100644 --- a/src-testing/src/nodes/core/StructTypeNode.ts +++ b/src-testing/src/nodes/core/StructTypeNode.ts @@ -1,7 +1,10 @@ - import Node, { addNodeClass } from './Node.js'; + import Node, { registerNodeClass } from './Node.js'; class StructTypeNode extends Node { - constructor(types) { @@ -2317,26 +2320,22 @@ index 69718799..e7574a1c 100644 this.types = types; diff --git a/src-testing/src/nodes/core/UniformGroupNode.ts b/src-testing/src/nodes/core/UniformGroupNode.ts -index 4a4eed22..e6f0c124 100644 +index 14205853..07147e1e 100644 --- a/src-testing/src/nodes/core/UniformGroupNode.ts +++ b/src-testing/src/nodes/core/UniformGroupNode.ts -@@ -1,7 +1,14 @@ --import Node from './Node.js'; -+import Node, { NodeJSONInputData, NodeJSONIntermediateOutputData } from './Node.js'; - import { addNodeClass } from './Node.js'; +@@ -1,6 +1,10 @@ +-import Node, { registerNodeClass } from './Node.js'; ++import Node, { NodeJSONInputData, NodeJSONIntermediateOutputData, registerNodeClass } from './Node.js'; class UniformGroupNode extends Node { -+ // TODO name -+ version: number; -+ + shared: boolean; + -+ isUniformGroup: boolean; ++ readonly isUniformGroup: true; + constructor(name, shared = false) { super('string'); -@@ -13,11 +20,11 @@ class UniformGroupNode extends Node { +@@ -12,11 +16,11 @@ class UniformGroupNode extends Node { this.isUniformGroup = true; } @@ -2350,7 +2349,7 @@ index 4a4eed22..e6f0c124 100644 super.serialize(data); data.name = this.name; -@@ -25,7 +32,7 @@ class UniformGroupNode extends Node { +@@ -24,7 +28,7 @@ class UniformGroupNode extends Node { data.shared = this.shared; } @@ -2360,16 +2359,16 @@ index 4a4eed22..e6f0c124 100644 this.name = data.name; diff --git a/src-testing/src/nodes/core/UniformNode.ts b/src-testing/src/nodes/core/UniformNode.ts -index 41e523c4..a0c2ae45 100644 +index 007361a6..bd8a210f 100644 --- a/src-testing/src/nodes/core/UniformNode.ts +++ b/src-testing/src/nodes/core/UniformNode.ts @@ -1,10 +1,18 @@ +-import { registerNodeClass } from './Node.js'; ++import Node, { registerNodeClass } from './Node.js'; import InputNode from './InputNode.js'; -import { objectGroup } from './UniformGroupNode.js'; --import { addNodeClass } from './Node.js'; +import UniformGroupNode, { objectGroup } from './UniformGroupNode.js'; -+import Node, { addNodeClass } from './Node.js'; - import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js'; + import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js'; +import NodeBuilder from './NodeBuilder.js'; +import NodeFrame from './NodeFrame.js'; +import { NodeUpdateType } from './constants.js'; @@ -2440,9 +2439,9 @@ index 41e523c4..a0c2ae45 100644 this.name || builder.context.label, ); const propertyName = builder.getPropertyName(nodeUniform); -@@ -78,11 +86,14 @@ class UniformNode extends InputNode { +@@ -80,11 +88,14 @@ export default UniformNode; - export default UniformNode; + registerNodeClass('Uniform', UniformNode); -export const uniform = (arg1, arg2) => { +export const uniform = (arg1: InputNode | TValue, arg2?: Node | string) => { @@ -2495,13 +2494,13 @@ index 3b01a9a6..5ff6ad5f 100644 +export const shaderStages: NodeShaderStage[] = [...defaultShaderStages, 'compute']; export const vectorComponents = ['x', 'y', 'z', 'w']; diff --git a/src-testing/src/nodes/fog/FogNode.ts b/src-testing/src/nodes/fog/FogNode.ts -index 9417df5a..43761555 100644 +index 67df32f0..e05552a6 100644 --- a/src-testing/src/nodes/fog/FogNode.ts +++ b/src-testing/src/nodes/fog/FogNode.ts @@ -1,6 +1,7 @@ - import Node, { addNodeClass } from '../core/Node.js'; - import { positionView } from '../accessors/PositionNode.js'; - import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js'; + import Node, { registerNodeClass } from '../core/Node.js'; + import { positionView } from '../accessors/Position.js'; + import { nodeProxy } from '../tsl/TSLBase.js'; +import NodeBuilder from '../core/NodeBuilder.js'; class FogNode extends Node { @@ -2516,15 +2515,15 @@ index 9417df5a..43761555 100644 const getViewZ = builder.context.getViewZ; diff --git a/src-testing/src/nodes/lighting/LightingContextNode.ts b/src-testing/src/nodes/lighting/LightingContextNode.ts -index a6262f9a..22657e2e 100644 +index 120a5ef8..1dfade14 100644 --- a/src-testing/src/nodes/lighting/LightingContextNode.ts +++ b/src-testing/src/nodes/lighting/LightingContextNode.ts @@ -1,9 +1,30 @@ +-import { registerNodeClass } from '../core/Node.js'; ++import Node, { registerNodeClass } from '../core/Node.js'; import ContextNode from '../core/ContextNode.js'; --import { addNodeClass } from '../core/Node.js'; --import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js'; -+import Node, { addNodeClass } from '../core/Node.js'; -+import { addNodeElement, nodeProxy, float, vec3, ShaderNodeObject } from '../shadernode/ShaderNode.js'; +-import { nodeProxy, float, vec3 } from '../tsl/TSLBase.js'; ++import { nodeProxy, float, vec3, ShaderNodeObject } from '../tsl/TSLBase.js'; +import NodeBuilder from '../core/NodeBuilder.js'; -class LightingContextNode extends ContextNode { @@ -2560,9 +2559,9 @@ index a6262f9a..22657e2e 100644 - const context = { + const context: LightingContext = { - radiance: vec3().temp('radiance'), - irradiance: vec3().temp('irradiance'), - iblIrradiance: vec3().temp('iblIrradiance'), + radiance: vec3().toVar('radiance'), + irradiance: vec3().toVar('irradiance'), + iblIrradiance: vec3().toVar('iblIrradiance'), @@ -41,7 +62,7 @@ class LightingContextNode extends ContextNode { return context; } @@ -2572,32 +2571,11 @@ index a6262f9a..22657e2e 100644 this.value = this._value || (this._value = this.getContext()); this.value.lightingModel = this.lightingModel || builder.context.lightingModel; -diff --git a/src-testing/src/nodes/lighting/LightsNode.ts b/src-testing/src/nodes/lighting/LightsNode.ts -index 9a41cc7d..df337a72 100644 ---- a/src-testing/src/nodes/lighting/LightsNode.ts -+++ b/src-testing/src/nodes/lighting/LightsNode.ts -@@ -1,6 +1,7 @@ - import Node from '../core/Node.js'; - import AnalyticLightNode from './AnalyticLightNode.js'; - import { nodeObject, nodeProxy, vec3 } from '../shadernode/ShaderNode.js'; -+import { Light } from 'three'; - - const LightNodes = new WeakMap(); - -@@ -124,7 +125,7 @@ class LightsNode extends Node { - return null; - } - -- fromLights(lights = []) { -+ fromLights(lights: Light[] = []) { - const lightNodes = []; - - lights = sortLights(lights); -diff --git a/src-testing/src/nodes/shadernode/ShaderNode.ts b/src-testing/src/nodes/shadernode/ShaderNode.ts -index dfff3388..134cea63 100644 ---- a/src-testing/src/nodes/shadernode/ShaderNode.ts -+++ b/src-testing/src/nodes/shadernode/ShaderNode.ts -@@ -7,11 +7,49 @@ import SetNode from '../utils/SetNode.js'; +diff --git a/src-testing/src/nodes/tsl/TSLCore.ts b/src-testing/src/nodes/tsl/TSLCore.ts +index e9054e41..86b27d73 100644 +--- a/src-testing/src/nodes/tsl/TSLCore.ts ++++ b/src-testing/src/nodes/tsl/TSLCore.ts +@@ -7,11 +7,40 @@ import SetNode from '../utils/SetNode.js'; import FlipNode from '../utils/FlipNode.js'; import ConstNode from '../core/ConstNode.js'; import { getValueFromType, getValueType } from '../core/NodeUtils.js'; @@ -2628,26 +2606,17 @@ index dfff3388..134cea63 100644 + toUvec4: typeof uvec4; + toBvec4: typeof bvec4; + toMat2: typeof mat2; -+ toImat2: typeof imat2; -+ toUmat2: typeof umat2; -+ toBmat2: typeof bmat2; + toMat3: typeof mat3; -+ toImat3: typeof imat3; -+ toUmat3: typeof umat3; -+ toBmat3: typeof bmat3; + toMat4: typeof mat4; -+ toImat4: typeof imat4; -+ toUmat4: typeof umat4; -+ toBmat4: typeof bmat4; + + element: typeof element; + convert: typeof convert; +} + - const NodeElements = new Map(); // @TODO: Currently only a few nodes are added, probably also add others + const NodeElements = new Map(); - export function addNodeElement(name, nodeElement) { -@@ -25,6 +63,141 @@ export function addNodeElement(name, nodeElement) { + export function addMethodChaining(name, nodeElement) { +@@ -25,6 +54,141 @@ export function addMethodChaining(name, nodeElement) { NodeElements.set(name, nodeElement); } @@ -2789,7 +2758,7 @@ index dfff3388..134cea63 100644 const parseSwizzle = props => props.replace(/r|s/g, 'x').replace(/g|t/g, 'y').replace(/b|p/g, 'z').replace(/a|q/g, 'w'); const parseSwizzleAndSort = props => parseSwizzle(props).split('').sort().join(''); -@@ -117,7 +290,7 @@ const shaderNodeHandler = { +@@ -117,7 +281,7 @@ const shaderNodeHandler = { const nodeObjectsCacheMap = new WeakMap(); const nodeBuilderFunctionsCacheMap = new WeakMap(); @@ -2798,7 +2767,7 @@ index dfff3388..134cea63 100644 const type = getValueType(obj); if (type === 'node') { -@@ -186,18 +359,20 @@ const ShaderNodeImmutable = function (NodeClass, ...params) { +@@ -186,18 +350,20 @@ const ShaderNodeImmutable = function (NodeClass, ...params) { }; class ShaderCallNodeInternal extends Node { @@ -2822,7 +2791,7 @@ index dfff3388..134cea63 100644 const { shaderNode, inputNodes } = this; const properties = builder.getNodeProperties(shaderNode); -@@ -272,7 +447,15 @@ class ShaderCallNodeInternal extends Node { +@@ -272,7 +438,15 @@ class ShaderCallNodeInternal extends Node { } } @@ -2838,7 +2807,7 @@ index dfff3388..134cea63 100644 constructor(jsFunc, nodeType) { super(nodeType); -@@ -284,7 +467,7 @@ class ShaderNodeInternal extends Node { +@@ -284,7 +458,7 @@ class ShaderNodeInternal extends Node { this.once = false; } @@ -2847,7 +2816,7 @@ index dfff3388..134cea63 100644 this.layout = layout; return this; -@@ -301,6 +484,8 @@ class ShaderNodeInternal extends Node { +@@ -301,6 +475,8 @@ class ShaderNodeInternal extends Node { } } @@ -2856,7 +2825,7 @@ index dfff3388..134cea63 100644 const bools = [false, true]; const uints = [0, 1, 2, 3]; const ints = [-1, -2]; -@@ -394,10 +579,27 @@ export function ShaderNode(jsFunc, nodeType) { +@@ -394,10 +570,27 @@ export function ShaderNode(jsFunc, nodeType) { return new Proxy(new ShaderNodeInternal(jsFunc, nodeType), shaderNodeHandler); } @@ -3135,10 +3104,10 @@ index edd4fcf9..28f354e9 100644 } } diff --git a/src-testing/src/renderers/common/Background.ts b/src-testing/src/renderers/common/Background.ts -index 2b163b6c..546fbfae 100644 +index dfef7929..2626ed56 100644 --- a/src-testing/src/renderers/common/Background.ts +++ b/src-testing/src/renderers/common/Background.ts -@@ -13,18 +13,33 @@ import { +@@ -13,18 +13,33 @@ import NodeMaterial from '../../materials/nodes/NodeMaterial.js'; import { Mesh } from '../../objects/Mesh.js'; import { SphereGeometry } from '../../geometries/SphereGeometry.js'; import { BackSide, LinearSRGBColorSpace } from '../../constants.js'; @@ -3669,7 +3638,7 @@ index 0d0c35a2..f5a186e1 100644 // size of a chunk in bytes (STD140 layout) diff --git a/src-testing/src/renderers/common/CubeRenderTarget.ts b/src-testing/src/renderers/common/CubeRenderTarget.ts -index f964768c..75ffd8ca 100644 +index 00c0fd8c..50f7e146 100644 --- a/src-testing/src/renderers/common/CubeRenderTarget.ts +++ b/src-testing/src/renderers/common/CubeRenderTarget.ts @@ -9,17 +9,22 @@ import { CubeCamera } from '../../cameras/CubeCamera.js'; @@ -4433,7 +4402,7 @@ index e77308c1..a3556aa1 100644 dispose() { diff --git a/src-testing/src/renderers/common/RenderList.ts b/src-testing/src/renderers/common/RenderList.ts -index a72a91df..1392d85f 100644 +index b9db4833..befdccd9 100644 --- a/src-testing/src/renderers/common/RenderList.ts +++ b/src-testing/src/renderers/common/RenderList.ts @@ -1,32 +1,66 @@ @@ -4547,7 +4516,7 @@ index a72a91df..1392d85f 100644 const renderItem = this.getNextRenderItem(object, geometry, material, groupOrder, z, group); if (object.occlusionTest === true) this.occlusionQueryCount++; -@@ -95,17 +143,24 @@ class RenderList { +@@ -95,25 +143,35 @@ class RenderList { (material.transparent === true || material.transmission > 0 ? this.transparent : this.opaque).push(renderItem); } @@ -4575,8 +4544,9 @@ index a72a91df..1392d85f 100644 this.lightsArray.push(light); } -@@ -113,7 +168,10 @@ class RenderList { - return this.lightsNode.fromLights(this.lightsArray); + getLightsNode() { +- return this.lightsNode.fromLights(this.lightsArray); ++ return new LightsNode(this.lightsArray); } - sort(customOpaqueSort, customTransparentSort) { @@ -4898,19 +4868,10 @@ index 0ec34b04..573cae2b 100644 this.vertexProgram = vertexProgram; diff --git a/src-testing/src/renderers/common/Renderer.ts b/src-testing/src/renderers/common/Renderer.ts -index 19d53dc9..35e0d907 100644 +index da542bd1..8b20b321 100644 --- a/src-testing/src/renderers/common/Renderer.ts +++ b/src-testing/src/renderers/common/Renderer.ts -@@ -15,7 +15,7 @@ import ClippingContext from './ClippingContext.js'; - import QuadMesh from './QuadMesh.js'; - import RenderBundles from './RenderBundles.js'; - --import { NodeMaterial } from '../../nodes/Nodes.js'; -+import { ComputeNode, LightsNode, MRTNode, NodeMaterial } from '../../nodes/Nodes.js'; - - import { Scene } from '../../scenes/Scene.js'; - import { Frustum } from '../../math/Frustum.js'; -@@ -36,7 +36,33 @@ import { +@@ -37,7 +37,36 @@ import { HalfFloatType, RGBAFormat, PCFShadowMap, @@ -4941,10 +4902,13 @@ index 19d53dc9..35e0d907 100644 +import { Line } from '../../objects/Line.js'; +import { Points } from '../../objects/Points.js'; +import { ArrayCamera } from '../../cameras/ArrayCamera.js'; ++import MRTNode from '../../nodes/core/MRTNode.js'; ++import LightsNode from '../../nodes/lighting/LightsNode.js'; ++import ComputeNode from '../../nodes/gpgpu/ComputeNode.js'; const _scene = /*@__PURE__*/ new Scene(); const _drawingBufferSize = /*@__PURE__*/ new Vector2(); -@@ -45,8 +71,154 @@ const _frustum = /*@__PURE__*/ new Frustum(); +@@ -46,8 +75,156 @@ const _frustum = /*@__PURE__*/ new Frustum(); const _projScreenMatrix = /*@__PURE__*/ new Matrix4(); const _vector3 = /*@__PURE__*/ new Vector3(); @@ -4989,6 +4953,8 @@ index 19d53dc9..35e0d907 100644 + + info: Info; + ++ nodes: { library: NodeLibrary }; ++ + _getFallback: ((error: unknown) => Backend) | null; + + _pixelRatio: number; @@ -5100,7 +5066,7 @@ index 19d53dc9..35e0d907 100644 this.isRenderer = true; // -@@ -165,12 +337,12 @@ class Renderer { +@@ -170,12 +347,12 @@ class Renderer { getShaderAsync: async (scene, camera, object) => { await this.compileAsync(scene, camera); @@ -5117,7 +5083,7 @@ index 19d53dc9..35e0d907 100644 object, material, scene, -@@ -258,12 +430,12 @@ class Renderer { +@@ -263,12 +440,12 @@ class Renderer { return this.backend.coordinateSystem; } @@ -5132,7 +5098,7 @@ index 19d53dc9..35e0d907 100644 const previousRenderId = nodeFrame.renderId; const previousRenderContext = this._currentRenderContext; -@@ -272,15 +444,15 @@ class Renderer { +@@ -277,15 +454,15 @@ class Renderer { // @@ -5151,7 +5117,7 @@ index 19d53dc9..35e0d907 100644 this._currentRenderContext = renderContext; this._currentRenderObjectFunction = this.renderObject; -@@ -309,7 +481,7 @@ class Renderer { +@@ -314,7 +491,7 @@ class Renderer { // @@ -5160,7 +5126,7 @@ index 19d53dc9..35e0d907 100644 renderList.begin(); this._projectObject(scene, camera, 0, renderList); -@@ -317,8 +489,8 @@ class Renderer { +@@ -322,8 +499,8 @@ class Renderer { // include lights from target scene if (targetScene !== scene) { targetScene.traverseVisible(function (object) { @@ -5171,7 +5137,7 @@ index 19d53dc9..35e0d907 100644 } }); } -@@ -328,12 +500,12 @@ class Renderer { +@@ -333,12 +510,12 @@ class Renderer { // if (renderTarget !== null) { @@ -5188,7 +5154,7 @@ index 19d53dc9..35e0d907 100644 } else { renderContext.textures = null; renderContext.depthTexture = null; -@@ -341,11 +513,11 @@ class Renderer { +@@ -346,11 +523,11 @@ class Renderer { // @@ -5202,7 +5168,7 @@ index 19d53dc9..35e0d907 100644 // process render lists -@@ -373,7 +545,7 @@ class Renderer { +@@ -378,7 +555,7 @@ class Renderer { await Promise.all(compilationPromises); } @@ -5211,7 +5177,7 @@ index 19d53dc9..35e0d907 100644 if (this._initialized === false) await this.init(); const renderContext = this._renderScene(scene, camera); -@@ -381,7 +553,7 @@ class Renderer { +@@ -386,7 +563,7 @@ class Renderer { await this.backend.resolveTimestampAsync(renderContext, 'render'); } @@ -5220,7 +5186,7 @@ index 19d53dc9..35e0d907 100644 this._mrt = mrt; return this; -@@ -391,15 +563,15 @@ class Renderer { +@@ -396,15 +573,15 @@ class Renderer { return this._mrt; } @@ -5239,7 +5205,7 @@ index 19d53dc9..35e0d907 100644 const renderBundleData = this.backend.get(renderBundle); if (renderBundleData.renderContexts === undefined) renderBundleData.renderContexts = new Set(); -@@ -413,7 +585,7 @@ class Renderer { +@@ -418,7 +595,7 @@ class Renderer { if (renderBundleNeedsUpdate) { if (renderContextData.renderObjects === undefined || object.needsUpdate === true) { @@ -5248,7 +5214,7 @@ index 19d53dc9..35e0d907 100644 renderContextData.renderObjects = []; renderContextData.renderBundles = []; -@@ -436,13 +608,13 @@ class Renderer { +@@ -441,13 +618,13 @@ class Renderer { object.needsUpdate = false; } else { @@ -5264,7 +5230,7 @@ index 19d53dc9..35e0d907 100644 // -@@ -452,17 +624,17 @@ class Renderer { +@@ -457,17 +634,17 @@ class Renderer { ); renderObject.object.normalMatrix.getNormalMatrix(renderObject.object.modelViewMatrix); @@ -5286,7 +5252,7 @@ index 19d53dc9..35e0d907 100644 if (this._initialized === false) { console.warn( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.', -@@ -520,12 +692,12 @@ class Renderer { +@@ -525,12 +702,12 @@ class Renderer { return frameBufferTarget; } @@ -5301,7 +5267,7 @@ index 19d53dc9..35e0d907 100644 const previousRenderId = nodeFrame.renderId; const previousRenderContext = this._currentRenderContext; -@@ -554,7 +726,7 @@ class Renderer { +@@ -559,7 +736,7 @@ class Renderer { // @@ -5310,7 +5276,7 @@ index 19d53dc9..35e0d907 100644 this._currentRenderContext = renderContext; this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject; -@@ -626,7 +798,7 @@ class Renderer { +@@ -631,7 +808,7 @@ class Renderer { _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); _frustum.setFromProjectionMatrix(_projScreenMatrix, coordinateSystem); @@ -5319,7 +5285,7 @@ index 19d53dc9..35e0d907 100644 renderList.begin(); this._projectObject(scene, camera, 0, renderList); -@@ -640,14 +812,14 @@ class Renderer { +@@ -645,14 +822,14 @@ class Renderer { // if (renderTarget !== null) { @@ -5340,7 +5306,7 @@ index 19d53dc9..35e0d907 100644 renderContext.renderTarget = renderTarget; renderContext.depth = renderTarget.depthBuffer; renderContext.stencil = renderTarget.stencilBuffer; -@@ -668,11 +840,11 @@ class Renderer { +@@ -673,11 +850,11 @@ class Renderer { // @@ -5354,7 +5320,7 @@ index 19d53dc9..35e0d907 100644 // -@@ -709,8 +881,8 @@ class Renderer { +@@ -714,8 +891,8 @@ class Renderer { const quad = this._quad; @@ -5365,7 +5331,7 @@ index 19d53dc9..35e0d907 100644 quad.material.needsUpdate = true; } -@@ -738,13 +910,13 @@ class Renderer { +@@ -743,13 +920,13 @@ class Renderer { return this._activeMipmapLevel; } @@ -5382,7 +5348,7 @@ index 19d53dc9..35e0d907 100644 return await this.backend.getArrayBufferAsync(attribute); } -@@ -756,11 +928,11 @@ class Renderer { +@@ -761,11 +938,11 @@ class Renderer { return this._pixelRatio; } @@ -5396,7 +5362,7 @@ index 19d53dc9..35e0d907 100644 return target.set(this._width, this._height); } -@@ -770,7 +942,7 @@ class Renderer { +@@ -775,7 +952,7 @@ class Renderer { this.setSize(this._width, this._height, false); } @@ -5405,7 +5371,7 @@ index 19d53dc9..35e0d907 100644 this._width = width; this._height = height; -@@ -784,7 +956,7 @@ class Renderer { +@@ -789,7 +966,7 @@ class Renderer { if (this._initialized) this.backend.updateSize(); } @@ -5414,7 +5380,7 @@ index 19d53dc9..35e0d907 100644 this._width = width; this._height = height; -@@ -801,15 +973,15 @@ class Renderer { +@@ -806,15 +983,15 @@ class Renderer { if (this._initialized) this.backend.updateSize(); } @@ -5433,7 +5399,7 @@ index 19d53dc9..35e0d907 100644 const scissor = this._scissor; target.x = scissor.x; -@@ -820,13 +992,15 @@ class Renderer { +@@ -825,13 +1002,15 @@ class Renderer { return target; } @@ -5453,7 +5419,7 @@ index 19d53dc9..35e0d907 100644 } } -@@ -834,34 +1008,36 @@ class Renderer { +@@ -839,34 +1018,36 @@ class Renderer { return this._scissorTest; } @@ -5498,7 +5464,7 @@ index 19d53dc9..35e0d907 100644 this._clearColor.set(color); this._clearColor.a = alpha; } -@@ -870,7 +1046,7 @@ class Renderer { +@@ -875,7 +1056,7 @@ class Renderer { return this._clearColor.a; } @@ -5507,7 +5473,7 @@ index 19d53dc9..35e0d907 100644 this._clearColor.a = alpha; } -@@ -878,7 +1054,7 @@ class Renderer { +@@ -883,7 +1064,7 @@ class Renderer { return this._clearDepth; } @@ -5516,7 +5482,7 @@ index 19d53dc9..35e0d907 100644 this._clearDepth = depth; } -@@ -886,11 +1062,11 @@ class Renderer { +@@ -891,11 +1072,11 @@ class Renderer { return this._clearStencil; } @@ -5530,7 +5496,7 @@ index 19d53dc9..35e0d907 100644 const renderContext = this._currentRenderContext; return renderContext && this.backend.isOccluded(renderContext, object); -@@ -910,9 +1086,9 @@ class Renderer { +@@ -915,9 +1096,9 @@ class Renderer { let renderTargetData = null; if (renderTarget !== null) { @@ -5542,7 +5508,7 @@ index 19d53dc9..35e0d907 100644 } this.backend.clear(color, depth, stencil, renderTargetData); -@@ -923,8 +1099,8 @@ class Renderer { +@@ -928,8 +1109,8 @@ class Renderer { const quad = this._quad; @@ -5553,7 +5519,7 @@ index 19d53dc9..35e0d907 100644 quad.material.needsUpdate = true; } -@@ -963,7 +1139,7 @@ class Renderer { +@@ -968,7 +1149,7 @@ class Renderer { } get currentColorSpace() { @@ -5562,7 +5528,7 @@ index 19d53dc9..35e0d907 100644 if (renderTarget !== null) { const texture = renderTarget.texture; -@@ -977,20 +1153,20 @@ class Renderer { +@@ -982,20 +1163,20 @@ class Renderer { dispose() { this.info.dispose(); @@ -5592,7 +5558,7 @@ index 19d53dc9..35e0d907 100644 this._renderTarget = renderTarget; this._activeCubeFace = activeCubeFace; this._activeMipmapLevel = activeMipmapLevel; -@@ -1000,7 +1176,19 @@ class Renderer { +@@ -1005,7 +1186,19 @@ class Renderer { return this._renderTarget; } @@ -5613,7 +5579,7 @@ index 19d53dc9..35e0d907 100644 this._renderObjectFunction = renderObjectFunction; } -@@ -1008,10 +1196,10 @@ class Renderer { +@@ -1013,10 +1206,10 @@ class Renderer { return this._renderObjectFunction; } @@ -5626,7 +5592,7 @@ index 19d53dc9..35e0d907 100644 const previousRenderId = nodeFrame.renderId; -@@ -1026,9 +1214,9 @@ class Renderer { +@@ -1031,9 +1224,9 @@ class Renderer { // const backend = this.backend; @@ -5639,7 +5605,7 @@ index 19d53dc9..35e0d907 100644 const computeList = Array.isArray(computeNodes) ? computeNodes : [computeNodes]; -@@ -1075,13 +1263,13 @@ class Renderer { +@@ -1080,13 +1273,13 @@ class Renderer { nodeFrame.renderId = previousRenderId; } @@ -5655,7 +5621,7 @@ index 19d53dc9..35e0d907 100644 if (this._initialized === false) { console.warn( 'THREE.Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.', -@@ -1093,64 +1281,77 @@ class Renderer { +@@ -1098,64 +1291,77 @@ class Renderer { return this.backend.hasFeature(name); } @@ -5754,7 +5720,7 @@ index 19d53dc9..35e0d907 100644 .applyMatrix4(object.matrixWorld) .applyMatrix4(_projScreenMatrix); } -@@ -1160,7 +1361,7 @@ class Renderer { +@@ -1165,7 +1371,7 @@ class Renderer { for (let i = 0, l = groups.length; i < l; i++) { const group = groups[i]; @@ -5763,7 +5729,7 @@ index 19d53dc9..35e0d907 100644 if (groupMaterial && groupMaterial.visible) { renderList.push(object, geometry, groupMaterial, groupOrder, _vector3.z, group); -@@ -1177,7 +1378,7 @@ class Renderer { +@@ -1182,7 +1388,7 @@ class Renderer { const baseRenderList = renderList; // replace render list @@ -5772,7 +5738,7 @@ index 19d53dc9..35e0d907 100644 renderList.begin(); -@@ -1197,13 +1398,13 @@ class Renderer { +@@ -1202,13 +1408,13 @@ class Renderer { } } @@ -5788,7 +5754,7 @@ index 19d53dc9..35e0d907 100644 // process renderable objects for (let i = 0, il = renderList.length; i < il; i++) { -@@ -1214,42 +1415,50 @@ class Renderer { +@@ -1219,42 +1425,50 @@ class Renderer { const { object, geometry, material, group } = renderItem; @@ -5850,7 +5816,7 @@ index 19d53dc9..35e0d907 100644 let overridePositionNode; let overrideFragmentNode; let overrideDepthNode; -@@ -1334,21 +1543,29 @@ class Renderer { +@@ -1339,21 +1553,29 @@ class Renderer { object.onAfterRender(this, scene, camera, geometry, material, group); } @@ -5884,7 +5850,7 @@ index 19d53dc9..35e0d907 100644 // -@@ -1357,10 +1574,10 @@ class Renderer { +@@ -1362,10 +1584,10 @@ class Renderer { // @@ -5899,7 +5865,7 @@ index 19d53dc9..35e0d907 100644 // -@@ -1374,38 +1591,46 @@ class Renderer { +@@ -1379,38 +1601,46 @@ class Renderer { this.backend.draw(renderObject, this.info); if (this._currentRenderBundle !== null) { @@ -6565,6 +6531,119 @@ index bd94e11f..f57c897d 100644 } } else { bindings.push(instanceGroup); +diff --git a/src-testing/src/renderers/common/nodes/NodeLibrary.ts b/src-testing/src/renderers/common/nodes/NodeLibrary.ts +index d631572a..dc0c0a05 100644 +--- a/src-testing/src/renderers/common/nodes/NodeLibrary.ts ++++ b/src-testing/src/renderers/common/nodes/NodeLibrary.ts +@@ -1,4 +1,21 @@ ++import { Material } from '../../../materials/Material.js'; ++import NodeMaterial from '../../../materials/nodes/NodeMaterial.js'; ++import { ToneMapping } from '../../../constants.js'; ++import { NodeRepresentation, ShaderNodeObject } from '../../../nodes/tsl/TSLCore.js'; ++import Node from '../../../nodes/core/Node.js'; ++import { Light } from '../../../lights/Light.js'; ++import AnalyticLightNode from '../../../nodes/lighting/AnalyticLightNode.js'; ++import { ColorSpaceMethod } from '../../../nodes/display/ColorSpaceNode.js'; ++ + class NodeLibrary { ++ lightNodes: WeakMap<{ new (): Light }, { new (light: Light): AnalyticLightNode }>; ++ materialNodes: Map; ++ toneMappingNodes: Map< ++ ToneMapping, ++ (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject ++ >; ++ colorSpaceNodes: Map ShaderNodeObject>; ++ + constructor() { + this.lightNodes = new WeakMap(); + this.materialNodes = new Map(); +@@ -6,8 +23,8 @@ class NodeLibrary { + this.colorSpaceNodes = new Map(); + } + +- fromMaterial(material) { +- if (material.isNodeMaterial) return material; ++ fromMaterial(material: Material) { ++ if ((material as NodeMaterial).isNodeMaterial) return material; + + let nodeMaterial = null; + +@@ -24,39 +41,52 @@ class NodeLibrary { + return nodeMaterial; + } + +- addColorSpace(colorSpaceNode, colorSpace) { ++ addColorSpace(colorSpaceNode: (color: NodeRepresentation) => ShaderNodeObject, colorSpace: ColorSpaceMethod) { + this.addType(colorSpaceNode, colorSpace, this.colorSpaceNodes); + } + +- getColorSpaceFunction(colorSpace) { ++ getColorSpaceFunction(colorSpace: ColorSpaceMethod) { + return this.colorSpaceNodes.get(colorSpace) || null; + } + +- addToneMapping(toneMappingNode, toneMapping) { ++ addToneMapping( ++ toneMappingNode: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject, ++ toneMapping: ToneMapping, ++ ) { + this.addType(toneMappingNode, toneMapping, this.toneMappingNodes); + } + +- getToneMappingFunction(toneMapping) { ++ getToneMappingFunction(toneMapping: ToneMapping) { + return this.toneMappingNodes.get(toneMapping) || null; + } + +- getMaterialNodeClass(materialType) { ++ getMaterialNodeClass(materialType: string) { + return this.materialNodes.get(materialType) || null; + } + +- addMaterial(materialNodeClass, materialClass) { ++ addMaterial(materialNodeClass: { new (): NodeMaterial }, materialClass: { new (): Material }) { + this.addType(materialNodeClass, materialClass.name, this.materialNodes); + } + +- getLightNodeClass(light) { ++ getLightNodeClass(light: Light) { + return this.lightNodes.get(light) || null; + } + +- addLight(lightNodeClass, lightClass) { +- this.addClass(lightNodeClass, lightClass, this.lightNodes); ++ addLight( ++ lightNodeClass: { new (light: TLight): AnalyticLightNode }, ++ lightClass: { new (): TLight }, ++ ) { ++ this.addClass( ++ lightNodeClass, ++ lightClass, ++ this.lightNodes as unknown as WeakMap< ++ { new (): TLight }, ++ { new (light: TLight): AnalyticLightNode } ++ >, ++ ); + } + +- addType(nodeClass, type, library) { ++ addType(nodeClass: TNodeClass, type: TType, library: Map) { + if (library.has(type)) { + console.warn(`Redefinition of node ${type}`); + return; +@@ -69,7 +99,11 @@ class NodeLibrary { + library.set(type, nodeClass); + } + +- addClass(nodeClass, baseClass, library) { ++ addClass( ++ nodeClass: TNodeClass, ++ baseClass: TBaseClass, ++ library: WeakMap, ++ ) { + if (library.has(baseClass)) { + console.warn(`Redefinition of node ${baseClass.name}`); + return; diff --git a/src-testing/src/renderers/common/nodes/NodeUniform.ts b/src-testing/src/renderers/common/nodes/NodeUniform.ts index 659f5a82..d4f47579 100644 --- a/src-testing/src/renderers/common/nodes/NodeUniform.ts @@ -6698,20 +6777,15 @@ index d2d92cb2..c022f814 100644 for (const uniform of this.uniforms) { const node = uniform.nodeUniform.node; diff --git a/src-testing/src/renderers/common/nodes/Nodes.ts b/src-testing/src/renderers/common/nodes/Nodes.ts -index 6c408849..8d2977d8 100644 +index 7fb333a4..b95f5184 100644 --- a/src-testing/src/renderers/common/nodes/Nodes.ts +++ b/src-testing/src/renderers/common/nodes/Nodes.ts -@@ -15,25 +15,78 @@ import { +@@ -15,14 +15,67 @@ import { normalWorld, pmremTexture, viewportUV, -+ Node, -+ ComputeNode, -+ LightsNode, -+ UniformGroupNode, -+ NodeBuilder, + ShaderNodeObject, - } from '../../../nodes/Nodes.js'; + } from '../../../nodes/TSL.js'; import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js'; +import { Color } from '../../../math/Color.js'; @@ -6727,6 +6801,11 @@ index 6c408849..8d2977d8 100644 +import { Object3D } from '../../../core/Object3D.js'; +import { Camera } from '../../../cameras/Camera.js'; +import { Material } from '../../../materials/Material.js'; ++import Node from '../../../nodes/core/Node.js'; ++import ComputeNode from '../../../nodes/gpgpu/ComputeNode.js'; ++import LightsNode from '../../../nodes/lighting/LightsNode.js'; ++import UniformGroupNode from '../../../nodes/core/UniformGroupNode.js'; ++import NodeBuilder from '../../../nodes/core/NodeBuilder.js'; + +interface NodeUniformsGroupData { + renderId?: number | undefined; @@ -6771,11 +6850,7 @@ index 6c408849..8d2977d8 100644 super(); this.renderer = renderer; - this.backend = backend; - this.nodeFrame = new NodeFrame(); - this.nodeBuilderCache = new Map(); -- this.callHashCache = new ChainMap(); -+ this.callHashCache = new ChainMap(); +@@ -33,7 +86,7 @@ class Nodes extends DataMap { this.groupsData = new ChainMap(); } @@ -7067,27 +7142,16 @@ index 5af42aac..a2d7ee7c 100644 } diff --git a/src-testing/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.ts b/src-testing/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.ts -index bb17e412..7c650bb1 100644 +index 3e636c6f..44bc3d20 100644 --- a/src-testing/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.ts +++ b/src-testing/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.ts -@@ -1,4 +1,15 @@ --import { MathNode, GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js'; -+import { -+ MathNode, -+ GLSLNodeParser, -+ NodeBuilder, -+ TextureNode, -+ vectorComponents, -+ ShaderNodeObject, -+ ShaderNodeInternal, -+ NodeShaderStage, -+ StorageArrayElementNode, -+ StorageBufferNode, -+} from '../../../nodes/Nodes.js'; +@@ -1,4 +1,4 @@ +-import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js'; ++import { GLSLNodeParser, NodeBuilder, NodeShaderStage, TextureNode, vectorComponents } from '../../../nodes/Nodes.js'; import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js'; import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js'; -@@ -27,8 +38,16 @@ import { +@@ -27,8 +27,19 @@ import { FloatType, } from '../../../constants.js'; import { DataTexture } from '../../../textures/DataTexture.js'; @@ -7101,12 +7165,15 @@ index bb17e412..7c650bb1 100644 +import { Texture } from '../../../textures/Texture.js'; +import { BufferAttribute } from '../../../core/BufferAttribute.js'; +import { InterleavedBufferAttribute } from '../../../core/InterleavedBufferAttribute.js'; ++import { ShaderNodeInternal, ShaderNodeObject } from '../../../nodes/tsl/TSLCore.js'; ++import StorageBufferNode from '../../../nodes/accessors/StorageBufferNode.js'; ++import StorageArrayElementNode from '../../../nodes/utils/StorageArrayElementNode.js'; + +const glslMethods: { [method: string]: string } = { - [MathNode.ATAN2]: 'atan', + atan2: 'atan', textureDimensions: 'textureSize', equals: 'equal', -@@ -66,8 +85,37 @@ precision highp isampler2DArray; +@@ -66,8 +77,37 @@ precision highp isampler2DArray; precision lowp sampler2DShadow; `; @@ -7145,7 +7212,7 @@ index bb17e412..7c650bb1 100644 super(object, renderer, new GLSLNodeParser()); this.uniformGroups = {}; -@@ -79,7 +127,7 @@ class GLSLNodeBuilder extends NodeBuilder { +@@ -79,7 +119,7 @@ class GLSLNodeBuilder extends NodeBuilder { this.useComparisonMethod = true; } @@ -7154,7 +7221,7 @@ index bb17e412..7c650bb1 100644 return glslMethods[method] || method; } -@@ -87,7 +135,7 @@ class GLSLNodeBuilder extends NodeBuilder { +@@ -87,7 +127,7 @@ class GLSLNodeBuilder extends NodeBuilder { return ''; } @@ -7163,7 +7230,7 @@ index bb17e412..7c650bb1 100644 const layout = shaderNode.layout; const flowData = this.flowShaderNode(shaderNode); -@@ -113,7 +161,7 @@ ${flowData.code} +@@ -113,7 +153,7 @@ ${flowData.code} return code; } @@ -7172,7 +7239,7 @@ index bb17e412..7c650bb1 100644 const attribute = storageBufferNode.value; if (attribute.pbo === undefined) { -@@ -177,7 +225,7 @@ ${flowData.code} +@@ -177,7 +217,7 @@ ${flowData.code} } } @@ -7181,7 +7248,7 @@ index bb17e412..7c650bb1 100644 if (node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true) { return shaderStage.charAt(0) + '_' + node.name; } -@@ -185,7 +233,7 @@ ${flowData.code} +@@ -185,7 +225,7 @@ ${flowData.code} return super.getPropertyName(node, shaderStage); } @@ -7190,7 +7257,7 @@ index bb17e412..7c650bb1 100644 const { node, indexNode } = storageArrayElementNode; const attribute = node.value; -@@ -254,7 +302,13 @@ ${flowData.code} +@@ -254,7 +294,13 @@ ${flowData.code} return propertyName; } @@ -7205,7 +7272,7 @@ index bb17e412..7c650bb1 100644 if (depthSnippet) { return `texelFetch( ${textureProperty}, ivec3( ${uvIndexSnippet}, ${depthSnippet} ), ${levelSnippet} )`; } else { -@@ -262,7 +316,7 @@ ${flowData.code} +@@ -262,7 +308,7 @@ ${flowData.code} } } @@ -7214,7 +7281,7 @@ index bb17e412..7c650bb1 100644 if (texture.isDepthTexture) { return `texture( ${textureProperty}, ${uvSnippet} ).x`; } else { -@@ -272,24 +326,39 @@ ${flowData.code} +@@ -272,24 +318,39 @@ ${flowData.code} } } @@ -7262,7 +7329,7 @@ index bb17e412..7c650bb1 100644 shaderStage = this.shaderStage, ) { if (shaderStage === 'fragment') { -@@ -298,11 +367,12 @@ ${flowData.code} +@@ -298,11 +359,12 @@ ${flowData.code} console.error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${shaderStage} shader.`, ); @@ -7277,7 +7344,7 @@ index bb17e412..7c650bb1 100644 const vars = this.vars[shaderStage]; -@@ -315,7 +385,7 @@ ${flowData.code} +@@ -315,7 +377,7 @@ ${flowData.code} return snippets.join('\n\t'); } @@ -7286,7 +7353,7 @@ index bb17e412..7c650bb1 100644 const uniforms = this.uniforms[shaderStage]; const bindingSnippets = []; -@@ -397,7 +467,7 @@ ${flowData.code} +@@ -397,7 +459,7 @@ ${flowData.code} return output; } @@ -7295,7 +7362,7 @@ index bb17e412..7c650bb1 100644 let nodeType = super.getTypeFromAttribute(attribute); if (/^[iu]/.test(nodeType) && attribute.gpuType !== IntType) { -@@ -415,7 +485,7 @@ ${flowData.code} +@@ -415,7 +477,7 @@ ${flowData.code} return nodeType; } @@ -7304,7 +7371,7 @@ index bb17e412..7c650bb1 100644 let snippet = ''; if (shaderStage === 'vertex' || shaderStage === 'compute') { -@@ -431,8 +501,8 @@ ${flowData.code} +@@ -431,8 +493,8 @@ ${flowData.code} return snippet; } @@ -7315,7 +7382,7 @@ index bb17e412..7c650bb1 100644 const members = struct.getMemberTypes(); for (let i = 0; i < members.length; i++) { -@@ -443,7 +513,7 @@ ${flowData.code} +@@ -443,7 +505,7 @@ ${flowData.code} return snippets.join('\n'); } @@ -7324,7 +7391,7 @@ index bb17e412..7c650bb1 100644 const snippets = []; const structs = this.structs[shaderStage]; -@@ -464,7 +534,7 @@ ${flowData.code} +@@ -464,7 +526,7 @@ ${flowData.code} return snippets.join('\n\n'); } @@ -7333,7 +7400,7 @@ index bb17e412..7c650bb1 100644 let snippet = ''; const varyings = this.varyings; -@@ -529,7 +599,7 @@ ${flowData.code} +@@ -529,7 +591,7 @@ ${flowData.code} return 'gl_FragDepth'; } @@ -7342,7 +7409,7 @@ index bb17e412..7c650bb1 100644 const map = this.extensions[shaderStage] || (this.extensions[shaderStage] = new Map()); if (map.has(name) === false) { -@@ -540,7 +610,7 @@ ${flowData.code} +@@ -540,7 +602,7 @@ ${flowData.code} } } @@ -7351,7 +7418,7 @@ index bb17e412..7c650bb1 100644 const snippets = []; if (shaderStage === 'vertex') { -@@ -563,7 +633,7 @@ ${flowData.code} +@@ -563,7 +625,7 @@ ${flowData.code} return snippets.join('\n'); } @@ -7360,7 +7427,7 @@ index bb17e412..7c650bb1 100644 let result = supports[name]; if (result === undefined) { -@@ -588,11 +658,11 @@ ${flowData.code} +@@ -588,11 +650,11 @@ ${flowData.code} return true; } @@ -7374,7 +7441,7 @@ index bb17e412..7c650bb1 100644 const transforms = this.transforms; let snippet = ''; -@@ -608,14 +678,14 @@ ${flowData.code} +@@ -608,14 +670,14 @@ ${flowData.code} return snippet; } @@ -7391,7 +7458,7 @@ index bb17e412..7c650bb1 100644 return `#version 300 es // extensions -@@ -653,7 +723,7 @@ void main() { +@@ -653,7 +715,7 @@ void main() { `; } @@ -7400,7 +7467,7 @@ index bb17e412..7c650bb1 100644 return `#version 300 es ${this.getSignature()} -@@ -685,17 +755,18 @@ void main() { +@@ -685,17 +747,18 @@ void main() { } buildCode() { @@ -7423,7 +7490,7 @@ index bb17e412..7c650bb1 100644 const slotName = node.name; if (slotName) { -@@ -721,28 +792,33 @@ void main() { +@@ -721,28 +784,33 @@ void main() { } } @@ -7484,7 +7551,7 @@ index 1a96bd2c..ec11853a 100644 } diff --git a/src-testing/src/renderers/webgpu/nodes/WGSLNodeBuilder.ts b/src-testing/src/renderers/webgpu/nodes/WGSLNodeBuilder.ts -index df508a17..6be31d09 100644 +index 7a4c6d33..997e1de8 100644 --- a/src-testing/src/renderers/webgpu/nodes/WGSLNodeBuilder.ts +++ b/src-testing/src/renderers/webgpu/nodes/WGSLNodeBuilder.ts @@ -10,7 +10,7 @@ import { diff --git a/src-testing/create-src.js b/src-testing/create-src.js index 9ded969ae..22533c68c 100644 --- a/src-testing/create-src.js +++ b/src-testing/create-src.js @@ -4,6 +4,7 @@ import * as path from 'node:path'; import prettier from 'prettier'; const files = [ + 'materials/nodes/NodeMaterial', 'nodes/accessors/BufferAttributeNode', 'nodes/accessors/TextureNode', 'nodes/code/CodeNode', @@ -32,14 +33,15 @@ const files = [ 'nodes/lighting/EnvironmentNode', 'nodes/lighting/LightingContextNode', 'nodes/lighting/LightsNode', - 'nodes/materials/NodeMaterial', - 'nodes/shadernode/ShaderNode', + 'nodes/tsl/TSLCore', 'nodes/Nodes', 'renderers/common/extras/PMREMGenerator', 'renderers/common/nodes/NodeBuilderState', + 'renderers/common/nodes/NodeLibrary', 'renderers/common/nodes/NodeUniform', 'renderers/common/nodes/NodeUniformsGroup', 'renderers/common/nodes/Nodes', + 'renderers/common/nodes/StandardNodeLibrary', 'renderers/common/Animation', 'renderers/common/Attributes', 'renderers/common/Backend', diff --git a/src-testing/declarations.js b/src-testing/declarations.js index ab1d7ecc1..27ef37fb0 100644 --- a/src-testing/declarations.js +++ b/src-testing/declarations.js @@ -16,8 +16,10 @@ const files = [ 'nodes/core/UniformNode', 'renderers/common/nodes/NodeBuilderState', 'renderers/common/nodes/Nodes', + 'renderers/common/nodes/NodeLibrary', 'renderers/common/nodes/NodeUniform', 'renderers/common/nodes/NodeUniformsGroup', + 'renderers/common/nodes/StandardNodeLibrary', 'renderers/common/Animation', 'renderers/common/Attributes', 'renderers/common/Background', diff --git a/three.js b/three.js index cde3cd25a..e13d01226 160000 --- a/three.js +++ b/three.js @@ -1 +1 @@ -Subproject commit cde3cd25a17d141ea4f63e766a44b812e643a5cf +Subproject commit e13d012265ebac01ceec9895e4aa7a356b69eff2 diff --git a/types/three/src/Three.WebGPU.d.ts b/types/three/src/Three.WebGPU.d.ts index a7529e351..f7cbcfa2d 100644 --- a/types/three/src/Three.WebGPU.d.ts +++ b/types/three/src/Three.WebGPU.d.ts @@ -95,6 +95,7 @@ export * from "./loaders/MaterialLoader.js"; export * from "./loaders/ObjectLoader.js"; export * from "./loaders/TextureLoader.js"; export * from "./materials/Materials.js"; +export * from "./materials/nodes/NodeMaterials.js"; export * from "./math/Box2.js"; export * from "./math/Box3.js"; export * from "./math/Color.js"; @@ -185,7 +186,11 @@ export * from "./Three.Legacy.js"; export { createCanvasElement } from "./utils.js"; export { default as IESSpotLight } from "./lights/webgpu/IESSpotLight.js"; +export { default as NodeLoader } from "./loaders/nodes/NodeLoader.js"; +export { default as NodeMaterialLoader } from "./loaders/nodes/NodeMaterialLoader.js"; +export { default as NodeObjectLoader } from "./loaders/nodes/NodeObjectLoader.js"; export * from "./nodes/Nodes.js"; +export * from "./nodes/TSL.js"; export { default as PMREMGenerator } from "./renderers/common/extras/PMREMGenerator.js"; export { default as PostProcessing } from "./renderers/common/PostProcessing.js"; export { default as QuadMesh } from "./renderers/common/QuadMesh.js"; diff --git a/types/three/src/nodes/loaders/NodeLoader.d.ts b/types/three/src/loaders/nodes/NodeLoader.d.ts similarity index 71% rename from types/three/src/nodes/loaders/NodeLoader.d.ts rename to types/three/src/loaders/nodes/NodeLoader.d.ts index 0ced68bab..5d505147a 100644 --- a/types/three/src/nodes/loaders/NodeLoader.d.ts +++ b/types/three/src/loaders/nodes/NodeLoader.d.ts @@ -1,7 +1,7 @@ -import { Loader } from "../../loaders/Loader.js"; -import { LoadingManager } from "../../loaders/LoadingManager.js"; +import { Node } from "../../nodes/Nodes.js"; import { Texture } from "../../textures/Texture.js"; -import { Node } from "../Nodes.js"; +import { Loader } from "../Loader.js"; +import { LoadingManager } from "../LoadingManager.js"; export interface NodeLoaderResult { [hash: string]: Node; diff --git a/types/three/src/nodes/loaders/NodeMaterialLoader.d.ts b/types/three/src/loaders/nodes/NodeMaterialLoader.d.ts similarity index 74% rename from types/three/src/nodes/loaders/NodeMaterialLoader.d.ts rename to types/three/src/loaders/nodes/NodeMaterialLoader.d.ts index 4f927141e..7121f3d4b 100644 --- a/types/three/src/nodes/loaders/NodeMaterialLoader.d.ts +++ b/types/three/src/loaders/nodes/NodeMaterialLoader.d.ts @@ -1,4 +1,4 @@ -import { MaterialLoader } from "../../loaders/MaterialLoader.js"; +import { MaterialLoader } from "../MaterialLoader.js"; import { NodeLoaderResult } from "./NodeLoader.js"; export default class NodeMaterialLoader extends MaterialLoader { diff --git a/types/three/src/nodes/loaders/NodeObjectLoader.d.ts b/types/three/src/loaders/nodes/NodeObjectLoader.d.ts similarity index 87% rename from types/three/src/nodes/loaders/NodeObjectLoader.d.ts rename to types/three/src/loaders/nodes/NodeObjectLoader.d.ts index 7341a4a28..3649770c9 100644 --- a/types/three/src/nodes/loaders/NodeObjectLoader.d.ts +++ b/types/three/src/loaders/nodes/NodeObjectLoader.d.ts @@ -1,6 +1,6 @@ -import { ObjectLoader } from "../../loaders/ObjectLoader.js"; import { Material } from "../../materials/Material.js"; import { Texture } from "../../textures/Texture.js"; +import { ObjectLoader } from "../ObjectLoader.js"; import { NodeLoaderResult } from "./NodeLoader.js"; export default class NodeObjectLoader extends ObjectLoader { diff --git a/types/three/src/materials/nodes/InstancedPointsNodeMaterial.d.ts b/types/three/src/materials/nodes/InstancedPointsNodeMaterial.d.ts new file mode 100644 index 000000000..ce74bb1f8 --- /dev/null +++ b/types/three/src/materials/nodes/InstancedPointsNodeMaterial.d.ts @@ -0,0 +1,31 @@ +import { Color } from "../../math/Color.js"; +import Node from "../../nodes/core/Node.js"; +import { Texture } from "../../textures/Texture.js"; +import { PointsMaterialParameters } from "../PointsMaterial.js"; +import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; + +export interface InstancedPointsNodeMaterialParameters extends NodeMaterialParameters, PointsMaterialParameters { + useAlphaToCoverage?: boolean | undefined; + useColor?: boolean | undefined; + pointWidth?: number | undefined; + pointColorNode?: Node | null | undefined; +} + +declare class InstancedPointsNodeMaterial extends NodeMaterial { + useAlphaToCoverage: boolean; + useColor: boolean | undefined; + pointWidth: number; + pointColorNode: Node | null; + + // Properties from LineDashedMaterial + readonly isPointsMaterial: true; + color: Color; + map: Texture | null; + alphaMap: Texture | null; + size: number; + sizeAttenuation: boolean; + + constructor(params?: InstancedPointsNodeMaterialParameters); +} + +export default InstancedPointsNodeMaterial; diff --git a/types/three/src/nodes/materials/Line2NodeMaterial.d.ts b/types/three/src/materials/nodes/Line2NodeMaterial.d.ts similarity index 91% rename from types/three/src/nodes/materials/Line2NodeMaterial.d.ts rename to types/three/src/materials/nodes/Line2NodeMaterial.d.ts index 405cc4749..13c65ffd6 100644 --- a/types/three/src/nodes/materials/Line2NodeMaterial.d.ts +++ b/types/three/src/materials/nodes/Line2NodeMaterial.d.ts @@ -1,7 +1,7 @@ -import { LineDashedMaterialParameters } from "../../materials/LineDashedMaterial.js"; import { Color } from "../../math/Color.js"; +import Node from "../../nodes/core/Node.js"; import { Texture } from "../../textures/Texture.js"; -import Node from "../core/Node.js"; +import { LineDashedMaterialParameters } from "../LineDashedMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface Line2NodeMaterialParameters extends NodeMaterialParameters, LineDashedMaterialParameters { diff --git a/types/three/src/nodes/materials/LineBasicNodeMaterial.d.ts b/types/three/src/materials/nodes/LineBasicNodeMaterial.d.ts similarity index 88% rename from types/three/src/nodes/materials/LineBasicNodeMaterial.d.ts rename to types/three/src/materials/nodes/LineBasicNodeMaterial.d.ts index 4ff1f5ee8..84b8db897 100644 --- a/types/three/src/nodes/materials/LineBasicNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/LineBasicNodeMaterial.d.ts @@ -1,6 +1,6 @@ -import { LineBasicMaterialParameters } from "../../materials/LineBasicMaterial.js"; import { Color } from "../../math/Color.js"; import { Texture } from "../../textures/Texture.js"; +import { LineBasicMaterialParameters } from "../LineBasicMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface LineBasicNodeMaterialParameters extends NodeMaterialParameters, LineBasicMaterialParameters { diff --git a/types/three/src/materials/nodes/LineDashedNodeMaterial.d.ts b/types/three/src/materials/nodes/LineDashedNodeMaterial.d.ts new file mode 100644 index 000000000..10715e2cd --- /dev/null +++ b/types/three/src/materials/nodes/LineDashedNodeMaterial.d.ts @@ -0,0 +1,29 @@ +import Node from "../../nodes/core/Node.js"; +import { LineDashedMaterialParameters } from "../LineDashedMaterial.js"; +import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; + +export interface LineDashedNodeMaterialParameters extends NodeMaterialParameters, LineDashedMaterialParameters { + offsetNode?: Node | null | undefined; + dashScaleNode?: Node | null | undefined; + dashSizeNode?: Node | null | undefined; + gapSizeNode?: Node | null | undefined; +} + +declare class LineDashedNodeMaterial extends NodeMaterial { + readonly isLineDashedNodeMaterial: true; + + offsetNode: Node | null; + dashScaleNode: Node | null; + dashSizeNode: Node | null; + gapSizeNode: Node | null; + + // Properties from LineDashedMaterial + readonly isLineDashedMaterial: true; + scale: number; + dashSize: number; + gapSize: number; + + constructor(parameters?: LineDashedMaterialParameters); +} + +export default LineDashedNodeMaterial; diff --git a/types/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshBasicNodeMaterial.d.ts similarity index 93% rename from types/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshBasicNodeMaterial.d.ts index ff5cc609d..515fa5f67 100644 --- a/types/three/src/nodes/materials/MeshBasicNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshBasicNodeMaterial.d.ts @@ -1,8 +1,8 @@ import { Combine } from "../../constants.js"; -import { MeshBasicMaterialParameters } from "../../materials/MeshBasicMaterial.js"; import { Color } from "../../math/Color.js"; import { Euler } from "../../math/Euler.js"; import { Texture } from "../../textures/Texture.js"; +import { MeshBasicMaterialParameters } from "../MeshBasicMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshBasicNodeMaterialParameters extends NodeMaterialParameters, MeshBasicMaterialParameters { diff --git a/types/three/src/materials/nodes/MeshLambertNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshLambertNodeMaterial.d.ts new file mode 100644 index 000000000..aedda10a7 --- /dev/null +++ b/types/three/src/materials/nodes/MeshLambertNodeMaterial.d.ts @@ -0,0 +1,49 @@ +import { Combine, NormalMapTypes } from "../../constants.js"; +import { Color } from "../../math/Color.js"; +import { Euler } from "../../math/Euler.js"; +import { Vector2 } from "../../math/Vector2.js"; +import { Texture } from "../../textures/Texture.js"; +import { MeshLambertMaterialParameters } from "../MeshLambertMaterial.js"; +import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; + +export interface MeshLambertNodeMaterialParameters extends NodeMaterialParameters, MeshLambertMaterialParameters {} + +declare class MeshLambertNodeMaterial extends NodeMaterial { + readonly isMeshLambertNodeMaterial: true; + + // Properties from MeshLambertMaterial + readonly isMeshLambertMaterial: true; + color: Color; + bumpMap: Texture | null; + bumpScale: number; + displacementMap: Texture | null; + displacementScale: number; + displacementBias: number; + emissive: Color; + emissiveIntensity: number; + emissiveMap: Texture | null; + flatShading: boolean; + map: Texture | null; + lightMap: Texture | null; + lightMapIntensity: number; + normalMap: Texture | null; + normalMapType: NormalMapTypes; + normalScale: Vector2; + aoMap: Texture | null; + aoMapIntensity: number; + specularMap: Texture | null; + alphaMap: Texture | null; + envMap: Texture | null; + envMapRotation: Euler; + combine: Combine; + reflectivity: number; + refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; + wireframeLinecap: string; + wireframeLinejoin: string; + + constructor(parameters?: MeshLambertNodeMaterialParameters); +} + +export default MeshLambertNodeMaterial; diff --git a/types/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshMatcapNodeMaterial.d.ts similarity index 86% rename from types/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshMatcapNodeMaterial.d.ts index accb772de..cc0d2f9a0 100644 --- a/types/three/src/nodes/materials/MeshMatcapNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshMatcapNodeMaterial.d.ts @@ -1,8 +1,8 @@ import { NormalMapTypes } from "../../constants.js"; -import { MeshMatcapMaterialParameters } from "../../materials/MeshMatcapMaterial.js"; import { Color } from "../../math/Color.js"; import { Vector2 } from "../../math/Vector2.js"; import { Texture } from "../../textures/Texture.js"; +import { MeshMatcapMaterialParameters } from "../MeshMatcapMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshMatcapNodeMaterialParameters extends NodeMaterialParameters, MeshMatcapMaterialParameters { @@ -28,5 +28,5 @@ export default class MeshMatcapNodeMaterial extends NodeMaterial { flatShading: boolean; fog: boolean; - constructor(paramters: MeshMatcapNodeMaterialParameters); + constructor(parameters?: MeshMatcapNodeMaterialParameters); } diff --git a/types/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshNormalNodeMaterial.d.ts similarity index 91% rename from types/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshNormalNodeMaterial.d.ts index f6bb618c1..761998bac 100644 --- a/types/three/src/nodes/materials/MeshNormalNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshNormalNodeMaterial.d.ts @@ -1,7 +1,7 @@ import { NormalMapTypes } from "../../constants.js"; -import { MeshNormalMaterialParameters } from "../../materials/MeshNormalMaterial.js"; import { Vector2 } from "../../math/Vector2.js"; import { Texture } from "../../textures/Texture.js"; +import { MeshNormalMaterialParameters } from "../MeshNormalMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshBasicNodeMaterialParameters extends NodeMaterialParameters, MeshNormalMaterialParameters { diff --git a/types/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshPhongNodeMaterial.d.ts similarity index 93% rename from types/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshPhongNodeMaterial.d.ts index 97d83d196..3680e533c 100644 --- a/types/three/src/nodes/materials/MeshPhongNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshPhongNodeMaterial.d.ts @@ -1,10 +1,10 @@ import { Combine, NormalMapTypes } from "../../constants.js"; -import { MeshPhongMaterialParameters } from "../../materials/MeshPhongMaterial.js"; import { Color } from "../../math/Color.js"; import { Euler } from "../../math/Euler.js"; import { Vector2 } from "../../math/Vector2.js"; +import Node from "../../nodes/core/Node.js"; import { Texture } from "../../textures/Texture.js"; -import Node from "../core/Node.js"; +import { MeshPhongMaterialParameters } from "../MeshPhongMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshPhongNodeMaterialParameters extends NodeMaterialParameters, MeshPhongMaterialParameters { diff --git a/types/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshPhysicalNodeMaterial.d.ts similarity index 93% rename from types/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshPhysicalNodeMaterial.d.ts index 0c0aaee9e..e7da3ee90 100644 --- a/types/three/src/nodes/materials/MeshPhysicalNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshPhysicalNodeMaterial.d.ts @@ -1,9 +1,9 @@ -import { MeshPhysicalMaterialParameters } from "../../materials/MeshPhysicalMaterial.js"; import { Color } from "../../math/Color.js"; import { Vector2 } from "../../math/Vector2.js"; +import Node from "../../nodes/core/Node.js"; +import { ShaderNodeObject } from "../../nodes/tsl/TSLCore.js"; import { Texture } from "../../textures/Texture.js"; -import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { MeshPhysicalMaterialParameters } from "../MeshPhysicalMaterial.js"; import MeshStandardNodeMaterial, { MeshStandardNodeMaterialParameters } from "./MeshStandardNodeMaterial.js"; export interface MeshPhysicalNodeMaterialParameters diff --git a/types/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshSSSNodeMaterial.d.ts similarity index 84% rename from types/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshSSSNodeMaterial.d.ts index 8506de76c..bccbec30c 100644 --- a/types/three/src/nodes/materials/MeshSSSNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshSSSNodeMaterial.d.ts @@ -1,5 +1,5 @@ -import ConstNode from "../core/ConstNode.js"; -import Node from "../core/Node.js"; +import ConstNode from "../../nodes/core/ConstNode.js"; +import Node from "../../nodes/core/Node.js"; import MeshPhysicalNodeMaterial, { MeshPhysicalNodeMaterialParameters } from "./MeshPhysicalNodeMaterial.js"; export default class MeshSSSNodeMaterial extends MeshPhysicalNodeMaterial { diff --git a/types/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshStandardNodeMaterial.d.ts similarity index 89% rename from types/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshStandardNodeMaterial.d.ts index 6bc1dfb38..9c3329042 100644 --- a/types/three/src/nodes/materials/MeshStandardNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshStandardNodeMaterial.d.ts @@ -1,10 +1,10 @@ import { NormalMapTypes } from "../../constants.js"; -import { MeshStandardMaterialParameters } from "../../materials/MeshStandardMaterial.js"; import { Color } from "../../math/Color.js"; import { Euler } from "../../math/Euler.js"; import { Vector2 } from "../../math/Vector2.js"; +import Node from "../../nodes/core/Node.js"; import { Texture } from "../../textures/Texture.js"; -import Node from "../core/Node.js"; +import { MeshStandardMaterialParameters } from "../MeshStandardMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshStandardNodeMaterialParameters extends NodeMaterialParameters, MeshStandardMaterialParameters { @@ -52,5 +52,5 @@ export default class MeshStandardNodeMaterial extends NodeMaterial { flatShading: boolean; fog: boolean; - constructor(paramters?: MeshStandardNodeMaterialParameters); + constructor(parameters?: MeshStandardNodeMaterialParameters); } diff --git a/types/three/src/nodes/materials/MeshToonNodeMaterial.d.ts b/types/three/src/materials/nodes/MeshToonNodeMaterial.d.ts similarity index 89% rename from types/three/src/nodes/materials/MeshToonNodeMaterial.d.ts rename to types/three/src/materials/nodes/MeshToonNodeMaterial.d.ts index 6d54dd67e..e1dee0fb3 100644 --- a/types/three/src/nodes/materials/MeshToonNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/MeshToonNodeMaterial.d.ts @@ -1,8 +1,8 @@ import { NormalMapTypes } from "../../constants.js"; -import { MeshToonMaterialParameters } from "../../materials/MeshToonMaterial.js"; import { Color } from "../../math/Color.js"; import { Vector2 } from "../../math/Vector2.js"; import { Texture } from "../../textures/Texture.js"; +import { MeshToonMaterialParameters } from "../MeshToonMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshToonNodeMaterialParameters extends NodeMaterialParameters, MeshToonMaterialParameters { @@ -38,5 +38,5 @@ export default class MeshToonNodeMaterial extends NodeMaterial { wireframeLinejoin: string; fog: boolean; - constructor(paramters: MeshToonNodeMaterialParameters); + constructor(parameters?: MeshToonNodeMaterialParameters); } diff --git a/types/three/src/materials/nodes/NodeMaterial.d.ts b/types/three/src/materials/nodes/NodeMaterial.d.ts new file mode 100644 index 000000000..8f39d5317 --- /dev/null +++ b/types/three/src/materials/nodes/NodeMaterial.d.ts @@ -0,0 +1,87 @@ +import ClippingNode from "../../nodes/accessors/ClippingNode.js"; +import LightingModel from "../../nodes/core/LightingModel.js"; +import MRTNode from "../../nodes/core/MRTNode.js"; +import Node from "../../nodes/core/Node.js"; +import NodeBuilder from "../../nodes/core/NodeBuilder.js"; +import LightsNode from "../../nodes/lighting/LightsNode.js"; +import { ShaderNodeObject } from "../../nodes/tsl/TSLCore.js"; +import { Material, MaterialParameters } from "../Material.js"; + +export interface NodeMaterialParameters extends MaterialParameters { + normals?: boolean | undefined; + + colorSpaced?: boolean | undefined; + + lightsNode?: LightsNode | null | undefined; + envNode?: Node | null | undefined; + aoNode?: Node | null | undefined; + + colorNode?: Node | null | undefined; + normalNode?: Node | null | undefined; + opacityNode?: Node | null | undefined; + backdropNode?: Node | null | undefined; + backdropAlphaNode?: Node | null | undefined; + alphaTestNode?: Node | null | undefined; + + positionNode?: Node | null | undefined; + + depthNode?: Node | null | undefined; + shadowNode?: Node | null | undefined; + + outputNode?: Node | null | undefined; + + fragmentNode?: Node | null | undefined; + vertexNode?: Node | null | undefined; +} + +declare class NodeMaterial extends Material { + readonly isNodeMaterial: true; + + fog: boolean; + lights: boolean; + + lightsNode: LightsNode | null; + envNode: Node | null; + aoNode: Node | null; + + colorNode: Node | null; + normalNode: Node | null; + opacityNode: Node | null; + backdropNode: Node | null; + backdropAlphaNode: Node | null; + alphaTestNode: Node | null; + + positionNode: Node | null; + + depthNode: Node | null; + shadowNode: Node | null; + shadowPositionNode: Node | null; + + outputNode: Node | null; + mrtNode: MRTNode | null; + + fragmentNode: Node | null; + vertexNode: Node | null; + + constructor(); + + build(builder: NodeBuilder): void; + setup(builder: NodeBuilder): void; + setupClipping(builder: NodeBuilder): ClippingNode | null; + setupDepth(builder: NodeBuilder): void; + setupPosition(builder: NodeBuilder): Node; + setupDiffuseColor(builder: NodeBuilder): void; + setupVariants(builder: NodeBuilder): void; + setupNormal(builder: NodeBuilder): ShaderNodeObject; + setupEnvironment(builder: NodeBuilder): Node | null; + setupLightMap(builder: NodeBuilder): Node | null; + setupLights(builder: NodeBuilder): LightsNode; + setupOutgoingLight(): Node; + setupLightingModel(builder: NodeBuilder): LightingModel; + setupLighting(builder: NodeBuilder): Node; + setupOutput(builder: NodeBuilder, outputNode: Node): Node; + + setDefaultValues(material: Material): void; +} + +export default NodeMaterial; diff --git a/types/three/src/nodes/materials/Materials.d.ts b/types/three/src/materials/nodes/NodeMaterials.d.ts similarity index 72% rename from types/three/src/nodes/materials/Materials.d.ts rename to types/three/src/materials/nodes/NodeMaterials.d.ts index 9d668a8a1..395273cd9 100644 --- a/types/three/src/nodes/materials/Materials.d.ts +++ b/types/three/src/materials/nodes/NodeMaterials.d.ts @@ -1,14 +1,17 @@ +export { default as InstancedPointsNodeMaterial } from "./InstancedPointsNodeMaterial.js"; export { default as Line2NodeMaterial } from "./Line2NodeMaterial.js"; export { default as LineBasicNodeMaterial } from "./LineBasicNodeMaterial.js"; +export { default as LineDashedNodeMaterial } from "./LineDashedNodeMaterial.js"; export { default as MeshBasicNodeMaterial } from "./MeshBasicNodeMaterial.js"; +export { default as MeshLambertNodeMaterial } from "./MeshLambertNodeMaterial.js"; export { default as MeshMatcapNodeMaterial } from "./MeshMatcapNodeMaterial.js"; export { default as MeshNormalNodeMaterial } from "./MeshNormalNodeMaterial.js"; export { default as MeshPhongNodeMaterial } from "./MeshPhongNodeMaterial.js"; export { default as MeshPhysicalNodeMaterial } from "./MeshPhysicalNodeMaterial.js"; -export { default as MeshSSSPhysicalNodeMaterial } from "./MeshSSSNodeMaterial.js"; +export { default as MeshSSSNodeMaterial } from "./MeshSSSNodeMaterial.js"; export { default as MeshStandardNodeMaterial } from "./MeshStandardNodeMaterial.js"; export { default as MeshToonNodeMaterial } from "./MeshToonNodeMaterial.js"; -export { addNodeMaterial, createNodeMaterialFromType, default as NodeMaterial } from "./NodeMaterial.js"; +export { default as NodeMaterial } from "./NodeMaterial.js"; export { default as PointsNodeMaterial } from "./PointsNodeMaterial.js"; export { default as ShadowNodeMaterial } from "./ShadowNodeMaterial.js"; export { default as SpriteNodeMaterial } from "./SpriteNodeMaterial.js"; diff --git a/types/three/src/nodes/materials/PointsNodeMaterial.d.ts b/types/three/src/materials/nodes/PointsNodeMaterial.d.ts similarity index 87% rename from types/three/src/nodes/materials/PointsNodeMaterial.d.ts rename to types/three/src/materials/nodes/PointsNodeMaterial.d.ts index 3132aa3ca..836f55a6d 100644 --- a/types/three/src/nodes/materials/PointsNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/PointsNodeMaterial.d.ts @@ -1,6 +1,6 @@ -import { PointsMaterialParameters } from "../../materials/PointsMaterial.js"; import { Color } from "../../math/Color.js"; import { Texture } from "../../textures/Texture.js"; +import { PointsMaterialParameters } from "../PointsMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface PointsNodeMaterialParameters extends NodeMaterialParameters, PointsMaterialParameters { @@ -16,7 +16,6 @@ export default class PointsNodeMaterial extends NodeMaterial { alphaMap: Texture | null; size: number; sizeAttenuation: boolean; - fog: boolean; constructor(parameters?: PointsNodeMaterialParameters); } diff --git a/types/three/src/nodes/materials/ShadowNodeMaterial.d.ts b/types/three/src/materials/nodes/ShadowNodeMaterial.d.ts similarity index 86% rename from types/three/src/nodes/materials/ShadowNodeMaterial.d.ts rename to types/three/src/materials/nodes/ShadowNodeMaterial.d.ts index 716433eff..c53d92437 100644 --- a/types/three/src/nodes/materials/ShadowNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/ShadowNodeMaterial.d.ts @@ -1,5 +1,5 @@ -import { ShadowMaterialParameters } from "../../materials/ShadowMaterial.js"; import { Color } from "../../math/Color.js"; +import { ShadowMaterialParameters } from "../ShadowMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface ShadowNodeMaterialParameters extends NodeMaterialParameters, ShadowMaterialParameters { diff --git a/types/three/src/nodes/materials/SpriteNodeMaterial.d.ts b/types/three/src/materials/nodes/SpriteNodeMaterial.d.ts similarity index 86% rename from types/three/src/nodes/materials/SpriteNodeMaterial.d.ts rename to types/three/src/materials/nodes/SpriteNodeMaterial.d.ts index c4c567c31..e34845d78 100644 --- a/types/three/src/nodes/materials/SpriteNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/SpriteNodeMaterial.d.ts @@ -1,7 +1,7 @@ -import { SpriteMaterialParameters } from "../../materials/SpriteMaterial.js"; import { Color } from "../../math/Color.js"; +import Node from "../../nodes/core/Node.js"; import { Texture } from "../../textures/Texture.js"; -import Node from "../core/Node.js"; +import { SpriteMaterialParameters } from "../SpriteMaterial.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface SpriteNodeMaterialParameters extends NodeMaterialParameters, SpriteMaterialParameters { diff --git a/types/three/src/nodes/materials/VolumeNodeMaterial.d.ts b/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts similarity index 86% rename from types/three/src/nodes/materials/VolumeNodeMaterial.d.ts rename to types/three/src/materials/nodes/VolumeNodeMaterial.d.ts index d1f4b9cc0..4f2c6e260 100644 --- a/types/three/src/nodes/materials/VolumeNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts @@ -1,4 +1,4 @@ -import Node from "../core/Node.js"; +import Node from "../../nodes/core/Node.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export default class VolumeNodeMaterial extends NodeMaterial { diff --git a/types/three/src/nodes/Nodes.d.ts b/types/three/src/nodes/Nodes.d.ts index a24856f89..c829208f9 100644 --- a/types/three/src/nodes/Nodes.d.ts +++ b/types/three/src/nodes/Nodes.d.ts @@ -2,433 +2,175 @@ export * from "./core/constants.js"; // core -export { assign, default as AssignNode } from "./core/AssignNode.js"; -export { attribute, default as AttributeNode } from "./core/AttributeNode.js"; -export { bypass, default as BypassNode } from "./core/BypassNode.js"; -export { cache, default as CacheNode } from "./core/CacheNode.js"; +export { default as AssignNode } from "./core/AssignNode.js"; +export { default as AttributeNode } from "./core/AttributeNode.js"; +export { default as BypassNode } from "./core/BypassNode.js"; +export { default as CacheNode } from "./core/CacheNode.js"; export { default as ConstNode } from "./core/ConstNode.js"; -export { context, default as ContextNode, label } from "./core/ContextNode.js"; -export { - default as IndexNode, - drawIndex, - IndexNodeScope, - instanceIndex, - invocationLocalIndex, - vertexIndex, -} from "./core/IndexNode.js"; +export { default as ContextNode } from "./core/ContextNode.js"; +export { default as IndexNode, IndexNodeScope } from "./core/IndexNode.js"; export { default as LightingModel, LightingModelDirectInput, + LightingModelDirectRectAreaInput, LightingModelIndirectInput, LightingModelReflectedLight, } from "./core/LightingModel.js"; -export { default as MRTNode, mrt } from "./core/MRTNode.js"; -export { default as Node } from "./core/Node.js"; +export { default as MRTNode } from "./core/MRTNode.js"; +export { default as Node, NodeJSONInputData, NodeJSONIntermediateOutputData } from "./core/Node.js"; export { default as NodeAttribute } from "./core/NodeAttribute.js"; -export { default as NodeBuilder } from "./core/NodeBuilder.js"; -export { default as NodeCache } from "./core/NodeCache.js"; +export { + BuildStageOption, + default as NodeBuilder, + FlowData, + NodeBuilderContext, + NodeData, +} from "./core/NodeBuilder.js"; +export { default as NodeCache, ShaderStageNodeData } from "./core/NodeCache.js"; export { default as NodeCode } from "./core/NodeCode.js"; export { default as NodeFrame } from "./core/NodeFrame.js"; export { default as NodeFunctionInput } from "./core/NodeFunctionInput.js"; export { default as NodeUniform } from "./core/NodeUniform.js"; export { default as NodeVar } from "./core/NodeVar.js"; export { default as NodeVarying } from "./core/NodeVarying.js"; -export { default as OutputStructNode, outputStruct } from "./core/OutputStructNode.js"; -export { - alphaT, - anisotropy, - anisotropyB, - anisotropyT, - clearcoat, - clearcoatRoughness, - dashSize, - default as PropertyNode, - diffuseColor, - emissive, - gapSize, - iridescence, - iridescenceIOR, - iridescenceThickness, - metalness, - output, - pointWidth, - property, - roughness, - sheen, - sheenRoughness, - shininess, - specularColor, - varyingProperty, -} from "./core/PropertyNode.js"; +export { default as OutputStructNode } from "./core/OutputStructNode.js"; +export { default as ParameterNode } from "./core/ParameterNode.js"; +export { default as PropertyNode } from "./core/PropertyNode.js"; export { default as StackNode } from "./core/StackNode.js"; export { default as TempNode } from "./core/TempNode.js"; -export { - default as UniformGroupNode, - frameGroup, - objectGroup, - renderGroup, - uniformGroup, -} from "./core/UniformGroupNode.js"; -export { default as UniformNode, uniform } from "./core/UniformNode.js"; -export { default as VarNode, temp } from "./core/VarNode.js"; -export { default as VaryingNode, varying } from "./core/VaryingNode.js"; +export { default as UniformGroupNode } from "./core/UniformGroupNode.js"; +export { default as UniformNode } from "./core/UniformNode.js"; +export { default as VarNode } from "./core/VarNode.js"; +export { default as VaryingNode } from "./core/VaryingNode.js"; import * as NodeUtils from "./core/NodeUtils.js"; export { NodeUtils }; -// math -export { - abs, - acos, - all, - any, - asin, - atan, - atan2, - bitcast, - cbrt, - ceil, - clamp, - cos, - cross, - default as MathNode, - degrees, - dFdx, - dFdy, - difference, - distance, - dot, - EPSILON, - equals, - exp, - exp2, - faceForward, - floor, - fract, - fwidth, - INFINITY, - inverseSqrt, - length, - lengthSq, - log, - log2, - MathNodeMethod, - MathNodeMethod1, - MathNodeMethod2, - MathNodeMethod3, - max, - min, - mix, - mod, - negate, - normalize, - oneMinus, - PI, - PI2, - pow, - pow2, - pow3, - pow4, - radians, - rand, - reciprocal, - reflect, - refract, - round, - saturate, - sign, - sin, - smoothstep, - sqrt, - step, - tan, - transformDirection, - transpose, - trunc, -} from "./math/MathNode.js"; - -export { cond, default as CondNode, select } from "./math/CondNode.js"; -export * from "./math/Hash.js"; -export { - add, - and, - bitAnd, - bitNot, - bitOr, - bitXor, - default as OperatorNode, - div, - equal, - greaterThan, - greaterThanEqual, - lessThan, - lessThanEqual, - modInt, - mul, - not, - OperatorNodeOp, - or, - remainder, - shiftLeft, - shiftRight, - sub, - xor, -} from "./math/OperatorNode.js"; - -// math utils -export { gain, parabola, pcurve, sinc } from "./math/MathUtils.js"; -export { triNoise3D } from "./math/TriNoise3D.js"; - // utils export { default as ArrayElementNode } from "./utils/ArrayElementNode.js"; export { default as ConvertNode } from "./utils/ConvertNode.js"; -export * from "./utils/Discard.js"; -export { default as EquirectUVNode, equirectUV } from "./utils/EquirectUVNode.js"; +export { default as EquirectUVNode } from "./utils/EquirectUVNode.js"; +export { default as FunctionOverloadingNode } from "./utils/FunctionOverloadingNode.js"; export { default as JoinNode } from "./utils/JoinNode.js"; -export { Break, Continue, default as LoopNode, Loop } from "./utils/LoopNode.js"; -export { default as MatcapUVNode, matcapUV } from "./utils/MatcapUVNode.js"; -export { default as MaxMipLevelNode, maxMipLevel } from "./utils/MaxMipLevelNode.js"; -export { default as OscNode, OscNodeMethod, oscSawtooth, oscSine, oscSquare, oscTriangle } from "./utils/OscNode.js"; -export * from "./utils/Packing.js"; -export { default as ReflectorNode, reflector, ReflectorNodeParameters } from "./utils/ReflectorNode.js"; -export { default as RemapNode, remap, remapClamp } from "./utils/RemapNode.js"; -export { default as RotateNode, rotate } from "./utils/RotateNode.js"; -export { default as RTTNode, rtt, RTTNodeOptions } from "./utils/RTTNode.js"; +export { default as LoopNode } from "./utils/LoopNode.js"; +export { default as MatcapUVNode } from "./utils/MatcapUVNode.js"; +export { default as MaxMipLevelNode } from "./utils/MaxMipLevelNode.js"; +export { default as OscNode, OscNodeMethod } from "./utils/OscNode.js"; +export { default as ReflectorNode, ReflectorNodeParameters } from "./utils/ReflectorNode.js"; +export { default as RemapNode } from "./utils/RemapNode.js"; +export { default as RotateNode } from "./utils/RotateNode.js"; +export { default as RTTNode, RTTNodeOptions } from "./utils/RTTNode.js"; +export { default as SetNode } from "./utils/SetNode.js"; export { default as SplitNode } from "./utils/SplitNode.js"; -export { default as SpriteSheetUVNode, spritesheetUV } from "./utils/SpriteSheetUVNode.js"; -export { default as StorageArrayElementNode } from "./utils/SpriteSheetUVNode.js"; -export * from "./utils/SpriteUtils.js"; -export { - default as TimerNode, - frameId, - timerDelta, - timerGlobal, - timerLocal, - TimerNodeScope, -} from "./utils/TimerNode.js"; -export { - default as TriplanarTexturesNode, - triplanarTexture, - triplanarTextures, -} from "./utils/TriplanarTexturesNode.js"; -export * from "./utils/UVUtils.js"; -export * from "./utils/ViewportUtils.js"; - -// shader node -export * from "./shadernode/ShaderNode.js"; +export { default as SpriteSheetUVNode } from "./utils/SpriteSheetUVNode.js"; +export { default as StorageArrayElementNode } from "./utils/StorageArrayElementNode.js"; +export { default as TimerNode, TimerNodeScope } from "./utils/TimerNode.js"; +export { default as TriplanarTexturesNode } from "./utils/TriplanarTexturesNode.js"; // accessors -export { parallaxDirection, parallaxUV, TBNViewMatrix, transformedBentNormalView } from "./accessors/AccessorsUtils.js"; -export { batch, default as BatchNode } from "./accessors/BatchNode.js"; -export * from "./accessors/BitangentNode.js"; -export { buffer, default as BufferNode } from "./accessors/BufferNode.js"; -export * from "./accessors/CameraNode.js"; -export { cubeTexture, default as CubeTextureNode } from "./accessors/CubeTextureNode.js"; -export { default as InstanceNode, instance } from "./accessors/InstanceNode.js"; -export { - default as MaterialNode, - materialAlphaTest, - materialAnisotropy, - materialAnisotropyVector, - materialAOMap, - materialClearcoat, - materialClearcoatNormal, - materialClearcoatRoughness, - materialColor, - materialDispersion, - materialEmissive, - materialIridescence, - materialIridescenceIOR, - materialIridescenceThickness, - materialLightMap, - materialLineDashOffset, - materialLineDashSize, - materialLineGapSize, - materialLineScale, - materialLineWidth, - materialMetalness, - MaterialNodeScope, - materialNormal, - materialOpacity, - materialPointWidth, - materialReflectivity, - materialRotation, - materialRoughness, - materialSheen, - materialSheenRoughness, - materialShininess, - materialSpecular, - materialSpecularStrength, -} from "./accessors/MaterialNode.js"; -export * from "./accessors/MaterialProperties.js"; -export { default as MaterialReferenceNode, materialReference } from "./accessors/MaterialReferenceNode.js"; -export { - default as ModelNode, - modelDirection, - modelNormalMatrix, - modelPosition, - modelScale, - modelViewMatrix, - modelViewPosition, - modelWorldMatrix, - modelWorldMatrixInverse, -} from "./accessors/ModelNode.js"; -export { default as ModelViewProjectionNode, modelViewProjection } from "./accessors/ModelViewProjectionNode.js"; -export * from "./accessors/NormalNode.js"; -export { - default as Object3DNode, - objectDirection, - objectNormalMatrix, - objectPosition, - objectScale, - objectViewMatrix, - objectViewPosition, - objectWorldMatrix, -} from "./accessors/Object3DNode.js"; -export { default as PointUVNode, pointUV } from "./accessors/PointUVNode.js"; -export * from "./accessors/PositionNode.js"; -export { default as ReferenceNode, reference, referenceBuffer } from "./accessors/ReferenceNode.js"; -export * from "./accessors/ReflectVectorNode.js"; -export { default as RendererReferenceNode, rendererReference } from "./accessors/RendererReferenceNode.js"; -export { default as SkinningNode, skinning, skinningReference } from "./accessors/SkinningNode.js"; -export { default as StorageBufferNode, storage, storageObject } from "./accessors/StorageBufferNode.js"; -export { default as StorageTextureNode, storageTexture, textureStore } from "./accessors/StorageTextureNode.js"; -export * from "./accessors/TangentNode.js"; -export { default as Texture3DNode, texture3D } from "./accessors/Texture3DNode.js"; -export { default as TextureBicubicNode, textureBicubic } from "./accessors/TextureBicubicNode.js"; -export { default as TextureNode, sampler, texture } from "./accessors/TextureNode.js"; -export { default as UniformArrayNode, uniformArray } from "./accessors/UniformArrayNode.js"; -export { default as UserDataNode, userData } from "./accessors/UserDataNode.js"; -export * from "./accessors/UVNode.js"; -export * from "./accessors/VelocityNode.js"; -export { default as VertexColorNode, vertexColor } from "./accessors/VertexColorNode.js"; +export { default as BatchNode } from "./accessors/BatchNode.js"; +export { default as BufferAttributeNode } from "./accessors/BufferAttributeNode.js"; +export { default as BufferNode } from "./accessors/BufferNode.js"; +export { default as CubeTextureNode } from "./accessors/CubeTextureNode.js"; +export { default as InstanceNode } from "./accessors/InstanceNode.js"; +export { default as MaterialNode, MaterialNodeScope } from "./accessors/MaterialNode.js"; +export { default as MaterialReferenceNode } from "./accessors/MaterialReferenceNode.js"; +export { default as ModelNode } from "./accessors/ModelNode.js"; +export { default as ModelViewProjectionNode } from "./accessors/ModelViewProjectionNode.js"; +export { default as MorphNode } from "./accessors/MorphNode.js"; +export { default as Object3DNode } from "./accessors/Object3DNode.js"; +export { default as PointUVNode } from "./accessors/PointUVNode.js"; +export { default as ReferenceNode } from "./accessors/ReferenceNode.js"; +export { default as RendererReferenceNode } from "./accessors/RendererReferenceNode.js"; +export { default as SceneNode, SceneNodeScope } from "./accessors/SceneNode.js"; +export { default as SkinningNode } from "./accessors/SkinningNode.js"; +export { default as StorageBufferNode } from "./accessors/StorageBufferNode.js"; +export { default as StorageTextureNode } from "./accessors/StorageTextureNode.js"; +export { default as Texture3DNode } from "./accessors/Texture3DNode.js"; +export { default as TextureNode } from "./accessors/TextureNode.js"; +export { default as TextureSizeNode } from "./accessors/TextureSizeNode.js"; +export { default as UniformArrayNode } from "./accessors/UniformArrayNode.js"; +export { default as UserDataNode, NodeUserData } from "./accessors/UserDataNode.js"; +export { default as VertexColorNode } from "./accessors/VertexColorNode.js"; // display -export { afterImage, default as AfterImageNode } from "./display/AfterImageNode.js"; -export { anaglyphPass, default as AnaglyphPassNode } from "./display/AnaglyphPassNode.js"; -export { anamorphic, default as AnamorphicNode } from "./display/AnamorphicNode.js"; -export { bleach } from "./display/BleachBypassNode.js"; -export * from "./display/BlendModeNode.js"; -export { bloom, default as BloomNode } from "./display/BloomNode.js"; -export * from "./display/ColorAdjustmentNode.js"; -export { - ColorSpaceNodeMethod, - colorSpaceToLinear, - default as ColorSpaceNode, - linearToColorSpace, - linearTosRGB, - sRGBToLinear, -} from "./display/ColorSpaceNode.js"; -export { default as DenoiseNode, denoise } from "./display/DenoiseNode.js"; -export { default as DepthOfFieldNode, dof } from "./display/DepthOfFieldNode.js"; -export { default as DotScreenNode, dotScreen } from "./display/DotScreenNode.js"; -export { default as FilmNode, film } from "./display/FilmNode.js"; -export { default as FrontFacingNode, faceDirection, frontFacing } from "./display/FrontFacingNode.js"; -export { default as FXAANode, fxaa } from "./display/FXAANode.js"; -export { default as GaussianBlurNode, gaussianBlur } from "./display/GaussianBlurNode.js"; -export { ao, default as GTAONode } from "./display/GTAONode.js"; -export { default as Lut3DNode, lut3D } from "./display/Lut3DNode.js"; -export * from "./display/MotionBlurNode.js"; -export { default as NormalMapNode, normalMap } from "./display/NormalMapNode.js"; -export { default as ParallaxBarrierPassNode, parallaxBarrierPass } from "./display/ParallaxBarrierPassNode.js"; -export { default as PixelationPassNode, pixelationPass } from "./display/PixelationPassNode.js"; -export { default as PosterizeNode, posterize } from "./display/PosterizeNode.js"; -export { default as RenderOutputNode, renderOutput } from "./display/RenderOutputNode.js"; -export { default as RGBShiftNode, rgbShift } from "./display/RGBShiftNode.js"; -export { sepia } from "./display/SepiaNode.js"; -export { default as SobelOperatorNode, sobel } from "./display/SobelOperatorNode.js"; -export { default as SSAAPassNode, ssaaPass } from "./display/SSAAPassNode.js"; -export { default as StereoPassNode, stereoPass } from "./display/StereoPassNode.js"; -export { default as ToneMappingNode, toneMapping } from "./display/ToneMappingNode.js"; -export { default as TransitionNode, transition } from "./display/TransitionNode.js"; -export { - default as ViewportDepthNode, - depth, - linearDepth, - orthographicDepthToViewZ, - perspectiveDepthToViewZ, - ViewportDepthNodeScope, - viewportLinearDepth, - viewZToOrthographicDepth, - viewZToPerspectiveDepth, -} from "./display/ViewportDepthNode.js"; -export { default as ViewportDepthTextureNode, viewportDepthTexture } from "./display/ViewportDepthTextureNode.js"; -export { - default as ViewportNode, - viewport, - viewportBottomLeft, - viewportCoordinate, - ViewportNodeScope, - viewportResolution, - viewportTopLeft, - viewportUV, -} from "./display/ViewportNode.js"; -export { default as ViewportSharedTextureNode, viewportSharedTexture } from "./display/ViewportSharedTextureNode.js"; -export { default as ViewportTextureNode, viewportMipTexture, viewportTexture } from "./display/ViewportTextureNode.js"; - -export { default as PassNode, depthPass, pass, PassNodeScope, passTexture } from "./display/PassNode.js"; +export { default as AfterImageNode } from "./display/AfterImageNode.js"; +export { default as AnaglyphPassNode } from "./display/AnaglyphPassNode.js"; +export { default as AnamorphicNode } from "./display/AnamorphicNode.js"; +export { default as BloomNode } from "./display/BloomNode.js"; +export { default as BumpMapNode } from "./display/BumpMapNode.js"; +export { default as ColorSpaceNode } from "./display/ColorSpaceNode.js"; +export { default as DenoiseNode } from "./display/DenoiseNode.js"; +export { default as DepthOfFieldNode } from "./display/DepthOfFieldNode.js"; +export { default as DotScreenNode } from "./display/DotScreenNode.js"; +export { default as FilmNode } from "./display/FilmNode.js"; +export { default as FrontFacingNode } from "./display/FrontFacingNode.js"; +export { default as FXAANode } from "./display/FXAANode.js"; +export { default as GaussianBlurNode } from "./display/GaussianBlurNode.js"; +export { default as GTAONode } from "./display/GTAONode.js"; +export { default as Lut3DNode } from "./display/Lut3DNode.js"; +export { default as NormalMapNode } from "./display/NormalMapNode.js"; +export { default as ParallaxBarrierPassNode } from "./display/ParallaxBarrierPassNode.js"; +export { default as PassNode, PassNodeScope } from "./display/PassNode.js"; +export { default as PixelationPassNode } from "./display/PixelationPassNode.js"; +export { default as PosterizeNode } from "./display/PosterizeNode.js"; +export { default as RenderOutputNode } from "./display/RenderOutputNode.js"; +export { default as RGBShiftNode } from "./display/RGBShiftNode.js"; +export { default as SobelOperatorNode } from "./display/SobelOperatorNode.js"; +export { default as SSAAPassNode } from "./display/SSAAPassNode.js"; +export { default as StereoPassNode } from "./display/StereoPassNode.js"; +export { default as ToneMappingNode } from "./display/ToneMappingNode.js"; +export { default as TransitionNode } from "./display/TransitionNode.js"; +export { default as ViewportDepthNode, ViewportDepthNodeScope } from "./display/ViewportDepthNode.js"; +export { default as ViewportDepthTextureNode } from "./display/ViewportDepthTextureNode.js"; +export { default as ViewportNode, ViewportNodeScope } from "./display/ViewportNode.js"; +export { default as ViewportSharedTextureNode } from "./display/ViewportSharedTextureNode.js"; +export { default as ViewportTextureNode } from "./display/ViewportTextureNode.js"; // code -export { code, CodeNodeInclude, default as CodeNode, glsl, js, wgsl } from "./code/CodeNode.js"; -export { default as ExpressionNode, expression } from "./code/ExpressionNode.js"; -export { call, default as FunctionCallNode } from "./code/FunctionCallNode.js"; -export { default as FunctionNode, FunctionNodeArguments, glslFn, wgslFn } from "./code/FunctionNode.js"; +export { CodeNodeInclude, default as CodeNode } from "./code/CodeNode.js"; +export { default as ExpressionNode } from "./code/ExpressionNode.js"; +export { default as FunctionCallNode } from "./code/FunctionCallNode.js"; +export { default as FunctionNode } from "./code/FunctionNode.js"; +export { default as ScriptableNode } from "./code/ScriptableNode.js"; +export { default as ScriptableValueNode } from "./code/ScriptableValueNode.js"; // fog -export { default as FogExp2Node, densityFog } from "./fog/FogExp2Node.js"; -export { default as FogNode, fog } from "./fog/FogNode.js"; -export { default as FogRangeNode, rangeFog } from "./fog/FogRangeNode.js"; +export { default as FogExp2Node } from "./fog/FogExp2Node.js"; +export { default as FogNode } from "./fog/FogNode.js"; +export { default as FogRangeNode } from "./fog/FogRangeNode.js"; // geometry -export { default as RangeNode, range, RangeModeBound } from "./geometry/RangeNode.js"; +export { default as RangeNode, RangeModeBound } from "./geometry/RangeNode.js"; // gpgpu -export { compute, default as ComputeNode } from "./gpgpu/ComputeNode.js"; +export { default as ComputeNode } from "./gpgpu/ComputeNode.js"; // lighting +export { default as AmbientLightNode } from "./lighting/AmbientLightNode.js"; export { default as AnalyticLightNode } from "./lighting/AnalyticLightNode.js"; export { default as AONode } from "./lighting/AONode.js"; export { default as BasicEnvironmentNode } from "./lighting/BasicEnvironmentNode.js"; +export { default as DirectionalLightNode } from "./lighting/DirectionalLightNode.js"; export { default as EnvironmentNode } from "./lighting/EnvironmentNode.js"; export { default as HemisphereLightNode } from "./lighting/HemisphereLightNode.js"; +export { default as IESSpotLightNode } from "./lighting/IESSpotLightNode.js"; export { default as IrradianceNode } from "./lighting/IrradianceNode.js"; -export { default as LightingContextNode, lightingContext } from "./lighting/LightingContextNode.js"; +export { default as LightingContextNode } from "./lighting/LightingContextNode.js"; export { default as LightingNode } from "./lighting/LightingNode.js"; +export { default as LightNode, LightNodeScope } from "./lighting/LightNode.js"; export { default as LightProbeNode } from "./lighting/LightProbeNode.js"; -export { default as LightsNode, lights } from "./lighting/LightsNode.js"; +export { default as LightsNode } from "./lighting/LightsNode.js"; export { default as PointLightNode } from "./lighting/PointLightNode.js"; export { default as RectAreaLightNode, RectAreaLightTexturesLib } from "./lighting/RectAreaLightNode.js"; export { default as SpotLightNode } from "./lighting/SpotLightNode.js"; // pmrem -export { default as PMREMNode, pmremTexture } from "./pmrem/PMREMNode.js"; - -// procedural -export { checker, default as CheckerNode } from "./procedural/CheckerNode.js"; - -// loaders -export { default as NodeLoader } from "./loaders/NodeLoader.js"; -export { default as NodeMaterialLoader } from "./loaders/NodeMaterialLoader.js"; -export { default as NodeObjectLoader } from "./loaders/NodeObjectLoader.js"; - -// materials -export * from "./materials/Materials.js"; - -// materialX -export * from "./materialx/MaterialXNodes.js"; - -// functions -export { default as BRDF_GGX } from "./functions/BSDF/BRDF_GGX.js"; -export { default as BRDF_Lambert } from "./functions/BSDF/BRDF_Lambert.js"; -export { default as D_GGX } from "./functions/BSDF/D_GGX.js"; -export { default as DFGApprox } from "./functions/BSDF/DFGApprox.js"; -export { default as F_Schlick } from "./functions/BSDF/F_Schlick.js"; -export { default as V_GGX_SmithCorrelated } from "./functions/BSDF/V_GGX_SmithCorrelated.js"; - -export { getDistanceAttenuation } from "./lighting/LightUtils.js"; +export { default as PMREMNode } from "./pmrem/PMREMNode.js"; -export { default as getGeometryRoughness } from "./functions/material/getGeometryRoughness.js"; -export { default as getRoughness } from "./functions/material/getRoughness.js"; +// parsers +export { default as GLSLNodeParser } from "./parsers/GLSLNodeParser.js"; +// lighting models export { default as PhongLightingModel } from "./functions/PhongLightingModel.js"; export { default as PhysicalLightingModel } from "./functions/PhysicalLightingModel.js"; diff --git a/types/three/src/nodes/TSL.d.ts b/types/three/src/nodes/TSL.d.ts new file mode 100644 index 000000000..adfa98ea3 --- /dev/null +++ b/types/three/src/nodes/TSL.d.ts @@ -0,0 +1,269 @@ +// constants +export * from "./core/constants.js"; + +// core +export * from "./core/AssignNode.js"; +export * from "./core/AttributeNode.js"; +export * from "./core/BypassNode.js"; +export * from "./core/CacheNode.js"; +export * from "./core/ContextNode.js"; +export * from "./core/IndexNode.js"; +export * from "./core/MRTNode.js"; +export * from "./core/OutputStructNode.js"; +export * from "./core/ParameterNode.js"; +export * from "./core/PropertyNode.js"; +export * from "./core/StackNode.js"; +export * from "./core/UniformGroupNode.js"; +export * from "./core/UniformNode.js"; +export * from "./core/VaryingNode.js"; + +// math +export * from "./math/Hash.js"; +export * from "./math/MathUtils.js"; +export * from "./math/TriNoise3D.js"; + +// utils +export { default as EquirectUVNode, equirectUV } from "./utils/EquirectUVNode.js"; +export { default as FunctionOverloadingNode, overloadingFn } from "./utils/FunctionOverloadingNode.js"; +export { Break, Continue, default as LoopNode, Loop } from "./utils/LoopNode.js"; +export { default as MatcapUVNode, matcapUV } from "./utils/MatcapUVNode.js"; +export { default as MaxMipLevelNode, maxMipLevel } from "./utils/MaxMipLevelNode.js"; +export { default as OscNode, OscNodeMethod, oscSawtooth, oscSine, oscSquare, oscTriangle } from "./utils/OscNode.js"; +export * from "./utils/Packing.js"; +export { default as ReflectorNode, reflector, ReflectorNodeParameters } from "./utils/ReflectorNode.js"; +export { default as RemapNode, remap, remapClamp } from "./utils/RemapNode.js"; +export { default as RotateNode, rotate } from "./utils/RotateNode.js"; +export { convertToTexture, default as RTTNode, rtt, RTTNodeOptions } from "./utils/RTTNode.js"; +export { default as SpriteSheetUVNode, spritesheetUV } from "./utils/SpriteSheetUVNode.js"; +export * from "./utils/SpriteUtils.js"; +export { + default as TimerNode, + frameId, + timerDelta, + timerGlobal, + timerLocal, + TimerNodeScope, +} from "./utils/TimerNode.js"; +export { + default as TriplanarTexturesNode, + triplanarTexture, + triplanarTextures, +} from "./utils/TriplanarTexturesNode.js"; +export * from "./utils/UVUtils.js"; +export * from "./utils/ViewportUtils.js"; + +// three.js shading language +export * from "./tsl/TSLBase.js"; + +// accessors +export * from "./accessors/AccessorsUtils.js"; +export { batch, default as BatchNode } from "./accessors/BatchNode.js"; +export * from "./accessors/Bitangent.js"; +export { + bufferAttribute, + default as BufferAttributeNode, + dynamicBufferAttribute, + instancedBufferAttribute, + instancedDynamicBufferAttribute, +} from "./accessors/BufferAttributeNode.js"; +export { buffer, default as BufferNode } from "./accessors/BufferNode.js"; +export * from "./accessors/Camera.js"; +export { cubeTexture, default as CubeTextureNode } from "./accessors/CubeTextureNode.js"; +export { default as InstanceNode, instance } from "./accessors/InstanceNode.js"; +export { + default as MaterialNode, + materialAlphaTest, + materialAnisotropy, + materialAnisotropyVector, + materialAOMap, + materialClearcoat, + materialClearcoatNormal, + materialClearcoatRoughness, + materialColor, + materialDispersion, + materialEmissive, + materialIridescence, + materialIridescenceIOR, + materialIridescenceThickness, + materialLightMap, + materialLineDashOffset, + materialLineDashSize, + materialLineGapSize, + materialLineScale, + materialLineWidth, + materialMetalness, + MaterialNodeScope, + materialNormal, + materialOpacity, + materialPointWidth, + materialReflectivity, + materialRotation, + materialRoughness, + materialSheen, + materialSheenRoughness, + materialShininess, + materialSpecular, + materialSpecularStrength, +} from "./accessors/MaterialNode.js"; +export * from "./accessors/MaterialProperties.js"; +export { default as MaterialReferenceNode, materialReference } from "./accessors/MaterialReferenceNode.js"; +export { + default as ModelNode, + modelDirection, + modelNormalMatrix, + modelPosition, + modelScale, + modelViewMatrix, + modelViewPosition, + modelWorldMatrix, + modelWorldMatrixInverse, +} from "./accessors/ModelNode.js"; +export { default as ModelViewProjectionNode, modelViewProjection } from "./accessors/ModelViewProjectionNode.js"; +export { default as MorphNode, morphReference } from "./accessors/MorphNode.js"; +export * from "./accessors/Normal.js"; +export { + default as Object3DNode, + objectDirection, + objectNormalMatrix, + objectPosition, + objectScale, + objectViewMatrix, + objectViewPosition, + objectWorldMatrix, +} from "./accessors/Object3DNode.js"; +export { default as PointUVNode, pointUV } from "./accessors/PointUVNode.js"; +export * from "./accessors/Position.js"; +export { default as ReferenceNode, reference, referenceBuffer } from "./accessors/ReferenceNode.js"; +export * from "./accessors/ReflectVector.js"; +export { default as RendererReferenceNode, rendererReference } from "./accessors/RendererReferenceNode.js"; +export { + backgroundBlurriness, + backgroundIntensity, + default as SceneNode, + SceneNodeScope, +} from "./accessors/SceneNode.js"; +export { default as SkinningNode, skinning, skinningReference } from "./accessors/SkinningNode.js"; +export { default as StorageBufferNode, storage, storageObject } from "./accessors/StorageBufferNode.js"; +export { default as StorageTextureNode, storageTexture, textureStore } from "./accessors/StorageTextureNode.js"; +export * from "./accessors/Tangent.js"; +export { default as Texture3DNode, texture3D } from "./accessors/Texture3DNode.js"; +export * from "./accessors/TextureBicubic.js"; +export { default as TextureNode, /*textureLevel,*/ sampler, texture, textureLoad } from "./accessors/TextureNode.js"; +export { default as TextureSizeNode, textureSize } from "./accessors/TextureSizeNode.js"; +export { default as UniformArrayNode, uniformArray } from "./accessors/UniformArrayNode.js"; +export { default as UserDataNode, NodeUserData, userData } from "./accessors/UserDataNode.js"; +export * from "./accessors/UV.js"; +export * from "./accessors/VelocityNode.js"; +export { default as VertexColorNode, vertexColor } from "./accessors/VertexColorNode.js"; + +// display +export { afterImage, default as AfterImageNode } from "./display/AfterImageNode.js"; +export { anaglyphPass, default as AnaglyphPassNode } from "./display/AnaglyphPassNode.js"; +export { anamorphic, default as AnamorphicNode } from "./display/AnamorphicNode.js"; +export { bleach } from "./display/BleachBypass.js"; +export * from "./display/BlendMode.js"; +export { bloom, default as BloomNode } from "./display/BloomNode.js"; +export { bumpMap, default as BumpMapNode } from "./display/BumpMapNode.js"; +export * from "./display/ColorAdjustment.js"; +export { colorSpaceToLinear, default as ColorSpaceNode, linearToColorSpace } from "./display/ColorSpaceNode.js"; +export { default as DenoiseNode, denoise } from "./display/DenoiseNode.js"; +export { default as DepthOfFieldNode, dof } from "./display/DepthOfFieldNode.js"; +export { default as DotScreenNode, dotScreen } from "./display/DotScreenNode.js"; +export { default as FilmNode, film } from "./display/FilmNode.js"; +export { default as FrontFacingNode, faceDirection, frontFacing } from "./display/FrontFacingNode.js"; +export { default as FXAANode, fxaa } from "./display/FXAANode.js"; +export { default as GaussianBlurNode, gaussianBlur } from "./display/GaussianBlurNode.js"; +export { ao, default as GTAONode } from "./display/GTAONode.js"; +export { default as Lut3DNode, lut3D } from "./display/Lut3DNode.js"; +export * from "./display/MotionBlur.js"; +export { default as NormalMapNode, normalMap } from "./display/NormalMapNode.js"; +export { default as ParallaxBarrierPassNode, parallaxBarrierPass } from "./display/ParallaxBarrierPassNode.js"; +export { default as PixelationPassNode, pixelationPass } from "./display/PixelationPassNode.js"; +export { default as PosterizeNode, posterize } from "./display/PosterizeNode.js"; +export { default as RenderOutputNode, renderOutput } from "./display/RenderOutputNode.js"; +export { default as RGBShiftNode, rgbShift } from "./display/RGBShiftNode.js"; +export { sepia } from "./display/Sepia.js"; +export { default as SobelOperatorNode, sobel } from "./display/SobelOperatorNode.js"; +export { default as SSAAPassNode, ssaaPass } from "./display/SSAAPassNode.js"; +export { default as StereoPassNode, stereoPass } from "./display/StereoPassNode.js"; +export { default as ToneMappingNode, toneMapping } from "./display/ToneMappingNode.js"; +export { default as TransitionNode, transition } from "./display/TransitionNode.js"; +export { + default as ViewportDepthNode, + depth, + linearDepth, + orthographicDepthToViewZ, + perspectiveDepthToViewZ, + viewportLinearDepth, + viewZToOrthographicDepth, + viewZToPerspectiveDepth, +} from "./display/ViewportDepthNode.js"; +export { default as ViewportDepthTextureNode, viewportDepthTexture } from "./display/ViewportDepthTextureNode.js"; +export { + default as ViewportNode, + viewport, + viewportBottomLeft, + viewportCoordinate, + ViewportNodeScope, + viewportResolution, + viewportTopLeft, + viewportUV, +} from "./display/ViewportNode.js"; +export { default as ViewportSharedTextureNode, viewportSharedTexture } from "./display/ViewportSharedTextureNode.js"; +export { default as ViewportTextureNode, viewportMipTexture, viewportTexture } from "./display/ViewportTextureNode.js"; + +export { default as PassNode, depthPass, pass, PassNodeScope, passTexture } from "./display/PassNode.js"; + +import * as ColorSpaceFunctions from "./display/ColorSpaceFunctions.js"; +export { ColorSpaceFunctions }; + +import * as ToneMappingFunctions from "./display/ToneMappingFunctions.js"; +export { ToneMappingFunctions }; + +// code +export { code, CodeNodeInclude, default as CodeNode, glsl, js, wgsl } from "./code/CodeNode.js"; +export { default as ExpressionNode, expression } from "./code/ExpressionNode.js"; +export { call, default as FunctionCallNode } from "./code/FunctionCallNode.js"; +export { default as FunctionNode, glslFn, wgslFn } from "./code/FunctionNode.js"; +export { default as ScriptableNode, global, scriptable } from "./code/ScriptableNode.js"; +export { default as ScriptableValueNode, scriptableValue } from "./code/ScriptableValueNode.js"; + +// fog +export { default as FogExp2Node, densityFog } from "./fog/FogExp2Node.js"; +export { default as FogNode, fog } from "./fog/FogNode.js"; +export { default as FogRangeNode, rangeFog } from "./fog/FogRangeNode.js"; + +// geometry +export { default as RangeNode, range, RangeModeBound } from "./geometry/RangeNode.js"; + +// gpgpu +export { compute, default as ComputeNode } from "./gpgpu/ComputeNode.js"; + +// lighting +export { default as LightingContextNode, lightingContext } from "./lighting/LightingContextNode.js"; +export { default as LightNode, LightNodeScope, lightTargetDirection } from "./lighting/LightNode.js"; +export { default as LightsNode, lights } from "./lighting/LightsNode.js"; + +// pmrem +export { default as PMREMNode, pmremTexture } from "./pmrem/PMREMNode.js"; +export * from "./pmrem/PMREMUtils.js"; + +// procedural +export * from "./procedural/Checker.js"; + +// materialX +export * from "./materialx/MaterialXNodes.js"; + +// functions +export { default as BRDF_GGX } from "./functions/BSDF/BRDF_GGX.js"; +export { default as BRDF_Lambert } from "./functions/BSDF/BRDF_Lambert.js"; +export { default as D_GGX } from "./functions/BSDF/D_GGX.js"; +export { default as DFGApprox } from "./functions/BSDF/DFGApprox.js"; +export { default as F_Schlick } from "./functions/BSDF/F_Schlick.js"; +export { default as Schlick_to_F0 } from "./functions/BSDF/Schlick_to_F0.js"; +export { default as V_GGX_SmithCorrelated } from "./functions/BSDF/V_GGX_SmithCorrelated.js"; + +export * from "./lighting/LightUtils.js"; + +export { default as getGeometryRoughness } from "./functions/material/getGeometryRoughness.js"; +export { default as getRoughness } from "./functions/material/getRoughness.js"; diff --git a/types/three/src/nodes/accessors/AccessorsUtils.d.ts b/types/three/src/nodes/accessors/AccessorsUtils.d.ts index fc2980b0d..e42044673 100644 --- a/types/three/src/nodes/accessors/AccessorsUtils.d.ts +++ b/types/three/src/nodes/accessors/AccessorsUtils.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const TBNViewMatrix: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/BatchNode.d.ts b/types/three/src/nodes/accessors/BatchNode.d.ts index 1bdf58cf0..51db8b6bb 100644 --- a/types/three/src/nodes/accessors/BatchNode.d.ts +++ b/types/three/src/nodes/accessors/BatchNode.d.ts @@ -1,6 +1,6 @@ import { BatchedMesh } from "../../objects/BatchedMesh.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class BatchNode extends Node { batchMesh: BatchedMesh; diff --git a/types/three/src/nodes/accessors/BitangentNode.d.ts b/types/three/src/nodes/accessors/Bitangent.d.ts similarity index 86% rename from types/three/src/nodes/accessors/BitangentNode.d.ts rename to types/three/src/nodes/accessors/Bitangent.d.ts index 5a24e8eba..bcdc4d6e2 100644 --- a/types/three/src/nodes/accessors/BitangentNode.d.ts +++ b/types/three/src/nodes/accessors/Bitangent.d.ts @@ -1,5 +1,5 @@ import MathNode from "../math/MathNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const bitangentGeometry: ShaderNodeObject; export const bitangentLocal: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/BufferAttributeNode.d.ts b/types/three/src/nodes/accessors/BufferAttributeNode.d.ts index f715dd7cf..0f9ed91e3 100644 --- a/types/three/src/nodes/accessors/BufferAttributeNode.d.ts +++ b/types/three/src/nodes/accessors/BufferAttributeNode.d.ts @@ -32,22 +32,22 @@ export declare const bufferAttribute: ( type?: string | null, stride?: number, offset?: number, -) => import("../shadernode/ShaderNode.js").ShaderNodeObject; +) => import("../tsl/TSLCore.js").ShaderNodeObject; export declare const dynamicBufferAttribute: ( array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number, -) => import("../shadernode/ShaderNode.js").ShaderNodeObject; +) => import("../tsl/TSLCore.js").ShaderNodeObject; export declare const instancedBufferAttribute: ( array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number, -) => import("../shadernode/ShaderNode.js").ShaderNodeObject; +) => import("../tsl/TSLCore.js").ShaderNodeObject; export declare const instancedDynamicBufferAttribute: ( array: TypedArray | InterleavedBuffer | BufferAttribute, type?: string | null, stride?: number, offset?: number, -) => import("../shadernode/ShaderNode.js").ShaderNodeObject; +) => import("../tsl/TSLCore.js").ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/BufferNode.d.ts b/types/three/src/nodes/accessors/BufferNode.d.ts index 050b31ddd..4db9ccccd 100644 --- a/types/three/src/nodes/accessors/BufferNode.d.ts +++ b/types/three/src/nodes/accessors/BufferNode.d.ts @@ -1,5 +1,5 @@ import UniformNode from "../core/UniformNode.js"; -import { NodeOrType, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeOrType, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class BufferNode extends UniformNode { isBufferNode: true; diff --git a/types/three/src/nodes/accessors/CameraNode.d.ts b/types/three/src/nodes/accessors/Camera.d.ts similarity index 92% rename from types/three/src/nodes/accessors/CameraNode.d.ts rename to types/three/src/nodes/accessors/Camera.d.ts index dce969e9c..2ffc6bfc8 100644 --- a/types/three/src/nodes/accessors/CameraNode.d.ts +++ b/types/three/src/nodes/accessors/Camera.d.ts @@ -2,7 +2,7 @@ import { Matrix3 } from "../../math/Matrix3.js"; import { Matrix4 } from "../../math/Matrix4.js"; import { Vector3 } from "../../math/Vector3.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const cameraNear: ShaderNodeObject>; export const cameraFar: ShaderNodeObject>; diff --git a/types/three/src/nodes/accessors/ClippingNode.d.ts b/types/three/src/nodes/accessors/ClippingNode.d.ts index 4c1d42247..bb2cac1cd 100644 --- a/types/three/src/nodes/accessors/ClippingNode.d.ts +++ b/types/three/src/nodes/accessors/ClippingNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export type ClippingNodeScope = typeof ClippingNode.ALPHA_TO_COVERAGE | typeof ClippingNode.DEFAULT; diff --git a/types/three/src/nodes/accessors/CubeTextureNode.d.ts b/types/three/src/nodes/accessors/CubeTextureNode.d.ts index 6e3b8c19d..c25d51999 100644 --- a/types/three/src/nodes/accessors/CubeTextureNode.d.ts +++ b/types/three/src/nodes/accessors/CubeTextureNode.d.ts @@ -1,6 +1,6 @@ import { CubeTexture } from "../../textures/CubeTexture.js"; import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import TextureNode from "./TextureNode.js"; declare class CubeTextureNode extends TextureNode { @@ -26,9 +26,3 @@ export const cubeTexture: ( levelNode?: NodeRepresentation, biasNode?: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - cubeTexture: typeof cubeTexture; - } -} diff --git a/types/three/src/nodes/accessors/InstanceNode.d.ts b/types/three/src/nodes/accessors/InstanceNode.d.ts index bb54f0a81..c6cd43993 100644 --- a/types/three/src/nodes/accessors/InstanceNode.d.ts +++ b/types/three/src/nodes/accessors/InstanceNode.d.ts @@ -1,6 +1,6 @@ import { InstancedMesh } from "../../objects/InstancedMesh.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class InstanceNode extends Node { instanceMesh: InstancedMesh; diff --git a/types/three/src/nodes/accessors/MaterialNode.d.ts b/types/three/src/nodes/accessors/MaterialNode.d.ts index d9c2ad2bc..fa3ca6753 100644 --- a/types/three/src/nodes/accessors/MaterialNode.d.ts +++ b/types/three/src/nodes/accessors/MaterialNode.d.ts @@ -1,7 +1,7 @@ import { Vector2 } from "../../math/Vector2.js"; import Node from "../core/Node.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export type MaterialNodeScope = | typeof MaterialNode.ALPHA_TEST diff --git a/types/three/src/nodes/accessors/MaterialProperties.d.ts b/types/three/src/nodes/accessors/MaterialProperties.d.ts index e1a0948e1..3e07ecf0b 100644 --- a/types/three/src/nodes/accessors/MaterialProperties.d.ts +++ b/types/three/src/nodes/accessors/MaterialProperties.d.ts @@ -1,4 +1,4 @@ import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const materialRefractionRatio: ShaderNodeObject>; diff --git a/types/three/src/nodes/accessors/MaterialReferenceNode.d.ts b/types/three/src/nodes/accessors/MaterialReferenceNode.d.ts index 061228d29..7b0cdf4ac 100644 --- a/types/three/src/nodes/accessors/MaterialReferenceNode.d.ts +++ b/types/three/src/nodes/accessors/MaterialReferenceNode.d.ts @@ -1,5 +1,5 @@ import { Material } from "../../materials/Material.js"; -import { NodeOrType, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeOrType, ShaderNodeObject } from "../tsl/TSLCore.js"; import ReferenceNode from "./ReferenceNode.js"; export default class MaterialReferenceNode extends ReferenceNode { diff --git a/types/three/src/nodes/accessors/ModelNode.d.ts b/types/three/src/nodes/accessors/ModelNode.d.ts index a7dfbcfdb..a0546e220 100644 --- a/types/three/src/nodes/accessors/ModelNode.d.ts +++ b/types/three/src/nodes/accessors/ModelNode.d.ts @@ -1,6 +1,6 @@ import { Matrix4 } from "../../math/Matrix4.js"; import { UniformNode } from "../Nodes.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import Object3DNode from "./Object3DNode.js"; /** diff --git a/types/three/src/nodes/accessors/ModelViewProjectionNode.d.ts b/types/three/src/nodes/accessors/ModelViewProjectionNode.d.ts index dee451a19..18302d638 100644 --- a/types/three/src/nodes/accessors/ModelViewProjectionNode.d.ts +++ b/types/three/src/nodes/accessors/ModelViewProjectionNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class ModelViewProjectionNode extends Node { constructor(positionNode?: Node); diff --git a/types/three/src/nodes/accessors/MorphNode.d.ts b/types/three/src/nodes/accessors/MorphNode.d.ts new file mode 100644 index 000000000..8987acf6e --- /dev/null +++ b/types/three/src/nodes/accessors/MorphNode.d.ts @@ -0,0 +1,15 @@ +import { Mesh } from "../../objects/Mesh.js"; +import Node from "../core/Node.js"; +import UniformNode from "../core/UniformNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class MorphNode extends Node { + mesh: Mesh; + morphBaseInfluence: UniformNode; + + constructor(mesh: Mesh); +} + +export default MorphNode; + +export const morphReference: (mesh: Mesh) => ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/NormalNode.d.ts b/types/three/src/nodes/accessors/Normal.d.ts similarity index 89% rename from types/three/src/nodes/accessors/NormalNode.d.ts rename to types/three/src/nodes/accessors/Normal.d.ts index d946f91bf..22e5b6868 100644 --- a/types/three/src/nodes/accessors/NormalNode.d.ts +++ b/types/three/src/nodes/accessors/Normal.d.ts @@ -1,6 +1,6 @@ import AttributeNode from "../core/AttributeNode.js"; import VarNode from "../core/VarNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const normalGeometry: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/Object3DNode.d.ts b/types/three/src/nodes/accessors/Object3DNode.d.ts index b16f9b00e..f5ed7250f 100644 --- a/types/three/src/nodes/accessors/Object3DNode.d.ts +++ b/types/three/src/nodes/accessors/Object3DNode.d.ts @@ -1,6 +1,6 @@ import { Object3D } from "../../core/Object3D.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class Object3DNode extends Node { scope: string; diff --git a/types/three/src/nodes/accessors/PointUVNode.d.ts b/types/three/src/nodes/accessors/PointUVNode.d.ts index 017a43ffa..2220e5563 100644 --- a/types/three/src/nodes/accessors/PointUVNode.d.ts +++ b/types/three/src/nodes/accessors/PointUVNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class PointUVNode extends Node { isPointUVNode: true; diff --git a/types/three/src/nodes/accessors/PositionNode.d.ts b/types/three/src/nodes/accessors/Position.d.ts similarity index 86% rename from types/three/src/nodes/accessors/PositionNode.d.ts rename to types/three/src/nodes/accessors/Position.d.ts index 5d1d56912..a9f6fc811 100644 --- a/types/three/src/nodes/accessors/PositionNode.d.ts +++ b/types/three/src/nodes/accessors/Position.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const positionGeometry: ShaderNodeObject; export const positionLocal: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/ReferenceBaseNode.d.ts b/types/three/src/nodes/accessors/ReferenceBaseNode.d.ts new file mode 100644 index 000000000..586fde349 --- /dev/null +++ b/types/three/src/nodes/accessors/ReferenceBaseNode.d.ts @@ -0,0 +1,27 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class ReferenceBaseNode extends Node { + property: string; + uniformType: string; + object: T; + count: number | null; + + properties: string[]; + reference: T | null; + node: Node | null; + + constructor(property: string, uniformType: string, object?: T | null, count?: number | null); + + setNodeType(uniformType: string): void; +} + +export default ReferenceBaseNode; + +export const reference: (name: string, type: string, object: T) => ShaderNodeObject>; +export const referenceBuffer: ( + name: string, + type: string, + count: number, + object: T, +) => ShaderNodeObject>; diff --git a/types/three/src/nodes/accessors/ReferenceNode.d.ts b/types/three/src/nodes/accessors/ReferenceNode.d.ts index f094d8b41..1dea4d31f 100644 --- a/types/three/src/nodes/accessors/ReferenceNode.d.ts +++ b/types/three/src/nodes/accessors/ReferenceNode.d.ts @@ -1,7 +1,7 @@ import Node from "../core/Node.js"; -import { NodeOrType, NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class ReferenceNode extends Node { +declare class ReferenceNode extends Node { property: string; uniformType: string; @@ -18,10 +18,12 @@ export default class ReferenceNode extends Node { setNodeType(uniformType: string): void; } -export const reference: (name: string, nodeOrType: NodeOrType, object: T) => ShaderNodeObject>; +export default ReferenceNode; + +export const reference: (name: string, type: string, object: T) => ShaderNodeObject>; export const referenceBuffer: ( name: string, - nodeOrType: NodeOrType, - count: NodeRepresentation, + type: string, + count: number, object: T, ) => ShaderNodeObject>; diff --git a/types/three/src/nodes/accessors/ReflectVectorNode.d.ts b/types/three/src/nodes/accessors/ReflectVector.d.ts similarity index 81% rename from types/three/src/nodes/accessors/ReflectVectorNode.d.ts rename to types/three/src/nodes/accessors/ReflectVector.d.ts index 31c6a1310..4978b4975 100644 --- a/types/three/src/nodes/accessors/ReflectVectorNode.d.ts +++ b/types/three/src/nodes/accessors/ReflectVector.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import VarNode from "../core/VarNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const reflectView: ShaderNodeObject; export const refractView: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/RendererReferenceNode.d.ts b/types/three/src/nodes/accessors/RendererReferenceNode.d.ts index 8e6c47130..0e100b049 100644 --- a/types/three/src/nodes/accessors/RendererReferenceNode.d.ts +++ b/types/three/src/nodes/accessors/RendererReferenceNode.d.ts @@ -1,5 +1,5 @@ import Renderer from "../../renderers/common/Renderer.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import ReferenceNode from "./ReferenceNode.js"; export default class RendererReferenceNode extends ReferenceNode { diff --git a/types/three/src/nodes/accessors/SceneNode.d.ts b/types/three/src/nodes/accessors/SceneNode.d.ts new file mode 100644 index 000000000..34bdea1be --- /dev/null +++ b/types/three/src/nodes/accessors/SceneNode.d.ts @@ -0,0 +1,20 @@ +import { Scene } from "../../scenes/Scene.js"; +import Node from "../core/Node.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; + +export type SceneNodeScope = typeof SceneNode.BACKGROUND_BLURRINESS | typeof SceneNode.BACKGROUND_INTENSITY; + +declare class SceneNode extends Node { + scope: SceneNodeScope; + scene: Scene | null; + + constructor(scope?: SceneNodeScope, scene?: Scene | null); + + static BACKGROUND_BLURRINESS: "backgroundBlurriness"; + static BACKGROUND_INTENSITY: "backgroundIntensity"; +} + +export default SceneNode; + +export const backgroundBlurriness: ShaderNodeObject; +export const backgroundIntensity: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/SkinningNode.d.ts b/types/three/src/nodes/accessors/SkinningNode.d.ts index f2f502b17..3bef01c33 100644 --- a/types/three/src/nodes/accessors/SkinningNode.d.ts +++ b/types/three/src/nodes/accessors/SkinningNode.d.ts @@ -1,7 +1,7 @@ import { SkinnedMesh } from "../../objects/SkinnedMesh.js"; import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class SkinningNode extends Node { skinnedMesh: SkinnedMesh; diff --git a/types/three/src/nodes/accessors/StorageBufferNode.d.ts b/types/three/src/nodes/accessors/StorageBufferNode.d.ts index 3d4d64ff7..d56cac59a 100644 --- a/types/three/src/nodes/accessors/StorageBufferNode.d.ts +++ b/types/three/src/nodes/accessors/StorageBufferNode.d.ts @@ -1,8 +1,8 @@ import StorageBufferAttribute from "../../renderers/common/StorageBufferAttribute.js"; import StorageInstancedBufferAttribute from "../../renderers/common/StorageInstancedBufferAttribute.js"; import { GPUBufferBindingType } from "../../renderers/webgpu/utils/WebGPUConstants.js"; -import { NodeOrType, NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; -import StorageArrayElementNode from "../utils/StoargeArrayElementNode.js"; +import { NodeOrType, NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; +import StorageArrayElementNode from "../utils/StorageArrayElementNode.js"; import BufferNode from "./BufferNode.js"; export default class StorageBufferNode extends BufferNode { diff --git a/types/three/src/nodes/accessors/StorageTextureNode.d.ts b/types/three/src/nodes/accessors/StorageTextureNode.d.ts index c1e810190..0b4acdceb 100644 --- a/types/three/src/nodes/accessors/StorageTextureNode.d.ts +++ b/types/three/src/nodes/accessors/StorageTextureNode.d.ts @@ -2,7 +2,7 @@ import { GPUStorageTextureAccess } from "../../renderers/webgpu/utils/WebGPUCons import { Texture } from "../../textures/Texture.js"; import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import TextureNode from "./TextureNode.js"; export default class StorageTextureNode extends TextureNode { diff --git a/types/three/src/nodes/accessors/TangentNode.d.ts b/types/three/src/nodes/accessors/Tangent.d.ts similarity index 89% rename from types/three/src/nodes/accessors/TangentNode.d.ts rename to types/three/src/nodes/accessors/Tangent.d.ts index 0dac9e0dc..94ec48330 100644 --- a/types/three/src/nodes/accessors/TangentNode.d.ts +++ b/types/three/src/nodes/accessors/Tangent.d.ts @@ -2,7 +2,7 @@ import AttributeNode from "../core/AttributeNode.js"; import VarNode from "../core/VarNode.js"; import VaryingNode from "../core/VaryingNode.js"; import MathNode from "../math/MathNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const tangentGeometry: ShaderNodeObject; export const tangentLocal: ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/Texture3DNode.d.ts b/types/three/src/nodes/accessors/Texture3DNode.d.ts index eed254d2e..da589f034 100644 --- a/types/three/src/nodes/accessors/Texture3DNode.d.ts +++ b/types/three/src/nodes/accessors/Texture3DNode.d.ts @@ -1,7 +1,7 @@ import { CubeTexture } from "../../textures/CubeTexture.js"; import { Texture } from "../../textures/Texture.js"; import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import TextureNode from "./TextureNode.js"; export default class Texture3DNode extends TextureNode { diff --git a/types/three/src/nodes/accessors/TextureBicubic.d.ts b/types/three/src/nodes/accessors/TextureBicubic.d.ts new file mode 100644 index 000000000..b55ca57e9 --- /dev/null +++ b/types/three/src/nodes/accessors/TextureBicubic.d.ts @@ -0,0 +1,4 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const textureBicubic: (textureNode: Node, lodNode?: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/TextureBicubicNode.d.ts b/types/three/src/nodes/accessors/TextureBicubicNode.d.ts deleted file mode 100644 index 947aa6e01..000000000 --- a/types/three/src/nodes/accessors/TextureBicubicNode.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Node from "../core/Node.js"; -import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; - -export default class TextureBicubicNode extends TempNode { - textureNode: Node; - blurNode: Node; - - constructor(textureNode: Node, blurNode?: Node); -} - -export const textureBicubic: (textureNode: Node, blurNode?: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - bicubic: typeof textureBicubic; - } -} diff --git a/types/three/src/nodes/accessors/TextureNode.d.ts b/types/three/src/nodes/accessors/TextureNode.d.ts index bb61d2b2b..f9cc129f5 100644 --- a/types/three/src/nodes/accessors/TextureNode.d.ts +++ b/types/three/src/nodes/accessors/TextureNode.d.ts @@ -1,7 +1,7 @@ import { Texture } from "../../textures/Texture.js"; import Node from "../core/Node.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class TextureNode extends UniformNode { readonly isTextureNode: true; @@ -56,10 +56,11 @@ export const texture: ( levelNode?: NodeRepresentation, biasNode?: NodeRepresentation, ) => ShaderNodeObject; -export const sampler: (aTexture: Texture | TextureNode) => ShaderNodeObject; +export const textureLoad: ( + value: Texture, + uvNode?: NodeRepresentation, + levelNode?: NodeRepresentation, + biasNode?: NodeRepresentation, +) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - texture: typeof texture; - } -} +export const sampler: (aTexture: Texture | TextureNode) => ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/TextureSizeNode.d.ts b/types/three/src/nodes/accessors/TextureSizeNode.d.ts new file mode 100644 index 000000000..0b995fccf --- /dev/null +++ b/types/three/src/nodes/accessors/TextureSizeNode.d.ts @@ -0,0 +1,18 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class TextureSizeNode extends Node { + readonly isTextureSizeNode: true; + + textureNode: Node; + levelNode: Node | null; + + constructor(textureNode: Node, levelNode?: Node | null); +} + +export default TextureSizeNode; + +export const textureSize: ( + textureNode: NodeRepresentation, + levelNode?: NodeRepresentation | null, +) => ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/UVNode.d.ts b/types/three/src/nodes/accessors/UV.d.ts similarity index 66% rename from types/three/src/nodes/accessors/UVNode.d.ts rename to types/three/src/nodes/accessors/UV.d.ts index 4fbe07f79..aedabbd02 100644 --- a/types/three/src/nodes/accessors/UVNode.d.ts +++ b/types/three/src/nodes/accessors/UV.d.ts @@ -1,4 +1,4 @@ import AttributeNode from "../core/AttributeNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const uv: (index?: number) => ShaderNodeObject; diff --git a/types/three/src/nodes/accessors/UniformArrayNode.d.ts b/types/three/src/nodes/accessors/UniformArrayNode.d.ts index 6d02c0272..8d9d4af32 100644 --- a/types/three/src/nodes/accessors/UniformArrayNode.d.ts +++ b/types/three/src/nodes/accessors/UniformArrayNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import ArrayElementNode from "../utils/ArrayElementNode.js"; import BufferNode from "./BufferNode.js"; diff --git a/types/three/src/nodes/accessors/UserDataNode.d.ts b/types/three/src/nodes/accessors/UserDataNode.d.ts index e2204e302..647c18412 100644 --- a/types/three/src/nodes/accessors/UserDataNode.d.ts +++ b/types/three/src/nodes/accessors/UserDataNode.d.ts @@ -1,4 +1,4 @@ -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import ReferenceNode from "./ReferenceNode.js"; export type NodeUserData = Record; diff --git a/types/three/src/nodes/accessors/VelocityNode.d.ts b/types/three/src/nodes/accessors/VelocityNode.d.ts index 9678cd017..fffa55829 100644 --- a/types/three/src/nodes/accessors/VelocityNode.d.ts +++ b/types/three/src/nodes/accessors/VelocityNode.d.ts @@ -1,7 +1,7 @@ import { Matrix4 } from "../../math/Matrix4.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; declare class VelocityNode extends TempNode { previousProjectionMatrix: UniformNode; diff --git a/types/three/src/nodes/accessors/VertexColorNode.d.ts b/types/three/src/nodes/accessors/VertexColorNode.d.ts index 784ca3c5a..b2bb76339 100644 --- a/types/three/src/nodes/accessors/VertexColorNode.d.ts +++ b/types/three/src/nodes/accessors/VertexColorNode.d.ts @@ -1,5 +1,5 @@ import AttributeNode from "../core/AttributeNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class VertexColorNode extends AttributeNode { readonly isVertexColorNode: true; diff --git a/types/three/src/nodes/code/CodeNode.d.ts b/types/three/src/nodes/code/CodeNode.d.ts index c60008775..7cc59e74e 100644 --- a/types/three/src/nodes/code/CodeNode.d.ts +++ b/types/three/src/nodes/code/CodeNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export interface CodeNodeInclude { build(builder: NodeBuilder): void; diff --git a/types/three/src/nodes/code/ExpressionNode.d.ts b/types/three/src/nodes/code/ExpressionNode.d.ts index 20683848a..ce5fc783b 100644 --- a/types/three/src/nodes/code/ExpressionNode.d.ts +++ b/types/three/src/nodes/code/ExpressionNode.d.ts @@ -1,5 +1,5 @@ import TempNode from "../core/TempNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class ExpressionNode extends TempNode { snipped: string; /* sic */ diff --git a/types/three/src/nodes/code/FunctionCallNode.d.ts b/types/three/src/nodes/code/FunctionCallNode.d.ts index d3766c577..7bf6d7360 100644 --- a/types/three/src/nodes/code/FunctionCallNode.d.ts +++ b/types/three/src/nodes/code/FunctionCallNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { ProxiedObject, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ProxiedObject, ShaderNodeObject } from "../tsl/TSLCore.js"; import FunctionNode, { FunctionNodeArguments } from "./FunctionNode.js"; export default class FunctionCallNode

extends TempNode { @@ -18,7 +18,7 @@ export const call:

( parameters?: ProxiedObject

, ) => ShaderNodeObject>; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { call: typeof call; } diff --git a/types/three/src/nodes/code/FunctionNode.d.ts b/types/three/src/nodes/code/FunctionNode.d.ts index a2bee3b85..46cb99f84 100644 --- a/types/three/src/nodes/code/FunctionNode.d.ts +++ b/types/three/src/nodes/code/FunctionNode.d.ts @@ -2,7 +2,7 @@ import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; import NodeFunction from "../core/NodeFunction.js"; import NodeFunctionInput from "../core/NodeFunctionInput.js"; -import { ProxiedObject, ProxiedTuple, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ProxiedObject, ProxiedTuple, ShaderNodeObject } from "../tsl/TSLCore.js"; import CodeNode, { CodeNodeInclude } from "./CodeNode.js"; import FunctionCallNode from "./FunctionCallNode.js"; diff --git a/types/three/src/nodes/code/ScriptableNode.d.ts b/types/three/src/nodes/code/ScriptableNode.d.ts new file mode 100644 index 000000000..7922afe12 --- /dev/null +++ b/types/three/src/nodes/code/ScriptableNode.d.ts @@ -0,0 +1,22 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class Resources extends Map { + get(key: string, callback?: ((...args: TArgs) => void) | null, ...params: TArgs): unknown; +} + +export const global: Resources; + +declare class ScriptableNode extends Node { + codeNode: Node | null; + parameters: Record; + + constructor(codeNode?: Node | null, parameters?: Record); +} + +export default ScriptableNode; + +export const scriptable: ( + codeNode?: NodeRepresentation | null, + parameters?: Record, +) => ShaderNodeObject; diff --git a/types/three/src/nodes/code/ScriptableValueNode.d.ts b/types/three/src/nodes/code/ScriptableValueNode.d.ts new file mode 100644 index 000000000..eccec90c6 --- /dev/null +++ b/types/three/src/nodes/code/ScriptableValueNode.d.ts @@ -0,0 +1,10 @@ +import Node from "../core/Node.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class ScriptableValueNode extends Node { + constructor(value: unknown); +} + +export default ScriptableValueNode; + +export const scriptableValue: (value?: unknown) => ShaderNodeObject; diff --git a/types/three/src/nodes/core/AssignNode.d.ts b/types/three/src/nodes/core/AssignNode.d.ts index e6809fe50..a5628e76c 100644 --- a/types/three/src/nodes/core/AssignNode.d.ts +++ b/types/three/src/nodes/core/AssignNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; import NodeBuilder from "./NodeBuilder.js"; import TempNode from "./TempNode.js"; @@ -11,7 +11,7 @@ export default class AssignNode extends TempNode { export const assign: (targetNode: NodeRepresentation, sourceNode: NodeRepresentation) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { assign: typeof assign; } diff --git a/types/three/src/nodes/core/AttributeNode.d.ts b/types/three/src/nodes/core/AttributeNode.d.ts index 344079166..179f07b74 100644 --- a/types/three/src/nodes/core/AttributeNode.d.ts +++ b/types/three/src/nodes/core/AttributeNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; import NodeBuilder from "./NodeBuilder.js"; diff --git a/types/three/src/nodes/core/BypassNode.d.ts b/types/three/src/nodes/core/BypassNode.d.ts index e9dbef2cf..5d152654d 100644 --- a/types/three/src/nodes/core/BypassNode.d.ts +++ b/types/three/src/nodes/core/BypassNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; export default class BypassNode extends Node { @@ -11,7 +11,7 @@ export default class BypassNode extends Node { export const bypass: (returnNode: NodeRepresentation, callNode: NodeRepresentation) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { bypass: typeof bypass; } diff --git a/types/three/src/nodes/core/CacheNode.d.ts b/types/three/src/nodes/core/CacheNode.d.ts index d3e4748e8..4b7f173d1 100644 --- a/types/three/src/nodes/core/CacheNode.d.ts +++ b/types/three/src/nodes/core/CacheNode.d.ts @@ -1,4 +1,4 @@ -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; import NodeCache from "./NodeCache.js"; @@ -13,7 +13,7 @@ export default class CacheNode extends Node { export const cache: (node: Node, cache?: NodeCache) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { cache: typeof cache; } diff --git a/types/three/src/nodes/core/ContextNode.d.ts b/types/three/src/nodes/core/ContextNode.d.ts index 7f30601f0..fb888f584 100644 --- a/types/three/src/nodes/core/ContextNode.d.ts +++ b/types/three/src/nodes/core/ContextNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; import { NodeBuilderContext } from "./NodeBuilder.js"; @@ -16,7 +16,7 @@ export default ContextNode; export const context: (node: NodeRepresentation, context?: NodeBuilderContext) => ShaderNodeObject; export const label: (node: NodeRepresentation, label: string) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { context: typeof context; label: typeof label; diff --git a/types/three/src/nodes/core/IndexNode.d.ts b/types/three/src/nodes/core/IndexNode.d.ts index a9d49f25b..ebaba50ae 100644 --- a/types/three/src/nodes/core/IndexNode.d.ts +++ b/types/three/src/nodes/core/IndexNode.d.ts @@ -1,4 +1,4 @@ -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; export type IndexNodeScope = diff --git a/types/three/src/nodes/core/MRTNode.d.ts b/types/three/src/nodes/core/MRTNode.d.ts index 5e241bb18..ef223da73 100644 --- a/types/three/src/nodes/core/MRTNode.d.ts +++ b/types/three/src/nodes/core/MRTNode.d.ts @@ -1,6 +1,6 @@ import { Texture } from "../../textures/Texture.js"; import { Node } from "../Nodes.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import OutputStructNode from "./OutputStructNode.js"; export function getTextureIndex(textures: ReadonlyArray, name: string): number; diff --git a/types/three/src/nodes/core/Node.d.ts b/types/three/src/nodes/core/Node.d.ts index 4f2d7f642..4dbaac524 100644 --- a/types/three/src/nodes/core/Node.d.ts +++ b/types/three/src/nodes/core/Node.d.ts @@ -87,6 +87,7 @@ declare class Node extends EventDispatcher<{ dispose(): void; traverse(callback: (node: Node) => void): void; getCacheKey(force?: boolean): string; + getScope(): this; getHash(builder: NodeBuilder): string; getUpdateType(): NodeUpdateType; getUpdateBeforeType(): NodeUpdateType; @@ -95,7 +96,6 @@ declare class Node extends EventDispatcher<{ getNodeType(builder: NodeBuilder): string | null; getShared(builder: NodeBuilder): Node; setup(builder: NodeBuilder): unknown; - increaseUsage(builder: NodeBuilder): number; analyze(builder: NodeBuilder): void; generate(builder: NodeBuilder, output?: string | null): string | null | undefined; updateBefore(frame: NodeFrame): void; @@ -108,7 +108,13 @@ declare class Node extends EventDispatcher<{ toJSON(meta?: NodeJSONMeta | string): NodeJSONOutputData; } export default Node; -export declare function addNodeClass(type: string, nodeClass: { +export declare function registerNodeClass(type: string, nodeClass: { new(...args: any[]): Node; }): void; export declare function createNodeFromType(type: string): Node | undefined; +/** + * @deprecated Function addNodeClass() is deprecated. Use registerNodeClass() instead. + */ +export declare function addNodeClass(type: string, nodeClass: { + new(...args: any[]): Node; +}): void; diff --git a/types/three/src/nodes/core/OutputStructNode.d.ts b/types/three/src/nodes/core/OutputStructNode.d.ts index eb2c8fa63..5a7fc6e7b 100644 --- a/types/three/src/nodes/core/OutputStructNode.d.ts +++ b/types/three/src/nodes/core/OutputStructNode.d.ts @@ -1,4 +1,4 @@ -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; export default class OutputStructNode extends Node { diff --git a/types/three/src/nodes/core/ParameterNode.d.ts b/types/three/src/nodes/core/ParameterNode.d.ts new file mode 100644 index 000000000..02629dbf5 --- /dev/null +++ b/types/three/src/nodes/core/ParameterNode.d.ts @@ -0,0 +1,12 @@ +import { ShaderNodeObject } from "../tsl/TSLCore.js"; +import PropertyNode from "./PropertyNode.js"; + +declare class ParameterNode extends PropertyNode { + readonly isParameterNode: true; + + constructor(nodeType: string, name?: string | null); +} + +export default ParameterNode; + +export const parameter: (type: string, name?: string | null) => ShaderNodeObject; diff --git a/types/three/src/nodes/core/PropertyNode.d.ts b/types/three/src/nodes/core/PropertyNode.d.ts index d1a523864..b365d107b 100644 --- a/types/three/src/nodes/core/PropertyNode.d.ts +++ b/types/three/src/nodes/core/PropertyNode.d.ts @@ -1,4 +1,4 @@ -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; export default class PropertyNode extends Node { diff --git a/types/three/src/nodes/core/UniformNode.d.ts b/types/three/src/nodes/core/UniformNode.d.ts index e28f44567..0445377fa 100644 --- a/types/three/src/nodes/core/UniformNode.d.ts +++ b/types/three/src/nodes/core/UniformNode.d.ts @@ -20,4 +20,4 @@ export default UniformNode; export declare const uniform: ( arg1: InputNode | TValue, arg2?: Node | string, -) => import("../shadernode/ShaderNode.js").ShaderNodeObject>; +) => import("../tsl/TSLCore.js").ShaderNodeObject>; diff --git a/types/three/src/nodes/core/VarNode.d.ts b/types/three/src/nodes/core/VarNode.d.ts index b5de30a25..346c00fae 100644 --- a/types/three/src/nodes/core/VarNode.d.ts +++ b/types/three/src/nodes/core/VarNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; export default class VarNode extends Node { @@ -12,7 +12,7 @@ export default class VarNode extends Node { export const temp: (node: NodeRepresentation, name?: string | null) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { temp: typeof temp; toVar: typeof temp; diff --git a/types/three/src/nodes/core/VaryingNode.d.ts b/types/three/src/nodes/core/VaryingNode.d.ts index cbdf5e3dd..f10077ce0 100644 --- a/types/three/src/nodes/core/VaryingNode.d.ts +++ b/types/three/src/nodes/core/VaryingNode.d.ts @@ -1,4 +1,4 @@ -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import Node from "./Node.js"; import NodeBuilder from "./NodeBuilder.js"; import NodeVarying from "./NodeVarying.js"; @@ -14,7 +14,7 @@ export default class VaryingNode extends Node { export const varying: (node: NodeRepresentation, name?: string) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { varying: typeof varying; } diff --git a/types/three/src/nodes/display/AfterImageNode.d.ts b/types/three/src/nodes/display/AfterImageNode.d.ts index 336be14c7..4051c21f1 100644 --- a/types/three/src/nodes/display/AfterImageNode.d.ts +++ b/types/three/src/nodes/display/AfterImageNode.d.ts @@ -2,7 +2,7 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class AfterImageNode extends TempNode { textureNode: TextureNode; @@ -17,9 +17,3 @@ export default class AfterImageNode extends TempNode { } export const afterImage: (node: Node, damp?: number) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - afterImage: typeof afterImage; - } -} diff --git a/types/three/src/nodes/display/AnaglyphPassNode.d.ts b/types/three/src/nodes/display/AnaglyphPassNode.d.ts index f014439b5..a6e2a779d 100644 --- a/types/three/src/nodes/display/AnaglyphPassNode.d.ts +++ b/types/three/src/nodes/display/AnaglyphPassNode.d.ts @@ -1,6 +1,6 @@ import { Camera } from "../../cameras/Camera.js"; import { Scene } from "../../scenes/Scene.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import StereoCompositePassNode from "./StereoCompositePassNode.js"; declare class AnaglyphPassNode extends StereoCompositePassNode { diff --git a/types/three/src/nodes/display/AnamorphicNode.d.ts b/types/three/src/nodes/display/AnamorphicNode.d.ts index 5077a2caf..00743db92 100644 --- a/types/three/src/nodes/display/AnamorphicNode.d.ts +++ b/types/three/src/nodes/display/AnamorphicNode.d.ts @@ -1,7 +1,7 @@ import { Vector2 } from "../../math/Vector2.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class AnamorphicNode extends TempNode { textureNode: Node; @@ -23,9 +23,3 @@ export const anamorphic: ( scale?: NodeRepresentation, samples?: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - anamorphic: typeof anamorphic; - } -} diff --git a/types/three/src/nodes/display/BleachBypass.d.ts b/types/three/src/nodes/display/BleachBypass.d.ts new file mode 100644 index 000000000..a7c0b74ac --- /dev/null +++ b/types/three/src/nodes/display/BleachBypass.d.ts @@ -0,0 +1,4 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const bleach: (color: NodeRepresentation, opacity?: number) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/BleachBypassNode.d.ts b/types/three/src/nodes/display/BleachBypassNode.d.ts deleted file mode 100644 index 335de1c67..000000000 --- a/types/three/src/nodes/display/BleachBypassNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; - -export const bleach: (color: NodeRepresentation, opacity?: number) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - bleach: typeof bleach; - } -} diff --git a/types/three/src/nodes/display/BlendModeNode.d.ts b/types/three/src/nodes/display/BlendMode.d.ts similarity index 53% rename from types/three/src/nodes/display/BlendModeNode.d.ts rename to types/three/src/nodes/display/BlendMode.d.ts index 4104fbbfb..1f2d23991 100644 --- a/types/three/src/nodes/display/BlendModeNode.d.ts +++ b/types/three/src/nodes/display/BlendMode.d.ts @@ -1,7 +1,5 @@ import Node from "../core/Node.js"; -import TempNode from "../core/TempNode.js"; -import { JoinNode } from "../Nodes.js"; -import { NodeRepresentation, ShaderNode, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const burn: (base: NodeRepresentation, blend: NodeRepresentation) => ShaderNodeObject; @@ -10,12 +8,3 @@ export const dodge: (base: NodeRepresentation, blend: NodeRepresentation) => Sha export const screen: (base: NodeRepresentation, blend: NodeRepresentation) => ShaderNodeObject; export const overlay: (base: NodeRepresentation, blend: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - burn: typeof burn; - dodge: typeof dodge; - overlay: typeof overlay; - screen: typeof screen; - } -} diff --git a/types/three/src/nodes/display/BloomNode.d.ts b/types/three/src/nodes/display/BloomNode.d.ts index 4a057236b..2ff8586e8 100644 --- a/types/three/src/nodes/display/BloomNode.d.ts +++ b/types/three/src/nodes/display/BloomNode.d.ts @@ -2,7 +2,7 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class BloomNode extends TempNode { inputNode: Node; @@ -26,10 +26,4 @@ export const bloom: ( threshold?: number, ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - bloom: typeof bloom; - } -} - export default BloomNode; diff --git a/types/three/src/nodes/display/BumpMapNode.d.ts b/types/three/src/nodes/display/BumpMapNode.d.ts new file mode 100644 index 000000000..726f55685 --- /dev/null +++ b/types/three/src/nodes/display/BumpMapNode.d.ts @@ -0,0 +1,16 @@ +import TempNode from "../core/TempNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class BumpMapNode extends TempNode { + textureNode: Node; + scaleNode: Node | null; + + constructor(textureNode: Node, scaleNode?: Node | null); +} + +export default BumpMapNode; + +export const bumpMap: ( + textureNode: NodeRepresentation, + scaleNode?: NodeRepresentation | null, +) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/ColorAdjustmentNode.d.ts b/types/three/src/nodes/display/ColorAdjustment.d.ts similarity index 69% rename from types/three/src/nodes/display/ColorAdjustmentNode.d.ts rename to types/three/src/nodes/display/ColorAdjustment.d.ts index 4e2400439..16684d4b4 100644 --- a/types/three/src/nodes/display/ColorAdjustmentNode.d.ts +++ b/types/three/src/nodes/display/ColorAdjustment.d.ts @@ -1,6 +1,8 @@ import Node from "../core/Node.js"; import MathNode from "../math/MathNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const grayscale: (color: NodeRepresentation) => ShaderNodeObject; export const saturation: ( color: NodeRepresentation, @@ -23,12 +25,3 @@ export const luminance: ( ) => ShaderNodeObject; export const threshold: (color: NodeRepresentation, thershold: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - saturation: typeof saturation; - vibrance: typeof vibrance; - hue: typeof hue; - threshold: typeof threshold; - } -} diff --git a/types/three/src/nodes/display/ColorSpaceFunctions.d.ts b/types/three/src/nodes/display/ColorSpaceFunctions.d.ts new file mode 100644 index 000000000..2ca8d5a73 --- /dev/null +++ b/types/three/src/nodes/display/ColorSpaceFunctions.d.ts @@ -0,0 +1,6 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const sRGBToLinearShader: (color: NodeRepresentation) => ShaderNodeObject; + +export const LinearTosRGBShader: (color: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/ColorSpaceNode.d.ts b/types/three/src/nodes/display/ColorSpaceNode.d.ts index e4569f7fd..afe195a58 100644 --- a/types/three/src/nodes/display/ColorSpaceNode.d.ts +++ b/types/three/src/nodes/display/ColorSpaceNode.d.ts @@ -1,22 +1,22 @@ -import { ColorSpace } from "../../constants.js"; +import { ColorSpace, LinearSRGBColorSpace, SRGBColorSpace } from "../../constants.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export type ColorSpaceNodeMethod = - | typeof ColorSpaceNode.LINEAR_TO_LINEAR - | typeof ColorSpaceNode.LINEAR_TO_sRGB - | typeof ColorSpaceNode.sRGB_TO_LINEAR; +export type ColorSpaceMethod = "LinearTosRGB" | "sRGBToLinear" | "LinearToLinear" | "sRGBTosRGB"; -export default class ColorSpaceNode extends TempNode { - static LINEAR_TO_LINEAR: "LinearToLinear"; - static LINEAR_TO_sRGB: "LinearTosRGB"; - static sRGB_TO_LINEAR: "sRGBToLinear"; +export const getColorSpaceMethod: ( + source: typeof LinearSRGBColorSpace | typeof SRGBColorSpace, + target: typeof LinearSRGBColorSpace | typeof SRGBColorSpace, +) => ColorSpaceMethod; - method: ColorSpaceNodeMethod; +export default class ColorSpaceNode extends TempNode { + colorSpace: ColorSpaceMethod; node: Node; - constructor(method: ColorSpaceNodeMethod | null, node: Node); + constructor(colorSpace: ColorSpaceMethod, node: Node); + + static LINEAR_TO_LINEAR: "LinearToLinear"; } export const linearToColorSpace: (node: NodeRepresentation, colorSpace: ColorSpace) => ShaderNodeObject; @@ -25,10 +25,8 @@ export const colorSpaceToLinear: (node: NodeRepresentation, colorSpace: ColorSpa export const linearTosRGB: (node: NodeRepresentation) => ShaderNodeObject; export const sRGBToLinear: (node: NodeRepresentation) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { - linearTosRGB: typeof linearTosRGB; - sRGBToLinear: typeof sRGBToLinear; linearToColorSpace: typeof linearToColorSpace; colorSpaceToLinear: typeof colorSpaceToLinear; } diff --git a/types/three/src/nodes/display/DenoiseNode.d.ts b/types/three/src/nodes/display/DenoiseNode.d.ts index 8b5699dfa..463da2ca9 100644 --- a/types/three/src/nodes/display/DenoiseNode.d.ts +++ b/types/three/src/nodes/display/DenoiseNode.d.ts @@ -3,7 +3,7 @@ import { Matrix4 } from "../../math/Matrix4.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class DenoiseNode extends TempNode { textureNode: Node; @@ -21,6 +21,8 @@ declare class DenoiseNode extends TempNode { constructor(textureNode: Node, depthNode: Node, normalNode: Node, noiseNode: Node, camera: Camera); } +export default DenoiseNode; + export const denoise: ( node: NodeRepresentation, depthNode: NodeRepresentation, @@ -28,11 +30,3 @@ export const denoise: ( noiseNode: NodeRepresentation, camera: Camera, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - denoise: typeof denoise; - } -} - -export default DenoiseNode; diff --git a/types/three/src/nodes/display/DepthOfFieldNode.d.ts b/types/three/src/nodes/display/DepthOfFieldNode.d.ts index e58e801bc..ca0ffcd88 100644 --- a/types/three/src/nodes/display/DepthOfFieldNode.d.ts +++ b/types/three/src/nodes/display/DepthOfFieldNode.d.ts @@ -2,9 +2,9 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class DepthOfFieldNode extends TempNode { +declare class DepthOfFieldNode extends TempNode { textureNode: TextureNode; viewZNode: Node; @@ -15,6 +15,8 @@ export default class DepthOfFieldNode extends TempNode { constructor(textureNode: TextureNode, viewZNode: Node, focusNode: Node, apertureNode: Node, maxblurNode: Node); } +export default DepthOfFieldNode; + export const dof: ( node: NodeRepresentation, viewZNode: NodeRepresentation, @@ -22,9 +24,3 @@ export const dof: ( aperture?: NodeRepresentation, maxblur?: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - dof: typeof dof; - } -} diff --git a/types/three/src/nodes/display/DotScreenNode.d.ts b/types/three/src/nodes/display/DotScreenNode.d.ts index 8d2c7a66f..d581ac304 100644 --- a/types/three/src/nodes/display/DotScreenNode.d.ts +++ b/types/three/src/nodes/display/DotScreenNode.d.ts @@ -2,9 +2,9 @@ import { Vector2 } from "../../math/Vector2.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class DotScreenNode extends TempNode { +declare class DotScreenNode extends TempNode { inputNode: Node; center: UniformNode; angle: UniformNode; @@ -13,15 +13,11 @@ export default class DotScreenNode extends TempNode { constructor(inputNode: Node, center?: Vector2, angle?: number, scale?: number); } +export default DotScreenNode; + export const dotScreen: ( node: NodeRepresentation, center?: Vector2, angle?: number, scale?: number, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - dotScreen: typeof dotScreen; - } -} diff --git a/types/three/src/nodes/display/FXAANode.d.ts b/types/three/src/nodes/display/FXAANode.d.ts index ed23217e6..4fa7aa341 100644 --- a/types/three/src/nodes/display/FXAANode.d.ts +++ b/types/three/src/nodes/display/FXAANode.d.ts @@ -1,6 +1,6 @@ import TextureNode from "../accessors/TextureNode.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class FXAANode extends TempNode { textureNode: TextureNode; @@ -8,12 +8,6 @@ declare class FXAANode extends TempNode { constructor(textureNode: TextureNode); } -export const fxaa: (node: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - fxaa: typeof fxaa; - } -} - export default FXAANode; + +export const fxaa: (node: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/FilmNode.d.ts b/types/three/src/nodes/display/FilmNode.d.ts index b9febaaae..56963e850 100644 --- a/types/three/src/nodes/display/FilmNode.d.ts +++ b/types/three/src/nodes/display/FilmNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class FilmNode extends TempNode { inputNode: Node; @@ -10,16 +10,10 @@ declare class FilmNode extends TempNode { constructor(inputNode: Node, intensityNode?: Node | null, uvNode?: Node | null); } +export default FilmNode; + export const film: ( inputNode: NodeRepresentation, intensityNode?: NodeRepresentation | null, uvNode?: NodeRepresentation | null, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - film: typeof film; - } -} - -export default FilmNode; diff --git a/types/three/src/nodes/display/FrontFacingNode.d.ts b/types/three/src/nodes/display/FrontFacingNode.d.ts index 95a6d6906..f550ecacf 100644 --- a/types/three/src/nodes/display/FrontFacingNode.d.ts +++ b/types/three/src/nodes/display/FrontFacingNode.d.ts @@ -1,10 +1,12 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class FrontFacingNode extends Node { +declare class FrontFacingNode extends Node { isFrontFacingNode: true; constructor(); } +export default FrontFacingNode; + export const frontFacing: ShaderNodeObject; export const faceDirection: ShaderNodeObject; diff --git a/types/three/src/nodes/display/GTAONode.d.ts b/types/three/src/nodes/display/GTAONode.d.ts index 5a6da521b..466c35aed 100644 --- a/types/three/src/nodes/display/GTAONode.d.ts +++ b/types/three/src/nodes/display/GTAONode.d.ts @@ -5,7 +5,7 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class GTAONode extends TempNode { depthNode: Node; @@ -31,16 +31,10 @@ declare class GTAONode extends TempNode { setSize(width: number, height: number): void; } +export default GTAONode; + export const ao: ( depthNode: NodeRepresentation, normalNode: NodeRepresentation, camera: Camera, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - ao: typeof ao; - } -} - -export default GTAONode; diff --git a/types/three/src/nodes/display/GaussianBlurNode.d.ts b/types/three/src/nodes/display/GaussianBlurNode.d.ts index 6cec09eb3..4ac78719f 100644 --- a/types/three/src/nodes/display/GaussianBlurNode.d.ts +++ b/types/three/src/nodes/display/GaussianBlurNode.d.ts @@ -2,9 +2,9 @@ import { Vector2 } from "../../math/Vector2.js"; import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class GaussianBlurNode extends TempNode { +declare class GaussianBlurNode extends TempNode { textureNode: TextureNode; directionNode: Node | null; sigma: number; @@ -18,14 +18,10 @@ export default class GaussianBlurNode extends TempNode { getTextureNode(): TextureNode; } +export default GaussianBlurNode; + export const gaussianBlur: ( node: NodeRepresentation, directionNode?: NodeRepresentation | null, sigma?: number, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - gaussianBlur: typeof gaussianBlur; - } -} diff --git a/types/three/src/nodes/display/Lut3DNode.d.ts b/types/three/src/nodes/display/Lut3DNode.d.ts index a257845d7..95306ab66 100644 --- a/types/three/src/nodes/display/Lut3DNode.d.ts +++ b/types/three/src/nodes/display/Lut3DNode.d.ts @@ -3,7 +3,7 @@ import Texture3DNode from "../accessors/Texture3DNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class Lut3DNode extends TempNode { inputNode: Node; @@ -14,17 +14,11 @@ declare class Lut3DNode extends TempNode { constructor(inputNode: Node, lutNode: UniformNode, size: number, intensityNode: UniformNode); } +export default Lut3DNode; + export const lut3D: ( node: NodeRepresentation, lut: NodeRepresentation, size: number, intensity: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - lut3D: typeof lut3D; - } -} - -export default Lut3DNode; diff --git a/types/three/src/nodes/display/MotionBlurNode.d.ts b/types/three/src/nodes/display/MotionBlur.d.ts similarity index 70% rename from types/three/src/nodes/display/MotionBlurNode.d.ts rename to types/three/src/nodes/display/MotionBlur.d.ts index f1c0c0b43..6b924c152 100644 --- a/types/three/src/nodes/display/MotionBlurNode.d.ts +++ b/types/three/src/nodes/display/MotionBlur.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const motionBlur: ( inputNode: NodeRepresentation, diff --git a/types/three/src/nodes/display/NormalMapNode.d.ts b/types/three/src/nodes/display/NormalMapNode.d.ts index 82b850547..d06459502 100644 --- a/types/three/src/nodes/display/NormalMapNode.d.ts +++ b/types/three/src/nodes/display/NormalMapNode.d.ts @@ -1,9 +1,9 @@ import { NormalMapTypes } from "../../constants.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class NormalMapNode extends TempNode { +declare class NormalMapNode extends TempNode { node: Node; scaleNode: Node | null; @@ -12,10 +12,6 @@ export default class NormalMapNode extends TempNode { constructor(node: Node, scaleNode?: Node | null); } -export const normalMap: (node: Node, scaleNode?: Node) => ShaderNodeObject; +export default NormalMapNode; -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - normalMap: typeof normalMap; - } -} +export const normalMap: (node: Node, scaleNode?: Node) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/ParallaxBarrierPassNode.d.ts b/types/three/src/nodes/display/ParallaxBarrierPassNode.d.ts index 8897a4f6b..dc0d033bb 100644 --- a/types/three/src/nodes/display/ParallaxBarrierPassNode.d.ts +++ b/types/three/src/nodes/display/ParallaxBarrierPassNode.d.ts @@ -1,6 +1,6 @@ import { Camera } from "../../cameras/Camera.js"; import { Scene } from "../../scenes/Scene.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import StereoCompositePassNode from "./StereoCompositePassNode.js"; declare class ParallaxBarrierPassNode extends StereoCompositePassNode { diff --git a/types/three/src/nodes/display/PassNode.d.ts b/types/three/src/nodes/display/PassNode.d.ts index 9b385818f..97bad417f 100644 --- a/types/three/src/nodes/display/PassNode.d.ts +++ b/types/three/src/nodes/display/PassNode.d.ts @@ -6,7 +6,7 @@ import TextureNode from "../accessors/TextureNode.js"; import MRTNode from "../core/MRTNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; declare class PassTextureNode extends TextureNode { passNode: PassNode; diff --git a/types/three/src/nodes/display/PixelationPassNode.d.ts b/types/three/src/nodes/display/PixelationPassNode.d.ts index e8e76aca8..5a27486a3 100644 --- a/types/three/src/nodes/display/PixelationPassNode.d.ts +++ b/types/three/src/nodes/display/PixelationPassNode.d.ts @@ -1,45 +1,9 @@ import { Camera } from "../../cameras/Camera.js"; import { Scene } from "../../scenes/Scene.js"; -import Node from "../core/Node.js"; -import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import PassNode from "./PassNode.js"; -declare class PixelationNode extends TempNode { - textureNode: Node; - depthNode: Node; - normalNode: Node; - - pixelSize: Node; - normalEdgeStrength: Node; - depthEdgeStrength: Node; - - constructor( - textureNode: Node, - depthNode: Node, - normalNode: Node, - pixelSize: Node, - normalEdgeStrength: Node, - depthEdgeStrength: Node, - ); -} - -declare const pixelation: ( - node: NodeRepresentation, - depthNode: NodeRepresentation, - normalNode: NodeRepresentation, - pixelSize?: number, - normalEdgeStrength?: number, - depthEdgeStrength?: number, -) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - pixelation: typeof pixelation; - } -} - declare class PixelationPassNode extends PassNode { pixelSize: UniformNode; normalEdgeStrength: UniformNode; diff --git a/types/three/src/nodes/display/PosterizeNode.d.ts b/types/three/src/nodes/display/PosterizeNode.d.ts index 36aa66d8e..17eb0fe52 100644 --- a/types/three/src/nodes/display/PosterizeNode.d.ts +++ b/types/three/src/nodes/display/PosterizeNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class PosterizeNode extends Node { sourceNode: Node; @@ -12,9 +12,3 @@ export const posterize: ( sourceNode: NodeRepresentation, stepsNode: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - posterize: typeof posterize; - } -} diff --git a/types/three/src/nodes/display/RGBShiftNode.d.ts b/types/three/src/nodes/display/RGBShiftNode.d.ts index 804094aba..725af8362 100644 --- a/types/three/src/nodes/display/RGBShiftNode.d.ts +++ b/types/three/src/nodes/display/RGBShiftNode.d.ts @@ -1,7 +1,7 @@ import TextureNode from "../accessors/TextureNode.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class RGBShiftNode extends TempNode { textureNode: TextureNode; @@ -16,9 +16,3 @@ export default class RGBShiftNode extends TempNode { } export const rgbShift: (node: NodeRepresentation, amount?: number, angle?: number) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - rgbShift: typeof rgbShift; - } -} diff --git a/types/three/src/nodes/display/RenderOutputNode.d.ts b/types/three/src/nodes/display/RenderOutputNode.d.ts index c41f56f65..e24a89fee 100644 --- a/types/three/src/nodes/display/RenderOutputNode.d.ts +++ b/types/three/src/nodes/display/RenderOutputNode.d.ts @@ -1,7 +1,7 @@ import { ColorSpace, ToneMapping } from "../../constants.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class RenderOutputNode extends TempNode { colorNode: Node; @@ -21,7 +21,7 @@ export const renderOutput: ( outputColorSpace?: ColorSpace | null, ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { renderOutput: typeof renderOutput; } diff --git a/types/three/src/nodes/display/SSAAPassNode.d.ts b/types/three/src/nodes/display/SSAAPassNode.d.ts index b3e6da34d..f58671edc 100644 --- a/types/three/src/nodes/display/SSAAPassNode.d.ts +++ b/types/three/src/nodes/display/SSAAPassNode.d.ts @@ -3,7 +3,7 @@ import { RenderTarget } from "../../core/RenderTarget.js"; import { Color } from "../../math/Color.js"; import { Scene } from "../../scenes/Scene.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import PassNode from "./PassNode.js"; declare class SSAAPassNode extends PassNode { @@ -21,6 +21,6 @@ declare class SSAAPassNode extends PassNode { constructor(scene: Scene, camera: Camera); } -export const ssaaPass: (scene: Scene, camera: Camera) => ShaderNodeObject; - export default SSAAPassNode; + +export const ssaaPass: (scene: Scene, camera: Camera) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/Sepia.d.ts b/types/three/src/nodes/display/Sepia.d.ts new file mode 100644 index 000000000..8175d79d9 --- /dev/null +++ b/types/three/src/nodes/display/Sepia.d.ts @@ -0,0 +1,4 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const sepia: (color: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/SepiaNode.d.ts b/types/three/src/nodes/display/SepiaNode.d.ts deleted file mode 100644 index d5c3007a3..000000000 --- a/types/three/src/nodes/display/SepiaNode.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; - -export const sepia: (args: [NodeRepresentation]) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - sepia: typeof sepia; - } -} diff --git a/types/three/src/nodes/display/SobelOperatorNode.d.ts b/types/three/src/nodes/display/SobelOperatorNode.d.ts index ab49780f9..81c31b2e6 100644 --- a/types/three/src/nodes/display/SobelOperatorNode.d.ts +++ b/types/three/src/nodes/display/SobelOperatorNode.d.ts @@ -1,17 +1,13 @@ import TextureNode from "../accessors/TextureNode.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class SobelOperatorNode extends TempNode { +declare class SobelOperatorNode extends TempNode { textureNode: TextureNode; constructor(textureNode: TextureNode); } -export const sobel: (node: NodeRepresentation) => ShaderNodeObject; +export default SobelOperatorNode; -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - sobel: typeof sobel; - } -} +export const sobel: (node: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/StereoPassNode.d.ts b/types/three/src/nodes/display/StereoPassNode.d.ts index f9da63ac0..09e962cd2 100644 --- a/types/three/src/nodes/display/StereoPassNode.d.ts +++ b/types/three/src/nodes/display/StereoPassNode.d.ts @@ -1,7 +1,7 @@ import { Camera } from "../../cameras/Camera.js"; import { StereoCamera } from "../../cameras/StereoCamera.js"; import { Scene } from "../../scenes/Scene.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import PassNode from "./PassNode.js"; declare class StereoPassNode extends PassNode { @@ -12,6 +12,6 @@ declare class StereoPassNode extends PassNode { constructor(scene: Scene, camera: Camera); } -export const stereoPass: (scene: Scene, camera: Camera) => ShaderNodeObject; - export default StereoPassNode; + +export const stereoPass: (scene: Scene, camera: Camera) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/ToneMappingFunctions.d.ts b/types/three/src/nodes/display/ToneMappingFunctions.d.ts new file mode 100644 index 000000000..57d80c4aa --- /dev/null +++ b/types/three/src/nodes/display/ToneMappingFunctions.d.ts @@ -0,0 +1,14 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const LinearToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; + +export const ReinhardToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; + +export const CineonToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; + +export const ACESFilmicToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; + +export const AgXToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; + +export const NeutralToneMapping: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/display/ToneMappingNode.d.ts b/types/three/src/nodes/display/ToneMappingNode.d.ts index 95dabe473..e4fdf9cf6 100644 --- a/types/three/src/nodes/display/ToneMappingNode.d.ts +++ b/types/three/src/nodes/display/ToneMappingNode.d.ts @@ -2,12 +2,9 @@ import { ToneMapping } from "../../constants.js"; import RendererReferenceNode from "../accessors/RendererReferenceNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -// exposure only -export const LinearToneMappingNode: Node; - -export default class ToneMappingNode extends TempNode { +declare class ToneMappingNode extends TempNode { toneMapping: ToneMapping; exposureNode: Node; colorNode: Node | null; @@ -15,6 +12,8 @@ export default class ToneMappingNode extends TempNode { constructor(toneMapping: ToneMapping, exposureNode?: Node, colorNode?: Node | null); } +export default ToneMappingNode; + export const toneMapping: ( mapping: ToneMapping, exposure: NodeRepresentation, @@ -22,7 +21,7 @@ export const toneMapping: ( ) => ShaderNodeObject; export const toneMappingExposure: ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { toneMapping: ( color: NodeRepresentation, diff --git a/types/three/src/nodes/display/TransitionNode.d.ts b/types/three/src/nodes/display/TransitionNode.d.ts index 745578cf4..bf7df95a1 100644 --- a/types/three/src/nodes/display/TransitionNode.d.ts +++ b/types/three/src/nodes/display/TransitionNode.d.ts @@ -2,7 +2,7 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; import UniformNode from "../core/UniformNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class TransitionNode extends TempNode { textureNodeA: TextureNode; @@ -23,6 +23,8 @@ declare class TransitionNode extends TempNode { ); } +export default TransitionNode; + export const transition: ( node: NodeRepresentation, nodeB: NodeRepresentation, @@ -31,11 +33,3 @@ export const transition: ( threshold: UniformNode, useTexture: UniformNode, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - transition: typeof transition; - } -} - -export default TransitionNode; diff --git a/types/three/src/nodes/display/ViewportDepthNode.d.ts b/types/three/src/nodes/display/ViewportDepthNode.d.ts index 158b69076..efe24a6c8 100644 --- a/types/three/src/nodes/display/ViewportDepthNode.d.ts +++ b/types/three/src/nodes/display/ViewportDepthNode.d.ts @@ -1,7 +1,7 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class ViewportDepthNode extends Node { +declare class ViewportDepthNode extends Node { scope: ViewportDepthNodeScope; valueNode: Node; @@ -19,6 +19,8 @@ export type ViewportDepthNodeScope = | typeof ViewportDepthNode.DEPTH | typeof ViewportDepthNode.LINEAR_DEPTH; +export default ViewportDepthNode; + export const viewZToOrthographicDepth: (viewZ: Node, near: Node, far: Node) => Node; export const orthographicDepthToViewZ: (depth: Node, near: Node, far: Node) => Node; diff --git a/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts b/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts index bb74b6c75..7c1102e45 100644 --- a/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts +++ b/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts @@ -1,11 +1,13 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import ViewportTextureNode from "./ViewportTextureNode.js"; -export default class ViewportDepthTextureNode extends ViewportTextureNode { +declare class ViewportDepthTextureNode extends ViewportTextureNode { constructor(uvNode?: Node, levelNode?: Node | null); } +export default ViewportDepthTextureNode; + export const viewportDepthTexture: ( uvNode?: NodeRepresentation, levelNode?: NodeRepresentation, diff --git a/types/three/src/nodes/display/ViewportNode.d.ts b/types/three/src/nodes/display/ViewportNode.d.ts index 3bf1c147c..bd6e72170 100644 --- a/types/three/src/nodes/display/ViewportNode.d.ts +++ b/types/three/src/nodes/display/ViewportNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export type ViewportNodeScope = | typeof ViewportNode.COORDINATE @@ -9,7 +9,7 @@ export type ViewportNodeScope = | typeof ViewportNode.TOP_RIGHT | typeof ViewportNode.BOTTOM_RIGHT; -export default class ViewportNode extends Node { +declare class ViewportNode extends Node { scope: ViewportNodeScope; readonly isViewportNode: true; @@ -24,6 +24,8 @@ export default class ViewportNode extends Node { static BOTTOM_RIGHT: "bottomRight"; } +export default ViewportNode; + export const viewportCoordinate: ShaderNodeObject; export const viewportResolution: ShaderNodeObject; export const viewport: ShaderNodeObject; diff --git a/types/three/src/nodes/display/ViewportSharedTextureNode.d.ts b/types/three/src/nodes/display/ViewportSharedTextureNode.d.ts index 2faf2bcd6..307bfbde5 100644 --- a/types/three/src/nodes/display/ViewportSharedTextureNode.d.ts +++ b/types/three/src/nodes/display/ViewportSharedTextureNode.d.ts @@ -1,18 +1,14 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import ViewportTextureNode from "./ViewportTextureNode.js"; -export default class ViewportSharedTextureNode extends ViewportTextureNode { +declare class ViewportSharedTextureNode extends ViewportTextureNode { constructor(uvNode?: Node, levelNode?: Node | null); } +export default ViewportSharedTextureNode; + export const viewportSharedTexture: ( uvNode?: Node, levelNode?: Node | null, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - viewportSharedTexture: typeof viewportSharedTexture; - } -} diff --git a/types/three/src/nodes/display/ViewportTextureNode.d.ts b/types/three/src/nodes/display/ViewportTextureNode.d.ts index 96b490766..ade4ea51e 100644 --- a/types/three/src/nodes/display/ViewportTextureNode.d.ts +++ b/types/three/src/nodes/display/ViewportTextureNode.d.ts @@ -2,9 +2,9 @@ import { FramebufferTexture } from "../../textures/FramebufferTexture.js"; import TextureNode from "../accessors/TextureNode.js"; import { NodeUpdateType } from "../core/constants.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class ViewportTextureNode extends TextureNode { +declare class ViewportTextureNode extends TextureNode { generateMipmaps: boolean; readonly isOutputTextureNode: true; @@ -14,6 +14,8 @@ export default class ViewportTextureNode extends TextureNode { constructor(uvNode?: Node, levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null); } +export default ViewportTextureNode; + export const viewportTexture: ( uvNode?: Node, levelNode?: Node | null, @@ -24,10 +26,3 @@ export const viewportMipTexture: ( levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - viewportTexture: typeof viewportTexture; - viewportMipTexture: typeof viewportMipTexture; - } -} diff --git a/types/three/src/nodes/fog/FogExp2Node.d.ts b/types/three/src/nodes/fog/FogExp2Node.d.ts index 3ede63e79..d129d2c72 100644 --- a/types/three/src/nodes/fog/FogExp2Node.d.ts +++ b/types/three/src/nodes/fog/FogExp2Node.d.ts @@ -1,18 +1,14 @@ import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; import FogNode from "./FogNode.js"; -export default class FogExp2Node extends FogNode { +declare class FogExp2Node extends FogNode { isFogExp2Node: true; densityNode: Node; constructor(colorNode: Node, densityNode: Node); } -export const densityFog: (colorNode: Node, densityNode: Node) => ShaderNodeObject; +export default FogExp2Node; -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - densityFog: typeof densityFog; - } -} +export const densityFog: (colorNode: Node, densityNode: Node) => ShaderNodeObject; diff --git a/types/three/src/nodes/fog/FogNode.d.ts b/types/three/src/nodes/fog/FogNode.d.ts index ee0c5dffb..4e5d46fd1 100644 --- a/types/three/src/nodes/fog/FogNode.d.ts +++ b/types/three/src/nodes/fog/FogNode.d.ts @@ -1,8 +1,8 @@ import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class FogNode extends Node { +declare class FogNode extends Node { isFogNode: true; colorNode: Node | null; factorNode: Node | null; @@ -12,13 +12,9 @@ export default class FogNode extends Node { getViewZNode(builder: NodeBuilder): Node; } +export default FogNode; + export const fog: ( colorNode: NodeRepresentation | null, factorNode: NodeRepresentation | null, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - fog: typeof fog; - } -} diff --git a/types/three/src/nodes/fog/FogRangeNode.d.ts b/types/three/src/nodes/fog/FogRangeNode.d.ts index a1d37e7b6..d0e1c7cf2 100644 --- a/types/three/src/nodes/fog/FogRangeNode.d.ts +++ b/types/three/src/nodes/fog/FogRangeNode.d.ts @@ -1,8 +1,8 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import FogNode from "./FogNode.js"; -export default class FogRangeNode extends FogNode { +declare class FogRangeNode extends FogNode { isFogRangeNode: true; nearNode: Node | null; farNode: Node | null; @@ -10,14 +10,10 @@ export default class FogRangeNode extends FogNode { constructor(colorNode: Node | null, nearNode: Node | null, farNode: Node | null); } +export default FogRangeNode; + export const rangeFog: ( colorNode: NodeRepresentation | null, nearNode: NodeRepresentation | null, farNode: NodeRepresentation | null, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - rangeFog: typeof rangeFog; - } -} diff --git a/types/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts b/types/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts index 066656347..a22bb480a 100644 --- a/types/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts +++ b/types/three/src/nodes/functions/BSDF/BRDF_GGX.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const BRDF_GGX: (args: { lightDirection: Node; diff --git a/types/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts b/types/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts index 51df53226..591fc262d 100644 --- a/types/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts +++ b/types/three/src/nodes/functions/BSDF/BRDF_Lambert.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const BRDF_Lambert: (args: { diffuseColor: Node }) => ShaderNodeObject; diff --git a/types/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts b/types/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts index 67574acb1..3e5b218e8 100644 --- a/types/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts +++ b/types/three/src/nodes/functions/BSDF/BRDF_Sheen.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const BRDF_Sheen: (args: { lightDirection: Node }) => ShaderNodeObject; diff --git a/types/three/src/nodes/functions/BSDF/DFGApprox.d.ts b/types/three/src/nodes/functions/BSDF/DFGApprox.d.ts index ed16ef5e5..010b70ccc 100644 --- a/types/three/src/nodes/functions/BSDF/DFGApprox.d.ts +++ b/types/three/src/nodes/functions/BSDF/DFGApprox.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; // Analytical approximation of the DFG LUT, one half of the // split-sum approximation used in indirect specular lighting. diff --git a/types/three/src/nodes/functions/BSDF/D_GGX.d.ts b/types/three/src/nodes/functions/BSDF/D_GGX.d.ts index 2ba114b41..71b673c6c 100644 --- a/types/three/src/nodes/functions/BSDF/D_GGX.d.ts +++ b/types/three/src/nodes/functions/BSDF/D_GGX.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; // Microfacet Models for Refraction through Rough Surfaces - equation (33) // http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html diff --git a/types/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts b/types/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts index 3de167db6..e296ea11d 100644 --- a/types/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts +++ b/types/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; // https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf declare const D_GGX_Anisotropic: ( diff --git a/types/three/src/nodes/functions/BSDF/F_Schlick.d.ts b/types/three/src/nodes/functions/BSDF/F_Schlick.d.ts index ce3f23ffa..46940e6a3 100644 --- a/types/three/src/nodes/functions/BSDF/F_Schlick.d.ts +++ b/types/three/src/nodes/functions/BSDF/F_Schlick.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const F_Schlick: (args: { f0: Node; f90: Node; dotVH: Node }) => ShaderNodeObject; diff --git a/types/three/src/nodes/functions/BSDF/Schlick_to_F0.d.ts b/types/three/src/nodes/functions/BSDF/Schlick_to_F0.d.ts new file mode 100644 index 000000000..d0554ba2c --- /dev/null +++ b/types/three/src/nodes/functions/BSDF/Schlick_to_F0.d.ts @@ -0,0 +1,10 @@ +import Node from "../../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../../tsl/TSLCore.js"; + +declare const Schlick_to_F0: ( + f: NodeRepresentation, + f90: NodeRepresentation, + dotVH: NodeRepresentation, +) => ShaderNodeObject; + +export default Schlick_to_F0; diff --git a/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts b/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts index f736325ff..b6c1ca80c 100644 --- a/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts +++ b/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import OperatorNode from "../../math/OperatorNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const V_GGX_SmithCorrelated: (inputs: { alpha: Node; diff --git a/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts b/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts index c2c6f77f7..5150bf6b1 100644 --- a/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts +++ b/types/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import MathNode from "../../math/MathNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const V_GGX_SmithCorrelated: (inputs: { alphaT: Node; diff --git a/types/three/src/nodes/functions/ShadowMaskModel.d.ts b/types/three/src/nodes/functions/ShadowMaskModel.d.ts index 512b06db3..bcdee8b5c 100644 --- a/types/three/src/nodes/functions/ShadowMaskModel.d.ts +++ b/types/three/src/nodes/functions/ShadowMaskModel.d.ts @@ -1,6 +1,6 @@ import LightingModel from "../core/LightingModel.js"; import VarNode from "../core/VarNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class ShadowMaskModel extends LightingModel { shadowNode: ShaderNodeObject; diff --git a/types/three/src/nodes/functions/material/getGeometryRoughness.d.ts b/types/three/src/nodes/functions/material/getGeometryRoughness.d.ts index 729111bde..dd629cee0 100644 --- a/types/three/src/nodes/functions/material/getGeometryRoughness.d.ts +++ b/types/three/src/nodes/functions/material/getGeometryRoughness.d.ts @@ -1,5 +1,5 @@ import MathNode from "../../math/MathNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const getGeometryRoughness: () => ShaderNodeObject; diff --git a/types/three/src/nodes/functions/material/getRoughness.d.ts b/types/three/src/nodes/functions/material/getRoughness.d.ts index 56e7d3e6b..7022672b0 100644 --- a/types/three/src/nodes/functions/material/getRoughness.d.ts +++ b/types/three/src/nodes/functions/material/getRoughness.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import MathNode from "../../math/MathNode.js"; -import { ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../../tsl/TSLCore.js"; declare const getRoughness: (args: { roughness: Node }) => ShaderNodeObject; diff --git a/types/three/src/nodes/geometry/RangeNode.d.ts b/types/three/src/nodes/geometry/RangeNode.d.ts index 183649866..c4c932486 100644 --- a/types/three/src/nodes/geometry/RangeNode.d.ts +++ b/types/three/src/nodes/geometry/RangeNode.d.ts @@ -4,7 +4,7 @@ import { Vector3 } from "../../math/Vector3.js"; import { Vector4 } from "../../math/Vector4.js"; import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export type RangeModeBound = number | Color | Vector2 | Vector3 | Vector4; diff --git a/types/three/src/nodes/gpgpu/ComputeNode.d.ts b/types/three/src/nodes/gpgpu/ComputeNode.d.ts index 162411bed..8273ff13e 100644 --- a/types/three/src/nodes/gpgpu/ComputeNode.d.ts +++ b/types/three/src/nodes/gpgpu/ComputeNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class ComputeNode extends Node { isComputeNode: true; @@ -17,7 +17,7 @@ export const compute: ( workgroupSize: number[], ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { compute: typeof compute; } diff --git a/types/three/src/nodes/lighting/AmbientLightNode.d.ts b/types/three/src/nodes/lighting/AmbientLightNode.d.ts new file mode 100644 index 000000000..3b7cc6fb6 --- /dev/null +++ b/types/three/src/nodes/lighting/AmbientLightNode.d.ts @@ -0,0 +1,8 @@ +import { AmbientLight } from "../../lights/AmbientLight.js"; +import AnalyticLightNode from "./AnalyticLightNode.js"; + +declare class AmbientLightNode extends AnalyticLightNode { + constructor(light?: AmbientLight | null); +} + +export default AmbientLightNode; diff --git a/types/three/src/nodes/lighting/DirectionalLightNode.d.ts b/types/three/src/nodes/lighting/DirectionalLightNode.d.ts new file mode 100644 index 000000000..41908abaf --- /dev/null +++ b/types/three/src/nodes/lighting/DirectionalLightNode.d.ts @@ -0,0 +1,8 @@ +import { DirectionalLight } from "../../lights/DirectionalLight.js"; +import AnalyticLightNode from "./AnalyticLightNode.js"; + +declare class DirectionalLightNode extends AnalyticLightNode { + constructor(light?: DirectionalLight | null); +} + +export default DirectionalLightNode; diff --git a/types/three/src/nodes/lighting/IESSpotLightNode.d.ts b/types/three/src/nodes/lighting/IESSpotLightNode.d.ts new file mode 100644 index 000000000..5906fe96d --- /dev/null +++ b/types/three/src/nodes/lighting/IESSpotLightNode.d.ts @@ -0,0 +1,5 @@ +import SpotLightNode from "./SpotLightNode.js"; + +declare class IESSpotLightNode extends SpotLightNode {} + +export default IESSpotLightNode; diff --git a/types/three/src/nodes/lighting/LightNode.d.ts b/types/three/src/nodes/lighting/LightNode.d.ts new file mode 100644 index 000000000..de64bdb60 --- /dev/null +++ b/types/three/src/nodes/lighting/LightNode.d.ts @@ -0,0 +1,18 @@ +import { Light } from "../../lights/Light.js"; +import Node from "../core/Node.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; + +export type LightNodeScope = typeof LightNode.TARGET_DIRECTION; + +declare class LightNode extends Node { + scope: LightNodeScope; + light: Light; + + constructor(scope?: LightNodeScope, light?: Light | null); + + static TARGET_DIRECTION: "targetDirection"; +} + +export default LightNode; + +export const lightTargetDirection: (light?: Light | null) => ShaderNodeObject; diff --git a/types/three/src/nodes/lighting/LightUtils.d.ts b/types/three/src/nodes/lighting/LightUtils.d.ts index 640289d18..4fd41ea55 100644 --- a/types/three/src/nodes/lighting/LightUtils.d.ts +++ b/types/three/src/nodes/lighting/LightUtils.d.ts @@ -1,9 +1,9 @@ import Node from "../core/Node.js"; -import CondNode from "../math/CondNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import ConditionalNode from "../math/ConditionalNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export const getDistanceAttenuation: (args: { lightDistance: Node; cutoffDistance: Node; decayExponent: Node; -}) => ShaderNodeObject; +}) => ShaderNodeObject; diff --git a/types/three/src/nodes/lighting/LightingContextNode.d.ts b/types/three/src/nodes/lighting/LightingContextNode.d.ts index 794e55689..7fd3d20f4 100644 --- a/types/three/src/nodes/lighting/LightingContextNode.d.ts +++ b/types/three/src/nodes/lighting/LightingContextNode.d.ts @@ -1,7 +1,7 @@ import ContextNode from "../core/ContextNode.js"; import LightingModel, { LightingModelIndirectInput } from "../core/LightingModel.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class LightingContextNode extends ContextNode { lightingModelNode: LightingModel | null; @@ -19,9 +19,3 @@ export default class LightingContextNode extends ContextNode { } export const lightingContext: (node: Node, lightingModelNode?: LightingModel) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - lightingContext: typeof lightingContext; - } -} diff --git a/types/three/src/nodes/lighting/LightsNode.d.ts b/types/three/src/nodes/lighting/LightsNode.d.ts index 936659152..56875be98 100644 --- a/types/three/src/nodes/lighting/LightsNode.d.ts +++ b/types/three/src/nodes/lighting/LightsNode.d.ts @@ -1,22 +1,18 @@ import { Light } from "../../lights/Light.js"; import Node from "../core/Node.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; -import LightingNode from "./LightingNode.js"; +import { NodeBuilder } from "../Nodes.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class LightsNode extends Node { - lightNodes: LightingNode[]; +declare class LightsNode extends Node { + constructor(lights?: Light[]); - constructor(lightNodes?: LightingNode[]); + setupLightsNode(builder: NodeBuilder): void; - get hasLight(): boolean; - getLightNodeByHash(hash: string): LightingNode | null; + setLights(lights: Light[]): this; - fromLights(lights: Light[]): this; - - static setReference( - lightClass: { new(): T }, - lightNodeClass: { new(light: T): LightingNode }, - ): void; + getLights(): Light[]; } +export default LightsNode; + export const lights: (lights: Light[]) => ShaderNodeObject; diff --git a/types/three/src/nodes/materials/NodeMaterial.d.ts b/types/three/src/nodes/materials/NodeMaterial.d.ts deleted file mode 100644 index 631c3a9ef..000000000 --- a/types/three/src/nodes/materials/NodeMaterial.d.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { LineBasicMaterial } from "../../materials/LineBasicMaterial.js"; -import { Material, MaterialParameters } from "../../materials/Material.js"; -import { MeshBasicMaterial } from "../../materials/MeshBasicMaterial.js"; -import { MeshMatcapMaterial } from "../../materials/MeshMatcapMaterial.js"; -import { MeshNormalMaterial } from "../../materials/MeshNormalMaterial.js"; -import { MeshPhongMaterial } from "../../materials/MeshPhongMaterial.js"; -import { MeshPhysicalMaterial } from "../../materials/MeshPhysicalMaterial.js"; -import { MeshStandardMaterial } from "../../materials/MeshStandardMaterial.js"; -import { MeshToonMaterial } from "../../materials/MeshToonMaterial.js"; -import { PointsMaterial } from "../../materials/PointsMaterial.js"; -import { ShadowMaterial } from "../../materials/ShadowMaterial.js"; -import { SpriteMaterial } from "../../materials/SpriteMaterial.js"; -import ClippingNode from "../accessors/ClippingNode.js"; -import LightingModel from "../core/LightingModel.js"; -import MRTNode from "../core/MRTNode.js"; -import Node from "../core/Node.js"; -import NodeBuilder from "../core/NodeBuilder.js"; -import LightsNode from "../lighting/LightsNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; -import LineBasicNodeMaterial from "./LineBasicNodeMaterial.js"; -import MeshBasicNodeMaterial from "./MeshBasicNodeMaterial.js"; -import MeshMatcapNodeMaterial from "./MeshMatcapNodeMaterial.js"; -import MeshNormalNodeMaterial from "./MeshNormalNodeMaterial.js"; -import MeshPhongNodeMaterial from "./MeshPhongNodeMaterial.js"; -import MeshPhysicalNodeMaterial from "./MeshPhysicalNodeMaterial.js"; -import MeshStandardNodeMaterial from "./MeshStandardNodeMaterial.js"; -import MeshToonNodeMaterial from "./MeshToonNodeMaterial.js"; -import PointsNodeMaterial from "./PointsNodeMaterial.js"; -import ShadowNodeMaterial from "./ShadowNodeMaterial.js"; -import SpriteNodeMaterial from "./SpriteNodeMaterial.js"; - -export interface NodeMaterialParameters extends MaterialParameters { - normals?: boolean | undefined; - - colorSpaced?: boolean | undefined; - - lightsNode?: LightsNode | null | undefined; - envNode?: Node | null | undefined; - aoNode?: Node | null | undefined; - - colorNode?: Node | null | undefined; - normalNode?: Node | null | undefined; - opacityNode?: Node | null | undefined; - backdropNode?: Node | null | undefined; - backdropAlphaNode?: Node | null | undefined; - alphaTestNode?: Node | null | undefined; - - positionNode?: Node | null | undefined; - - depthNode?: Node | null | undefined; - shadowNode?: Node | null | undefined; - - outputNode?: Node | null | undefined; - - fragmentNode?: Node | null | undefined; - vertexNode?: Node | null | undefined; -} - -declare class NodeMaterial extends Material { - readonly isNodeMaterial: true; - - fog: boolean; - lights: boolean; - - lightsNode: LightsNode | null; - envNode: Node | null; - aoNode: Node | null; - - colorNode: Node | null; - normalNode: Node | null; - opacityNode: Node | null; - backdropNode: Node | null; - backdropAlphaNode: Node | null; - alphaTestNode: Node | null; - - positionNode: Node | null; - - depthNode: Node | null; - shadowNode: Node | null; - shadowPositionNode: Node | null; - - outputNode: Node | null; - mrtNode: MRTNode | null; - - fragmentNode: Node | null; - vertexNode: Node | null; - - constructor(); - - build(builder: NodeBuilder): void; - setup(builder: NodeBuilder): void; - setupClipping(builder: NodeBuilder): ClippingNode | null; - setupDepth(builder: NodeBuilder): void; - setupPosition(builder: NodeBuilder): Node; - setupDiffuseColor(builder: NodeBuilder): void; - setupVariants(builder: NodeBuilder): void; - setupNormal(builder: NodeBuilder): ShaderNodeObject; - setupEnvironment(builder: NodeBuilder): Node | null; - setupLightMap(builder: NodeBuilder): Node | null; - setupLights(builder: NodeBuilder): LightsNode; - setupOutgoingLight(): Node; - setupLightingModel(builder: NodeBuilder): LightingModel; - setupLighting(builder: NodeBuilder): Node; - setupOutput(builder: NodeBuilder, outputNode: Node): Node; - - setDefaultValues(material: Material): void; - - static fromMaterial(material: LineBasicMaterial): LineBasicNodeMaterial; - static fromMaterial(material: MeshBasicMaterial): MeshBasicNodeMaterial; - static fromMaterial(material: MeshMatcapMaterial): MeshMatcapNodeMaterial; - static fromMaterial(material: MeshNormalMaterial): MeshNormalNodeMaterial; - static fromMaterial(material: MeshPhongMaterial): MeshPhongNodeMaterial; - static fromMaterial(material: MeshPhysicalMaterial): MeshPhysicalNodeMaterial; - static fromMaterial(material: MeshStandardMaterial): MeshStandardNodeMaterial; - static fromMaterial(material: MeshToonMaterial): MeshToonNodeMaterial; - static fromMaterial(material: PointsMaterial): PointsNodeMaterial; - static fromMaterial(material: ShadowMaterial): ShadowNodeMaterial; - static fromMaterial(material: SpriteMaterial): SpriteNodeMaterial; - static fromMaterial(material: NodeMaterial): NodeMaterial; - static fromMaterial(material: Material): NodeMaterial; -} - -export default NodeMaterial; - -export function addNodeMaterial(type: string, nodeMaterial: typeof NodeMaterial): void; - -export function createNodeMaterialFromType(type: string): NodeMaterial; diff --git a/types/three/src/nodes/materialx/MaterialXNodes.d.ts b/types/three/src/nodes/materialx/MaterialXNodes.d.ts index cc0383590..8007125a7 100644 --- a/types/three/src/nodes/materialx/MaterialXNodes.d.ts +++ b/types/three/src/nodes/materialx/MaterialXNodes.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import MathNode from "../math/MathNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import { mx_hsvtorgb, mx_rgbtohsv } from "./lib/mx_hsv.js"; import { mx_srgb_texture_to_lin_rec709 } from "./lib/mx_transform_color.js"; diff --git a/types/three/src/nodes/materialx/lib/mx_hsv.d.ts b/types/three/src/nodes/materialx/lib/mx_hsv.d.ts index 9d7b87274..ce11882e9 100644 --- a/types/three/src/nodes/materialx/lib/mx_hsv.d.ts +++ b/types/three/src/nodes/materialx/lib/mx_hsv.d.ts @@ -1,5 +1,5 @@ import Node from "../../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../../tsl/TSLCore.js"; export const mx_hsvtorgb: (hsv: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/materialx/lib/mx_noise.d.ts b/types/three/src/nodes/materialx/lib/mx_noise.d.ts index 982615616..2e5405f75 100644 --- a/types/three/src/nodes/materialx/lib/mx_noise.d.ts +++ b/types/three/src/nodes/materialx/lib/mx_noise.d.ts @@ -1,6 +1,6 @@ import Node from "../../core/Node.js"; import VarNode from "../../core/VarNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../../tsl/TSLCore.js"; export const mx_select: ( b_immutable: NodeRepresentation, diff --git a/types/three/src/nodes/materialx/lib/mx_transform_color.d.ts b/types/three/src/nodes/materialx/lib/mx_transform_color.d.ts index 7cdeb5747..418818d0e 100644 --- a/types/three/src/nodes/materialx/lib/mx_transform_color.d.ts +++ b/types/three/src/nodes/materialx/lib/mx_transform_color.d.ts @@ -1,4 +1,4 @@ import Node from "../../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../../tsl/TSLCore.js"; export const mx_srgb_texture_to_lin_rec709: (color_immutable: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/math/CondNode.d.ts b/types/three/src/nodes/math/ConditionalNode.d.ts similarity index 74% rename from types/three/src/nodes/math/CondNode.d.ts rename to types/three/src/nodes/math/ConditionalNode.d.ts index 973a57af2..5313a9836 100644 --- a/types/three/src/nodes/math/CondNode.d.ts +++ b/types/three/src/nodes/math/ConditionalNode.d.ts @@ -1,7 +1,7 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class CondNode extends Node { +declare class ConditionalNode extends Node { condNode: Node; ifNode: Node; elseNode: Node; @@ -9,13 +9,15 @@ export default class CondNode extends Node { constructor(condNode: Node, ifNode: Node, elseNode: Node); } +export default ConditionalNode; + export const select: ( condNode: NodeRepresentation, ifNode: NodeRepresentation, elseNode: NodeRepresentation, ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { select: typeof select; } @@ -30,7 +32,7 @@ export const cond: ( elseNode: NodeRepresentation, ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { cond: typeof cond; } diff --git a/types/three/src/nodes/math/Hash.d.ts b/types/three/src/nodes/math/Hash.d.ts index 6d1cecad9..df9e81997 100644 --- a/types/three/src/nodes/math/Hash.d.ts +++ b/types/three/src/nodes/math/Hash.d.ts @@ -1,10 +1,4 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const hash: (seed: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - hash: typeof hash; - } -} diff --git a/types/three/src/nodes/math/MathNode.d.ts b/types/three/src/nodes/math/MathNode.d.ts index 6a5834cba..f65546d75 100644 --- a/types/three/src/nodes/math/MathNode.d.ts +++ b/types/three/src/nodes/math/MathNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import OperatorNode from "./OperatorNode.js"; export type MathNodeMethod1 = @@ -210,7 +210,7 @@ export const rand: (uv: NodeRepresentation) => ShaderNodeObject; export const mixElement: Ternary; export const smoothstepElement: Ternary; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { all: typeof all; any: typeof any; diff --git a/types/three/src/nodes/math/MathUtils.d.ts b/types/three/src/nodes/math/MathUtils.d.ts index d2591618b..572d9eef5 100644 --- a/types/three/src/nodes/math/MathUtils.d.ts +++ b/types/three/src/nodes/math/MathUtils.d.ts @@ -1,16 +1,6 @@ import { Binary, Ternary } from "./MathNode.js"; -// remapping functions export const parabola: Binary; export const gain: Binary; export const pcurve: Ternary; export const sinc: Binary; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - parabola: typeof parabola; - gain: typeof gain; - pcurve: typeof pcurve; - sinc: typeof sinc; - } -} diff --git a/types/three/src/nodes/math/OperatorNode.d.ts b/types/three/src/nodes/math/OperatorNode.d.ts index c98a78910..77157ea73 100644 --- a/types/three/src/nodes/math/OperatorNode.d.ts +++ b/types/three/src/nodes/math/OperatorNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export type OperatorNodeOp = | "%" @@ -57,7 +57,7 @@ export const bitXor: Operator; export const shiftLeft: Operator; export const shiftRight: Operator; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { add: typeof add; sub: typeof sub; @@ -87,7 +87,7 @@ declare module "../shadernode/ShaderNode.js" { */ export const remainder: Operator; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { /** * @deprecated .remainder() has been renamed to .modInt(). diff --git a/types/three/src/nodes/math/TriNoise3D.d.ts b/types/three/src/nodes/math/TriNoise3D.d.ts index 88a92a440..f5220dbe6 100644 --- a/types/three/src/nodes/math/TriNoise3D.d.ts +++ b/types/three/src/nodes/math/TriNoise3D.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const tri: (x: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/parsers/GLSLNodeFunction.d.ts b/types/three/src/nodes/parsers/GLSLNodeFunction.d.ts new file mode 100644 index 000000000..ec2396423 --- /dev/null +++ b/types/three/src/nodes/parsers/GLSLNodeFunction.d.ts @@ -0,0 +1,9 @@ +import NodeFunction from "../core/NodeFunction.js"; + +declare class GLSLNodeFunction extends NodeFunction { + constructor(source: string); + + getCode(name?: string): string; +} + +export default GLSLNodeFunction; diff --git a/types/three/src/nodes/parsers/GLSLNodeParser.d.ts b/types/three/src/nodes/parsers/GLSLNodeParser.d.ts new file mode 100644 index 000000000..f6b663d4b --- /dev/null +++ b/types/three/src/nodes/parsers/GLSLNodeParser.d.ts @@ -0,0 +1,8 @@ +import NodeParser from "../core/NodeParser.js"; +import GLSLNodeFunction from "./GLSLNodeFunction.js"; + +declare class GLSLNodeParser extends NodeParser { + parseFunction(source: string): GLSLNodeFunction; +} + +export default GLSLNodeParser; diff --git a/types/three/src/nodes/pmrem/PMREMNode.d.ts b/types/three/src/nodes/pmrem/PMREMNode.d.ts index 886aa24fc..2a957c8e6 100644 --- a/types/three/src/nodes/pmrem/PMREMNode.d.ts +++ b/types/three/src/nodes/pmrem/PMREMNode.d.ts @@ -1,9 +1,9 @@ import { Texture } from "../../textures/Texture.js"; import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; -export default class PMREMNode extends TempNode { +declare class PMREMNode extends TempNode { uvNode: Node | null; levelNode: Node | null; @@ -13,6 +13,8 @@ export default class PMREMNode extends TempNode { get value(): Texture; } +export default PMREMNode; + export const pmremTexture: ( value: Texture, uvNode?: NodeRepresentation, diff --git a/types/three/src/nodes/pmrem/PMREMUtils.d.ts b/types/three/src/nodes/pmrem/PMREMUtils.d.ts new file mode 100644 index 000000000..947e7fe25 --- /dev/null +++ b/types/three/src/nodes/pmrem/PMREMUtils.d.ts @@ -0,0 +1,28 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const getDirection: (uv_immutable: NodeRepresentation, face: NodeRepresentation) => ShaderNodeObject; + +export const textureCubeUV: ( + envMap: NodeRepresentation, + sampleDir_immutable: NodeRepresentation, + roughness_immutable: NodeRepresentation, + CUBEUV_TEXEL_WIDTH: NodeRepresentation, + CUBEUV_TEXEL_HEIGHT: NodeRepresentation, + CUBEUV_MAX_MIP: NodeRepresentation, +) => ShaderNodeObject; + +export const blur: ( + n: NodeRepresentation, + latitudinal: NodeRepresentation, + poleAxis: NodeRepresentation, + outputDirection: NodeRepresentation, + weights: NodeRepresentation, + samples: NodeRepresentation, + dTheta: NodeRepresentation, + mipInt: NodeRepresentation, + envMap: NodeRepresentation, + CUBEUV_TEXEL_WIDTH: NodeRepresentation, + CUBEUV_TEXEL_HEIGHT: NodeRepresentation, + CUBEUV_MAX_MIP: NodeRepresentation, +) => ShaderNodeObject; diff --git a/types/three/src/nodes/procedural/Checker.d.ts b/types/three/src/nodes/procedural/Checker.d.ts new file mode 100644 index 000000000..af7cce3a7 --- /dev/null +++ b/types/three/src/nodes/procedural/Checker.d.ts @@ -0,0 +1,4 @@ +import Node from "../core/Node.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; + +export const checker: (coord?: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/procedural/CheckerNode.d.ts b/types/three/src/nodes/procedural/CheckerNode.d.ts deleted file mode 100644 index 74a1b731e..000000000 --- a/types/three/src/nodes/procedural/CheckerNode.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; - -export default class CheckerNode extends TempNode { - uvNode: Node; - constructor(uvNode?: Node); -} - -export const checker: (uvNode?: NodeRepresentation) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - checker: typeof checker; - } -} diff --git a/types/three/src/nodes/tsl/TSLBase.d.ts b/types/three/src/nodes/tsl/TSLBase.d.ts new file mode 100644 index 000000000..297b9a483 --- /dev/null +++ b/types/three/src/nodes/tsl/TSLBase.d.ts @@ -0,0 +1,21 @@ +export * from "../accessors/BufferAttributeNode.js"; +export * from "../code/ExpressionNode.js"; +export * from "../code/FunctionCallNode.js"; +export * from "../core/AssignNode.js"; +export * from "../core/BypassNode.js"; +export * from "../core/CacheNode.js"; +export * from "../core/ContextNode.js"; +export * from "../core/PropertyNode.js"; +export * from "../core/UniformNode.js"; +export * from "../core/VarNode.js"; +export * from "../core/VaryingNode.js"; +export * from "../display/ColorSpaceNode.js"; +export * from "../display/RenderOutputNode.js"; +export * from "../display/ToneMappingNode.js"; +export * from "../gpgpu/ComputeNode.js"; +export * from "../math/ConditionalNode.js"; +export * from "../math/MathNode.js"; +export * from "../math/OperatorNode.js"; +export * from "../utils/Discard.js"; +export * from "../utils/RemapNode.js"; +export * from "./TSLCore.js"; diff --git a/types/three/src/nodes/shadernode/ShaderNode.d.ts b/types/three/src/nodes/tsl/TSLCore.d.ts similarity index 94% rename from types/three/src/nodes/shadernode/ShaderNode.d.ts rename to types/three/src/nodes/tsl/TSLCore.d.ts index 0deefe31b..1514f5d82 100644 --- a/types/three/src/nodes/shadernode/ShaderNode.d.ts +++ b/types/three/src/nodes/tsl/TSLCore.d.ts @@ -26,23 +26,14 @@ export interface NodeElements { toUvec4: typeof uvec4; toBvec4: typeof bvec4; toMat2: typeof mat2; - toImat2: typeof imat2; - toUmat2: typeof umat2; - toBmat2: typeof bmat2; toMat3: typeof mat3; - toImat3: typeof imat3; - toUmat3: typeof umat3; - toBmat3: typeof bmat3; toMat4: typeof mat4; - toImat4: typeof imat4; - toUmat4: typeof umat4; - toBmat4: typeof bmat4; element: typeof element; convert: typeof convert; } -export function addNodeElement(name: string, nodeElement: unknown): void; +export function addMethodChaining(name: string, nodeElement: unknown): void; export type SwizzleCharacter = "x" | "y" | "z" | "w" | "r" | "g" | "b" | "a" | "s" | "t" | "p" | "q"; @@ -272,19 +263,8 @@ export const uvec4: ConvertType; export const bvec4: ConvertType; export const mat2: ConvertType; -export const imat2: ConvertType; -export const umat2: ConvertType; -export const bmat2: ConvertType; - export const mat3: ConvertType; -export const imat3: ConvertType; -export const umat3: ConvertType; -export const bmat3: ConvertType; - export const mat4: ConvertType; -export const imat4: ConvertType; -export const umat4: ConvertType; -export const bmat4: ConvertType; export const string: (value?: string) => ShaderNodeObject>; export const arrayBuffer: (value: ArrayBuffer) => ShaderNodeObject>; diff --git a/types/three/src/nodes/utils/CubeMapNode.d.ts b/types/three/src/nodes/utils/CubeMapNode.d.ts index 75e41221f..6a5c47371 100644 --- a/types/three/src/nodes/utils/CubeMapNode.d.ts +++ b/types/three/src/nodes/utils/CubeMapNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class CubeMapNode extends TempNode { envNode: Node; @@ -8,6 +8,6 @@ declare class CubeMapNode extends TempNode { constructor(envNode: Node); } -export const cubeMapNode: (envNode: NodeRepresentation) => ShaderNodeObject; - export default CubeMapNode; + +export const cubeMapNode: (envNode: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/utils/Discard.d.ts b/types/three/src/nodes/utils/Discard.d.ts index 7f42d7329..7376c6cb8 100644 --- a/types/three/src/nodes/utils/Discard.d.ts +++ b/types/three/src/nodes/utils/Discard.d.ts @@ -1,10 +1,10 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const Discard: (conditional: NodeRepresentation) => ShaderNodeObject; export const Return: () => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { discard: typeof Discard; } diff --git a/types/three/src/nodes/utils/EquirectUVNode.d.ts b/types/three/src/nodes/utils/EquirectUVNode.d.ts index 9020033d1..4e85dc40e 100644 --- a/types/three/src/nodes/utils/EquirectUVNode.d.ts +++ b/types/three/src/nodes/utils/EquirectUVNode.d.ts @@ -1,5 +1,5 @@ import { Node, TempNode } from "../Nodes.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class EquirectUVNode extends TempNode { constructor(dirNode?: ShaderNodeObject); diff --git a/types/three/src/nodes/utils/FunctionOverloadingNode.d.ts b/types/three/src/nodes/utils/FunctionOverloadingNode.d.ts new file mode 100644 index 000000000..d7c3febb4 --- /dev/null +++ b/types/three/src/nodes/utils/FunctionOverloadingNode.d.ts @@ -0,0 +1,13 @@ +import Node from "../core/Node.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; + +declare class FunctionOverloadingNode extends Node { + functionNodes: Node[]; + parameterNodes: Node[]; + + constructor(functionNodes?: Node[], ...parameterNodes: Node[]); +} + +export default FunctionOverloadingNode; + +export const overloadingFn: (functionNodes: Node[]) => (...params: Node[]) => ShaderNodeObject; diff --git a/types/three/src/nodes/utils/LoopNode.d.ts b/types/three/src/nodes/utils/LoopNode.d.ts index 2fb1e1e30..d59518588 100644 --- a/types/three/src/nodes/utils/LoopNode.d.ts +++ b/types/three/src/nodes/utils/LoopNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; declare class LoopNode extends Node { params: unknown[]; diff --git a/types/three/src/nodes/utils/MatcapUVNode.d.ts b/types/three/src/nodes/utils/MatcapUVNode.d.ts index b59cf8ae6..7f56667b3 100644 --- a/types/three/src/nodes/utils/MatcapUVNode.d.ts +++ b/types/three/src/nodes/utils/MatcapUVNode.d.ts @@ -1,5 +1,5 @@ import TempNode from "../core/TempNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class MatcapUVNode extends TempNode { constructor(); diff --git a/types/three/src/nodes/utils/MaxMipLevelNode.d.ts b/types/three/src/nodes/utils/MaxMipLevelNode.d.ts index 858624571..455cb77a5 100644 --- a/types/three/src/nodes/utils/MaxMipLevelNode.d.ts +++ b/types/three/src/nodes/utils/MaxMipLevelNode.d.ts @@ -1,7 +1,7 @@ import { Texture } from "../../textures/Texture.js"; import TextureNode from "../accessors/TextureNode.js"; import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export default class MaxMipLevelNode extends UniformNode<0> { constructor(textureNode: TextureNode); diff --git a/types/three/src/nodes/utils/OscNode.d.ts b/types/three/src/nodes/utils/OscNode.d.ts index d99abbcf4..07bad8a09 100644 --- a/types/three/src/nodes/utils/OscNode.d.ts +++ b/types/three/src/nodes/utils/OscNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export type OscNodeMethod = | typeof OscNode.SINE diff --git a/types/three/src/nodes/utils/Packing.d.ts b/types/three/src/nodes/utils/Packing.d.ts index c6ba1508c..61d0d039e 100644 --- a/types/three/src/nodes/utils/Packing.d.ts +++ b/types/three/src/nodes/utils/Packing.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const directionToColor: (node: NodeRepresentation) => ShaderNodeObject; export const colorToDirection: (node: NodeRepresentation) => ShaderNodeObject; diff --git a/types/three/src/nodes/utils/RTTNode.d.ts b/types/three/src/nodes/utils/RTTNode.d.ts index 34925d7c4..9f0d3e46e 100644 --- a/types/three/src/nodes/utils/RTTNode.d.ts +++ b/types/three/src/nodes/utils/RTTNode.d.ts @@ -2,7 +2,7 @@ import { TextureDataType } from "../../constants.js"; import { RenderTarget } from "../../core/RenderTarget.js"; import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export interface RTTNodeOptions { type: TextureDataType; @@ -37,9 +37,9 @@ export const rtt: ( height?: number | null, options?: RTTNodeOptions, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - toTexture: typeof rtt; - } -} +export const convertToTexture: ( + node: Node, + width?: number | null, + height?: number | null, + options?: RTTNodeOptions, +) => ShaderNodeObject; diff --git a/types/three/src/nodes/utils/ReflectorNode.d.ts b/types/three/src/nodes/utils/ReflectorNode.d.ts index ac6d1e726..4a9c84ba9 100644 --- a/types/three/src/nodes/utils/ReflectorNode.d.ts +++ b/types/three/src/nodes/utils/ReflectorNode.d.ts @@ -2,7 +2,7 @@ import { Camera } from "../../cameras/Camera.js"; import { Object3D } from "../../core/Object3D.js"; import { RenderTarget } from "../../core/RenderTarget.js"; import TextureNode from "../accessors/TextureNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export interface ReflectorNodeParameters { target?: Object3D | undefined; diff --git a/types/three/src/nodes/utils/RemapNode.d.ts b/types/three/src/nodes/utils/RemapNode.d.ts index 5039cd6fc..e50456d0a 100644 --- a/types/three/src/nodes/utils/RemapNode.d.ts +++ b/types/three/src/nodes/utils/RemapNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class RemapNode extends Node { node: Node; @@ -28,7 +28,7 @@ export const remapClamp: ( outHighNode?: NodeRepresentation, ) => ShaderNodeObject; -declare module "../shadernode/ShaderNode.js" { +declare module "../tsl/TSLCore.js" { interface NodeElements { remap: typeof remap; remapClamp: typeof remapClamp; diff --git a/types/three/src/nodes/utils/RotateNode.d.ts b/types/three/src/nodes/utils/RotateNode.d.ts index 34ba61907..8f6df796a 100644 --- a/types/three/src/nodes/utils/RotateNode.d.ts +++ b/types/three/src/nodes/utils/RotateNode.d.ts @@ -1,6 +1,6 @@ import Node from "../core/Node.js"; import TempNode from "../core/TempNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class RotateNode extends TempNode { positionNode: Node; @@ -13,9 +13,3 @@ export const rotate: ( positionNode: NodeRepresentation, rotationNode: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - rotate: typeof rotate; - } -} diff --git a/types/three/src/nodes/utils/SetNode.d.ts b/types/three/src/nodes/utils/SetNode.d.ts new file mode 100644 index 000000000..7124d46c3 --- /dev/null +++ b/types/three/src/nodes/utils/SetNode.d.ts @@ -0,0 +1,11 @@ +import TempNode from "../core/TempNode.js"; + +declare class SetNode extends TempNode { + sourceNode: Node; + components: string[]; + targetNode: Node; + + constructor(sourceNode: Node, components: string[], targetNode: Node); +} + +export default SetNode; diff --git a/types/three/src/nodes/utils/SplitNode.d.ts b/types/three/src/nodes/utils/SplitNode.d.ts index f3966fb02..f3aa50f41 100644 --- a/types/three/src/nodes/utils/SplitNode.d.ts +++ b/types/three/src/nodes/utils/SplitNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { SwizzleOption } from "../shadernode/ShaderNode.js"; +import { SwizzleOption } from "../tsl/TSLCore.js"; /** swizzle node */ export default class SplitNode extends Node { diff --git a/types/three/src/nodes/utils/SpriteSheetUVNode.d.ts b/types/three/src/nodes/utils/SpriteSheetUVNode.d.ts index 111d7611f..9e191a390 100644 --- a/types/three/src/nodes/utils/SpriteSheetUVNode.d.ts +++ b/types/three/src/nodes/utils/SpriteSheetUVNode.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class SpriteSheetUVNode extends Node { countNode: Node; diff --git a/types/three/src/nodes/utils/SpriteUtils.d.ts b/types/three/src/nodes/utils/SpriteUtils.d.ts index 3952577c4..85884df7b 100644 --- a/types/three/src/nodes/utils/SpriteUtils.d.ts +++ b/types/three/src/nodes/utils/SpriteUtils.d.ts @@ -1,5 +1,5 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const billboarding: ( args?: { position?: NodeRepresentation | null; horizontal?: boolean; vertical?: boolean }, diff --git a/types/three/src/nodes/utils/StoargeArrayElementNode.d.ts b/types/three/src/nodes/utils/StorageArrayElementNode.d.ts similarity index 73% rename from types/three/src/nodes/utils/StoargeArrayElementNode.d.ts rename to types/three/src/nodes/utils/StorageArrayElementNode.d.ts index 0d74282e5..53ff9a79a 100644 --- a/types/three/src/nodes/utils/StoargeArrayElementNode.d.ts +++ b/types/three/src/nodes/utils/StorageArrayElementNode.d.ts @@ -1,5 +1,5 @@ import StorageBufferNode from "../accessors/StorageBufferNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; import ArrayElementNode from "./ArrayElementNode.js"; export default class StorageArrayElementNode extends ArrayElementNode { @@ -17,9 +17,3 @@ export const storageElement: ( storageBufferNode: NodeRepresentation, indexNode: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - storageElement: typeof storageElement; - } -} diff --git a/types/three/src/nodes/utils/TimerNode.d.ts b/types/three/src/nodes/utils/TimerNode.d.ts index 02cac2909..37776ff27 100644 --- a/types/three/src/nodes/utils/TimerNode.d.ts +++ b/types/three/src/nodes/utils/TimerNode.d.ts @@ -1,5 +1,5 @@ import UniformNode from "../core/UniformNode.js"; -import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { ShaderNodeObject } from "../tsl/TSLCore.js"; export type TimerNodeScope = | typeof TimerNode.LOCAL diff --git a/types/three/src/nodes/utils/TriplanarTexturesNode.d.ts b/types/three/src/nodes/utils/TriplanarTexturesNode.d.ts index 55af273e3..1f2875c26 100644 --- a/types/three/src/nodes/utils/TriplanarTexturesNode.d.ts +++ b/types/three/src/nodes/utils/TriplanarTexturesNode.d.ts @@ -1,6 +1,6 @@ import TextureNode from "../accessors/TextureNode.js"; import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export default class TriplanarTexturesNode extends Node { textureXNode: TextureNode; @@ -34,9 +34,3 @@ export const triplanarTexture: ( texture: NodeRepresentation, ...params: NodeRepresentation[] ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - triplanarTexture: typeof triplanarTexture; - } -} diff --git a/types/three/src/nodes/utils/UVUtils.d.ts b/types/three/src/nodes/utils/UVUtils.d.ts index 6e5b51f96..d375e1e11 100644 --- a/types/three/src/nodes/utils/UVUtils.d.ts +++ b/types/three/src/nodes/utils/UVUtils.d.ts @@ -1,5 +1,5 @@ import OperatorNode from "../math/OperatorNode.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const rotateUV: ( uv: NodeRepresentation, @@ -12,10 +12,3 @@ export const spherizeUV: ( strength: NodeRepresentation, center?: NodeRepresentation, ) => ShaderNodeObject; - -declare module "../shadernode/ShaderNode.js" { - interface NodeElements { - rotateUV: typeof rotateUV; - spherizeUV: typeof spherizeUV; - } -} diff --git a/types/three/src/nodes/utils/ViewportUtils.d.ts b/types/three/src/nodes/utils/ViewportUtils.d.ts index 3e971255a..e77e7f350 100644 --- a/types/three/src/nodes/utils/ViewportUtils.d.ts +++ b/types/three/src/nodes/utils/ViewportUtils.d.ts @@ -1,4 +1,4 @@ import Node from "../core/Node.js"; -import { NodeRepresentation, ShaderNodeObject } from "../shadernode/ShaderNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../tsl/TSLCore.js"; export const viewportSafeUV: (uv?: NodeRepresentation | null) => ShaderNodeObject; diff --git a/types/three/src/renderers/common/Renderer.d.ts b/types/three/src/renderers/common/Renderer.d.ts index 192f62964..f08710cf0 100644 --- a/types/three/src/renderers/common/Renderer.d.ts +++ b/types/three/src/renderers/common/Renderer.d.ts @@ -10,7 +10,9 @@ import { Color } from "../../math/Color.js"; import { Plane } from "../../math/Plane.js"; import { Vector2 } from "../../math/Vector2.js"; import { Vector4 } from "../../math/Vector4.js"; -import { ComputeNode, LightsNode, MRTNode } from "../../nodes/Nodes.js"; +import MRTNode from "../../nodes/core/MRTNode.js"; +import ComputeNode from "../../nodes/gpgpu/ComputeNode.js"; +import LightsNode from "../../nodes/lighting/LightsNode.js"; import { Scene } from "../../scenes/Scene.js"; import { FramebufferTexture } from "../../textures/FramebufferTexture.js"; import { Texture } from "../../textures/Texture.js"; @@ -22,6 +24,7 @@ import Bindings from "./Bindings.js"; import Color4 from "./Color4.js"; import Geometries from "./Geometries.js"; import Info from "./Info.js"; +import NodeLibrary from "./nodes/NodeLibrary.js"; import Nodes from "./nodes/Nodes.js"; import Pipelines from "./Pipelines.js"; import QuadMesh from "./QuadMesh.js"; @@ -59,6 +62,9 @@ declare class Renderer { stencil: boolean; clippingPlanes: readonly Plane[]; info: Info; + nodes: { + library: NodeLibrary; + }; _getFallback: ((error: unknown) => Backend) | null; _pixelRatio: number; _width: number; diff --git a/types/three/src/renderers/common/StandardRenderer.d.ts b/types/three/src/renderers/common/StandardRenderer.d.ts new file mode 100644 index 000000000..e8f2d1474 --- /dev/null +++ b/types/three/src/renderers/common/StandardRenderer.d.ts @@ -0,0 +1,12 @@ +import Backend from "./Backend.js"; +import Renderer, { RendererParameters } from "./Renderer.js"; + +export interface StandardRendererParameters extends RendererParameters {} + +declare class StandardRenderer extends Renderer { + readonly isStandardRenderer: true; + + constructor(backend: Backend, parameters?: StandardRendererParameters); +} + +export default StandardRenderer; diff --git a/types/three/src/renderers/common/nodes/NodeLibrary.d.ts b/types/three/src/renderers/common/nodes/NodeLibrary.d.ts new file mode 100644 index 000000000..f4899240e --- /dev/null +++ b/types/three/src/renderers/common/nodes/NodeLibrary.d.ts @@ -0,0 +1,56 @@ +import { ToneMapping } from "../../../constants.js"; +import { Light } from "../../../lights/Light.js"; +import { Material } from "../../../materials/Material.js"; +import NodeMaterial from "../../../materials/nodes/NodeMaterial.js"; +import Node from "../../../nodes/core/Node.js"; +import { ColorSpaceMethod } from "../../../nodes/display/ColorSpaceNode.js"; +import AnalyticLightNode from "../../../nodes/lighting/AnalyticLightNode.js"; +import { NodeRepresentation, ShaderNodeObject } from "../../../nodes/tsl/TSLCore.js"; +declare class NodeLibrary { + lightNodes: WeakMap<{ + new(): Light; + }, { + new(light: Light): AnalyticLightNode; + }>; + materialNodes: Map; + toneMappingNodes: Map< + ToneMapping, + (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject + >; + colorSpaceNodes: Map ShaderNodeObject>; + constructor(); + fromMaterial(material: Material): Material | null; + addColorSpace( + colorSpaceNode: (color: NodeRepresentation) => ShaderNodeObject, + colorSpace: ColorSpaceMethod, + ): void; + getColorSpaceFunction(colorSpace: ColorSpaceMethod): ((color: NodeRepresentation) => ShaderNodeObject) | null; + addToneMapping( + toneMappingNode: (color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject, + toneMapping: ToneMapping, + ): void; + getToneMappingFunction( + toneMapping: ToneMapping, + ): ((color: NodeRepresentation, exposure: NodeRepresentation) => ShaderNodeObject) | null; + getMaterialNodeClass(materialType: string): (new() => NodeMaterial) | null; + addMaterial(materialNodeClass: { + new(): NodeMaterial; + }, materialClass: { + new(): Material; + }): void; + getLightNodeClass(light: Light): (new(light: Light) => AnalyticLightNode) | null; + addLight(lightNodeClass: { + new(light: TLight): AnalyticLightNode; + }, lightClass: { + new(): TLight; + }): void; + addType(nodeClass: TNodeClass, type: TType, library: Map): void; + addClass( + nodeClass: TNodeClass, + baseClass: TBaseClass, + library: WeakMap, + ): void; +} +export default NodeLibrary; diff --git a/types/three/src/renderers/common/nodes/Nodes.d.ts b/types/three/src/renderers/common/nodes/Nodes.d.ts index 81654fe6c..4f23e25cf 100644 --- a/types/three/src/renderers/common/nodes/Nodes.d.ts +++ b/types/three/src/renderers/common/nodes/Nodes.d.ts @@ -2,15 +2,13 @@ import { Camera } from "../../../cameras/Camera.js"; import { Object3D } from "../../../core/Object3D.js"; import { Material } from "../../../materials/Material.js"; import { Color } from "../../../math/Color.js"; -import { - ComputeNode, - LightsNode, - Node, - NodeBuilder, - NodeFrame, - ShaderNodeObject, - UniformGroupNode, -} from "../../../nodes/Nodes.js"; +import Node from "../../../nodes/core/Node.js"; +import NodeBuilder from "../../../nodes/core/NodeBuilder.js"; +import UniformGroupNode from "../../../nodes/core/UniformGroupNode.js"; +import ComputeNode from "../../../nodes/gpgpu/ComputeNode.js"; +import LightsNode from "../../../nodes/lighting/LightsNode.js"; +import { NodeFrame } from "../../../nodes/Nodes.js"; +import { ShaderNodeObject } from "../../../nodes/TSL.js"; import { Fog } from "../../../scenes/Fog.js"; import { FogExp2 } from "../../../scenes/FogExp2.js"; import { Scene } from "../../../scenes/Scene.js"; diff --git a/types/three/src/renderers/common/nodes/StandardNodeLibrary.d.ts b/types/three/src/renderers/common/nodes/StandardNodeLibrary.d.ts new file mode 100644 index 000000000..d7db44562 --- /dev/null +++ b/types/three/src/renderers/common/nodes/StandardNodeLibrary.d.ts @@ -0,0 +1,5 @@ +import NodeLibrary from "./NodeLibrary.js"; +declare class StandardNodeLibrary extends NodeLibrary { + constructor(); +} +export default StandardNodeLibrary; diff --git a/types/three/src/renderers/webgpu/WebGPURenderer.d.ts b/types/three/src/renderers/webgpu/WebGPURenderer.d.ts index 3da45fa53..9c36444a8 100644 --- a/types/three/src/renderers/webgpu/WebGPURenderer.d.ts +++ b/types/three/src/renderers/webgpu/WebGPURenderer.d.ts @@ -1,10 +1,10 @@ -import Renderer, { RendererParameters } from "../common/Renderer.js"; +import StandardRenderer, { StandardRendererParameters } from "../common/StandardRenderer.js"; import { WebGPUBackendParameters } from "./WebGPUBackend.js"; -export interface WebGPURendererParameters extends RendererParameters, WebGPUBackendParameters { +export interface WebGPURendererParameters extends StandardRendererParameters, WebGPUBackendParameters { forceWebGL?: boolean | undefined; } -export default class WebGPURenderer extends Renderer { +export default class WebGPURenderer extends StandardRenderer { constructor(parameters?: WebGPURendererParameters); } diff --git a/types/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts b/types/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts index 06cd053d7..28b21462f 100644 --- a/types/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts +++ b/types/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.d.ts @@ -4,7 +4,7 @@ import NodeBuilder from "../../../nodes/core/NodeBuilder.js"; import NodeUniform from "../../../nodes/core/NodeUniform.js"; import NodeVar from "../../../nodes/core/NodeVar.js"; import StructTypeNode from "../../../nodes/core/StructTypeNode.js"; -import { ShaderNode } from "../../../nodes/shadernode/ShaderNode.js"; +import { ShaderNode } from "../../../nodes/tsl/TSLCore.js"; import { Texture } from "../../../textures/Texture.js"; import NodeUniformsGroup from "../../common/nodes/NodeUniformsGroup.js"; diff --git a/types/three/test/integration/nodes-webgl.ts b/types/three/test/integration/nodes-webgl.ts index 7ba99c03d..e84a36db1 100644 --- a/types/three/test/integration/nodes-webgl.ts +++ b/types/three/test/integration/nodes-webgl.ts @@ -2,19 +2,8 @@ * Tests some webgl imports, and everything else that is not imported elsewhere. */ -import { - ConstNode, - HemisphereLight, - HemisphereLightNode, - LightsNode, - NodeUtils, - PointLight, - PointLightNode, -} from "three/webgpu"; +import { ConstNode, NodeUtils } from "three/webgpu"; NodeUtils.getNodeChildren(new ConstNode(1)); NodeUtils.getValueType(1); NodeUtils.getValueFromType("color"); - -LightsNode.setReference(PointLight, PointLightNode); -LightsNode.setReference(HemisphereLight, HemisphereLightNode); diff --git a/types/three/test/unit/examples/jsm/nodes/ShaderNode/ShaderNode.ts b/types/three/test/unit/examples/jsm/nodes/ShaderNode/ShaderNode.ts index e19e887ee..bbf8fe049 100644 --- a/types/three/test/unit/examples/jsm/nodes/ShaderNode/ShaderNode.ts +++ b/types/three/test/unit/examples/jsm/nodes/ShaderNode/ShaderNode.ts @@ -6,12 +6,10 @@ import { color, ConstNode, MaterialNode, - MathNode, Node, nodeArray, nodeImmutable, nodeProxy, - OperatorNode, OscNode, PropertyNode, ShaderNode, @@ -39,27 +37,11 @@ assertSwizzable(oscNode0("sawtooth", s)); const oscNode1 = nodeProxy(OscNode, OscNode.SAWTOOTH); assertSwizzable(oscNode1(s)); -export const mix = nodeProxy(MathNode, MathNode.MIX); -assertSwizzable(mix(s, s, s)); -export const cos = nodeProxy(MathNode, MathNode.COS); -assertSwizzable(cos(s)); - export const oscSine0 = nodeProxy(OscNode, OscNode.SAWTOOTH, 1); assertSwizzable(oscSine0()); -export const mix0 = nodeProxy(MathNode, MathNode.MIX, 1); -assertSwizzable(mix0(s, new ConstNode(1))); - -export const sub = nodeProxy(OperatorNode, "-"); -assertSwizzable(sub(s, new ConstNode(1), new ConstNode(1), new ConstNode(1), new ConstNode(1))); -export const remainder = nodeProxy(OperatorNode, "%"); -assertSwizzable(remainder(s, new ConstNode(1), new ConstNode(1), new ConstNode(1), new ConstNode(1))); assertSwizzable(nodeImmutable(MaterialNode, MaterialNode.ROTATION)); assertSwizzable(nodeImmutable(PropertyNode, "vec4", "DiffuseColor")); -assertSwizzable(nodeImmutable(MathNode, "abs", 1)); - -export const shiftRight = nodeProxy(OperatorNode, ">>"); -assertSwizzable(shiftRight(s, s, s, s)); const shader = new ShaderNode<{ a: Node; b: Node }>(params => { return params.a;