super-three 0.181.0 → 0.184.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- 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 +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- 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/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- 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 +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- 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 +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- 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 +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- 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 +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -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/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- 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/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- 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/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- 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 +1 -1
- 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 +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- 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 +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- 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/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/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/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.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/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- 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 +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- 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 +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -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 +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- 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 +2 -3
- 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 +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- 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 +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- 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/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 +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- 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/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- 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 +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -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/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -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/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- 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 +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- 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 +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- 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/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- 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 +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -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/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- 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 +2 -0
- 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_maps.glsl.js +7 -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 +1 -1
- 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} +1 -2
- 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 +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- 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 +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- 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 +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- 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/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/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- 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
|
@@ -42,11 +42,17 @@ class OutputStructNode extends Node {
|
|
|
42
42
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
generateNodeType( /*builder*/ ) {
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
return 'OutputType';
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
generate( builder ) {
|
|
52
|
+
|
|
53
|
+
const nodeData = builder.getDataFromNode( this );
|
|
54
|
+
|
|
55
|
+
if ( nodeData.membersLayout === undefined ) {
|
|
50
56
|
|
|
51
57
|
const members = this.members;
|
|
52
58
|
const membersLayout = [];
|
|
@@ -60,16 +66,12 @@ class OutputStructNode extends Node {
|
|
|
60
66
|
|
|
61
67
|
}
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
nodeData.membersLayout = membersLayout;
|
|
70
|
+
nodeData.structType = builder.getOutputStructTypeFromNode( this, nodeData.membersLayout );
|
|
65
71
|
|
|
66
72
|
}
|
|
67
73
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
generate( builder ) {
|
|
74
|
+
//
|
|
73
75
|
|
|
74
76
|
const propertyName = builder.getOutputStructName();
|
|
75
77
|
const members = this.members;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
1
|
import { error } from '../../utils.js';
|
|
2
|
+
import StackTrace from '../core/StackTrace.js';
|
|
3
3
|
import PropertyNode from './PropertyNode.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -56,7 +56,7 @@ class ParameterNode extends PropertyNode {
|
|
|
56
56
|
|
|
57
57
|
} else {
|
|
58
58
|
|
|
59
|
-
error( `TSL: Member "${ name }" not found in struct "${ type }"
|
|
59
|
+
error( `TSL: Member "${ name }" not found in struct "${ type }".`, new StackTrace() );
|
|
60
60
|
|
|
61
61
|
memberType = 'float';
|
|
62
62
|
|
|
@@ -68,7 +68,7 @@ class ParameterNode extends PropertyNode {
|
|
|
68
68
|
|
|
69
69
|
getHash() {
|
|
70
70
|
|
|
71
|
-
return this.
|
|
71
|
+
return String( this.id );
|
|
72
72
|
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -91,4 +91,4 @@ export default ParameterNode;
|
|
|
91
91
|
* @param {?string} name - The name of the parameter in the shader.
|
|
92
92
|
* @returns {ParameterNode}
|
|
93
93
|
*/
|
|
94
|
-
export const parameter = ( type, name ) =>
|
|
94
|
+
export const parameter = ( type, name ) => new ParameterNode( type, name );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { nodeImmutable
|
|
2
|
+
import { nodeImmutable } from '../tsl/TSLCore.js';
|
|
3
3
|
import { hashString } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -113,7 +113,7 @@ export default PropertyNode;
|
|
|
113
113
|
* @param {?string} [name=null] - The name of the property in the shader.
|
|
114
114
|
* @returns {PropertyNode}
|
|
115
115
|
*/
|
|
116
|
-
export const property = ( type, name ) =>
|
|
116
|
+
export const property = ( type, name ) => new PropertyNode( type, name );
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
119
|
* TSL function for creating a varying property node.
|
|
@@ -124,7 +124,7 @@ export const property = ( type, name ) => nodeObject( new PropertyNode( type, na
|
|
|
124
124
|
* @param {?string} [name=null] - The name of the varying in the shader.
|
|
125
125
|
* @returns {PropertyNode}
|
|
126
126
|
*/
|
|
127
|
-
export const varyingProperty = ( type, name ) =>
|
|
127
|
+
export const varyingProperty = ( type, name ) => new PropertyNode( type, name, true );
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* TSL object that represents the shader variable `DiffuseColor`.
|
|
@@ -134,6 +134,14 @@ export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( t
|
|
|
134
134
|
*/
|
|
135
135
|
export const diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* TSL object that represents the shader variable `DiffuseContribution`.
|
|
139
|
+
*
|
|
140
|
+
* @tsl
|
|
141
|
+
* @type {PropertyNode<vec3>}
|
|
142
|
+
*/
|
|
143
|
+
export const diffuseContribution = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'DiffuseContribution' );
|
|
144
|
+
|
|
137
145
|
/**
|
|
138
146
|
* TSL object that represents the shader variable `EmissiveColor`.
|
|
139
147
|
*
|
|
@@ -254,6 +262,14 @@ export const anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'A
|
|
|
254
262
|
*/
|
|
255
263
|
export const specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
|
|
256
264
|
|
|
265
|
+
/**
|
|
266
|
+
* TSL object that represents the shader variable `SpecularColorBlended`.
|
|
267
|
+
*
|
|
268
|
+
* @tsl
|
|
269
|
+
* @type {PropertyNode<color>}
|
|
270
|
+
*/
|
|
271
|
+
export const specularColorBlended = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColorBlended' );
|
|
272
|
+
|
|
257
273
|
/**
|
|
258
274
|
* TSL object that represents the shader variable `SpecularF90`.
|
|
259
275
|
*
|
|
@@ -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,15 @@ 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
|
+
|
|
71
81
|
/**
|
|
72
82
|
* This flag can be used for type testing.
|
|
73
83
|
*
|
|
@@ -81,19 +91,19 @@ class StackNode extends Node {
|
|
|
81
91
|
|
|
82
92
|
getElementType( builder ) {
|
|
83
93
|
|
|
84
|
-
return this.hasOutput ? this.outputNode.getElementType( builder ) : 'void';
|
|
94
|
+
return this.hasOutput( builder ) ? this.outputNode.getElementType( builder ) : 'void';
|
|
85
95
|
|
|
86
96
|
}
|
|
87
97
|
|
|
88
|
-
|
|
98
|
+
generateNodeType( builder ) {
|
|
89
99
|
|
|
90
|
-
return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
|
|
100
|
+
return this.hasOutput( builder ) ? this.outputNode.getNodeType( builder ) : 'void';
|
|
91
101
|
|
|
92
102
|
}
|
|
93
103
|
|
|
94
104
|
getMemberType( builder, name ) {
|
|
95
105
|
|
|
96
|
-
return this.hasOutput ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
106
|
+
return this.hasOutput( builder ) ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
97
107
|
|
|
98
108
|
}
|
|
99
109
|
|
|
@@ -101,23 +111,38 @@ class StackNode extends Node {
|
|
|
101
111
|
* Adds a node to this stack.
|
|
102
112
|
*
|
|
103
113
|
* @param {Node} node - The node to add.
|
|
114
|
+
* @param {number} [index=this.nodes.length] - The index where the node should be added.
|
|
104
115
|
* @return {StackNode} A reference to this stack node.
|
|
105
116
|
*/
|
|
106
|
-
addToStack( node ) {
|
|
117
|
+
addToStack( node, index = this.nodes.length ) {
|
|
107
118
|
|
|
108
119
|
if ( node.isNode !== true ) {
|
|
109
120
|
|
|
110
|
-
error( 'TSL: Invalid node added to stack.' );
|
|
121
|
+
error( 'TSL: Invalid node added to stack.', new StackTrace() );
|
|
111
122
|
return this;
|
|
112
123
|
|
|
113
124
|
}
|
|
114
125
|
|
|
115
|
-
this.nodes.
|
|
126
|
+
this.nodes.splice( index, 0, node );
|
|
116
127
|
|
|
117
128
|
return this;
|
|
118
129
|
|
|
119
130
|
}
|
|
120
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Adds a node to the stack before the current node.
|
|
134
|
+
*
|
|
135
|
+
* @param {Node} node - The node to add.
|
|
136
|
+
* @return {StackNode} A reference to this stack node.
|
|
137
|
+
*/
|
|
138
|
+
addToStackBefore( node ) {
|
|
139
|
+
|
|
140
|
+
const index = this._currentNode ? this.nodes.indexOf( this._currentNode ) : 0;
|
|
141
|
+
|
|
142
|
+
return this.addToStack( node, index );
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
121
146
|
/**
|
|
122
147
|
* Represent an `if` statement in TSL.
|
|
123
148
|
*
|
|
@@ -205,7 +230,7 @@ class StackNode extends Node {
|
|
|
205
230
|
|
|
206
231
|
} else {
|
|
207
232
|
|
|
208
|
-
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
233
|
+
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.', new StackTrace() );
|
|
209
234
|
|
|
210
235
|
}
|
|
211
236
|
|
|
@@ -267,7 +292,7 @@ class StackNode extends Node {
|
|
|
267
292
|
|
|
268
293
|
for ( const childNode of this.getChildren() ) {
|
|
269
294
|
|
|
270
|
-
if ( childNode.isVarNode && childNode.
|
|
295
|
+
if ( childNode.isVarNode && childNode.isIntent( builder ) ) {
|
|
271
296
|
|
|
272
297
|
if ( childNode.isAssign( builder ) !== true ) {
|
|
273
298
|
|
|
@@ -287,9 +312,9 @@ class StackNode extends Node {
|
|
|
287
312
|
|
|
288
313
|
}
|
|
289
314
|
|
|
290
|
-
|
|
315
|
+
hasOutput( builder ) {
|
|
291
316
|
|
|
292
|
-
return this.outputNode && this.outputNode.isNode;
|
|
317
|
+
return this.outputNode && this.outputNode.isNode && this.outputNode.getNodeType( builder ) !== 'void';
|
|
293
318
|
|
|
294
319
|
}
|
|
295
320
|
|
|
@@ -297,19 +322,23 @@ class StackNode extends Node {
|
|
|
297
322
|
|
|
298
323
|
const previousStack = getCurrentStack();
|
|
299
324
|
|
|
325
|
+
const buildStage = builder.buildStage;
|
|
326
|
+
|
|
300
327
|
setCurrentStack( this );
|
|
301
328
|
|
|
302
329
|
builder.setActiveStack( this );
|
|
303
330
|
|
|
304
|
-
|
|
331
|
+
//
|
|
305
332
|
|
|
306
|
-
|
|
333
|
+
const buildNode = ( node ) => {
|
|
307
334
|
|
|
308
|
-
|
|
335
|
+
this._currentNode = node;
|
|
336
|
+
|
|
337
|
+
if ( node.isVarNode && node.isIntent( builder ) ) {
|
|
309
338
|
|
|
310
339
|
if ( node.isAssign( builder ) !== true ) {
|
|
311
340
|
|
|
312
|
-
|
|
341
|
+
return;
|
|
313
342
|
|
|
314
343
|
}
|
|
315
344
|
|
|
@@ -330,7 +359,7 @@ class StackNode extends Node {
|
|
|
330
359
|
|
|
331
360
|
if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
|
|
332
361
|
|
|
333
|
-
|
|
362
|
+
return; // skip var nodes that are only used in .toVarying()
|
|
334
363
|
|
|
335
364
|
}
|
|
336
365
|
|
|
@@ -338,13 +367,33 @@ class StackNode extends Node {
|
|
|
338
367
|
|
|
339
368
|
}
|
|
340
369
|
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
//
|
|
373
|
+
|
|
374
|
+
const nodes = [ ...this.nodes ];
|
|
375
|
+
|
|
376
|
+
for ( const node of nodes ) {
|
|
377
|
+
|
|
378
|
+
buildNode( node );
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
this._currentNode = null;
|
|
383
|
+
|
|
384
|
+
const newNodes = this.nodes.filter( ( node ) => nodes.indexOf( node ) === - 1 );
|
|
385
|
+
|
|
386
|
+
for ( const node of newNodes ) {
|
|
387
|
+
|
|
388
|
+
buildNode( node );
|
|
389
|
+
|
|
341
390
|
}
|
|
342
391
|
|
|
343
392
|
//
|
|
344
393
|
|
|
345
394
|
let result;
|
|
346
395
|
|
|
347
|
-
if ( this.hasOutput ) {
|
|
396
|
+
if ( this.hasOutput( builder ) ) {
|
|
348
397
|
|
|
349
398
|
result = this.outputNode.build( builder, ...params );
|
|
350
399
|
|
|
@@ -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,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import StructTypeNode from './StructTypeNode.js';
|
|
3
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* StructNode allows to create custom structures with multiple members.
|
|
@@ -41,7 +40,7 @@ class StructNode extends Node {
|
|
|
41
40
|
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
generateNodeType( builder ) {
|
|
45
44
|
|
|
46
45
|
return this.structTypeNode.getNodeType( builder );
|
|
47
46
|
|
|
@@ -53,6 +52,21 @@ class StructNode extends Node {
|
|
|
53
52
|
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
_getChildren() {
|
|
56
|
+
|
|
57
|
+
// Ensure struct type is the last child for correct code generation order
|
|
58
|
+
|
|
59
|
+
const children = super._getChildren();
|
|
60
|
+
|
|
61
|
+
const structTypeProperty = children.find( child => child.childNode === this.structTypeNode );
|
|
62
|
+
|
|
63
|
+
children.splice( children.indexOf( structTypeProperty ), 1 );
|
|
64
|
+
children.push( structTypeProperty );
|
|
65
|
+
|
|
66
|
+
return children;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
56
70
|
generate( builder ) {
|
|
57
71
|
|
|
58
72
|
const nodeVar = builder.getVarFromNode( this );
|
|
@@ -108,7 +122,7 @@ export const struct = ( membersLayout, name = null ) => {
|
|
|
108
122
|
|
|
109
123
|
}
|
|
110
124
|
|
|
111
|
-
return
|
|
125
|
+
return new StructNode( structLayout, values );
|
|
112
126
|
|
|
113
127
|
};
|
|
114
128
|
|
|
@@ -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.
|
|
@@ -86,29 +86,23 @@ class StructTypeNode extends Node {
|
|
|
86
86
|
*/
|
|
87
87
|
getLength() {
|
|
88
88
|
|
|
89
|
-
const GPU_CHUNK_BYTES = 8;
|
|
90
89
|
const BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;
|
|
91
|
-
|
|
92
|
-
let offset = 0; // global buffer offset in
|
|
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 ) / BYTES_PER_ELEMENT;
|
|
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 );
|