@plastic-software/three 0.167.4 → 0.174.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
+
import { uniform } from '../core/UniformNode.js';
|
|
4
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
5
|
+
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
6
|
+
|
|
7
|
+
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This class is only relevant if the referenced property is array-like.
|
|
11
|
+
* In this case, `ReferenceElementNode` allows to refer to a specific
|
|
12
|
+
* element inside the data structure via an index.
|
|
13
|
+
*
|
|
14
|
+
* @augments ArrayElementNode
|
|
15
|
+
*/
|
|
16
|
+
class ReferenceElementNode extends ArrayElementNode {
|
|
17
|
+
|
|
18
|
+
static get type() {
|
|
19
|
+
|
|
20
|
+
return 'ReferenceElementNode';
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new reference element node.
|
|
26
|
+
*
|
|
27
|
+
* @param {?ReferenceBaseNode} referenceNode - The reference node.
|
|
28
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
29
|
+
*/
|
|
30
|
+
constructor( referenceNode, indexNode ) {
|
|
31
|
+
|
|
32
|
+
super( referenceNode, indexNode );
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Similar to {@link ReferenceBaseNode#reference}, an additional
|
|
36
|
+
* property references to the current node.
|
|
37
|
+
*
|
|
38
|
+
* @type {?ReferenceBaseNode}
|
|
39
|
+
* @default null
|
|
40
|
+
*/
|
|
41
|
+
this.referenceNode = referenceNode;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* This flag can be used for type testing.
|
|
45
|
+
*
|
|
46
|
+
* @type {boolean}
|
|
47
|
+
* @readonly
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
this.isReferenceElementNode = true;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* This method is overwritten since the node type is inferred from
|
|
56
|
+
* the uniform type of the reference node.
|
|
57
|
+
*
|
|
58
|
+
* @return {string} The node type.
|
|
59
|
+
*/
|
|
60
|
+
getNodeType() {
|
|
61
|
+
|
|
62
|
+
return this.referenceNode.uniformType;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
generate( builder ) {
|
|
67
|
+
|
|
68
|
+
const snippet = super.generate( builder );
|
|
69
|
+
const arrayType = this.referenceNode.getNodeType();
|
|
70
|
+
const elementType = this.getNodeType();
|
|
71
|
+
|
|
72
|
+
return builder.format( snippet, arrayType, elementType );
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Base class for nodes which establishes a reference to a property of another object.
|
|
80
|
+
* In this way, the value of the node is automatically linked to the value of
|
|
81
|
+
* referenced object. Reference nodes internally represent the linked value
|
|
82
|
+
* as a uniform.
|
|
83
|
+
*
|
|
84
|
+
* @augments Node
|
|
85
|
+
*/
|
|
86
|
+
class ReferenceBaseNode extends Node {
|
|
87
|
+
|
|
88
|
+
static get type() {
|
|
89
|
+
|
|
90
|
+
return 'ReferenceBaseNode';
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Constructs a new reference base node.
|
|
96
|
+
*
|
|
97
|
+
* @param {string} property - The name of the property the node refers to.
|
|
98
|
+
* @param {string} uniformType - The uniform type that should be used to represent the property value.
|
|
99
|
+
* @param {?Object} [object=null] - The object the property belongs to.
|
|
100
|
+
* @param {?number} [count=null] - When the linked property is an array-like, this parameter defines its length.
|
|
101
|
+
*/
|
|
102
|
+
constructor( property, uniformType, object = null, count = null ) {
|
|
103
|
+
|
|
104
|
+
super();
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The name of the property the node refers to.
|
|
108
|
+
*
|
|
109
|
+
* @type {string}
|
|
110
|
+
*/
|
|
111
|
+
this.property = property;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* The uniform type that should be used to represent the property value.
|
|
115
|
+
*
|
|
116
|
+
* @type {string}
|
|
117
|
+
*/
|
|
118
|
+
this.uniformType = uniformType;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The object the property belongs to.
|
|
122
|
+
*
|
|
123
|
+
* @type {?Object}
|
|
124
|
+
* @default null
|
|
125
|
+
*/
|
|
126
|
+
this.object = object;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* When the linked property is an array, this parameter defines its length.
|
|
130
|
+
*
|
|
131
|
+
* @type {?number}
|
|
132
|
+
* @default null
|
|
133
|
+
*/
|
|
134
|
+
this.count = count;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The property name might have dots so nested properties can be referred.
|
|
138
|
+
* The hierarchy of the names is stored inside this array.
|
|
139
|
+
*
|
|
140
|
+
* @type {Array<string>}
|
|
141
|
+
*/
|
|
142
|
+
this.properties = property.split( '.' );
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Points to the current referred object. This property exists next to {@link ReferenceNode#object}
|
|
146
|
+
* since the final reference might be updated from calling code.
|
|
147
|
+
*
|
|
148
|
+
* @type {?Object}
|
|
149
|
+
* @default null
|
|
150
|
+
*/
|
|
151
|
+
this.reference = object;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The uniform node that holds the value of the reference node.
|
|
155
|
+
*
|
|
156
|
+
* @type {UniformNode}
|
|
157
|
+
* @default null
|
|
158
|
+
*/
|
|
159
|
+
this.node = null;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* The uniform group of the internal uniform.
|
|
163
|
+
*
|
|
164
|
+
* @type {UniformGroupNode}
|
|
165
|
+
* @default null
|
|
166
|
+
*/
|
|
167
|
+
this.group = null;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Overwritten since reference nodes are updated per object.
|
|
171
|
+
*
|
|
172
|
+
* @type {string}
|
|
173
|
+
* @default 'object'
|
|
174
|
+
*/
|
|
175
|
+
this.updateType = NodeUpdateType.OBJECT;
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Sets the uniform group for this reference node.
|
|
181
|
+
*
|
|
182
|
+
* @param {UniformGroupNode} group - The uniform group to set.
|
|
183
|
+
* @return {ReferenceBaseNode} A reference to this node.
|
|
184
|
+
*/
|
|
185
|
+
setGroup( group ) {
|
|
186
|
+
|
|
187
|
+
this.group = group;
|
|
188
|
+
|
|
189
|
+
return this;
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* When the referred property is array-like, this method can be used
|
|
195
|
+
* to access elements via an index node.
|
|
196
|
+
*
|
|
197
|
+
* @param {IndexNode} indexNode - indexNode.
|
|
198
|
+
* @return {ReferenceElementNode} A reference to an element.
|
|
199
|
+
*/
|
|
200
|
+
element( indexNode ) {
|
|
201
|
+
|
|
202
|
+
return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Sets the node type which automatically defines the internal
|
|
208
|
+
* uniform type.
|
|
209
|
+
*
|
|
210
|
+
* @param {string} uniformType - The type to set.
|
|
211
|
+
*/
|
|
212
|
+
setNodeType( uniformType ) {
|
|
213
|
+
|
|
214
|
+
const node = uniform( null, uniformType ).getSelf();
|
|
215
|
+
|
|
216
|
+
if ( this.group !== null ) {
|
|
217
|
+
|
|
218
|
+
node.setGroup( this.group );
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
this.node = node;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* This method is overwritten since the node type is inferred from
|
|
228
|
+
* the type of the reference node.
|
|
229
|
+
*
|
|
230
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
231
|
+
* @return {string} The node type.
|
|
232
|
+
*/
|
|
233
|
+
getNodeType( builder ) {
|
|
234
|
+
|
|
235
|
+
if ( this.node === null ) {
|
|
236
|
+
|
|
237
|
+
this.updateReference( builder );
|
|
238
|
+
this.updateValue();
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return this.node.getNodeType( builder );
|
|
243
|
+
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Returns the property value from the given referred object.
|
|
248
|
+
*
|
|
249
|
+
* @param {Object} [object=this.reference] - The object to retrieve the property value from.
|
|
250
|
+
* @return {any} The value.
|
|
251
|
+
*/
|
|
252
|
+
getValueFromReference( object = this.reference ) {
|
|
253
|
+
|
|
254
|
+
const { properties } = this;
|
|
255
|
+
|
|
256
|
+
let value = object[ properties[ 0 ] ];
|
|
257
|
+
|
|
258
|
+
for ( let i = 1; i < properties.length; i ++ ) {
|
|
259
|
+
|
|
260
|
+
value = value[ properties[ i ] ];
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return value;
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Allows to update the reference based on the given state. The state is only
|
|
270
|
+
* evaluated {@link ReferenceBaseNode#object} is not set.
|
|
271
|
+
*
|
|
272
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
273
|
+
* @return {Object} The updated reference.
|
|
274
|
+
*/
|
|
275
|
+
updateReference( state ) {
|
|
276
|
+
|
|
277
|
+
this.reference = this.object !== null ? this.object : state.object;
|
|
278
|
+
|
|
279
|
+
return this.reference;
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* The output of the reference node is the internal uniform node.
|
|
285
|
+
*
|
|
286
|
+
* @return {UniformNode} The output node.
|
|
287
|
+
*/
|
|
288
|
+
setup() {
|
|
289
|
+
|
|
290
|
+
this.updateValue();
|
|
291
|
+
|
|
292
|
+
return this.node;
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Overwritten to to update the internal uniform value.
|
|
298
|
+
*
|
|
299
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
300
|
+
*/
|
|
301
|
+
update( /*frame*/ ) {
|
|
302
|
+
|
|
303
|
+
this.updateValue();
|
|
304
|
+
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Retrieves the value from the referred object property and uses it
|
|
309
|
+
* to updated the internal uniform.
|
|
310
|
+
*/
|
|
311
|
+
updateValue() {
|
|
312
|
+
|
|
313
|
+
if ( this.node === null ) this.setNodeType( this.uniformType );
|
|
314
|
+
|
|
315
|
+
const value = this.getValueFromReference();
|
|
316
|
+
|
|
317
|
+
if ( Array.isArray( value ) ) {
|
|
318
|
+
|
|
319
|
+
this.node.array = value;
|
|
320
|
+
|
|
321
|
+
} else {
|
|
322
|
+
|
|
323
|
+
this.node.value = value;
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
export default ReferenceBaseNode;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* TSL function for creating a reference base node.
|
|
335
|
+
*
|
|
336
|
+
* @tsl
|
|
337
|
+
* @function
|
|
338
|
+
* @param {string} name - The name of the property the node refers to.
|
|
339
|
+
* @param {string} type - The uniform type that should be used to represent the property value.
|
|
340
|
+
* @param {Object} object - The object the property belongs to.
|
|
341
|
+
* @returns {ReferenceBaseNode}
|
|
342
|
+
*/
|
|
343
|
+
export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* TSL function for creating a reference base node. Use this function if you want need a reference
|
|
347
|
+
* to an array-like property that should be represented as a uniform buffer.
|
|
348
|
+
*
|
|
349
|
+
* @tsl
|
|
350
|
+
* @function
|
|
351
|
+
* @param {string} name - The name of the property the node refers to.
|
|
352
|
+
* @param {string} type - The uniform type that should be used to represent the property value.
|
|
353
|
+
* @param {number} count - The number of value inside the array-like object.
|
|
354
|
+
* @param {Object} object - An array-like object the property belongs to.
|
|
355
|
+
* @returns {ReferenceBaseNode}
|
|
356
|
+
*/
|
|
357
|
+
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
|
|
@@ -1,25 +1,66 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { uniform } from '../core/UniformNode.js';
|
|
4
4
|
import { texture } from './TextureNode.js';
|
|
5
5
|
import { cubeTexture } from './CubeTextureNode.js';
|
|
6
6
|
import { buffer } from './BufferNode.js';
|
|
7
|
-
import { nodeObject } from '../
|
|
7
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
10
|
|
|
11
|
+
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This class is only relevant if the referenced property is array-like.
|
|
15
|
+
* In this case, `ReferenceElementNode` allows to refer to a specific
|
|
16
|
+
* element inside the data structure via an index.
|
|
17
|
+
*
|
|
18
|
+
* @augments ArrayElementNode
|
|
19
|
+
*/
|
|
11
20
|
class ReferenceElementNode extends ArrayElementNode {
|
|
12
21
|
|
|
22
|
+
static get type() {
|
|
23
|
+
|
|
24
|
+
return 'ReferenceElementNode';
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new reference element node.
|
|
30
|
+
*
|
|
31
|
+
* @param {?ReferenceNode} referenceNode - The reference node.
|
|
32
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
33
|
+
*/
|
|
13
34
|
constructor( referenceNode, indexNode ) {
|
|
14
35
|
|
|
15
36
|
super( referenceNode, indexNode );
|
|
16
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Similar to {@link ReferenceNode#reference}, an additional
|
|
40
|
+
* property references to the current node.
|
|
41
|
+
*
|
|
42
|
+
* @type {?ReferenceNode}
|
|
43
|
+
* @default null
|
|
44
|
+
*/
|
|
17
45
|
this.referenceNode = referenceNode;
|
|
18
46
|
|
|
47
|
+
/**
|
|
48
|
+
* This flag can be used for type testing.
|
|
49
|
+
*
|
|
50
|
+
* @type {boolean}
|
|
51
|
+
* @readonly
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
19
54
|
this.isReferenceElementNode = true;
|
|
20
55
|
|
|
21
56
|
}
|
|
22
57
|
|
|
58
|
+
/**
|
|
59
|
+
* This method is overwritten since the node type is inferred from
|
|
60
|
+
* the uniform type of the reference node.
|
|
61
|
+
*
|
|
62
|
+
* @return {string} The node type.
|
|
63
|
+
*/
|
|
23
64
|
getNodeType() {
|
|
24
65
|
|
|
25
66
|
return this.referenceNode.uniformType;
|
|
@@ -38,31 +79,162 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
38
79
|
|
|
39
80
|
}
|
|
40
81
|
|
|
82
|
+
/**
|
|
83
|
+
* This type of node establishes a reference to a property of another object.
|
|
84
|
+
* In this way, the value of the node is automatically linked to the value of
|
|
85
|
+
* referenced object. Reference nodes internally represent the linked value
|
|
86
|
+
* as a uniform.
|
|
87
|
+
*
|
|
88
|
+
* @augments Node
|
|
89
|
+
*/
|
|
41
90
|
class ReferenceNode extends Node {
|
|
42
91
|
|
|
92
|
+
static get type() {
|
|
93
|
+
|
|
94
|
+
return 'ReferenceNode';
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Constructs a new reference node.
|
|
100
|
+
*
|
|
101
|
+
* @param {string} property - The name of the property the node refers to.
|
|
102
|
+
* @param {string} uniformType - The uniform type that should be used to represent the property value.
|
|
103
|
+
* @param {?Object} [object=null] - The object the property belongs to.
|
|
104
|
+
* @param {?number} [count=null] - When the linked property is an array-like, this parameter defines its length.
|
|
105
|
+
*/
|
|
43
106
|
constructor( property, uniformType, object = null, count = null ) {
|
|
44
107
|
|
|
45
108
|
super();
|
|
46
109
|
|
|
110
|
+
/**
|
|
111
|
+
* The name of the property the node refers to.
|
|
112
|
+
*
|
|
113
|
+
* @type {string}
|
|
114
|
+
*/
|
|
47
115
|
this.property = property;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* The uniform type that should be used to represent the property value.
|
|
119
|
+
*
|
|
120
|
+
* @type {string}
|
|
121
|
+
*/
|
|
48
122
|
this.uniformType = uniformType;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The object the property belongs to.
|
|
126
|
+
*
|
|
127
|
+
* @type {?Object}
|
|
128
|
+
* @default null
|
|
129
|
+
*/
|
|
49
130
|
this.object = object;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* When the linked property is an array, this parameter defines its length.
|
|
134
|
+
*
|
|
135
|
+
* @type {?number}
|
|
136
|
+
* @default null
|
|
137
|
+
*/
|
|
50
138
|
this.count = count;
|
|
51
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The property name might have dots so nested properties can be referred.
|
|
142
|
+
* The hierarchy of the names is stored inside this array.
|
|
143
|
+
*
|
|
144
|
+
* @type {Array<string>}
|
|
145
|
+
*/
|
|
52
146
|
this.properties = property.split( '.' );
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Points to the current referred object. This property exists next to {@link ReferenceNode#object}
|
|
150
|
+
* since the final reference might be updated from calling code.
|
|
151
|
+
*
|
|
152
|
+
* @type {?Object}
|
|
153
|
+
* @default null
|
|
154
|
+
*/
|
|
53
155
|
this.reference = object;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The uniform node that holds the value of the reference node.
|
|
159
|
+
*
|
|
160
|
+
* @type {UniformNode}
|
|
161
|
+
* @default null
|
|
162
|
+
*/
|
|
54
163
|
this.node = null;
|
|
55
164
|
|
|
165
|
+
/**
|
|
166
|
+
* The uniform group of the internal uniform.
|
|
167
|
+
*
|
|
168
|
+
* @type {UniformGroupNode}
|
|
169
|
+
* @default null
|
|
170
|
+
*/
|
|
171
|
+
this.group = null;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* An optional label of the internal uniform node.
|
|
175
|
+
*
|
|
176
|
+
* @type {?string}
|
|
177
|
+
* @default null
|
|
178
|
+
*/
|
|
179
|
+
this.name = null;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Overwritten since reference nodes are updated per object.
|
|
183
|
+
*
|
|
184
|
+
* @type {string}
|
|
185
|
+
* @default 'object'
|
|
186
|
+
*/
|
|
56
187
|
this.updateType = NodeUpdateType.OBJECT;
|
|
57
188
|
|
|
58
189
|
}
|
|
59
190
|
|
|
191
|
+
/**
|
|
192
|
+
* When the referred property is array-like, this method can be used
|
|
193
|
+
* to access elements via an index node.
|
|
194
|
+
*
|
|
195
|
+
* @param {IndexNode} indexNode - indexNode.
|
|
196
|
+
* @return {ReferenceElementNode} A reference to an element.
|
|
197
|
+
*/
|
|
60
198
|
element( indexNode ) {
|
|
61
199
|
|
|
62
200
|
return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
|
|
63
201
|
|
|
64
202
|
}
|
|
65
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Sets the uniform group for this reference node.
|
|
206
|
+
*
|
|
207
|
+
* @param {UniformGroupNode} group - The uniform group to set.
|
|
208
|
+
* @return {ReferenceNode} A reference to this node.
|
|
209
|
+
*/
|
|
210
|
+
setGroup( group ) {
|
|
211
|
+
|
|
212
|
+
this.group = group;
|
|
213
|
+
|
|
214
|
+
return this;
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Sets the label for the internal uniform.
|
|
220
|
+
*
|
|
221
|
+
* @param {string} name - The label to set.
|
|
222
|
+
* @return {ReferenceNode} A reference to this node.
|
|
223
|
+
*/
|
|
224
|
+
label( name ) {
|
|
225
|
+
|
|
226
|
+
this.name = name;
|
|
227
|
+
|
|
228
|
+
return this;
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Sets the node type which automatically defines the internal
|
|
234
|
+
* uniform type.
|
|
235
|
+
*
|
|
236
|
+
* @param {string} uniformType - The type to set.
|
|
237
|
+
*/
|
|
66
238
|
setNodeType( uniformType ) {
|
|
67
239
|
|
|
68
240
|
let node = null;
|
|
@@ -89,14 +261,30 @@ class ReferenceNode extends Node {
|
|
|
89
261
|
|
|
90
262
|
}
|
|
91
263
|
|
|
92
|
-
this.
|
|
264
|
+
if ( this.group !== null ) {
|
|
265
|
+
|
|
266
|
+
node.setGroup( this.group );
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if ( this.name !== null ) node.label( this.name );
|
|
271
|
+
|
|
272
|
+
this.node = node.getSelf();
|
|
93
273
|
|
|
94
274
|
}
|
|
95
275
|
|
|
276
|
+
/**
|
|
277
|
+
* This method is overwritten since the node type is inferred from
|
|
278
|
+
* the type of the reference node.
|
|
279
|
+
*
|
|
280
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
281
|
+
* @return {string} The node type.
|
|
282
|
+
*/
|
|
96
283
|
getNodeType( builder ) {
|
|
97
284
|
|
|
98
285
|
if ( this.node === null ) {
|
|
99
286
|
|
|
287
|
+
this.updateReference( builder );
|
|
100
288
|
this.updateValue();
|
|
101
289
|
|
|
102
290
|
}
|
|
@@ -105,6 +293,12 @@ class ReferenceNode extends Node {
|
|
|
105
293
|
|
|
106
294
|
}
|
|
107
295
|
|
|
296
|
+
/**
|
|
297
|
+
* Returns the property value from the given referred object.
|
|
298
|
+
*
|
|
299
|
+
* @param {Object} [object=this.reference] - The object to retrieve the property value from.
|
|
300
|
+
* @return {any} The value.
|
|
301
|
+
*/
|
|
108
302
|
getValueFromReference( object = this.reference ) {
|
|
109
303
|
|
|
110
304
|
const { properties } = this;
|
|
@@ -121,6 +315,13 @@ class ReferenceNode extends Node {
|
|
|
121
315
|
|
|
122
316
|
}
|
|
123
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Allows to update the reference based on the given state. The state is only
|
|
320
|
+
* evaluated {@link ReferenceNode#object} is not set.
|
|
321
|
+
*
|
|
322
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
323
|
+
* @return {Object} The updated reference.
|
|
324
|
+
*/
|
|
124
325
|
updateReference( state ) {
|
|
125
326
|
|
|
126
327
|
this.reference = this.object !== null ? this.object : state.object;
|
|
@@ -129,7 +330,13 @@ class ReferenceNode extends Node {
|
|
|
129
330
|
|
|
130
331
|
}
|
|
131
332
|
|
|
132
|
-
|
|
333
|
+
/**
|
|
334
|
+
* The output of the reference node is the internal uniform node.
|
|
335
|
+
*
|
|
336
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
337
|
+
* @return {UniformNode} The output node.
|
|
338
|
+
*/
|
|
339
|
+
setup( /* builder */ ) {
|
|
133
340
|
|
|
134
341
|
this.updateValue();
|
|
135
342
|
|
|
@@ -137,12 +344,21 @@ class ReferenceNode extends Node {
|
|
|
137
344
|
|
|
138
345
|
}
|
|
139
346
|
|
|
347
|
+
/**
|
|
348
|
+
* Overwritten to to update the internal uniform value.
|
|
349
|
+
*
|
|
350
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
351
|
+
*/
|
|
140
352
|
update( /*frame*/ ) {
|
|
141
353
|
|
|
142
354
|
this.updateValue();
|
|
143
355
|
|
|
144
356
|
}
|
|
145
357
|
|
|
358
|
+
/**
|
|
359
|
+
* Retrieves the value from the referred object property and uses it
|
|
360
|
+
* to updated the internal uniform.
|
|
361
|
+
*/
|
|
146
362
|
updateValue() {
|
|
147
363
|
|
|
148
364
|
if ( this.node === null ) this.setNodeType( this.uniformType );
|
|
@@ -165,7 +381,28 @@ class ReferenceNode extends Node {
|
|
|
165
381
|
|
|
166
382
|
export default ReferenceNode;
|
|
167
383
|
|
|
384
|
+
/**
|
|
385
|
+
* TSL function for creating a reference node.
|
|
386
|
+
*
|
|
387
|
+
* @tsl
|
|
388
|
+
* @function
|
|
389
|
+
* @param {string} name - The name of the property the node refers to.
|
|
390
|
+
* @param {string} type - The uniform type that should be used to represent the property value.
|
|
391
|
+
* @param {?Object} object - The object the property belongs to.
|
|
392
|
+
* @returns {ReferenceNode}
|
|
393
|
+
*/
|
|
168
394
|
export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
|
|
169
|
-
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
|
|
170
395
|
|
|
171
|
-
|
|
396
|
+
/**
|
|
397
|
+
* TSL function for creating a reference node. Use this function if you want need a reference
|
|
398
|
+
* to an array-like property that should be represented as a uniform buffer.
|
|
399
|
+
*
|
|
400
|
+
* @tsl
|
|
401
|
+
* @function
|
|
402
|
+
* @param {string} name - The name of the property the node refers to.
|
|
403
|
+
* @param {string} type - The uniform type that should be used to represent the property value.
|
|
404
|
+
* @param {number} count - The number of value inside the array-like object.
|
|
405
|
+
* @param {Object} object - An array-like object the property belongs to.
|
|
406
|
+
* @returns {ReferenceNode}
|
|
407
|
+
*/
|
|
408
|
+
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
|