super-three 0.181.0 → 0.185.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 +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
2
3
|
import { select } from '../math/ConditionalNode.js';
|
|
3
4
|
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
|
|
4
5
|
import { error } from '../../utils.js';
|
|
@@ -68,6 +69,23 @@ class StackNode extends Node {
|
|
|
68
69
|
*/
|
|
69
70
|
this._expressionNode = null;
|
|
70
71
|
|
|
72
|
+
/**
|
|
73
|
+
* The current node being processed.
|
|
74
|
+
*
|
|
75
|
+
* @private
|
|
76
|
+
* @type {Node}
|
|
77
|
+
* @default null
|
|
78
|
+
*/
|
|
79
|
+
this._currentNode = null;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Stores additional data for nodes that are added to the stack.
|
|
83
|
+
*
|
|
84
|
+
* @private
|
|
85
|
+
* @type {Map<Node, {delta: number}>}
|
|
86
|
+
*/
|
|
87
|
+
this._nodeDataLibrary = new Map();
|
|
88
|
+
|
|
71
89
|
/**
|
|
72
90
|
* This flag can be used for type testing.
|
|
73
91
|
*
|
|
@@ -81,19 +99,19 @@ class StackNode extends Node {
|
|
|
81
99
|
|
|
82
100
|
getElementType( builder ) {
|
|
83
101
|
|
|
84
|
-
return this.
|
|
102
|
+
return this.outputNode ? this.outputNode.getElementType( builder ) : 'void';
|
|
85
103
|
|
|
86
104
|
}
|
|
87
105
|
|
|
88
|
-
|
|
106
|
+
generateNodeType( builder ) {
|
|
89
107
|
|
|
90
|
-
return this.
|
|
108
|
+
return this.outputNode ? this.outputNode.getNodeType( builder ) : 'void';
|
|
91
109
|
|
|
92
110
|
}
|
|
93
111
|
|
|
94
112
|
getMemberType( builder, name ) {
|
|
95
113
|
|
|
96
|
-
return this.
|
|
114
|
+
return this.outputNode ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
97
115
|
|
|
98
116
|
}
|
|
99
117
|
|
|
@@ -101,23 +119,67 @@ class StackNode extends Node {
|
|
|
101
119
|
* Adds a node to this stack.
|
|
102
120
|
*
|
|
103
121
|
* @param {Node} node - The node to add.
|
|
122
|
+
* @param {number} [index=-1] - The index of the node. If not specified, the node will be added to the end of the stack.
|
|
104
123
|
* @return {StackNode} A reference to this stack node.
|
|
105
124
|
*/
|
|
106
|
-
addToStack( node ) {
|
|
125
|
+
addToStack( node, index = - 1 ) {
|
|
107
126
|
|
|
108
127
|
if ( node.isNode !== true ) {
|
|
109
128
|
|
|
110
|
-
error( 'TSL: Invalid node added to stack.' );
|
|
129
|
+
error( 'TSL: Invalid node added to stack.', new StackTrace() );
|
|
111
130
|
return this;
|
|
112
131
|
|
|
113
132
|
}
|
|
114
133
|
|
|
115
|
-
|
|
134
|
+
|
|
135
|
+
if ( index === - 1 ) {
|
|
136
|
+
|
|
137
|
+
if ( this._currentNode ) {
|
|
138
|
+
|
|
139
|
+
let nodeData = this._nodeDataLibrary.get( this._currentNode );
|
|
140
|
+
|
|
141
|
+
if ( nodeData === undefined ) {
|
|
142
|
+
|
|
143
|
+
nodeData = {
|
|
144
|
+
delta: 0
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
this._nodeDataLibrary.set( this._currentNode, nodeData );
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
nodeData.delta ++;
|
|
152
|
+
|
|
153
|
+
index = this.nodes.indexOf( this._currentNode ) + nodeData.delta;
|
|
154
|
+
|
|
155
|
+
} else {
|
|
156
|
+
|
|
157
|
+
index = this.nodes.length;
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this.nodes.splice( index, 0, node );
|
|
116
164
|
|
|
117
165
|
return this;
|
|
118
166
|
|
|
119
167
|
}
|
|
120
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Adds a node to the stack before the current node.
|
|
171
|
+
*
|
|
172
|
+
* @param {Node} node - The node to add.
|
|
173
|
+
* @return {StackNode} A reference to this stack node.
|
|
174
|
+
*/
|
|
175
|
+
addToStackBefore( node ) {
|
|
176
|
+
|
|
177
|
+
const index = this._currentNode ? this.nodes.indexOf( this._currentNode ) : 0;
|
|
178
|
+
|
|
179
|
+
return this.addToStack( node, index );
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
121
183
|
/**
|
|
122
184
|
* Represent an `if` statement in TSL.
|
|
123
185
|
*
|
|
@@ -205,7 +267,7 @@ class StackNode extends Node {
|
|
|
205
267
|
|
|
206
268
|
} else {
|
|
207
269
|
|
|
208
|
-
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
270
|
+
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.', new StackTrace() );
|
|
209
271
|
|
|
210
272
|
}
|
|
211
273
|
|
|
@@ -267,7 +329,7 @@ class StackNode extends Node {
|
|
|
267
329
|
|
|
268
330
|
for ( const childNode of this.getChildren() ) {
|
|
269
331
|
|
|
270
|
-
if ( childNode.isVarNode && childNode.
|
|
332
|
+
if ( childNode.isVarNode && childNode.isIntent( builder ) ) {
|
|
271
333
|
|
|
272
334
|
if ( childNode.isAssign( builder ) !== true ) {
|
|
273
335
|
|
|
@@ -287,25 +349,26 @@ class StackNode extends Node {
|
|
|
287
349
|
|
|
288
350
|
}
|
|
289
351
|
|
|
290
|
-
get hasOutput() {
|
|
291
|
-
|
|
292
|
-
return this.outputNode && this.outputNode.isNode;
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
|
|
296
352
|
build( builder, ...params ) {
|
|
297
353
|
|
|
298
354
|
const previousStack = getCurrentStack();
|
|
299
355
|
|
|
356
|
+
const buildStage = builder.buildStage;
|
|
357
|
+
|
|
300
358
|
setCurrentStack( this );
|
|
301
359
|
|
|
302
360
|
builder.setActiveStack( this );
|
|
303
361
|
|
|
304
|
-
|
|
362
|
+
//
|
|
363
|
+
|
|
364
|
+
for ( let i = 0; i < this.nodes.length; i ++ ) {
|
|
305
365
|
|
|
306
|
-
|
|
366
|
+
const node = this.nodes[ i ];
|
|
367
|
+
const previousNode = this._currentNode;
|
|
307
368
|
|
|
308
|
-
|
|
369
|
+
this._currentNode = node;
|
|
370
|
+
|
|
371
|
+
if ( node.isVarNode && node.isIntent( builder ) ) {
|
|
309
372
|
|
|
310
373
|
if ( node.isAssign( builder ) !== true ) {
|
|
311
374
|
|
|
@@ -338,15 +401,23 @@ class StackNode extends Node {
|
|
|
338
401
|
|
|
339
402
|
}
|
|
340
403
|
|
|
404
|
+
this._currentNode = previousNode;
|
|
405
|
+
|
|
341
406
|
}
|
|
342
407
|
|
|
343
408
|
//
|
|
344
409
|
|
|
345
410
|
let result;
|
|
346
411
|
|
|
347
|
-
if ( this.
|
|
412
|
+
if ( this.outputNode ) {
|
|
413
|
+
|
|
414
|
+
const buildResult = this.outputNode.build( builder, ...params );
|
|
348
415
|
|
|
349
|
-
|
|
416
|
+
if ( builder.buildStage !== 'generate' || this.outputNode.getNodeType( builder ) !== 'void' ) {
|
|
417
|
+
|
|
418
|
+
result = buildResult;
|
|
419
|
+
|
|
420
|
+
}
|
|
350
421
|
|
|
351
422
|
} else {
|
|
352
423
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Pre-compiled RegExp patterns for ignored files
|
|
2
|
+
const IGNORED_FILES = [
|
|
3
|
+
/^StackTrace\.js$/,
|
|
4
|
+
/^TSLCore\.js$/,
|
|
5
|
+
/^.*Node\.js$/,
|
|
6
|
+
/^three\.webgpu.*\.js$/
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Parses the stack trace and filters out ignored files.
|
|
11
|
+
* Returns an array with function name, file, line, and column.
|
|
12
|
+
*/
|
|
13
|
+
function getFilteredStack( stack ) {
|
|
14
|
+
|
|
15
|
+
// Pattern to extract function name, file, line, and column from different browsers
|
|
16
|
+
// Chrome: "at functionName (file.js:1:2)" or "at file.js:1:2"
|
|
17
|
+
// Firefox: "functionName@file.js:1:2"
|
|
18
|
+
const regex = /(?:at\s+(.+?)\s+\()?(?:(.+?)@)?([^@\s()]+):(\d+):(\d+)/;
|
|
19
|
+
|
|
20
|
+
return stack.split( '\n' )
|
|
21
|
+
.map( line => {
|
|
22
|
+
|
|
23
|
+
const match = line.match( regex );
|
|
24
|
+
if ( ! match ) return null; // Skip if line format is invalid
|
|
25
|
+
|
|
26
|
+
// Chrome: match[1], Firefox: match[2]
|
|
27
|
+
const fn = match[ 1 ] || match[ 2 ] || '';
|
|
28
|
+
const file = match[ 3 ].split( '?' )[ 0 ]; // Clean file name (Vite/HMR)
|
|
29
|
+
const lineNum = parseInt( match[ 4 ], 10 );
|
|
30
|
+
const column = parseInt( match[ 5 ], 10 );
|
|
31
|
+
|
|
32
|
+
// Extract only the filename from full path
|
|
33
|
+
const fileName = file.split( '/' ).pop();
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
fn: fn,
|
|
37
|
+
file: fileName,
|
|
38
|
+
line: lineNum,
|
|
39
|
+
column: column
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} )
|
|
43
|
+
.filter( frame => {
|
|
44
|
+
|
|
45
|
+
// Only keep frames that are valid and not in the ignore list
|
|
46
|
+
return frame && ! IGNORED_FILES.some( regex => regex.test( frame.file ) );
|
|
47
|
+
|
|
48
|
+
} );
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Class representing a stack trace for debugging purposes.
|
|
54
|
+
*/
|
|
55
|
+
class StackTrace {
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Creates a StackTrace instance by capturing and filtering the current stack trace.
|
|
59
|
+
*
|
|
60
|
+
* @param {Error|string|null} stackMessage - An optional stack trace to use instead of capturing a new one.
|
|
61
|
+
*/
|
|
62
|
+
constructor( stackMessage = null ) {
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* This flag can be used for type testing.
|
|
66
|
+
*
|
|
67
|
+
* @type {boolean}
|
|
68
|
+
* @readonly
|
|
69
|
+
* @default true
|
|
70
|
+
*/
|
|
71
|
+
this.isStackTrace = true;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The stack trace.
|
|
75
|
+
*
|
|
76
|
+
* @type {Array<{fn: string, file: string, line: number, column: number}>}
|
|
77
|
+
*/
|
|
78
|
+
this.stack = getFilteredStack( stackMessage ? stackMessage : new Error().stack );
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns a formatted location string of the top stack frame.
|
|
84
|
+
*
|
|
85
|
+
* @returns {string} The formatted stack trace message.
|
|
86
|
+
*/
|
|
87
|
+
getLocation() {
|
|
88
|
+
|
|
89
|
+
if ( this.stack.length === 0 ) {
|
|
90
|
+
|
|
91
|
+
return '[Unknown location]';
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const mainStack = this.stack[ 0 ];
|
|
96
|
+
|
|
97
|
+
const fn = mainStack.fn;
|
|
98
|
+
const fnName = fn ? `"${ fn }()" at ` : '';
|
|
99
|
+
|
|
100
|
+
return `${fnName}"${mainStack.file}:${mainStack.line}"`; // :${mainStack.column}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Returns the full error message including the stack trace.
|
|
106
|
+
*
|
|
107
|
+
* @param {string} message - The error message.
|
|
108
|
+
* @returns {string} The full error message with stack trace.
|
|
109
|
+
*/
|
|
110
|
+
getError( message ) {
|
|
111
|
+
|
|
112
|
+
if ( this.stack.length === 0 ) {
|
|
113
|
+
|
|
114
|
+
return message;
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Output: "Error: message\n at functionName (file.js:line:column)"
|
|
119
|
+
const stackString = this.stack.map( frame => {
|
|
120
|
+
|
|
121
|
+
const location = `${ frame.file }:${ frame.line }:${ frame.column }`;
|
|
122
|
+
|
|
123
|
+
if ( frame.fn ) {
|
|
124
|
+
|
|
125
|
+
return ` at ${ frame.fn } (${ location })`;
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return ` at ${ location }`;
|
|
130
|
+
|
|
131
|
+
} ).join( '\n' );
|
|
132
|
+
|
|
133
|
+
return `${ message }\n${ stackString }`;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export default StackTrace;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import StructTypeNode from './StructTypeNode.js';
|
|
3
|
-
import {
|
|
3
|
+
import { nodeProxyConstructor } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* StructNode allows to create custom structures with multiple members.
|
|
@@ -41,7 +41,7 @@ class StructNode extends Node {
|
|
|
41
41
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
generateNodeType( builder ) {
|
|
45
45
|
|
|
46
46
|
return this.structTypeNode.getNodeType( builder );
|
|
47
47
|
|
|
@@ -53,6 +53,21 @@ class StructNode extends Node {
|
|
|
53
53
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
_getChildren() {
|
|
57
|
+
|
|
58
|
+
// Ensure struct type is the last child for correct code generation order
|
|
59
|
+
|
|
60
|
+
const children = super._getChildren();
|
|
61
|
+
|
|
62
|
+
const structTypeProperty = children.find( child => child.childNode === this.structTypeNode );
|
|
63
|
+
|
|
64
|
+
children.splice( children.indexOf( structTypeProperty ), 1 );
|
|
65
|
+
children.push( structTypeProperty );
|
|
66
|
+
|
|
67
|
+
return children;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
56
71
|
generate( builder ) {
|
|
57
72
|
|
|
58
73
|
const nodeVar = builder.getVarFromNode( this );
|
|
@@ -80,7 +95,7 @@ export default StructNode;
|
|
|
80
95
|
*/
|
|
81
96
|
export const struct = ( membersLayout, name = null ) => {
|
|
82
97
|
|
|
83
|
-
const
|
|
98
|
+
const structType = new StructTypeNode( membersLayout, name );
|
|
84
99
|
|
|
85
100
|
const struct = ( ...params ) => {
|
|
86
101
|
|
|
@@ -108,13 +123,10 @@ export const struct = ( membersLayout, name = null ) => {
|
|
|
108
123
|
|
|
109
124
|
}
|
|
110
125
|
|
|
111
|
-
return
|
|
126
|
+
return new StructNode( structType, values );
|
|
112
127
|
|
|
113
128
|
};
|
|
114
129
|
|
|
115
|
-
struct
|
|
116
|
-
struct.isStruct = true;
|
|
117
|
-
|
|
118
|
-
return struct;
|
|
130
|
+
return nodeProxyConstructor( struct, structType );
|
|
119
131
|
|
|
120
132
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import Node from './Node.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getAlignmentFromType, getMemoryLengthFromType } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates a layout for struct members.
|
|
@@ -74,41 +74,35 @@ class StructTypeNode extends Node {
|
|
|
74
74
|
* @readonly
|
|
75
75
|
* @default true
|
|
76
76
|
*/
|
|
77
|
-
this.
|
|
77
|
+
this.isStructTypeNode = true;
|
|
78
78
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* Returns the length of the struct.
|
|
83
|
-
* The length is calculated by summing the lengths of the struct's members.
|
|
82
|
+
* Returns the length of the struct in 4-byte elements (e.g. float or int components).
|
|
83
|
+
* The length is calculated by summing the lengths of the struct's members, accounting for memory alignment.
|
|
84
|
+
* To get the size in bytes, multiply the returned value by 4.
|
|
84
85
|
*
|
|
85
|
-
* @returns {number} The length of the struct.
|
|
86
|
+
* @returns {number} The length of the struct in 4-byte elements.
|
|
86
87
|
*/
|
|
87
88
|
getLength() {
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
let offset = 0; // global buffer offset in bytes
|
|
90
|
+
let maxAlignment = 1; // maximum alignment value in this struct
|
|
91
|
+
let offset = 0; // global buffer offset in 4 byte elements
|
|
93
92
|
|
|
94
93
|
for ( const member of this.membersLayout ) {
|
|
95
94
|
|
|
96
95
|
const type = member.type;
|
|
97
96
|
|
|
98
|
-
const itemSize = getMemoryLengthFromType( type )
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
|
|
102
|
-
const chunkPadding = chunkOffset % boundary; // required padding to match boundary
|
|
103
|
-
const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
|
|
104
|
-
|
|
105
|
-
offset += chunkPadding;
|
|
97
|
+
const itemSize = getMemoryLengthFromType( type );
|
|
98
|
+
const alignment = getAlignmentFromType( type );
|
|
99
|
+
maxAlignment = Math.max( maxAlignment, alignment );
|
|
106
100
|
|
|
107
|
-
//
|
|
108
|
-
|
|
101
|
+
const chunkOffset = offset % maxAlignment; // offset in the current chunk of maxAlignment elements
|
|
102
|
+
const overhang = chunkOffset % alignment; // distance from the last aligned offset
|
|
103
|
+
if ( overhang !== 0 ) {
|
|
109
104
|
|
|
110
|
-
|
|
111
|
-
offset += ( GPU_CHUNK_BYTES - chunkStart );
|
|
105
|
+
offset += alignment - overhang; // move to next aligned offset
|
|
112
106
|
|
|
113
107
|
}
|
|
114
108
|
|
|
@@ -116,7 +110,7 @@ class StructTypeNode extends Node {
|
|
|
116
110
|
|
|
117
111
|
}
|
|
118
112
|
|
|
119
|
-
return ( Math.ceil( offset /
|
|
113
|
+
return ( Math.ceil( offset / maxAlignment ) * maxAlignment ); // ensure length is a multiple of maxAlignment
|
|
120
114
|
|
|
121
115
|
}
|
|
122
116
|
|
|
@@ -128,7 +122,7 @@ class StructTypeNode extends Node {
|
|
|
128
122
|
|
|
129
123
|
}
|
|
130
124
|
|
|
131
|
-
|
|
125
|
+
generateNodeType( builder ) {
|
|
132
126
|
|
|
133
127
|
const structType = builder.getStructTypeFromNode( this, this.membersLayout, this.name );
|
|
134
128
|
|
|
@@ -46,7 +46,7 @@ class SubBuildNode extends Node {
|
|
|
46
46
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
generateNodeType( builder ) {
|
|
50
50
|
|
|
51
51
|
if ( this.nodeType !== null ) return this.nodeType;
|
|
52
52
|
|
|
@@ -86,4 +86,4 @@ export default SubBuildNode;
|
|
|
86
86
|
* @param {?string} [type=null] - The type of the node, if known.
|
|
87
87
|
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
88
|
*/
|
|
89
|
-
export const subBuild = ( node, name, type = null ) =>
|
|
89
|
+
export const subBuild = ( node, name, type = null ) => new SubBuildNode( nodeObject( node ), name, type );
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
+
import { NodeUpdateType } from './constants.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* This node can be used to group single instances of {@link UniformNode}
|
|
@@ -27,8 +28,9 @@ class UniformGroupNode extends Node {
|
|
|
27
28
|
* @param {string} name - The name of the uniform group node.
|
|
28
29
|
* @param {boolean} [shared=false] - Whether this uniform group node is shared or not.
|
|
29
30
|
* @param {number} [order=1] - Influences the internal sorting.
|
|
31
|
+
* @param {string|null} [updateType=null] - The update type of the uniform group node.
|
|
30
32
|
*/
|
|
31
|
-
constructor( name, shared = false, order = 1 ) {
|
|
33
|
+
constructor( name, shared = false, order = 1, updateType = null ) {
|
|
32
34
|
|
|
33
35
|
super( 'string' );
|
|
34
36
|
|
|
@@ -56,6 +58,14 @@ class UniformGroupNode extends Node {
|
|
|
56
58
|
*/
|
|
57
59
|
this.order = order;
|
|
58
60
|
|
|
61
|
+
/**
|
|
62
|
+
* The update type of the uniform group node.
|
|
63
|
+
*
|
|
64
|
+
* @type {string|null}
|
|
65
|
+
* @default null
|
|
66
|
+
*/
|
|
67
|
+
this.updateType = updateType;
|
|
68
|
+
|
|
59
69
|
/**
|
|
60
70
|
* This flag can be used for type testing.
|
|
61
71
|
*
|
|
@@ -67,6 +77,21 @@ class UniformGroupNode extends Node {
|
|
|
67
77
|
|
|
68
78
|
}
|
|
69
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Marks the uniform group node as needing an update.
|
|
82
|
+
* This will trigger the necessary updates in the rendering process.
|
|
83
|
+
*/
|
|
84
|
+
update() {
|
|
85
|
+
|
|
86
|
+
this.needsUpdate = true;
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Serializes the uniform group node to a JSON object.
|
|
92
|
+
*
|
|
93
|
+
* @param {Object} data - The object to store the serialized data.
|
|
94
|
+
*/
|
|
70
95
|
serialize( data ) {
|
|
71
96
|
|
|
72
97
|
super.serialize( data );
|
|
@@ -77,6 +102,11 @@ class UniformGroupNode extends Node {
|
|
|
77
102
|
|
|
78
103
|
}
|
|
79
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Deserializes the uniform group node from a JSON object.
|
|
107
|
+
*
|
|
108
|
+
* @param {Object} data - The object containing the serialized data.
|
|
109
|
+
*/
|
|
80
110
|
deserialize( data ) {
|
|
81
111
|
|
|
82
112
|
super.deserialize( data );
|
|
@@ -99,7 +129,7 @@ export default UniformGroupNode;
|
|
|
99
129
|
* @param {string} name - The name of the uniform group node.
|
|
100
130
|
* @returns {UniformGroupNode}
|
|
101
131
|
*/
|
|
102
|
-
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
132
|
+
export const uniformGroup = ( name, order = 1, updateType = null ) => new UniformGroupNode( name, false, order, updateType );
|
|
103
133
|
|
|
104
134
|
/**
|
|
105
135
|
* TSL function for creating a shared uniform group node with the given name and order.
|
|
@@ -110,7 +140,7 @@ export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
|
110
140
|
* @param {number} [order=0] - Influences the internal sorting.
|
|
111
141
|
* @returns {UniformGroupNode}
|
|
112
142
|
*/
|
|
113
|
-
export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
|
|
143
|
+
export const sharedUniformGroup = ( name, order = 0, updateType = null ) => new UniformGroupNode( name, true, order, updateType );
|
|
114
144
|
|
|
115
145
|
/**
|
|
116
146
|
* TSL object that represents a shared uniform group node which is updated once per frame.
|
|
@@ -118,7 +148,7 @@ export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( n
|
|
|
118
148
|
* @tsl
|
|
119
149
|
* @type {UniformGroupNode}
|
|
120
150
|
*/
|
|
121
|
-
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
151
|
+
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame', 0, NodeUpdateType.FRAME );
|
|
122
152
|
|
|
123
153
|
/**
|
|
124
154
|
* TSL object that represents a shared uniform group node which is updated once per render.
|
|
@@ -126,7 +156,7 @@ export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
|
126
156
|
* @tsl
|
|
127
157
|
* @type {UniformGroupNode}
|
|
128
158
|
*/
|
|
129
|
-
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
159
|
+
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render', 0, NodeUpdateType.RENDER );
|
|
130
160
|
|
|
131
161
|
/**
|
|
132
162
|
* TSL object that represents a uniform group node which is updated once per object.
|
|
@@ -134,4 +164,4 @@ export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
|
134
164
|
* @tsl
|
|
135
165
|
* @type {UniformGroupNode}
|
|
136
166
|
*/
|
|
137
|
-
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
167
|
+
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object', 1, NodeUpdateType.OBJECT );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
2
3
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
|
-
import {
|
|
4
|
+
import { getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
5
|
import { getValueFromType } from './NodeUtils.js';
|
|
5
6
|
import { warn } from '../../utils.js';
|
|
6
7
|
|
|
@@ -78,7 +79,7 @@ class UniformNode extends InputNode {
|
|
|
78
79
|
*/
|
|
79
80
|
label( name ) {
|
|
80
81
|
|
|
81
|
-
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
82
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.', new StackTrace() ); // @deprecated r179
|
|
82
83
|
|
|
83
84
|
return this.setName( name );
|
|
84
85
|
|
|
@@ -235,9 +236,24 @@ export const uniform = ( value, type ) => {
|
|
|
235
236
|
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
|
|
239
|
-
value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
|
|
239
|
+
if ( value && value.isNode === true ) {
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
let v = value.value;
|
|
242
|
+
|
|
243
|
+
value.traverse( n => {
|
|
244
|
+
|
|
245
|
+
if ( n.isConstNode === true ) {
|
|
246
|
+
|
|
247
|
+
v = n.value;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
} );
|
|
252
|
+
|
|
253
|
+
value = v;
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return new UniformNode( value, nodeType );
|
|
242
258
|
|
|
243
259
|
};
|