super-three 0.177.0 → 0.181.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -8,16 +8,19 @@ import FlipNode from '../utils/FlipNode.js';
|
|
|
8
8
|
import ConstNode from '../core/ConstNode.js';
|
|
9
9
|
import MemberNode from '../utils/MemberNode.js';
|
|
10
10
|
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
|
|
11
|
+
import { warn, error } from '../../utils.js';
|
|
11
12
|
|
|
12
13
|
let currentStack = null;
|
|
13
14
|
|
|
14
15
|
const NodeElements = new Map();
|
|
15
16
|
|
|
17
|
+
// Extend Node Class for TSL using prototype
|
|
18
|
+
|
|
16
19
|
export function addMethodChaining( name, nodeElement ) {
|
|
17
20
|
|
|
18
21
|
if ( NodeElements.has( name ) ) {
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
warn( `TSL: Redefinition of method chaining '${ name }'.` );
|
|
21
24
|
return;
|
|
22
25
|
|
|
23
26
|
}
|
|
@@ -26,148 +29,274 @@ export function addMethodChaining( name, nodeElement ) {
|
|
|
26
29
|
|
|
27
30
|
NodeElements.set( name, nodeElement );
|
|
28
31
|
|
|
32
|
+
if ( name !== 'assign' ) {
|
|
33
|
+
|
|
34
|
+
// Changing Node prototype to add method chaining
|
|
35
|
+
|
|
36
|
+
Node.prototype[ name ] = function ( ...params ) {
|
|
37
|
+
|
|
38
|
+
//if ( name === 'toVarIntent' ) return this;
|
|
39
|
+
|
|
40
|
+
return this.isStackNode ? this.addToStack( nodeElement( ...params ) ) : nodeElement( this, ...params );
|
|
41
|
+
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Adding assign method chaining
|
|
45
|
+
|
|
46
|
+
Node.prototype[ name + 'Assign' ] = function ( ...params ) {
|
|
47
|
+
|
|
48
|
+
return this.isStackNode ? this.assign( params[ 0 ], nodeElement( ...params ) ) : this.assign( nodeElement( this, ...params ) );
|
|
49
|
+
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
29
54
|
}
|
|
30
55
|
|
|
31
56
|
const parseSwizzle = ( props ) => props.replace( /r|s/g, 'x' ).replace( /g|t/g, 'y' ).replace( /b|p/g, 'z' ).replace( /a|q/g, 'w' );
|
|
32
57
|
const parseSwizzleAndSort = ( props ) => parseSwizzle( props ).split( '' ).sort().join( '' );
|
|
33
58
|
|
|
34
|
-
|
|
59
|
+
Node.prototype.assign = function ( ...params ) {
|
|
60
|
+
|
|
61
|
+
if ( this.isStackNode !== true ) {
|
|
62
|
+
|
|
63
|
+
if ( currentStack !== null ) {
|
|
64
|
+
|
|
65
|
+
currentStack.assign( this, ...params );
|
|
66
|
+
|
|
67
|
+
} else {
|
|
68
|
+
|
|
69
|
+
error( 'TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().' );
|
|
35
70
|
|
|
36
|
-
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return this;
|
|
37
74
|
|
|
38
|
-
|
|
75
|
+
} else {
|
|
39
76
|
|
|
40
|
-
|
|
77
|
+
const nodeElement = NodeElements.get( 'assign' );
|
|
41
78
|
|
|
42
|
-
|
|
79
|
+
return this.addToStack( nodeElement( ...params ) );
|
|
43
80
|
|
|
44
|
-
|
|
81
|
+
}
|
|
45
82
|
|
|
46
|
-
|
|
83
|
+
};
|
|
47
84
|
|
|
48
|
-
|
|
85
|
+
Node.prototype.toVarIntent = function () {
|
|
49
86
|
|
|
50
|
-
|
|
87
|
+
return this;
|
|
51
88
|
|
|
52
|
-
|
|
89
|
+
};
|
|
53
90
|
|
|
54
|
-
|
|
91
|
+
Node.prototype.get = function ( value ) {
|
|
55
92
|
|
|
56
|
-
|
|
93
|
+
return new MemberNode( this, value );
|
|
94
|
+
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Cache prototype for TSL
|
|
98
|
+
|
|
99
|
+
const proto = {};
|
|
100
|
+
|
|
101
|
+
// Set swizzle properties for xyzw, rgba, and stpq.
|
|
102
|
+
|
|
103
|
+
function setProtoSwizzle( property, altA, altB ) {
|
|
104
|
+
|
|
105
|
+
// swizzle properties
|
|
106
|
+
|
|
107
|
+
proto[ property ] = proto[ altA ] = proto[ altB ] = {
|
|
108
|
+
|
|
109
|
+
get() {
|
|
57
110
|
|
|
58
|
-
|
|
111
|
+
this._cache = this._cache || {};
|
|
59
112
|
|
|
60
|
-
|
|
113
|
+
//
|
|
61
114
|
|
|
62
|
-
|
|
115
|
+
let split = this._cache[ property ];
|
|
63
116
|
|
|
64
|
-
|
|
117
|
+
if ( split === undefined ) {
|
|
65
118
|
|
|
66
|
-
|
|
119
|
+
split = new SplitNode( this, property );
|
|
67
120
|
|
|
68
|
-
|
|
121
|
+
this._cache[ property ] = split;
|
|
69
122
|
|
|
70
|
-
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return split;
|
|
126
|
+
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
set( value ) {
|
|
130
|
+
|
|
131
|
+
this[ property ].assign( nodeObject( value ) );
|
|
71
132
|
|
|
72
|
-
|
|
133
|
+
}
|
|
73
134
|
|
|
74
|
-
|
|
135
|
+
};
|
|
75
136
|
|
|
76
|
-
|
|
137
|
+
// set properties ( swizzle ) and sort to xyzw sequence
|
|
77
138
|
|
|
78
|
-
|
|
139
|
+
const propUpper = property.toUpperCase();
|
|
140
|
+
const altAUpper = altA.toUpperCase();
|
|
141
|
+
const altBUpper = altB.toUpperCase();
|
|
79
142
|
|
|
80
|
-
|
|
143
|
+
// Set methods for swizzle properties
|
|
81
144
|
|
|
82
|
-
|
|
145
|
+
Node.prototype[ 'set' + propUpper ] = Node.prototype[ 'set' + altAUpper ] = Node.prototype[ 'set' + altBUpper ] = function ( value ) {
|
|
83
146
|
|
|
84
|
-
|
|
147
|
+
const swizzle = parseSwizzleAndSort( property );
|
|
85
148
|
|
|
86
|
-
|
|
149
|
+
return new SetNode( this, swizzle, nodeObject( value ) );
|
|
87
150
|
|
|
88
|
-
|
|
151
|
+
};
|
|
89
152
|
|
|
90
|
-
|
|
153
|
+
// Set methods for flip properties
|
|
91
154
|
|
|
92
|
-
|
|
155
|
+
Node.prototype[ 'flip' + propUpper ] = Node.prototype[ 'flip' + altAUpper ] = Node.prototype[ 'flip' + altBUpper ] = function () {
|
|
93
156
|
|
|
94
|
-
|
|
157
|
+
const swizzle = parseSwizzleAndSort( property );
|
|
95
158
|
|
|
96
|
-
|
|
159
|
+
return new FlipNode( this, swizzle );
|
|
97
160
|
|
|
98
|
-
|
|
161
|
+
};
|
|
99
162
|
|
|
100
|
-
|
|
163
|
+
}
|
|
101
164
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
165
|
+
const swizzleA = [ 'x', 'y', 'z', 'w' ];
|
|
166
|
+
const swizzleB = [ 'r', 'g', 'b', 'a' ];
|
|
167
|
+
const swizzleC = [ 's', 't', 'p', 'q' ];
|
|
105
168
|
|
|
106
|
-
|
|
169
|
+
for ( let a = 0; a < 4; a ++ ) {
|
|
107
170
|
|
|
108
|
-
|
|
171
|
+
let prop = swizzleA[ a ];
|
|
172
|
+
let altA = swizzleB[ a ];
|
|
173
|
+
let altB = swizzleC[ a ];
|
|
109
174
|
|
|
110
|
-
|
|
175
|
+
setProtoSwizzle( prop, altA, altB );
|
|
111
176
|
|
|
112
|
-
|
|
177
|
+
for ( let b = 0; b < 4; b ++ ) {
|
|
113
178
|
|
|
114
|
-
|
|
179
|
+
prop = swizzleA[ a ] + swizzleA[ b ];
|
|
180
|
+
altA = swizzleB[ a ] + swizzleB[ b ];
|
|
181
|
+
altB = swizzleC[ a ] + swizzleC[ b ];
|
|
115
182
|
|
|
116
|
-
|
|
183
|
+
setProtoSwizzle( prop, altA, altB );
|
|
117
184
|
|
|
118
|
-
|
|
185
|
+
for ( let c = 0; c < 4; c ++ ) {
|
|
186
|
+
|
|
187
|
+
prop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ];
|
|
188
|
+
altA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ];
|
|
189
|
+
altB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ];
|
|
190
|
+
|
|
191
|
+
setProtoSwizzle( prop, altA, altB );
|
|
192
|
+
|
|
193
|
+
for ( let d = 0; d < 4; d ++ ) {
|
|
194
|
+
|
|
195
|
+
prop = swizzleA[ a ] + swizzleA[ b ] + swizzleA[ c ] + swizzleA[ d ];
|
|
196
|
+
altA = swizzleB[ a ] + swizzleB[ b ] + swizzleB[ c ] + swizzleB[ d ];
|
|
197
|
+
altB = swizzleC[ a ] + swizzleC[ b ] + swizzleC[ c ] + swizzleC[ d ];
|
|
198
|
+
|
|
199
|
+
setProtoSwizzle( prop, altA, altB );
|
|
119
200
|
|
|
120
201
|
}
|
|
121
202
|
|
|
122
203
|
}
|
|
123
204
|
|
|
124
|
-
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Set/get static properties for array elements (0-31).
|
|
125
210
|
|
|
126
|
-
|
|
211
|
+
for ( let i = 0; i < 32; i ++ ) {
|
|
127
212
|
|
|
128
|
-
|
|
213
|
+
proto[ i ] = {
|
|
129
214
|
|
|
130
|
-
|
|
215
|
+
get() {
|
|
131
216
|
|
|
132
|
-
|
|
217
|
+
this._cache = this._cache || {};
|
|
133
218
|
|
|
134
|
-
|
|
219
|
+
//
|
|
135
220
|
|
|
136
|
-
|
|
221
|
+
let element = this._cache[ i ];
|
|
137
222
|
|
|
138
|
-
|
|
223
|
+
if ( element === undefined ) {
|
|
224
|
+
|
|
225
|
+
element = new ArrayElementNode( this, new ConstNode( i, 'uint' ) );
|
|
226
|
+
|
|
227
|
+
this._cache[ i ] = element;
|
|
139
228
|
|
|
140
229
|
}
|
|
141
230
|
|
|
231
|
+
return element;
|
|
232
|
+
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
set( value ) {
|
|
236
|
+
|
|
237
|
+
this[ i ].assign( nodeObject( value ) );
|
|
238
|
+
|
|
142
239
|
}
|
|
143
240
|
|
|
144
|
-
|
|
241
|
+
};
|
|
145
242
|
|
|
146
|
-
|
|
243
|
+
}
|
|
147
244
|
|
|
148
|
-
|
|
245
|
+
/*
|
|
246
|
+
// Set properties for width, height, and depth.
|
|
149
247
|
|
|
150
|
-
|
|
151
|
-
const nodeBuilderFunctionsCacheMap = new WeakMap();
|
|
248
|
+
function setProtoProperty( property, target ) {
|
|
152
249
|
|
|
153
|
-
|
|
250
|
+
proto[ property ] = {
|
|
154
251
|
|
|
155
|
-
|
|
252
|
+
get() {
|
|
156
253
|
|
|
157
|
-
|
|
254
|
+
this._cache = this._cache || {};
|
|
255
|
+
|
|
256
|
+
//
|
|
158
257
|
|
|
159
|
-
|
|
258
|
+
let split = this._cache[ target ];
|
|
160
259
|
|
|
161
|
-
|
|
260
|
+
if ( split === undefined ) {
|
|
261
|
+
|
|
262
|
+
split = new SplitNode( this, target );
|
|
263
|
+
|
|
264
|
+
this._cache[ target ] = split;
|
|
265
|
+
|
|
266
|
+
}
|
|
162
267
|
|
|
163
|
-
|
|
268
|
+
return split;
|
|
164
269
|
|
|
165
|
-
|
|
166
|
-
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
set( value ) {
|
|
273
|
+
|
|
274
|
+
this[ target ].assign( nodeObject( value ) );
|
|
167
275
|
|
|
168
276
|
}
|
|
169
277
|
|
|
170
|
-
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
setProtoProperty( 'width', 'x' );
|
|
283
|
+
setProtoProperty( 'height', 'y' );
|
|
284
|
+
setProtoProperty( 'depth', 'z' );
|
|
285
|
+
*/
|
|
286
|
+
|
|
287
|
+
Object.defineProperties( Node.prototype, proto );
|
|
288
|
+
|
|
289
|
+
// --- FINISH ---
|
|
290
|
+
|
|
291
|
+
const nodeBuilderFunctionsCacheMap = new WeakMap();
|
|
292
|
+
|
|
293
|
+
const ShaderNodeObject = function ( obj, altType = null ) {
|
|
294
|
+
|
|
295
|
+
const type = getValueType( obj );
|
|
296
|
+
|
|
297
|
+
if ( type === 'node' ) {
|
|
298
|
+
|
|
299
|
+
return obj;
|
|
171
300
|
|
|
172
301
|
} else if ( ( altType === null && ( type === 'float' || type === 'boolean' ) ) || ( type && type !== 'shader' && type !== 'string' ) ) {
|
|
173
302
|
|
|
@@ -175,7 +304,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
|
|
|
175
304
|
|
|
176
305
|
} else if ( type === 'shader' ) {
|
|
177
306
|
|
|
178
|
-
return Fn( obj );
|
|
307
|
+
return obj.isFn ? obj : Fn( obj );
|
|
179
308
|
|
|
180
309
|
}
|
|
181
310
|
|
|
@@ -211,7 +340,28 @@ const ShaderNodeArray = function ( array, altType = null ) {
|
|
|
211
340
|
|
|
212
341
|
const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, settings = null ) {
|
|
213
342
|
|
|
214
|
-
|
|
343
|
+
function assignNode( node ) {
|
|
344
|
+
|
|
345
|
+
if ( settings !== null ) {
|
|
346
|
+
|
|
347
|
+
node = nodeObject( Object.assign( node, settings ) );
|
|
348
|
+
|
|
349
|
+
if ( settings.intent === true ) {
|
|
350
|
+
|
|
351
|
+
node = node.toVarIntent();
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
} else {
|
|
356
|
+
|
|
357
|
+
node = nodeObject( node );
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return node;
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
}
|
|
215
365
|
|
|
216
366
|
let fn, name = scope, minParams, maxParams;
|
|
217
367
|
|
|
@@ -224,13 +374,13 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
224
374
|
|
|
225
375
|
if ( minParams !== undefined && params.length < minParams ) {
|
|
226
376
|
|
|
227
|
-
|
|
377
|
+
error( `TSL: "${ tslName }" parameter length is less than minimum required.` );
|
|
228
378
|
|
|
229
379
|
return params.concat( new Array( minParams - params.length ).fill( 0 ) );
|
|
230
380
|
|
|
231
381
|
} else if ( maxParams !== undefined && params.length > maxParams ) {
|
|
232
382
|
|
|
233
|
-
|
|
383
|
+
error( `TSL: "${ tslName }" parameter length exceeds limit.` );
|
|
234
384
|
|
|
235
385
|
return params.slice( 0, maxParams );
|
|
236
386
|
|
|
@@ -297,12 +447,12 @@ const ShaderNodeImmutable = function ( NodeClass, ...params ) {
|
|
|
297
447
|
|
|
298
448
|
class ShaderCallNodeInternal extends Node {
|
|
299
449
|
|
|
300
|
-
constructor( shaderNode,
|
|
450
|
+
constructor( shaderNode, rawInputs ) {
|
|
301
451
|
|
|
302
452
|
super();
|
|
303
453
|
|
|
304
454
|
this.shaderNode = shaderNode;
|
|
305
|
-
this.
|
|
455
|
+
this.rawInputs = rawInputs;
|
|
306
456
|
|
|
307
457
|
this.isShaderCallNodeInternal = true;
|
|
308
458
|
|
|
@@ -314,6 +464,12 @@ class ShaderCallNodeInternal extends Node {
|
|
|
314
464
|
|
|
315
465
|
}
|
|
316
466
|
|
|
467
|
+
getElementType( builder ) {
|
|
468
|
+
|
|
469
|
+
return this.getOutputNode( builder ).getElementType( builder );
|
|
470
|
+
|
|
471
|
+
}
|
|
472
|
+
|
|
317
473
|
getMemberType( builder, name ) {
|
|
318
474
|
|
|
319
475
|
return this.getOutputNode( builder ).getMemberType( builder, name );
|
|
@@ -322,19 +478,27 @@ class ShaderCallNodeInternal extends Node {
|
|
|
322
478
|
|
|
323
479
|
call( builder ) {
|
|
324
480
|
|
|
325
|
-
const { shaderNode,
|
|
481
|
+
const { shaderNode, rawInputs } = this;
|
|
326
482
|
|
|
327
483
|
const properties = builder.getNodeProperties( shaderNode );
|
|
328
|
-
const onceNS = shaderNode.namespace && shaderNode.namespace === builder.namespace ? builder.getNamespace( 'once' ) : 'once';
|
|
329
484
|
|
|
330
|
-
|
|
485
|
+
const subBuild = builder.getClosestSubBuild( shaderNode.subBuilds ) || '';
|
|
486
|
+
const subBuildProperty = subBuild || 'default';
|
|
331
487
|
|
|
332
|
-
|
|
488
|
+
if ( properties[ subBuildProperty ] ) {
|
|
489
|
+
|
|
490
|
+
return properties[ subBuildProperty ];
|
|
333
491
|
|
|
334
492
|
}
|
|
335
493
|
|
|
336
494
|
//
|
|
337
495
|
|
|
496
|
+
const previousSubBuildFn = builder.subBuildFn;
|
|
497
|
+
const previousFnCall = builder.fnCall;
|
|
498
|
+
|
|
499
|
+
builder.subBuildFn = subBuild;
|
|
500
|
+
builder.fnCall = this;
|
|
501
|
+
|
|
338
502
|
let result = null;
|
|
339
503
|
|
|
340
504
|
if ( shaderNode.layout ) {
|
|
@@ -361,20 +525,59 @@ class ShaderCallNodeInternal extends Node {
|
|
|
361
525
|
|
|
362
526
|
builder.addInclude( functionNode );
|
|
363
527
|
|
|
364
|
-
|
|
528
|
+
//
|
|
529
|
+
|
|
530
|
+
const inputs = rawInputs ? getLayoutParameters( rawInputs ) : null;
|
|
531
|
+
|
|
532
|
+
result = nodeObject( functionNode.call( inputs ) );
|
|
365
533
|
|
|
366
534
|
} else {
|
|
367
535
|
|
|
536
|
+
const secureNodeBuilder = new Proxy( builder, {
|
|
537
|
+
|
|
538
|
+
get: ( target, property, receiver ) => {
|
|
539
|
+
|
|
540
|
+
let value;
|
|
541
|
+
|
|
542
|
+
if ( Symbol.iterator === property ) {
|
|
543
|
+
|
|
544
|
+
value = function* () {
|
|
545
|
+
|
|
546
|
+
yield undefined;
|
|
547
|
+
|
|
548
|
+
};
|
|
549
|
+
|
|
550
|
+
} else {
|
|
551
|
+
|
|
552
|
+
value = Reflect.get( target, property, receiver );
|
|
553
|
+
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
return value;
|
|
557
|
+
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
} );
|
|
561
|
+
|
|
562
|
+
//
|
|
563
|
+
|
|
564
|
+
const inputs = rawInputs ? getProxyParameters( rawInputs ) : null;
|
|
565
|
+
|
|
566
|
+
const hasParameters = Array.isArray( rawInputs ) ? rawInputs.length > 0 : rawInputs !== null;
|
|
567
|
+
|
|
368
568
|
const jsFunc = shaderNode.jsFunc;
|
|
369
|
-
const outputNode =
|
|
569
|
+
const outputNode = hasParameters || jsFunc.length > 1 ? jsFunc( inputs, secureNodeBuilder ) : jsFunc( secureNodeBuilder );
|
|
370
570
|
|
|
371
571
|
result = nodeObject( outputNode );
|
|
372
572
|
|
|
373
573
|
}
|
|
374
574
|
|
|
575
|
+
builder.subBuildFn = previousSubBuildFn;
|
|
576
|
+
builder.fnCall = previousFnCall;
|
|
577
|
+
|
|
375
578
|
if ( shaderNode.once ) {
|
|
376
579
|
|
|
377
|
-
properties[
|
|
580
|
+
properties[ subBuildProperty ] = result;
|
|
378
581
|
|
|
379
582
|
}
|
|
380
583
|
|
|
@@ -395,11 +598,12 @@ class ShaderCallNodeInternal extends Node {
|
|
|
395
598
|
getOutputNode( builder ) {
|
|
396
599
|
|
|
397
600
|
const properties = builder.getNodeProperties( this );
|
|
398
|
-
const
|
|
601
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
399
602
|
|
|
400
|
-
properties[
|
|
603
|
+
properties[ subBuildOutput ] = properties[ subBuildOutput ] || this.setupOutput( builder );
|
|
604
|
+
properties[ subBuildOutput ].subBuild = builder.getClosestSubBuild( this );
|
|
401
605
|
|
|
402
|
-
return properties[
|
|
606
|
+
return properties[ subBuildOutput ];
|
|
403
607
|
|
|
404
608
|
}
|
|
405
609
|
|
|
@@ -410,23 +614,49 @@ class ShaderCallNodeInternal extends Node {
|
|
|
410
614
|
const buildStage = builder.getBuildStage();
|
|
411
615
|
const properties = builder.getNodeProperties( this );
|
|
412
616
|
|
|
413
|
-
const
|
|
617
|
+
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
414
618
|
const outputNode = this.getOutputNode( builder );
|
|
415
619
|
|
|
620
|
+
const previousFnCall = builder.fnCall;
|
|
621
|
+
|
|
622
|
+
builder.fnCall = this;
|
|
623
|
+
|
|
416
624
|
if ( buildStage === 'setup' ) {
|
|
417
625
|
|
|
418
|
-
const
|
|
626
|
+
const subBuildInitialized = builder.getSubBuildProperty( 'initialized', this );
|
|
627
|
+
|
|
628
|
+
if ( properties[ subBuildInitialized ] !== true ) {
|
|
629
|
+
|
|
630
|
+
properties[ subBuildInitialized ] = true;
|
|
631
|
+
|
|
632
|
+
properties[ subBuildOutput ] = this.getOutputNode( builder );
|
|
633
|
+
properties[ subBuildOutput ].build( builder );
|
|
634
|
+
|
|
635
|
+
// If the shaderNode has subBuilds, add them to the chaining nodes
|
|
636
|
+
// so they can be built later in the build process.
|
|
637
|
+
|
|
638
|
+
if ( this.shaderNode.subBuilds ) {
|
|
639
|
+
|
|
640
|
+
for ( const node of builder.chaining ) {
|
|
419
641
|
|
|
420
|
-
|
|
642
|
+
const nodeData = builder.getDataFromNode( node, 'any' );
|
|
643
|
+
nodeData.subBuilds = nodeData.subBuilds || new Set();
|
|
421
644
|
|
|
422
|
-
|
|
645
|
+
for ( const subBuild of this.shaderNode.subBuilds ) {
|
|
423
646
|
|
|
424
|
-
|
|
425
|
-
|
|
647
|
+
nodeData.subBuilds.add( subBuild );
|
|
648
|
+
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
//builder.getDataFromNode( node ).subBuilds = nodeData.subBuilds;
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
}
|
|
426
656
|
|
|
427
657
|
}
|
|
428
658
|
|
|
429
|
-
result = properties[
|
|
659
|
+
result = properties[ subBuildOutput ];
|
|
430
660
|
|
|
431
661
|
} else if ( buildStage === 'analyze' ) {
|
|
432
662
|
|
|
@@ -438,12 +668,118 @@ class ShaderCallNodeInternal extends Node {
|
|
|
438
668
|
|
|
439
669
|
}
|
|
440
670
|
|
|
671
|
+
builder.fnCall = previousFnCall;
|
|
672
|
+
|
|
441
673
|
return result;
|
|
442
674
|
|
|
443
675
|
}
|
|
444
676
|
|
|
445
677
|
}
|
|
446
678
|
|
|
679
|
+
function getLayoutParameters( params ) {
|
|
680
|
+
|
|
681
|
+
let output;
|
|
682
|
+
|
|
683
|
+
nodeObjects( params );
|
|
684
|
+
|
|
685
|
+
const isArrayAsParameter = params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype );
|
|
686
|
+
|
|
687
|
+
if ( isArrayAsParameter ) {
|
|
688
|
+
|
|
689
|
+
output = [ ...params ];
|
|
690
|
+
|
|
691
|
+
} else {
|
|
692
|
+
|
|
693
|
+
output = params[ 0 ];
|
|
694
|
+
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return output;
|
|
698
|
+
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
function getProxyParameters( params ) {
|
|
702
|
+
|
|
703
|
+
let index = 0;
|
|
704
|
+
|
|
705
|
+
nodeObjects( params );
|
|
706
|
+
|
|
707
|
+
return new Proxy( params, {
|
|
708
|
+
|
|
709
|
+
get: ( target, property, receiver ) => {
|
|
710
|
+
|
|
711
|
+
let value;
|
|
712
|
+
|
|
713
|
+
if ( property === 'length' ) {
|
|
714
|
+
|
|
715
|
+
value = params.length;
|
|
716
|
+
|
|
717
|
+
return value;
|
|
718
|
+
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
if ( Symbol.iterator === property ) {
|
|
722
|
+
|
|
723
|
+
value = function* () {
|
|
724
|
+
|
|
725
|
+
for ( const inputNode of params ) {
|
|
726
|
+
|
|
727
|
+
yield nodeObject( inputNode );
|
|
728
|
+
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
};
|
|
732
|
+
|
|
733
|
+
} else {
|
|
734
|
+
|
|
735
|
+
if ( params.length > 0 ) {
|
|
736
|
+
|
|
737
|
+
if ( Object.getPrototypeOf( params[ 0 ] ) === Object.prototype ) {
|
|
738
|
+
|
|
739
|
+
const objectTarget = params[ 0 ];
|
|
740
|
+
|
|
741
|
+
if ( objectTarget[ property ] === undefined ) {
|
|
742
|
+
|
|
743
|
+
value = objectTarget[ index ++ ];
|
|
744
|
+
|
|
745
|
+
} else {
|
|
746
|
+
|
|
747
|
+
value = Reflect.get( objectTarget, property, receiver );
|
|
748
|
+
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
} else if ( params[ 0 ] instanceof Node ) {
|
|
752
|
+
|
|
753
|
+
if ( params[ property ] === undefined ) {
|
|
754
|
+
|
|
755
|
+
value = params[ index ++ ];
|
|
756
|
+
|
|
757
|
+
} else {
|
|
758
|
+
|
|
759
|
+
value = Reflect.get( params, property, receiver );
|
|
760
|
+
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
} else {
|
|
766
|
+
|
|
767
|
+
value = Reflect.get( target, property, receiver );
|
|
768
|
+
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
value = nodeObject( value );
|
|
772
|
+
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
return value;
|
|
776
|
+
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
} );
|
|
780
|
+
|
|
781
|
+
}
|
|
782
|
+
|
|
447
783
|
class ShaderNodeInternal extends Node {
|
|
448
784
|
|
|
449
785
|
constructor( jsFunc, nodeType ) {
|
|
@@ -456,7 +792,6 @@ class ShaderNodeInternal extends Node {
|
|
|
456
792
|
this.global = true;
|
|
457
793
|
|
|
458
794
|
this.once = false;
|
|
459
|
-
this.namespace = null;
|
|
460
795
|
|
|
461
796
|
}
|
|
462
797
|
|
|
@@ -468,11 +803,15 @@ class ShaderNodeInternal extends Node {
|
|
|
468
803
|
|
|
469
804
|
}
|
|
470
805
|
|
|
471
|
-
|
|
806
|
+
getLayout() {
|
|
472
807
|
|
|
473
|
-
|
|
808
|
+
return this.layout;
|
|
474
809
|
|
|
475
|
-
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
call( rawInputs = null ) {
|
|
813
|
+
|
|
814
|
+
return new ShaderCallNodeInternal( this, rawInputs );
|
|
476
815
|
|
|
477
816
|
}
|
|
478
817
|
|
|
@@ -524,25 +863,29 @@ const getConstNode = ( value, type ) => {
|
|
|
524
863
|
|
|
525
864
|
};
|
|
526
865
|
|
|
527
|
-
const
|
|
866
|
+
const ConvertType = function ( type, cacheMap = null ) {
|
|
528
867
|
|
|
529
|
-
|
|
868
|
+
return ( ...params ) => {
|
|
530
869
|
|
|
531
|
-
|
|
870
|
+
for ( const param of params ) {
|
|
532
871
|
|
|
533
|
-
|
|
872
|
+
if ( param === undefined ) {
|
|
534
873
|
|
|
535
|
-
|
|
874
|
+
error( `TSL: Invalid parameter for the type "${ type }".` );
|
|
536
875
|
|
|
537
|
-
|
|
876
|
+
return nodeObject( new ConstNode( 0, type ) );
|
|
538
877
|
|
|
539
|
-
}
|
|
878
|
+
}
|
|
540
879
|
|
|
541
|
-
|
|
880
|
+
}
|
|
542
881
|
|
|
543
|
-
|
|
882
|
+
if ( params.length === 0 || ( ! [ 'bool', 'float', 'int', 'uint' ].includes( type ) && params.every( param => {
|
|
883
|
+
|
|
884
|
+
const paramType = typeof param;
|
|
885
|
+
|
|
886
|
+
return paramType !== 'object' && paramType !== 'function';
|
|
544
887
|
|
|
545
|
-
|
|
888
|
+
} ) ) ) {
|
|
546
889
|
|
|
547
890
|
params = [ getValueFromType( type, ...params ) ];
|
|
548
891
|
|
|
@@ -550,20 +893,20 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
550
893
|
|
|
551
894
|
if ( params.length === 1 && cacheMap !== null && cacheMap.has( params[ 0 ] ) ) {
|
|
552
895
|
|
|
553
|
-
return
|
|
896
|
+
return nodeObjectIntent( cacheMap.get( params[ 0 ] ) );
|
|
554
897
|
|
|
555
898
|
}
|
|
556
899
|
|
|
557
900
|
if ( params.length === 1 ) {
|
|
558
901
|
|
|
559
902
|
const node = getConstNode( params[ 0 ], type );
|
|
560
|
-
if (
|
|
561
|
-
return
|
|
903
|
+
if ( node.nodeType === type ) return nodeObjectIntent( node );
|
|
904
|
+
return nodeObjectIntent( new ConvertNode( node, type ) );
|
|
562
905
|
|
|
563
906
|
}
|
|
564
907
|
|
|
565
908
|
const nodes = params.map( param => getConstNode( param ) );
|
|
566
|
-
return
|
|
909
|
+
return nodeObjectIntent( new JoinNode( nodes, type ) );
|
|
567
910
|
|
|
568
911
|
};
|
|
569
912
|
|
|
@@ -581,129 +924,161 @@ export const getConstNodeType = ( value ) => ( value !== undefined && value !==
|
|
|
581
924
|
|
|
582
925
|
export function ShaderNode( jsFunc, nodeType ) {
|
|
583
926
|
|
|
584
|
-
return new
|
|
927
|
+
return new ShaderNodeInternal( jsFunc, nodeType );
|
|
585
928
|
|
|
586
929
|
}
|
|
587
930
|
|
|
588
931
|
export const nodeObject = ( val, altType = null ) => /* new */ ShaderNodeObject( val, altType );
|
|
932
|
+
export const nodeObjectIntent = ( val, altType = null ) => /* new */ nodeObject( val, altType ).toVarIntent();
|
|
589
933
|
export const nodeObjects = ( val, altType = null ) => new ShaderNodeObjects( val, altType );
|
|
590
934
|
export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, altType );
|
|
591
|
-
export const nodeProxy = (
|
|
592
|
-
export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
|
|
935
|
+
export const nodeProxy = ( NodeClass, scope = null, factor = null, settings = null ) => new ShaderNodeProxy( NodeClass, scope, factor, settings );
|
|
936
|
+
export const nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );
|
|
937
|
+
export const nodeProxyIntent = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { ...settings, intent: true } );
|
|
593
938
|
|
|
594
939
|
let fnId = 0;
|
|
595
940
|
|
|
596
|
-
|
|
941
|
+
class FnNode extends Node {
|
|
597
942
|
|
|
598
|
-
|
|
943
|
+
constructor( jsFunc, layout = null ) {
|
|
599
944
|
|
|
600
|
-
|
|
945
|
+
super();
|
|
601
946
|
|
|
602
|
-
|
|
947
|
+
let nodeType = null;
|
|
603
948
|
|
|
604
|
-
|
|
949
|
+
if ( layout !== null ) {
|
|
605
950
|
|
|
606
|
-
|
|
951
|
+
if ( typeof layout === 'object' ) {
|
|
607
952
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
nodeType = layout;
|
|
953
|
+
nodeType = layout.return;
|
|
611
954
|
|
|
612
955
|
} else {
|
|
613
956
|
|
|
614
|
-
|
|
957
|
+
if ( typeof layout === 'string' ) {
|
|
958
|
+
|
|
959
|
+
nodeType = layout;
|
|
960
|
+
|
|
961
|
+
} else {
|
|
962
|
+
|
|
963
|
+
error( 'TSL: Invalid layout type.' );
|
|
964
|
+
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
layout = null;
|
|
615
968
|
|
|
616
969
|
}
|
|
617
970
|
|
|
618
|
-
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
this.shaderNode = new ShaderNode( jsFunc, nodeType );
|
|
974
|
+
|
|
975
|
+
if ( layout !== null ) {
|
|
976
|
+
|
|
977
|
+
this.setLayout( layout );
|
|
619
978
|
|
|
620
979
|
}
|
|
621
980
|
|
|
981
|
+
this.isFn = true;
|
|
982
|
+
|
|
622
983
|
}
|
|
623
984
|
|
|
624
|
-
|
|
985
|
+
setLayout( layout ) {
|
|
625
986
|
|
|
626
|
-
|
|
987
|
+
const nodeType = this.shaderNode.nodeType;
|
|
627
988
|
|
|
628
|
-
|
|
989
|
+
if ( typeof layout.inputs !== 'object' ) {
|
|
629
990
|
|
|
630
|
-
|
|
991
|
+
const fullLayout = {
|
|
992
|
+
name: 'fn' + fnId ++,
|
|
993
|
+
type: nodeType,
|
|
994
|
+
inputs: []
|
|
995
|
+
};
|
|
631
996
|
|
|
632
|
-
|
|
997
|
+
for ( const name in layout ) {
|
|
633
998
|
|
|
634
|
-
|
|
999
|
+
if ( name === 'return' ) continue;
|
|
635
1000
|
|
|
636
|
-
|
|
1001
|
+
fullLayout.inputs.push( {
|
|
1002
|
+
name: name,
|
|
1003
|
+
type: layout[ name ]
|
|
1004
|
+
} );
|
|
637
1005
|
|
|
638
|
-
|
|
1006
|
+
}
|
|
639
1007
|
|
|
640
|
-
|
|
1008
|
+
layout = fullLayout;
|
|
641
1009
|
|
|
642
1010
|
}
|
|
643
1011
|
|
|
644
|
-
|
|
1012
|
+
this.shaderNode.setLayout( layout );
|
|
645
1013
|
|
|
646
|
-
|
|
1014
|
+
return this;
|
|
647
1015
|
|
|
648
|
-
|
|
1016
|
+
}
|
|
649
1017
|
|
|
650
|
-
|
|
1018
|
+
getNodeType( builder ) {
|
|
651
1019
|
|
|
652
|
-
|
|
653
|
-
fn.id = shaderNode.id;
|
|
1020
|
+
return this.shaderNode.getNodeType( builder ) || 'float';
|
|
654
1021
|
|
|
655
|
-
|
|
656
|
-
fn.getCacheKey = ( ...params ) => shaderNode.getCacheKey( ...params );
|
|
1022
|
+
}
|
|
657
1023
|
|
|
658
|
-
|
|
1024
|
+
call( ...params ) {
|
|
659
1025
|
|
|
660
|
-
shaderNode.
|
|
1026
|
+
const fnCall = this.shaderNode.call( params );
|
|
661
1027
|
|
|
662
|
-
|
|
1028
|
+
if ( this.shaderNode.nodeType === 'void' ) fnCall.toStack();
|
|
663
1029
|
|
|
664
|
-
|
|
1030
|
+
return fnCall.toVarIntent();
|
|
665
1031
|
|
|
666
|
-
|
|
1032
|
+
}
|
|
667
1033
|
|
|
668
|
-
|
|
669
|
-
shaderNode.namespace = namespace;
|
|
1034
|
+
once( subBuilds = null ) {
|
|
670
1035
|
|
|
671
|
-
|
|
1036
|
+
this.shaderNode.once = true;
|
|
1037
|
+
this.shaderNode.subBuilds = subBuilds;
|
|
672
1038
|
|
|
673
|
-
|
|
1039
|
+
return this;
|
|
674
1040
|
|
|
675
|
-
|
|
1041
|
+
}
|
|
676
1042
|
|
|
677
|
-
|
|
1043
|
+
generate( builder ) {
|
|
678
1044
|
|
|
679
|
-
|
|
680
|
-
name: 'fn' + fnId ++,
|
|
681
|
-
type: nodeType,
|
|
682
|
-
inputs: []
|
|
683
|
-
};
|
|
1045
|
+
const type = this.getNodeType( builder );
|
|
684
1046
|
|
|
685
|
-
|
|
1047
|
+
error( 'TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".' );
|
|
686
1048
|
|
|
687
|
-
|
|
1049
|
+
return builder.generateConst( type );
|
|
688
1050
|
|
|
689
|
-
|
|
690
|
-
name: name,
|
|
691
|
-
type: layout[ name ]
|
|
692
|
-
} );
|
|
1051
|
+
}
|
|
693
1052
|
|
|
694
|
-
|
|
1053
|
+
}
|
|
695
1054
|
|
|
696
|
-
|
|
1055
|
+
export function Fn( jsFunc, layout = null ) {
|
|
697
1056
|
|
|
698
|
-
|
|
1057
|
+
const instance = new FnNode( jsFunc, layout );
|
|
699
1058
|
|
|
700
|
-
|
|
1059
|
+
return new Proxy( () => {}, {
|
|
701
1060
|
|
|
702
|
-
|
|
1061
|
+
apply( target, thisArg, params ) {
|
|
703
1062
|
|
|
704
|
-
|
|
1063
|
+
return instance.call( ...params );
|
|
705
1064
|
|
|
706
|
-
}
|
|
1065
|
+
},
|
|
1066
|
+
|
|
1067
|
+
get( target, prop, receiver ) {
|
|
1068
|
+
|
|
1069
|
+
return Reflect.get( instance, prop, receiver );
|
|
1070
|
+
|
|
1071
|
+
},
|
|
1072
|
+
|
|
1073
|
+
set( target, prop, value, receiver ) {
|
|
1074
|
+
|
|
1075
|
+
return Reflect.set( instance, prop, value, receiver );
|
|
1076
|
+
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
} );
|
|
1080
|
+
|
|
1081
|
+
}
|
|
707
1082
|
|
|
708
1083
|
//
|
|
709
1084
|
|
|
@@ -760,7 +1135,7 @@ export const Switch = ( ...params ) => currentStack.Switch( ...params );
|
|
|
760
1135
|
*/
|
|
761
1136
|
export function Stack( node ) {
|
|
762
1137
|
|
|
763
|
-
if ( currentStack ) currentStack.
|
|
1138
|
+
if ( currentStack ) currentStack.addToStack( node );
|
|
764
1139
|
|
|
765
1140
|
return node;
|
|
766
1141
|
|
|
@@ -841,29 +1216,14 @@ addMethodChaining( 'convert', convert );
|
|
|
841
1216
|
*/
|
|
842
1217
|
export const append = ( node ) => { // @deprecated, r176
|
|
843
1218
|
|
|
844
|
-
|
|
1219
|
+
warn( 'TSL: append() has been renamed to Stack().' );
|
|
845
1220
|
return Stack( node );
|
|
846
1221
|
|
|
847
1222
|
};
|
|
848
1223
|
|
|
849
1224
|
addMethodChaining( 'append', ( node ) => { // @deprecated, r176
|
|
850
1225
|
|
|
851
|
-
|
|
1226
|
+
warn( 'TSL: .append() has been renamed to .toStack().' );
|
|
852
1227
|
return Stack( node );
|
|
853
1228
|
|
|
854
1229
|
} );
|
|
855
|
-
|
|
856
|
-
/**
|
|
857
|
-
* @tsl
|
|
858
|
-
* @function
|
|
859
|
-
* @deprecated since r168. Use {@link Fn} instead.
|
|
860
|
-
*
|
|
861
|
-
* @param {...any} params
|
|
862
|
-
* @returns {Function}
|
|
863
|
-
*/
|
|
864
|
-
export const tslFn = ( ...params ) => { // @deprecated, r168
|
|
865
|
-
|
|
866
|
-
console.warn( 'THREE.TSL: tslFn() has been renamed to Fn().' );
|
|
867
|
-
return Fn( ...params );
|
|
868
|
-
|
|
869
|
-
};
|