@plastic-software/three 0.179.0 → 0.181.1
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/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- 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 +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- 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 +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- 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 +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- 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/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 +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- 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 +22 -5
- 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 +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -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 +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- 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 +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -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 +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -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 +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -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/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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- 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 +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -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} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- 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 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- 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 +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- 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 +48 -41
- 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 +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.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 +6 -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 +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- 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 +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -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 +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import InspectorBase from '../../renderers/common/InspectorBase.js';
|
|
3
|
+
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
import { NodeUpdateType } from './constants.js';
|
|
5
|
+
import { warnOnce } from '../../utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* InspectorNode is a wrapper node that allows inspection of node values during rendering.
|
|
9
|
+
* It can be used to debug or analyze node outputs in the rendering pipeline.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
13
|
+
class InspectorNode extends Node {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns the type of the node.
|
|
17
|
+
*
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
static get type() {
|
|
21
|
+
|
|
22
|
+
return 'InspectorNode';
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates an InspectorNode.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node} node - The node to inspect.
|
|
30
|
+
* @param {string} [name=''] - Optional name for the inspector node.
|
|
31
|
+
* @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
|
|
32
|
+
*/
|
|
33
|
+
constructor( node, name = '', callback = null ) {
|
|
34
|
+
|
|
35
|
+
super();
|
|
36
|
+
|
|
37
|
+
this.node = node;
|
|
38
|
+
this.name = name;
|
|
39
|
+
this.callback = callback;
|
|
40
|
+
|
|
41
|
+
this.updateType = NodeUpdateType.FRAME;
|
|
42
|
+
|
|
43
|
+
this.isInspectorNode = true;
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Returns the name of the inspector node.
|
|
49
|
+
*
|
|
50
|
+
* @returns {string}
|
|
51
|
+
*/
|
|
52
|
+
getName() {
|
|
53
|
+
|
|
54
|
+
return this.name || this.node.name;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Updates the inspector node, allowing inspection of the wrapped node.
|
|
60
|
+
*
|
|
61
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
62
|
+
*/
|
|
63
|
+
update( frame ) {
|
|
64
|
+
|
|
65
|
+
frame.renderer.inspector.inspect( this );
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns the type of the wrapped node.
|
|
71
|
+
*
|
|
72
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
73
|
+
* @returns {string}
|
|
74
|
+
*/
|
|
75
|
+
getNodeType( builder ) {
|
|
76
|
+
|
|
77
|
+
return this.node.getNodeType( builder );
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Sets up the inspector node.
|
|
83
|
+
*
|
|
84
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
85
|
+
* @returns {Node} The setup node.
|
|
86
|
+
*/
|
|
87
|
+
setup( builder ) {
|
|
88
|
+
|
|
89
|
+
let node = this.node;
|
|
90
|
+
|
|
91
|
+
if ( builder.context.inspector === true && this.callback !== null ) {
|
|
92
|
+
|
|
93
|
+
node = this.callback( node );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( builder.renderer.backend.isWebGPUBackend !== true && builder.renderer.inspector.constructor !== InspectorBase ) {
|
|
98
|
+
|
|
99
|
+
warnOnce( 'TSL: ".toInspector()" is only available with WebGPU.' );
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return node;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export default InspectorNode;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Creates an inspector node to wrap around a given node for inspection purposes.
|
|
113
|
+
*
|
|
114
|
+
* @tsl
|
|
115
|
+
* @param {Node} node - The node to inspect.
|
|
116
|
+
* @param {string} [name=''] - Optional name for the inspector node.
|
|
117
|
+
* @param {Function|null} [callback=null] - Optional callback to modify the node during setup.
|
|
118
|
+
* @returns {Node} The inspector node.
|
|
119
|
+
*/
|
|
120
|
+
export function inspector( node, name = '', callback = null ) {
|
|
121
|
+
|
|
122
|
+
node = nodeObject( node );
|
|
123
|
+
|
|
124
|
+
return node.before( new InspectorNode( node, name, callback ) );
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
addMethodChaining( 'toInspector', inspector );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This node can be used as a cache management component for another node.
|
|
@@ -8,11 +9,11 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
|
8
9
|
*
|
|
9
10
|
* @augments Node
|
|
10
11
|
*/
|
|
11
|
-
class
|
|
12
|
+
class IsolateNode extends Node {
|
|
12
13
|
|
|
13
14
|
static get type() {
|
|
14
15
|
|
|
15
|
-
return '
|
|
16
|
+
return 'IsolateNode';
|
|
16
17
|
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -48,7 +49,7 @@ class CacheNode extends Node {
|
|
|
48
49
|
* @readonly
|
|
49
50
|
* @default true
|
|
50
51
|
*/
|
|
51
|
-
this.
|
|
52
|
+
this.isIsolateNode = true;
|
|
52
53
|
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -82,19 +83,51 @@ class CacheNode extends Node {
|
|
|
82
83
|
|
|
83
84
|
}
|
|
84
85
|
|
|
86
|
+
setParent( parent ) {
|
|
87
|
+
|
|
88
|
+
this.parent = parent;
|
|
89
|
+
|
|
90
|
+
return this;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
getParent() {
|
|
95
|
+
|
|
96
|
+
return this.parent;
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
export default
|
|
102
|
+
export default IsolateNode;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* TSL function for creating a cache node.
|
|
106
|
+
*
|
|
107
|
+
* @tsl
|
|
108
|
+
* @function
|
|
109
|
+
* @param {Node} node - The node that should be cached.
|
|
110
|
+
* @returns {IsolateNode}
|
|
111
|
+
*/
|
|
112
|
+
export const isolate = ( node ) => new IsolateNode( nodeObject( node ) );
|
|
88
113
|
|
|
89
114
|
/**
|
|
90
115
|
* TSL function for creating a cache node.
|
|
91
116
|
*
|
|
92
117
|
* @tsl
|
|
93
118
|
* @function
|
|
119
|
+
* @deprecated
|
|
94
120
|
* @param {Node} node - The node that should be cached.
|
|
95
|
-
* @param {boolean} [parent] - Whether this node refers to a shared parent cache or not.
|
|
96
|
-
* @returns {
|
|
121
|
+
* @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
|
|
122
|
+
* @returns {IsolateNode}
|
|
97
123
|
*/
|
|
98
|
-
export
|
|
124
|
+
export function cache( node, parent = true ) {
|
|
125
|
+
|
|
126
|
+
warn( 'TSL: "cache()" has been deprecated. Use "isolate()" instead.' ); // @deprecated r181
|
|
127
|
+
|
|
128
|
+
return isolate( node ).setParent( parent );
|
|
129
|
+
|
|
130
|
+
}
|
|
99
131
|
|
|
100
132
|
addMethodChaining( 'cache', cache );
|
|
133
|
+
addMethodChaining( 'isolate', isolate );
|
package/src/nodes/core/Node.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NodeUpdateType } from './constants.js';
|
|
2
|
-
import {
|
|
2
|
+
import { hash, hashArray, hashString } from './NodeUtils.js';
|
|
3
3
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
5
|
import { MathUtils } from '../../math/MathUtils.js';
|
|
6
|
+
import { warn, error } from '../../utils.js';
|
|
6
7
|
|
|
7
8
|
const _parentBuildStage = {
|
|
8
9
|
analyze: 'setup',
|
|
@@ -82,6 +83,14 @@ class Node extends EventDispatcher {
|
|
|
82
83
|
*/
|
|
83
84
|
this.version = 0;
|
|
84
85
|
|
|
86
|
+
/**
|
|
87
|
+
* The name of the node.
|
|
88
|
+
*
|
|
89
|
+
* @type {string}
|
|
90
|
+
* @default ''
|
|
91
|
+
*/
|
|
92
|
+
this.name = '';
|
|
93
|
+
|
|
85
94
|
/**
|
|
86
95
|
* Whether this node is global or not. This property is relevant for the internal
|
|
87
96
|
* node caching system. All nodes which should be declared just once should
|
|
@@ -111,6 +120,8 @@ class Node extends EventDispatcher {
|
|
|
111
120
|
|
|
112
121
|
// private
|
|
113
122
|
|
|
123
|
+
this._beforeNodes = null;
|
|
124
|
+
|
|
114
125
|
/**
|
|
115
126
|
* The cache key of this node.
|
|
116
127
|
*
|
|
@@ -172,7 +183,7 @@ class Node extends EventDispatcher {
|
|
|
172
183
|
onUpdate( callback, updateType ) {
|
|
173
184
|
|
|
174
185
|
this.updateType = updateType;
|
|
175
|
-
this.update = callback.bind( this
|
|
186
|
+
this.update = callback.bind( this );
|
|
176
187
|
|
|
177
188
|
return this;
|
|
178
189
|
|
|
@@ -225,26 +236,12 @@ class Node extends EventDispatcher {
|
|
|
225
236
|
*/
|
|
226
237
|
onReference( callback ) {
|
|
227
238
|
|
|
228
|
-
this.updateReference = callback.bind( this
|
|
239
|
+
this.updateReference = callback.bind( this );
|
|
229
240
|
|
|
230
241
|
return this;
|
|
231
242
|
|
|
232
243
|
}
|
|
233
244
|
|
|
234
|
-
/**
|
|
235
|
-
* The `this` reference might point to a Proxy so this method can be used
|
|
236
|
-
* to get the reference to the actual node instance.
|
|
237
|
-
*
|
|
238
|
-
* @return {Node} A reference to the node.
|
|
239
|
-
*/
|
|
240
|
-
getSelf() {
|
|
241
|
-
|
|
242
|
-
// Returns non-node object.
|
|
243
|
-
|
|
244
|
-
return this.self || this;
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
248
245
|
/**
|
|
249
246
|
* Nodes might refer to other objects like materials. This method allows to dynamically update the reference
|
|
250
247
|
* to such objects based on a given state (e.g. the current node frame or builder).
|
|
@@ -280,7 +277,7 @@ class Node extends EventDispatcher {
|
|
|
280
277
|
*/
|
|
281
278
|
* getChildren() {
|
|
282
279
|
|
|
283
|
-
for ( const { childNode } of
|
|
280
|
+
for ( const { childNode } of this._getChildren() ) {
|
|
284
281
|
|
|
285
282
|
yield childNode;
|
|
286
283
|
|
|
@@ -322,19 +319,100 @@ class Node extends EventDispatcher {
|
|
|
322
319
|
|
|
323
320
|
}
|
|
324
321
|
|
|
322
|
+
/**
|
|
323
|
+
* Returns the child nodes of this node.
|
|
324
|
+
*
|
|
325
|
+
* @private
|
|
326
|
+
* @param {Set<Node>} [ignores=new Set()] - A set of nodes to ignore during the search to avoid circular references.
|
|
327
|
+
* @returns {Array<Object>} An array of objects describing the child nodes.
|
|
328
|
+
*/
|
|
329
|
+
_getChildren( ignores = new Set() ) {
|
|
330
|
+
|
|
331
|
+
const children = [];
|
|
332
|
+
|
|
333
|
+
// avoid circular references
|
|
334
|
+
ignores.add( this );
|
|
335
|
+
|
|
336
|
+
for ( const property of Object.getOwnPropertyNames( this ) ) {
|
|
337
|
+
|
|
338
|
+
const object = this[ property ];
|
|
339
|
+
|
|
340
|
+
// Ignore private properties and ignored nodes.
|
|
341
|
+
if ( property.startsWith( '_' ) === true || ignores.has( object ) ) continue;
|
|
342
|
+
|
|
343
|
+
if ( Array.isArray( object ) === true ) {
|
|
344
|
+
|
|
345
|
+
for ( let i = 0; i < object.length; i ++ ) {
|
|
346
|
+
|
|
347
|
+
const child = object[ i ];
|
|
348
|
+
|
|
349
|
+
if ( child && child.isNode === true ) {
|
|
350
|
+
|
|
351
|
+
children.push( { property, index: i, childNode: child } );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
} else if ( object && object.isNode === true ) {
|
|
358
|
+
|
|
359
|
+
children.push( { property, childNode: object } );
|
|
360
|
+
|
|
361
|
+
} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
362
|
+
|
|
363
|
+
for ( const subProperty in object ) {
|
|
364
|
+
|
|
365
|
+
// Ignore private sub-properties.
|
|
366
|
+
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
367
|
+
|
|
368
|
+
const child = object[ subProperty ];
|
|
369
|
+
|
|
370
|
+
if ( child && child.isNode === true ) {
|
|
371
|
+
|
|
372
|
+
children.push( { property, index: subProperty, childNode: child } );
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
//
|
|
383
|
+
|
|
384
|
+
return children;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
325
388
|
/**
|
|
326
389
|
* Returns the cache key for this node.
|
|
327
390
|
*
|
|
328
391
|
* @param {boolean} [force=false] - When set to `true`, a recomputation of the cache key is forced.
|
|
392
|
+
* @param {Set<Node>} [ignores=null] - A set of nodes to ignore during the computation of the cache key.
|
|
329
393
|
* @return {number} The cache key of the node.
|
|
330
394
|
*/
|
|
331
|
-
getCacheKey( force = false ) {
|
|
395
|
+
getCacheKey( force = false, ignores = null ) {
|
|
332
396
|
|
|
333
397
|
force = force || this.version !== this._cacheKeyVersion;
|
|
334
398
|
|
|
335
399
|
if ( force === true || this._cacheKey === null ) {
|
|
336
400
|
|
|
337
|
-
|
|
401
|
+
if ( ignores === null ) ignores = new Set();
|
|
402
|
+
|
|
403
|
+
//
|
|
404
|
+
|
|
405
|
+
const values = [];
|
|
406
|
+
|
|
407
|
+
for ( const { property, childNode } of this._getChildren( ignores ) ) {
|
|
408
|
+
|
|
409
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey( force, ignores ) );
|
|
410
|
+
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
//
|
|
414
|
+
|
|
415
|
+
this._cacheKey = hash( hashArray( values ), this.customCacheKey() );
|
|
338
416
|
this._cacheKeyVersion = this.version;
|
|
339
417
|
|
|
340
418
|
}
|
|
@@ -350,7 +428,7 @@ class Node extends EventDispatcher {
|
|
|
350
428
|
*/
|
|
351
429
|
customCacheKey() {
|
|
352
430
|
|
|
353
|
-
return
|
|
431
|
+
return this.id;
|
|
354
432
|
|
|
355
433
|
}
|
|
356
434
|
|
|
@@ -563,7 +641,7 @@ class Node extends EventDispatcher {
|
|
|
563
641
|
* This state builds the output node and returns the resulting shader string.
|
|
564
642
|
*
|
|
565
643
|
* @param {NodeBuilder} builder - The current node builder.
|
|
566
|
-
* @param {?string} output - Can be used to define the output type.
|
|
644
|
+
* @param {?string} [output] - Can be used to define the output type.
|
|
567
645
|
* @return {?string} The generated shader string.
|
|
568
646
|
*/
|
|
569
647
|
generate( builder, output ) {
|
|
@@ -588,7 +666,7 @@ class Node extends EventDispatcher {
|
|
|
588
666
|
*/
|
|
589
667
|
updateBefore( /*frame*/ ) {
|
|
590
668
|
|
|
591
|
-
|
|
669
|
+
warn( 'Abstract function.' );
|
|
592
670
|
|
|
593
671
|
}
|
|
594
672
|
|
|
@@ -602,7 +680,7 @@ class Node extends EventDispatcher {
|
|
|
602
680
|
*/
|
|
603
681
|
updateAfter( /*frame*/ ) {
|
|
604
682
|
|
|
605
|
-
|
|
683
|
+
warn( 'Abstract function.' );
|
|
606
684
|
|
|
607
685
|
}
|
|
608
686
|
|
|
@@ -616,7 +694,17 @@ class Node extends EventDispatcher {
|
|
|
616
694
|
*/
|
|
617
695
|
update( /*frame*/ ) {
|
|
618
696
|
|
|
619
|
-
|
|
697
|
+
warn( 'Abstract function.' );
|
|
698
|
+
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
before( node ) {
|
|
702
|
+
|
|
703
|
+
if ( this._beforeNodes === null ) this._beforeNodes = [];
|
|
704
|
+
|
|
705
|
+
this._beforeNodes.push( node );
|
|
706
|
+
|
|
707
|
+
return this;
|
|
620
708
|
|
|
621
709
|
}
|
|
622
710
|
|
|
@@ -627,8 +715,8 @@ class Node extends EventDispatcher {
|
|
|
627
715
|
* - **generate**: Generates the shader code for the node. Returns the generated shader string.
|
|
628
716
|
*
|
|
629
717
|
* @param {NodeBuilder} builder - The current node builder.
|
|
630
|
-
* @param {string|Node
|
|
631
|
-
* @return {Node|string
|
|
718
|
+
* @param {?(string|Node)} [output=null] - Can be used to define the output type.
|
|
719
|
+
* @return {?(Node|string)} The result of the build process, depending on the build stage.
|
|
632
720
|
*/
|
|
633
721
|
build( builder, output = null ) {
|
|
634
722
|
|
|
@@ -642,6 +730,24 @@ class Node extends EventDispatcher {
|
|
|
642
730
|
|
|
643
731
|
//
|
|
644
732
|
|
|
733
|
+
if ( this._beforeNodes !== null ) {
|
|
734
|
+
|
|
735
|
+
const currentBeforeNodes = this._beforeNodes;
|
|
736
|
+
|
|
737
|
+
this._beforeNodes = null;
|
|
738
|
+
|
|
739
|
+
for ( const beforeNode of currentBeforeNodes ) {
|
|
740
|
+
|
|
741
|
+
beforeNode.build( builder, output );
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
this._beforeNodes = currentBeforeNodes;
|
|
746
|
+
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
//
|
|
750
|
+
|
|
645
751
|
const nodeData = builder.getDataFromNode( this );
|
|
646
752
|
nodeData.buildStages = nodeData.buildStages || {};
|
|
647
753
|
nodeData.buildStages[ builder.buildStage ] = true;
|
|
@@ -724,7 +830,12 @@ class Node extends EventDispatcher {
|
|
|
724
830
|
|
|
725
831
|
} else if ( buildStage === 'generate' ) {
|
|
726
832
|
|
|
727
|
-
|
|
833
|
+
// If generate has just one argument, it means the output type is not required.
|
|
834
|
+
// This means that the node does not handle output conversions internally,
|
|
835
|
+
// so the value is stored in a cache and the builder handles the conversion
|
|
836
|
+
// for all requested output types.
|
|
837
|
+
|
|
838
|
+
const isGenerateOnce = this.generate.length < 2;
|
|
728
839
|
|
|
729
840
|
if ( isGenerateOnce ) {
|
|
730
841
|
|
|
@@ -745,7 +856,7 @@ class Node extends EventDispatcher {
|
|
|
745
856
|
|
|
746
857
|
} else {
|
|
747
858
|
|
|
748
|
-
|
|
859
|
+
warn( 'Node: Recursion detected.', this );
|
|
749
860
|
|
|
750
861
|
result = '/* Recursion detected. */';
|
|
751
862
|
|
|
@@ -765,6 +876,16 @@ class Node extends EventDispatcher {
|
|
|
765
876
|
|
|
766
877
|
}
|
|
767
878
|
|
|
879
|
+
if ( result === '' && output !== null && output !== 'void' && output !== 'OutputType' ) {
|
|
880
|
+
|
|
881
|
+
// if no snippet is generated, return a default value
|
|
882
|
+
|
|
883
|
+
error( `TSL: Invalid generated code, expected a "${ output }".` );
|
|
884
|
+
|
|
885
|
+
result = builder.generateConst( output );
|
|
886
|
+
|
|
887
|
+
}
|
|
888
|
+
|
|
768
889
|
}
|
|
769
890
|
|
|
770
891
|
builder.removeChain( this );
|
|
@@ -777,11 +898,11 @@ class Node extends EventDispatcher {
|
|
|
777
898
|
/**
|
|
778
899
|
* Returns the child nodes as a JSON object.
|
|
779
900
|
*
|
|
780
|
-
* @return {
|
|
901
|
+
* @return {Generator<Object>} An iterable list of serialized child objects as JSON.
|
|
781
902
|
*/
|
|
782
903
|
getSerializeChildren() {
|
|
783
904
|
|
|
784
|
-
return
|
|
905
|
+
return this._getChildren();
|
|
785
906
|
|
|
786
907
|
}
|
|
787
908
|
|