@unikia/upe-renderer 0.186.110 → 0.187.11
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 +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
package/src/nodes/core/Node.js
CHANGED
|
@@ -2,7 +2,7 @@ import { NodeUpdateType } from './constants.js';
|
|
|
2
2
|
import { hash, hashArray, hashString } from './NodeUtils.js';
|
|
3
3
|
|
|
4
4
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
5
|
-
import {
|
|
5
|
+
import { generateUUID } from '../../math/MathUtils.js';
|
|
6
6
|
import { warn, error } from '../../utils.js';
|
|
7
7
|
|
|
8
8
|
import StackTrace from './StackTrace.js';
|
|
@@ -103,6 +103,15 @@ class Node extends EventDispatcher {
|
|
|
103
103
|
*/
|
|
104
104
|
this.parents = false;
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Whether this node can be assigned. It is generated as an expression,
|
|
108
|
+
* unless it is assigned, in which case it is declared as a variable where it was created.
|
|
109
|
+
*
|
|
110
|
+
* @type {boolean}
|
|
111
|
+
* @default false
|
|
112
|
+
*/
|
|
113
|
+
this.assignable = false;
|
|
114
|
+
|
|
106
115
|
/**
|
|
107
116
|
* This flag can be used for type testing.
|
|
108
117
|
*
|
|
@@ -114,7 +123,7 @@ class Node extends EventDispatcher {
|
|
|
114
123
|
|
|
115
124
|
// private
|
|
116
125
|
|
|
117
|
-
this.
|
|
126
|
+
this._inspectorNode = null;
|
|
118
127
|
|
|
119
128
|
/**
|
|
120
129
|
* The cache key of this node.
|
|
@@ -167,6 +176,257 @@ class Node extends EventDispatcher {
|
|
|
167
176
|
|
|
168
177
|
}
|
|
169
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Whether this node allows caching its result in a temporary variable.
|
|
181
|
+
* Caching is enabled by default. Override this method to disable it.
|
|
182
|
+
*
|
|
183
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
184
|
+
* @return {boolean} Whether temporary caching is allowed.
|
|
185
|
+
*/
|
|
186
|
+
isCacheable( /*builder*/ ) {
|
|
187
|
+
|
|
188
|
+
return true;
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Makes this node assignable and adds it to the current stack,
|
|
194
|
+
* so it can be declared where it was created if it is assigned later.
|
|
195
|
+
* Only use it with nodes that are not shared, see {@link Node#assignable}.
|
|
196
|
+
*
|
|
197
|
+
* @return {Node} A reference to this node.
|
|
198
|
+
*/
|
|
199
|
+
toAssignable() {
|
|
200
|
+
|
|
201
|
+
this.assignable = true;
|
|
202
|
+
|
|
203
|
+
return this.toStack();
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Checks if this node is assignable without a forced declaration.
|
|
209
|
+
*
|
|
210
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
211
|
+
* @returns {boolean} Whether this node is assignable without a forced declaration.
|
|
212
|
+
*/
|
|
213
|
+
isAssignable( builder ) {
|
|
214
|
+
|
|
215
|
+
const data = builder.getDataFromNode( this );
|
|
216
|
+
|
|
217
|
+
if ( data.forceDeclaration === true ) return false;
|
|
218
|
+
|
|
219
|
+
return this.assignable;
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Checks if this node is the target of an assignment.
|
|
225
|
+
*
|
|
226
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
227
|
+
* @returns {boolean} Whether this node is assigned.
|
|
228
|
+
*/
|
|
229
|
+
isAssign( builder ) {
|
|
230
|
+
|
|
231
|
+
const data = builder.getDataFromNode( this );
|
|
232
|
+
|
|
233
|
+
return data.assign;
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Declares the assignable node before the loops where it is used if it has no stack, and
|
|
239
|
+
* decides if a value that cannot be cached must be evaluated once at its declaration.
|
|
240
|
+
*
|
|
241
|
+
* @private
|
|
242
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
243
|
+
* @param {Object} data - The node data.
|
|
244
|
+
* @param {Node} [valueNode=this] - The node that defines the value of the assignable node.
|
|
245
|
+
*/
|
|
246
|
+
_updateAssignable( builder, data, valueNode = this ) {
|
|
247
|
+
|
|
248
|
+
const nodeLoop = builder.context.nodeLoop;
|
|
249
|
+
|
|
250
|
+
if ( data.stack === undefined && builder.buildStage === 'setup' ) {
|
|
251
|
+
|
|
252
|
+
// A node outside of the stacks of this build, e.g. created outside of a function, is declared
|
|
253
|
+
// before the outermost loop where its value does not change, otherwise every iteration would repeat it.
|
|
254
|
+
data.stack = builder.declareBeforeBlock( this );
|
|
255
|
+
|
|
256
|
+
} else if ( this.assignable === true && nodeLoop && builder.buildStage === 'analyze' ) {
|
|
257
|
+
|
|
258
|
+
if ( valueNode.isCacheable( builder ) === false && builder.isDeterministic( valueNode ) === false ) {
|
|
259
|
+
|
|
260
|
+
// A value that cannot be cached, e.g. a function call, is evaluated once at its declaration
|
|
261
|
+
// if it is used in a loop that runs after it, otherwise the loop would repeat it.
|
|
262
|
+
const declarationIndex = builder.activeStacks.indexOf( data.stack );
|
|
263
|
+
const loopIndex = builder.activeStacks.indexOf( builder.getDataFromNode( nodeLoop ).stack );
|
|
264
|
+
|
|
265
|
+
if ( declarationIndex !== - 1 && loopIndex >= declarationIndex ) data.forceDeclaration = true;
|
|
266
|
+
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Whether `build()` declares this assignable node as a variable when it is assigned.
|
|
275
|
+
* Nodes that wrap an assignable value, like {@link VarNode}, declare it themselves.
|
|
276
|
+
*
|
|
277
|
+
* @private
|
|
278
|
+
* @return {boolean} Whether `build()` declares the assignable node.
|
|
279
|
+
*/
|
|
280
|
+
_declaresAssignable() {
|
|
281
|
+
|
|
282
|
+
return true;
|
|
283
|
+
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Declares a variable for this node in the current flow, initialized with the given snippet.
|
|
288
|
+
*
|
|
289
|
+
* @private
|
|
290
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
291
|
+
* @param {string} snippet - The initial value.
|
|
292
|
+
* @param {string} type - The variable type.
|
|
293
|
+
* @param {boolean} readOnly - Whether the variable is read-only.
|
|
294
|
+
* @param {string} property - The node data property that holds the variable.
|
|
295
|
+
* @return {string} The property name of the variable.
|
|
296
|
+
*/
|
|
297
|
+
_declareVariable( builder, snippet, type, readOnly, property ) {
|
|
298
|
+
|
|
299
|
+
const nodeVar = builder.getVarFromNode( this, null, type, undefined, readOnly, true, property );
|
|
300
|
+
const propertyName = builder.getPropertyName( nodeVar );
|
|
301
|
+
const declarationPrefix = readOnly
|
|
302
|
+
? builder.generateLetStatement( nodeVar.type, propertyName, nodeVar.count )
|
|
303
|
+
: builder.generateVarStatement( nodeVar.type, propertyName, nodeVar.count );
|
|
304
|
+
|
|
305
|
+
builder.addLineFlowCode( `${ declarationPrefix } = ${ snippet }`, this );
|
|
306
|
+
|
|
307
|
+
return propertyName;
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Whether this assignable node must be declared as a variable, because it is assigned
|
|
313
|
+
* or must be evaluated once at its declaration.
|
|
314
|
+
*
|
|
315
|
+
* @private
|
|
316
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
317
|
+
* @param {Object} nodeData - The node data.
|
|
318
|
+
* @return {boolean} Whether the assignable node is a variable.
|
|
319
|
+
*/
|
|
320
|
+
_isVariable( builder, nodeData ) {
|
|
321
|
+
|
|
322
|
+
return ( nodeData.assign === true || nodeData.forceDeclaration === true ) && this.getNodeType( builder ) !== 'void';
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Generates an assignable node as a variable. The variable is declared the first
|
|
328
|
+
* time it is generated, which is its stack position, and then referenced by name.
|
|
329
|
+
*
|
|
330
|
+
* @private
|
|
331
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
332
|
+
* @param {Object} nodeData - The node data.
|
|
333
|
+
* @param {?string} output - The output type.
|
|
334
|
+
* @return {string} The generated shader string.
|
|
335
|
+
*/
|
|
336
|
+
_buildVariable( builder, nodeData, output ) {
|
|
337
|
+
|
|
338
|
+
const nodeType = this.getNodeType( builder );
|
|
339
|
+
const type = builder.getVectorType( nodeType );
|
|
340
|
+
|
|
341
|
+
if ( nodeData.propertyName === undefined ) {
|
|
342
|
+
|
|
343
|
+
const snippet = this.generate.length < 2
|
|
344
|
+
? builder.format( this.generate( builder ) || '', nodeType, type )
|
|
345
|
+
: this.generate( builder, type ) || '';
|
|
346
|
+
|
|
347
|
+
nodeData.propertyName = this._declareVariable( builder, snippet, type, false, 'variable' );
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return builder.format( nodeData.propertyName, type, output );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Whether the generated value is a variable declared in the scope of the function,
|
|
357
|
+
* so it keeps its value after the block where it was generated, e.g. a {@link VarNode}.
|
|
358
|
+
*
|
|
359
|
+
* @private
|
|
360
|
+
* @return {boolean} Whether the generated value is a variable of the function scope.
|
|
361
|
+
*/
|
|
362
|
+
_isFunctionScope() {
|
|
363
|
+
|
|
364
|
+
return false;
|
|
365
|
+
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* A generated value is only visible in the block where it was declared and in its inner blocks.
|
|
370
|
+
* A variable of the function scope is also visible in a later block of the same parent and guard,
|
|
371
|
+
* e.g. a second `if ( c )` of an immutable condition `c`, since that block only runs if its block ran.
|
|
372
|
+
* This method discards the generated value if it is not visible in the current block.
|
|
373
|
+
*
|
|
374
|
+
* @private
|
|
375
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
376
|
+
* @param {Object} nodeData - The node data.
|
|
377
|
+
*/
|
|
378
|
+
_checkFlowBlock( builder, nodeData ) {
|
|
379
|
+
|
|
380
|
+
if ( nodeData.flowBlock !== undefined ) {
|
|
381
|
+
|
|
382
|
+
const { guard, parent } = nodeData.flowBlock;
|
|
383
|
+
const isFunctionScope = guard !== undefined && this._isFunctionScope();
|
|
384
|
+
|
|
385
|
+
let flowBlock = builder.flowBlock;
|
|
386
|
+
|
|
387
|
+
while ( flowBlock !== null && flowBlock !== nodeData.flowBlock ) {
|
|
388
|
+
|
|
389
|
+
if ( isFunctionScope && flowBlock.guard === guard && flowBlock.parent === parent ) break;
|
|
390
|
+
|
|
391
|
+
flowBlock = flowBlock.parent;
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if ( flowBlock === null ) {
|
|
396
|
+
|
|
397
|
+
nodeData.flowBlock = undefined;
|
|
398
|
+
nodeData.propertyName = undefined;
|
|
399
|
+
nodeData.snippet = undefined;
|
|
400
|
+
nodeData.generated = undefined;
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Keeps the block where a value was generated, so it is only reused where it is visible.
|
|
410
|
+
* A global node is a declaration visible in any block, unless it emitted code in this block.
|
|
411
|
+
*
|
|
412
|
+
* @private
|
|
413
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
414
|
+
* @param {Object} nodeData - The node data.
|
|
415
|
+
* @param {boolean} isCached - Whether the value was generated before.
|
|
416
|
+
* @param {number} flowCodeLength - The length of the flow code before the value was generated.
|
|
417
|
+
*/
|
|
418
|
+
_setFlowBlock( builder, nodeData, isCached, flowCodeLength ) {
|
|
419
|
+
|
|
420
|
+
const isLocal = this.isGlobal( builder ) === false || builder.flow.code.length !== flowCodeLength;
|
|
421
|
+
|
|
422
|
+
if ( isCached === false && ( nodeData.propertyName !== undefined || nodeData.snippet !== undefined ) && isLocal && builder.flowBlock !== null ) {
|
|
423
|
+
|
|
424
|
+
nodeData.flowBlock = builder.flowBlock;
|
|
425
|
+
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
}
|
|
429
|
+
|
|
170
430
|
/**
|
|
171
431
|
* Set this property to `true` when the node should be regenerated.
|
|
172
432
|
*
|
|
@@ -194,7 +454,7 @@ class Node extends EventDispatcher {
|
|
|
194
454
|
|
|
195
455
|
if ( this._uuid === null ) {
|
|
196
456
|
|
|
197
|
-
this._uuid =
|
|
457
|
+
this._uuid = generateUUID();
|
|
198
458
|
|
|
199
459
|
}
|
|
200
460
|
|
|
@@ -311,19 +571,23 @@ class Node extends EventDispatcher {
|
|
|
311
571
|
}
|
|
312
572
|
|
|
313
573
|
/**
|
|
314
|
-
*
|
|
574
|
+
* Returns the child nodes of this node.
|
|
315
575
|
*
|
|
316
|
-
* @
|
|
317
|
-
* @yields {Node} A child node.
|
|
576
|
+
* @return {Array<Node>} The child nodes.
|
|
318
577
|
*/
|
|
319
|
-
|
|
578
|
+
getChildren() {
|
|
579
|
+
|
|
580
|
+
const children = this._getChildren();
|
|
581
|
+
const nodes = [];
|
|
320
582
|
|
|
321
|
-
for (
|
|
583
|
+
for ( let i = 0; i < children.length; i ++ ) {
|
|
322
584
|
|
|
323
|
-
|
|
585
|
+
nodes.push( children[ i ].childNode );
|
|
324
586
|
|
|
325
587
|
}
|
|
326
588
|
|
|
589
|
+
return nodes;
|
|
590
|
+
|
|
327
591
|
}
|
|
328
592
|
|
|
329
593
|
/**
|
|
@@ -374,12 +638,19 @@ class Node extends EventDispatcher {
|
|
|
374
638
|
// avoid circular references
|
|
375
639
|
ignores.add( this );
|
|
376
640
|
|
|
377
|
-
|
|
641
|
+
const properties = Object.getOwnPropertyNames( this );
|
|
642
|
+
|
|
643
|
+
for ( let p = 0; p < properties.length; p ++ ) {
|
|
644
|
+
|
|
645
|
+
const property = properties[ p ];
|
|
646
|
+
|
|
647
|
+
// Ignore private properties.
|
|
648
|
+
if ( property.charCodeAt( 0 ) === 95 ) continue;
|
|
378
649
|
|
|
379
650
|
const object = this[ property ];
|
|
380
651
|
|
|
381
|
-
// Ignore
|
|
382
|
-
if (
|
|
652
|
+
// Ignore primitives and ignored nodes.
|
|
653
|
+
if ( object === null || ( typeof object !== 'object' && typeof object !== 'function' ) || ignores.has( object ) ) continue;
|
|
383
654
|
|
|
384
655
|
if ( Array.isArray( object ) === true ) {
|
|
385
656
|
|
|
@@ -657,23 +928,26 @@ class Node extends EventDispatcher {
|
|
|
657
928
|
|
|
658
929
|
if ( callback ) {
|
|
659
930
|
|
|
931
|
+
// the overrides are cached per callback, nested contexts can override the same node with different nodes
|
|
932
|
+
|
|
660
933
|
const nodeData = builder.getDataFromNode( this );
|
|
934
|
+
const overrides = nodeData.overrides || ( nodeData.overrides = new Map() );
|
|
661
935
|
|
|
662
|
-
if (
|
|
936
|
+
if ( overrides.has( callback ) === false ) {
|
|
663
937
|
|
|
664
|
-
|
|
938
|
+
// avoid recursive override calls
|
|
939
|
+
|
|
940
|
+
overrides.set( callback, null );
|
|
665
941
|
|
|
666
942
|
// cancel the override for use the same node inside the callback
|
|
667
943
|
|
|
668
944
|
sharedNode = callback( builder ).overrideNode( this, null );
|
|
669
945
|
|
|
670
|
-
|
|
946
|
+
overrides.set( callback, sharedNode );
|
|
671
947
|
|
|
672
948
|
} else {
|
|
673
949
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
sharedNode = nodeData.sharedNode;
|
|
950
|
+
sharedNode = overrides.get( callback );
|
|
677
951
|
|
|
678
952
|
}
|
|
679
953
|
|
|
@@ -825,13 +1099,20 @@ class Node extends EventDispatcher {
|
|
|
825
1099
|
|
|
826
1100
|
}
|
|
827
1101
|
|
|
828
|
-
|
|
1102
|
+
/**
|
|
1103
|
+
* Registers the inspector node added with `toInspector()` in the builder, so it is updated every frame.
|
|
1104
|
+
* Nodes that override `build()` without always calling `super.build()` must call this method.
|
|
1105
|
+
*
|
|
1106
|
+
* @private
|
|
1107
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
1108
|
+
*/
|
|
1109
|
+
_setupInspector( builder ) {
|
|
829
1110
|
|
|
830
|
-
if ( this.
|
|
1111
|
+
if ( this._inspectorNode !== null && builder.buildStage === 'setup' ) {
|
|
831
1112
|
|
|
832
|
-
|
|
1113
|
+
builder.addNode( this._inspectorNode );
|
|
833
1114
|
|
|
834
|
-
|
|
1115
|
+
}
|
|
835
1116
|
|
|
836
1117
|
}
|
|
837
1118
|
|
|
@@ -847,6 +1128,8 @@ class Node extends EventDispatcher {
|
|
|
847
1128
|
*/
|
|
848
1129
|
build( builder, output = null ) {
|
|
849
1130
|
|
|
1131
|
+
this._setupInspector( builder );
|
|
1132
|
+
|
|
850
1133
|
const refNode = this.getShared( builder );
|
|
851
1134
|
|
|
852
1135
|
if ( this !== refNode ) {
|
|
@@ -857,26 +1140,11 @@ class Node extends EventDispatcher {
|
|
|
857
1140
|
|
|
858
1141
|
//
|
|
859
1142
|
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
const currentBeforeNodes = this._beforeNodes;
|
|
863
|
-
|
|
864
|
-
this._beforeNodes = null;
|
|
865
|
-
|
|
866
|
-
for ( const beforeNode of currentBeforeNodes ) {
|
|
867
|
-
|
|
868
|
-
beforeNode.build( builder, output );
|
|
869
|
-
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
this._beforeNodes = currentBeforeNodes;
|
|
873
|
-
|
|
874
|
-
}
|
|
1143
|
+
const nodeData = builder.getDataFromNode( this );
|
|
875
1144
|
|
|
876
|
-
|
|
1145
|
+
if ( this.assignable === true && this._declaresAssignable() ) this._updateAssignable( builder, nodeData );
|
|
877
1146
|
|
|
878
|
-
|
|
879
|
-
nodeData.buildStages = nodeData.buildStages || {};
|
|
1147
|
+
nodeData.buildStages = nodeData.buildStages || { setup: false, analyze: false, generate: false };
|
|
880
1148
|
nodeData.buildStages[ builder.buildStage ] = true;
|
|
881
1149
|
|
|
882
1150
|
const parentBuildStage = _parentBuildStage[ builder.buildStage ];
|
|
@@ -960,62 +1228,94 @@ class Node extends EventDispatcher {
|
|
|
960
1228
|
|
|
961
1229
|
} else if ( buildStage === 'generate' ) {
|
|
962
1230
|
|
|
963
|
-
|
|
964
|
-
// This means that the node does not handle output conversions internally,
|
|
965
|
-
// so the value is stored in a cache and the builder handles the conversion
|
|
966
|
-
// for all requested output types.
|
|
1231
|
+
this._checkFlowBlock( builder, nodeData );
|
|
967
1232
|
|
|
968
|
-
const
|
|
1233
|
+
const isCached = nodeData.propertyName !== undefined || nodeData.snippet !== undefined;
|
|
1234
|
+
const flowCodeLength = builder.flow.code.length;
|
|
969
1235
|
|
|
970
|
-
if
|
|
1236
|
+
// References must be generated directly, even if a cached value exists.
|
|
1237
|
+
const allowedCache = this.isCacheable( builder ) && builder.isReference( output ) === false;
|
|
1238
|
+
const type = allowedCache ? builder.getVectorType( this.getNodeType( builder, output ) ) : null;
|
|
1239
|
+
const cacheResult = allowedCache && type !== 'void' && output !== 'void' && nodeData.usageCount > 1;
|
|
1240
|
+
const generateOutput = cacheResult ? type : output;
|
|
971
1241
|
|
|
972
|
-
|
|
973
|
-
|
|
1242
|
+
if ( this.assignable === true && this._declaresAssignable() && this._isVariable( builder, nodeData ) ) {
|
|
1243
|
+
|
|
1244
|
+
result = this._buildVariable( builder, nodeData, output );
|
|
1245
|
+
|
|
1246
|
+
} else if ( allowedCache && nodeData.propertyName !== undefined ) {
|
|
1247
|
+
|
|
1248
|
+
result = builder.format( nodeData.propertyName, type, output );
|
|
1249
|
+
|
|
1250
|
+
} else {
|
|
1251
|
+
|
|
1252
|
+
// If generate has just one argument, it means the output type is not required.
|
|
1253
|
+
// This means that the node does not handle output conversions internally,
|
|
1254
|
+
// so the value is stored in a cache and the builder handles the conversion
|
|
1255
|
+
// for all requested output types.
|
|
1256
|
+
|
|
1257
|
+
const isGenerateOnce = this.generate.length < 2;
|
|
1258
|
+
|
|
1259
|
+
if ( isGenerateOnce ) {
|
|
974
1260
|
|
|
975
|
-
|
|
1261
|
+
const type = this.getNodeType( builder );
|
|
976
1262
|
|
|
977
|
-
|
|
1263
|
+
result = nodeData.snippet;
|
|
978
1264
|
|
|
979
|
-
if (
|
|
1265
|
+
if ( result === undefined ) {
|
|
980
1266
|
|
|
981
|
-
nodeData.generated
|
|
1267
|
+
if ( nodeData.generated === undefined ) {
|
|
982
1268
|
|
|
983
|
-
|
|
1269
|
+
nodeData.generated = true;
|
|
984
1270
|
|
|
985
|
-
|
|
1271
|
+
result = this.generate( builder ) || '';
|
|
986
1272
|
|
|
987
|
-
|
|
1273
|
+
nodeData.snippet = result;
|
|
988
1274
|
|
|
989
|
-
|
|
1275
|
+
} else {
|
|
990
1276
|
|
|
991
|
-
|
|
1277
|
+
warn( 'Node: Recursion detected.', this );
|
|
1278
|
+
|
|
1279
|
+
result = '/* Recursion detected. */';
|
|
1280
|
+
|
|
1281
|
+
}
|
|
992
1282
|
|
|
993
1283
|
}
|
|
994
1284
|
|
|
995
|
-
|
|
1285
|
+
result = builder.format( result, type, generateOutput );
|
|
996
1286
|
|
|
997
|
-
|
|
1287
|
+
} else {
|
|
1288
|
+
|
|
1289
|
+
result = this.generate( builder, generateOutput ) || '';
|
|
998
1290
|
|
|
999
1291
|
}
|
|
1000
1292
|
|
|
1001
|
-
|
|
1293
|
+
if ( result === '' && generateOutput !== null && generateOutput !== 'void' && generateOutput !== 'OutputType' ) {
|
|
1002
1294
|
|
|
1003
|
-
|
|
1295
|
+
// if no snippet is generated, return a default value
|
|
1004
1296
|
|
|
1005
|
-
|
|
1297
|
+
error( `TSL: Invalid generated code, expected a "${ generateOutput }".` );
|
|
1006
1298
|
|
|
1007
|
-
|
|
1299
|
+
result = builder.generateConst( generateOutput );
|
|
1300
|
+
|
|
1301
|
+
}
|
|
1008
1302
|
|
|
1009
|
-
|
|
1303
|
+
if ( cacheResult ) {
|
|
1010
1304
|
|
|
1011
|
-
|
|
1305
|
+
// Use a dedicated property, the node may already own a variable.
|
|
1306
|
+
const propertyName = this._declareVariable( builder, result, type, nodeData.assign !== true, 'cacheVariable' );
|
|
1012
1307
|
|
|
1013
|
-
|
|
1308
|
+
nodeData.snippet = result;
|
|
1309
|
+
nodeData.propertyName = propertyName;
|
|
1014
1310
|
|
|
1015
|
-
|
|
1311
|
+
result = builder.format( propertyName, type, output );
|
|
1312
|
+
|
|
1313
|
+
}
|
|
1016
1314
|
|
|
1017
1315
|
}
|
|
1018
1316
|
|
|
1317
|
+
this._setFlowBlock( builder, nodeData, isCached, flowCodeLength );
|
|
1318
|
+
|
|
1019
1319
|
}
|
|
1020
1320
|
|
|
1021
1321
|
builder.removeChain( this );
|