super-three 0.173.5 → 0.176.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/build/three.cjs +21993 -1359
- package/build/three.core.js +21129 -1188
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +835 -142
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19493 -17617
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19477 -17617
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +144 -42
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +194 -71
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +74 -30
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +87 -19
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +56 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +90 -70
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +75 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +134 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +268 -134
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +3 -4
- package/src/Three.TSL.js +7 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +169 -19
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +339 -0
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +28 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/EventDispatcher.js +44 -2
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +63 -0
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +45 -5
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +130 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +94 -0
- package/src/math/MathUtils.js +405 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +185 -9
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -22,8 +22,6 @@ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
|
22
22
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
23
23
|
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
24
24
|
|
|
25
|
-
import PMREMGenerator from '../../renderers/common/extras/PMREMGenerator.js';
|
|
26
|
-
|
|
27
25
|
import BindGroup from '../../renderers/common/BindGroup.js';
|
|
28
26
|
|
|
29
27
|
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
|
|
@@ -87,14 +85,14 @@ class NodeBuilder {
|
|
|
87
85
|
/**
|
|
88
86
|
* The material of the 3D object.
|
|
89
87
|
*
|
|
90
|
-
* @type {Material
|
|
88
|
+
* @type {?Material}
|
|
91
89
|
*/
|
|
92
90
|
this.material = ( object && object.material ) || null;
|
|
93
91
|
|
|
94
92
|
/**
|
|
95
93
|
* The geometry of the 3D object.
|
|
96
94
|
*
|
|
97
|
-
* @type {BufferGeometry
|
|
95
|
+
* @type {?BufferGeometry}
|
|
98
96
|
*/
|
|
99
97
|
this.geometry = ( object && object.geometry ) || null;
|
|
100
98
|
|
|
@@ -115,7 +113,7 @@ class NodeBuilder {
|
|
|
115
113
|
/**
|
|
116
114
|
* The scene the 3D object belongs to.
|
|
117
115
|
*
|
|
118
|
-
* @type {Scene
|
|
116
|
+
* @type {?Scene}
|
|
119
117
|
* @default null
|
|
120
118
|
*/
|
|
121
119
|
this.scene = null;
|
|
@@ -123,7 +121,7 @@ class NodeBuilder {
|
|
|
123
121
|
/**
|
|
124
122
|
* The camera the 3D object is rendered with.
|
|
125
123
|
*
|
|
126
|
-
* @type {Camera
|
|
124
|
+
* @type {?Camera}
|
|
127
125
|
* @default null
|
|
128
126
|
*/
|
|
129
127
|
this.camera = null;
|
|
@@ -167,14 +165,14 @@ class NodeBuilder {
|
|
|
167
165
|
/**
|
|
168
166
|
* A dictionary that assigns each node to a unique hash.
|
|
169
167
|
*
|
|
170
|
-
* @type {Object<
|
|
168
|
+
* @type {Object<number,Node>}
|
|
171
169
|
*/
|
|
172
170
|
this.hashNodes = {};
|
|
173
171
|
|
|
174
172
|
/**
|
|
175
173
|
* A reference to a node material observer.
|
|
176
174
|
*
|
|
177
|
-
* @type {NodeMaterialObserver
|
|
175
|
+
* @type {?NodeMaterialObserver}
|
|
178
176
|
* @default null
|
|
179
177
|
*/
|
|
180
178
|
this.observer = null;
|
|
@@ -182,7 +180,7 @@ class NodeBuilder {
|
|
|
182
180
|
/**
|
|
183
181
|
* A reference to the current lights node.
|
|
184
182
|
*
|
|
185
|
-
* @type {LightsNode
|
|
183
|
+
* @type {?LightsNode}
|
|
186
184
|
* @default null
|
|
187
185
|
*/
|
|
188
186
|
this.lightsNode = null;
|
|
@@ -190,7 +188,7 @@ class NodeBuilder {
|
|
|
190
188
|
/**
|
|
191
189
|
* A reference to the current environment node.
|
|
192
190
|
*
|
|
193
|
-
* @type {Node
|
|
191
|
+
* @type {?Node}
|
|
194
192
|
* @default null
|
|
195
193
|
*/
|
|
196
194
|
this.environmentNode = null;
|
|
@@ -198,7 +196,7 @@ class NodeBuilder {
|
|
|
198
196
|
/**
|
|
199
197
|
* A reference to the current fog node.
|
|
200
198
|
*
|
|
201
|
-
* @type {FogNode
|
|
199
|
+
* @type {?FogNode}
|
|
202
200
|
* @default null
|
|
203
201
|
*/
|
|
204
202
|
this.fogNode = null;
|
|
@@ -206,42 +204,42 @@ class NodeBuilder {
|
|
|
206
204
|
/**
|
|
207
205
|
* The current clipping context.
|
|
208
206
|
*
|
|
209
|
-
* @type {ClippingContext
|
|
207
|
+
* @type {?ClippingContext}
|
|
210
208
|
*/
|
|
211
209
|
this.clippingContext = null;
|
|
212
210
|
|
|
213
211
|
/**
|
|
214
212
|
* The generated vertex shader.
|
|
215
213
|
*
|
|
216
|
-
* @type {
|
|
214
|
+
* @type {?string}
|
|
217
215
|
*/
|
|
218
216
|
this.vertexShader = null;
|
|
219
217
|
|
|
220
218
|
/**
|
|
221
219
|
* The generated fragment shader.
|
|
222
220
|
*
|
|
223
|
-
* @type {
|
|
221
|
+
* @type {?string}
|
|
224
222
|
*/
|
|
225
223
|
this.fragmentShader = null;
|
|
226
224
|
|
|
227
225
|
/**
|
|
228
226
|
* The generated compute shader.
|
|
229
227
|
*
|
|
230
|
-
* @type {
|
|
228
|
+
* @type {?string}
|
|
231
229
|
*/
|
|
232
230
|
this.computeShader = null;
|
|
233
231
|
|
|
234
232
|
/**
|
|
235
233
|
* Nodes used in the primary flow of code generation.
|
|
236
234
|
*
|
|
237
|
-
* @type {Object<
|
|
235
|
+
* @type {Object<string,Array<Node>>}
|
|
238
236
|
*/
|
|
239
237
|
this.flowNodes = { vertex: [], fragment: [], compute: [] };
|
|
240
238
|
|
|
241
239
|
/**
|
|
242
240
|
* Nodes code from `.flowNodes`.
|
|
243
241
|
*
|
|
244
|
-
* @type {Object<
|
|
242
|
+
* @type {Object<string,string>}
|
|
245
243
|
*/
|
|
246
244
|
this.flowCode = { vertex: '', fragment: '', compute: '' };
|
|
247
245
|
|
|
@@ -278,7 +276,7 @@ class NodeBuilder {
|
|
|
278
276
|
/**
|
|
279
277
|
* Reference to the array of bind groups.
|
|
280
278
|
*
|
|
281
|
-
* @type {Array<BindGroup
|
|
279
|
+
* @type {?Array<BindGroup>}
|
|
282
280
|
*/
|
|
283
281
|
this.bindGroups = null;
|
|
284
282
|
|
|
@@ -309,23 +307,32 @@ class NodeBuilder {
|
|
|
309
307
|
* This dictionary holds the (native) node codes of this builder.
|
|
310
308
|
* The codes are maintained in an array for each shader stage.
|
|
311
309
|
*
|
|
312
|
-
* @type {Object<
|
|
310
|
+
* @type {Object<string,Array<NodeCode>>}
|
|
313
311
|
*/
|
|
314
312
|
this.codes = {};
|
|
315
313
|
|
|
316
314
|
/**
|
|
317
315
|
* This dictionary holds the node variables of this builder.
|
|
318
316
|
* The variables are maintained in an array for each shader stage.
|
|
317
|
+
* This dictionary is also used to count the number of variables
|
|
318
|
+
* according to their type (const, vars).
|
|
319
319
|
*
|
|
320
|
-
* @type {Object<
|
|
320
|
+
* @type {Object<string,Array<NodeVar>|number>}
|
|
321
321
|
*/
|
|
322
322
|
this.vars = {};
|
|
323
323
|
|
|
324
|
+
/**
|
|
325
|
+
* This dictionary holds the declarations for each shader stage.
|
|
326
|
+
*
|
|
327
|
+
* @type {Object}
|
|
328
|
+
*/
|
|
329
|
+
this.declarations = {};
|
|
330
|
+
|
|
324
331
|
/**
|
|
325
332
|
* Current code flow.
|
|
326
333
|
* All code generated in this stack will be stored in `.flow`.
|
|
327
334
|
*
|
|
328
|
-
* @type {{code:
|
|
335
|
+
* @type {{code: string}}
|
|
329
336
|
*/
|
|
330
337
|
this.flow = { code: '' };
|
|
331
338
|
|
|
@@ -357,7 +364,7 @@ class NodeBuilder {
|
|
|
357
364
|
/**
|
|
358
365
|
* A tab value. Used for shader string generation.
|
|
359
366
|
*
|
|
360
|
-
* @type {
|
|
367
|
+
* @type {string}
|
|
361
368
|
* @default '\t'
|
|
362
369
|
*/
|
|
363
370
|
this.tab = '\t';
|
|
@@ -365,7 +372,7 @@ class NodeBuilder {
|
|
|
365
372
|
/**
|
|
366
373
|
* Reference to the current function node.
|
|
367
374
|
*
|
|
368
|
-
* @type {FunctionNode
|
|
375
|
+
* @type {?FunctionNode}
|
|
369
376
|
* @default null
|
|
370
377
|
*/
|
|
371
378
|
this.currentFunctionNode = null;
|
|
@@ -401,25 +408,17 @@ class NodeBuilder {
|
|
|
401
408
|
/**
|
|
402
409
|
* The current shader stage.
|
|
403
410
|
*
|
|
404
|
-
* @type {('vertex'|'fragment'|'compute'|'any')
|
|
411
|
+
* @type {?('vertex'|'fragment'|'compute'|'any')}
|
|
405
412
|
*/
|
|
406
413
|
this.shaderStage = null;
|
|
407
414
|
|
|
408
415
|
/**
|
|
409
416
|
* The current build stage.
|
|
410
417
|
*
|
|
411
|
-
* @type {('setup'|'analyze'|'generate')
|
|
418
|
+
* @type {?('setup'|'analyze'|'generate')}
|
|
412
419
|
*/
|
|
413
420
|
this.buildStage = null;
|
|
414
421
|
|
|
415
|
-
/**
|
|
416
|
-
* Whether comparison in shader code are generated with methods or not.
|
|
417
|
-
*
|
|
418
|
-
* @type {Boolean}
|
|
419
|
-
* @default false
|
|
420
|
-
*/
|
|
421
|
-
this.useComparisonMethod = false;
|
|
422
|
-
|
|
423
422
|
}
|
|
424
423
|
|
|
425
424
|
/**
|
|
@@ -447,8 +446,8 @@ class NodeBuilder {
|
|
|
447
446
|
* Factory method for creating an instance of {@link RenderTarget} with the given
|
|
448
447
|
* dimensions and options.
|
|
449
448
|
*
|
|
450
|
-
* @param {
|
|
451
|
-
* @param {
|
|
449
|
+
* @param {number} width - The width of the render target.
|
|
450
|
+
* @param {number} height - The height of the render target.
|
|
452
451
|
* @param {Object} options - The options of the render target.
|
|
453
452
|
* @return {RenderTarget} The render target.
|
|
454
453
|
*/
|
|
@@ -462,7 +461,7 @@ class NodeBuilder {
|
|
|
462
461
|
* Factory method for creating an instance of {@link CubeRenderTarget} with the given
|
|
463
462
|
* dimensions and options.
|
|
464
463
|
*
|
|
465
|
-
* @param {
|
|
464
|
+
* @param {number} size - The size of the cube render target.
|
|
466
465
|
* @param {Object} options - The options of the cube render target.
|
|
467
466
|
* @return {CubeRenderTarget} The cube render target.
|
|
468
467
|
*/
|
|
@@ -472,24 +471,11 @@ class NodeBuilder {
|
|
|
472
471
|
|
|
473
472
|
}
|
|
474
473
|
|
|
475
|
-
/**
|
|
476
|
-
* Factory method for creating an instance of {@link PMREMGenerator}.
|
|
477
|
-
*
|
|
478
|
-
* @return {PMREMGenerator} The PMREM generator.
|
|
479
|
-
*/
|
|
480
|
-
createPMREMGenerator() {
|
|
481
|
-
|
|
482
|
-
// TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
|
|
483
|
-
|
|
484
|
-
return new PMREMGenerator( this.renderer );
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
|
|
488
474
|
/**
|
|
489
475
|
* Whether the given node is included in the internal array of nodes or not.
|
|
490
476
|
*
|
|
491
477
|
* @param {Node} node - The node to test.
|
|
492
|
-
* @return {
|
|
478
|
+
* @return {boolean} Whether the given node is included in the internal array of nodes or not.
|
|
493
479
|
*/
|
|
494
480
|
includes( node ) {
|
|
495
481
|
|
|
@@ -499,10 +485,10 @@ class NodeBuilder {
|
|
|
499
485
|
|
|
500
486
|
/**
|
|
501
487
|
* Returns the output struct name which is required by
|
|
502
|
-
* {@link
|
|
488
|
+
* {@link OutputStructNode}.
|
|
503
489
|
*
|
|
504
490
|
* @abstract
|
|
505
|
-
* @return {
|
|
491
|
+
* @return {string} The name of the output struct.
|
|
506
492
|
*/
|
|
507
493
|
getOutputStructName() {}
|
|
508
494
|
|
|
@@ -510,7 +496,7 @@ class NodeBuilder {
|
|
|
510
496
|
* Returns a bind group for the given group name and binding.
|
|
511
497
|
*
|
|
512
498
|
* @private
|
|
513
|
-
* @param {
|
|
499
|
+
* @param {string} groupName - The group name.
|
|
514
500
|
* @param {Array<NodeUniformsGroup>} bindings - List of bindings.
|
|
515
501
|
* @return {BindGroup} The bind group
|
|
516
502
|
*/
|
|
@@ -561,7 +547,7 @@ class NodeBuilder {
|
|
|
561
547
|
/**
|
|
562
548
|
* Returns an array of node uniform groups for the given group name and shader stage.
|
|
563
549
|
*
|
|
564
|
-
* @param {
|
|
550
|
+
* @param {string} groupName - The group name.
|
|
565
551
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
566
552
|
* @return {Array<NodeUniformsGroup>} The array of node uniform groups.
|
|
567
553
|
*/
|
|
@@ -659,7 +645,7 @@ class NodeBuilder {
|
|
|
659
645
|
* This method sets the given node (value) with the given hash (key) into this dictionary.
|
|
660
646
|
*
|
|
661
647
|
* @param {Node} node - The node to add.
|
|
662
|
-
* @param {
|
|
648
|
+
* @param {number} hash - The hash of the node.
|
|
663
649
|
*/
|
|
664
650
|
setHashNode( node, hash ) {
|
|
665
651
|
|
|
@@ -755,7 +741,7 @@ class NodeBuilder {
|
|
|
755
741
|
* Whether the given texture is filtered or not.
|
|
756
742
|
*
|
|
757
743
|
* @param {Texture} texture - The texture to check.
|
|
758
|
-
* @return {
|
|
744
|
+
* @return {boolean} Whether the given texture is filtered or not.
|
|
759
745
|
*/
|
|
760
746
|
isFilteredTexture( texture ) {
|
|
761
747
|
|
|
@@ -807,8 +793,8 @@ class NodeBuilder {
|
|
|
807
793
|
* resolved to `textureSize` in GLSL.
|
|
808
794
|
*
|
|
809
795
|
* @abstract
|
|
810
|
-
* @param {
|
|
811
|
-
* @return {
|
|
796
|
+
* @param {string} method - The method name to resolve.
|
|
797
|
+
* @return {string} The resolved method name.
|
|
812
798
|
*/
|
|
813
799
|
getMethod( method ) {
|
|
814
800
|
|
|
@@ -819,7 +805,7 @@ class NodeBuilder {
|
|
|
819
805
|
/**
|
|
820
806
|
* Returns a node for the given hash, see {@link NodeBuilder#setHashNode}.
|
|
821
807
|
*
|
|
822
|
-
* @param {
|
|
808
|
+
* @param {number} hash - The hash of the node.
|
|
823
809
|
* @return {Node} The found node.
|
|
824
810
|
*/
|
|
825
811
|
getNodeFromHash( hash ) {
|
|
@@ -907,7 +893,7 @@ class NodeBuilder {
|
|
|
907
893
|
* Returns a cache for the given node.
|
|
908
894
|
*
|
|
909
895
|
* @param {Node} node - The node.
|
|
910
|
-
* @param {
|
|
896
|
+
* @param {boolean} [parent=true] - Whether this node refers to a shared parent cache or not.
|
|
911
897
|
* @return {NodeCache} The cache.
|
|
912
898
|
*/
|
|
913
899
|
getCacheFromNode( node, parent = true ) {
|
|
@@ -923,8 +909,8 @@ class NodeBuilder {
|
|
|
923
909
|
* Whether the requested feature is available or not.
|
|
924
910
|
*
|
|
925
911
|
* @abstract
|
|
926
|
-
* @param {
|
|
927
|
-
* @return {
|
|
912
|
+
* @param {string} name - The requested feature.
|
|
913
|
+
* @return {boolean} Whether the requested feature is supported or not.
|
|
928
914
|
*/
|
|
929
915
|
isAvailable( /*name*/ ) {
|
|
930
916
|
|
|
@@ -936,7 +922,7 @@ class NodeBuilder {
|
|
|
936
922
|
* Returns the vertexIndex input variable as a native shader string.
|
|
937
923
|
*
|
|
938
924
|
* @abstract
|
|
939
|
-
* @return {
|
|
925
|
+
* @return {string} The instanceIndex shader string.
|
|
940
926
|
*/
|
|
941
927
|
getVertexIndex() {
|
|
942
928
|
|
|
@@ -948,7 +934,7 @@ class NodeBuilder {
|
|
|
948
934
|
* Returns the instanceIndex input variable as a native shader string.
|
|
949
935
|
*
|
|
950
936
|
* @abstract
|
|
951
|
-
* @return {
|
|
937
|
+
* @return {string} The instanceIndex shader string.
|
|
952
938
|
*/
|
|
953
939
|
getInstanceIndex() {
|
|
954
940
|
|
|
@@ -961,7 +947,7 @@ class NodeBuilder {
|
|
|
961
947
|
* Only relevant for WebGL and its `WEBGL_multi_draw` extension.
|
|
962
948
|
*
|
|
963
949
|
* @abstract
|
|
964
|
-
* @return {
|
|
950
|
+
* @return {?string} The drawIndex shader string.
|
|
965
951
|
*/
|
|
966
952
|
getDrawIndex() {
|
|
967
953
|
|
|
@@ -973,7 +959,7 @@ class NodeBuilder {
|
|
|
973
959
|
* Returns the frontFacing input variable as a native shader string.
|
|
974
960
|
*
|
|
975
961
|
* @abstract
|
|
976
|
-
* @return {
|
|
962
|
+
* @return {string} The frontFacing shader string.
|
|
977
963
|
*/
|
|
978
964
|
getFrontFacing() {
|
|
979
965
|
|
|
@@ -985,7 +971,7 @@ class NodeBuilder {
|
|
|
985
971
|
* Returns the fragCoord input variable as a native shader string.
|
|
986
972
|
*
|
|
987
973
|
* @abstract
|
|
988
|
-
* @return {
|
|
974
|
+
* @return {string} The fragCoord shader string.
|
|
989
975
|
*/
|
|
990
976
|
getFragCoord() {
|
|
991
977
|
|
|
@@ -998,7 +984,7 @@ class NodeBuilder {
|
|
|
998
984
|
* this method evaluate to `true`, WebGPU to `false`.
|
|
999
985
|
*
|
|
1000
986
|
* @abstract
|
|
1001
|
-
* @return {
|
|
987
|
+
* @return {boolean} Whether to flip texture data along its vertical axis or not.
|
|
1002
988
|
*/
|
|
1003
989
|
isFlipY() {
|
|
1004
990
|
|
|
@@ -1010,7 +996,7 @@ class NodeBuilder {
|
|
|
1010
996
|
* Calling this method increases the usage count for the given node by one.
|
|
1011
997
|
*
|
|
1012
998
|
* @param {Node} node - The node to increase the usage count for.
|
|
1013
|
-
* @return {
|
|
999
|
+
* @return {number} The updated usage count.
|
|
1014
1000
|
*/
|
|
1015
1001
|
increaseUsage( node ) {
|
|
1016
1002
|
|
|
@@ -1026,9 +1012,9 @@ class NodeBuilder {
|
|
|
1026
1012
|
*
|
|
1027
1013
|
* @abstract
|
|
1028
1014
|
* @param {Texture} texture - The texture.
|
|
1029
|
-
* @param {
|
|
1030
|
-
* @param {
|
|
1031
|
-
* @return {
|
|
1015
|
+
* @param {string} textureProperty - The texture property name.
|
|
1016
|
+
* @param {string} uvSnippet - Snippet defining the texture coordinates.
|
|
1017
|
+
* @return {string} The generated shader string.
|
|
1032
1018
|
*/
|
|
1033
1019
|
generateTexture( /* texture, textureProperty, uvSnippet */ ) {
|
|
1034
1020
|
|
|
@@ -1041,11 +1027,11 @@ class NodeBuilder {
|
|
|
1041
1027
|
*
|
|
1042
1028
|
* @abstract
|
|
1043
1029
|
* @param {Texture} texture - The texture.
|
|
1044
|
-
* @param {
|
|
1045
|
-
* @param {
|
|
1046
|
-
* @param {
|
|
1047
|
-
* @param {
|
|
1048
|
-
* @return {
|
|
1030
|
+
* @param {string} textureProperty - The texture property name.
|
|
1031
|
+
* @param {string} uvSnippet - Snippet defining the texture coordinates.
|
|
1032
|
+
* @param {?string} depthSnippet - Snippet defining the 0-based texture array index to sample.
|
|
1033
|
+
* @param {string} levelSnippet - Snippet defining the mip level.
|
|
1034
|
+
* @return {string} The generated shader string.
|
|
1049
1035
|
*/
|
|
1050
1036
|
generateTextureLod( /* texture, textureProperty, uvSnippet, depthSnippet, levelSnippet */ ) {
|
|
1051
1037
|
|
|
@@ -1056,9 +1042,9 @@ class NodeBuilder {
|
|
|
1056
1042
|
/**
|
|
1057
1043
|
* Generates the array declaration string.
|
|
1058
1044
|
*
|
|
1059
|
-
* @param {
|
|
1060
|
-
* @param {
|
|
1061
|
-
* @return {
|
|
1045
|
+
* @param {string} type - The type.
|
|
1046
|
+
* @param {?number} [count] - The count.
|
|
1047
|
+
* @return {string} The generated value as a shader string.
|
|
1062
1048
|
*/
|
|
1063
1049
|
generateArrayDeclaration( type, count ) {
|
|
1064
1050
|
|
|
@@ -1069,10 +1055,10 @@ class NodeBuilder {
|
|
|
1069
1055
|
/**
|
|
1070
1056
|
* Generates the array shader string for the given type and value.
|
|
1071
1057
|
*
|
|
1072
|
-
* @param {
|
|
1073
|
-
* @param {
|
|
1074
|
-
* @param {Array<Node
|
|
1075
|
-
* @return {
|
|
1058
|
+
* @param {string} type - The type.
|
|
1059
|
+
* @param {?number} [count] - The count.
|
|
1060
|
+
* @param {?Array<Node>} [values=null] - The default values.
|
|
1061
|
+
* @return {string} The generated value as a shader string.
|
|
1076
1062
|
*/
|
|
1077
1063
|
generateArray( type, count, values = null ) {
|
|
1078
1064
|
|
|
@@ -1105,10 +1091,10 @@ class NodeBuilder {
|
|
|
1105
1091
|
/**
|
|
1106
1092
|
* Generates the struct shader string.
|
|
1107
1093
|
*
|
|
1108
|
-
* @param {
|
|
1094
|
+
* @param {string} type - The type.
|
|
1109
1095
|
* @param {Array<Object>} [membersLayout] - The count.
|
|
1110
|
-
* @param {Array<Node
|
|
1111
|
-
* @return {
|
|
1096
|
+
* @param {?Array<Node>} [values=null] - The default values.
|
|
1097
|
+
* @return {string} The generated value as a shader string.
|
|
1112
1098
|
*/
|
|
1113
1099
|
generateStruct( type, membersLayout, values = null ) {
|
|
1114
1100
|
|
|
@@ -1138,9 +1124,9 @@ class NodeBuilder {
|
|
|
1138
1124
|
/**
|
|
1139
1125
|
* Generates the shader string for the given type and value.
|
|
1140
1126
|
*
|
|
1141
|
-
* @param {
|
|
1142
|
-
* @param {
|
|
1143
|
-
* @return {
|
|
1127
|
+
* @param {string} type - The type.
|
|
1128
|
+
* @param {?any} [value=null] - The value.
|
|
1129
|
+
* @return {string} The generated value as a shader string.
|
|
1144
1130
|
*/
|
|
1145
1131
|
generateConst( type, value = null ) {
|
|
1146
1132
|
|
|
@@ -1175,11 +1161,11 @@ class NodeBuilder {
|
|
|
1175
1161
|
|
|
1176
1162
|
return `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) } )`;
|
|
1177
1163
|
|
|
1178
|
-
} else if ( typeLength === 4 ) {
|
|
1164
|
+
} else if ( typeLength === 4 && type !== 'mat2' ) {
|
|
1179
1165
|
|
|
1180
1166
|
return `${ this.getType( type ) }( ${ generateConst( value.x ) }, ${ generateConst( value.y ) }, ${ generateConst( value.z ) }, ${ generateConst( value.w ) } )`;
|
|
1181
1167
|
|
|
1182
|
-
} else if ( typeLength
|
|
1168
|
+
} else if ( typeLength >= 4 && value && ( value.isMatrix2 || value.isMatrix3 || value.isMatrix4 ) ) {
|
|
1183
1169
|
|
|
1184
1170
|
return `${ this.getType( type ) }( ${ value.elements.map( generateConst ).join( ', ' ) } )`;
|
|
1185
1171
|
|
|
@@ -1197,8 +1183,8 @@ class NodeBuilder {
|
|
|
1197
1183
|
* It might be necessary to convert certain data types to different ones
|
|
1198
1184
|
* so this method can be used to hide the conversion.
|
|
1199
1185
|
*
|
|
1200
|
-
* @param {
|
|
1201
|
-
* @return {
|
|
1186
|
+
* @param {string} type - The type.
|
|
1187
|
+
* @return {string} The updated type.
|
|
1202
1188
|
*/
|
|
1203
1189
|
getType( type ) {
|
|
1204
1190
|
|
|
@@ -1211,8 +1197,8 @@ class NodeBuilder {
|
|
|
1211
1197
|
/**
|
|
1212
1198
|
* Whether the given attribute name is defined in the geometry or not.
|
|
1213
1199
|
*
|
|
1214
|
-
* @param {
|
|
1215
|
-
* @return {
|
|
1200
|
+
* @param {string} name - The attribute name.
|
|
1201
|
+
* @return {boolean} Whether the given attribute name is defined in the geometry.
|
|
1216
1202
|
*/
|
|
1217
1203
|
hasGeometryAttribute( name ) {
|
|
1218
1204
|
|
|
@@ -1223,8 +1209,8 @@ class NodeBuilder {
|
|
|
1223
1209
|
/**
|
|
1224
1210
|
* Returns a node attribute for the given name and type.
|
|
1225
1211
|
*
|
|
1226
|
-
* @param {
|
|
1227
|
-
* @param {
|
|
1212
|
+
* @param {string} name - The attribute's name.
|
|
1213
|
+
* @param {string} type - The attribute's type.
|
|
1228
1214
|
* @return {NodeAttribute} The node attribute.
|
|
1229
1215
|
*/
|
|
1230
1216
|
getAttribute( name, type ) {
|
|
@@ -1247,6 +1233,8 @@ class NodeBuilder {
|
|
|
1247
1233
|
|
|
1248
1234
|
const attribute = new NodeAttribute( name, type );
|
|
1249
1235
|
|
|
1236
|
+
this.registerDeclaration( attribute );
|
|
1237
|
+
|
|
1250
1238
|
attributes.push( attribute );
|
|
1251
1239
|
|
|
1252
1240
|
return attribute;
|
|
@@ -1258,7 +1246,7 @@ class NodeBuilder {
|
|
|
1258
1246
|
*
|
|
1259
1247
|
* @param {Node} node - The node.
|
|
1260
1248
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
1261
|
-
* @return {
|
|
1249
|
+
* @return {string} The property name.
|
|
1262
1250
|
*/
|
|
1263
1251
|
getPropertyName( node/*, shaderStage*/ ) {
|
|
1264
1252
|
|
|
@@ -1269,8 +1257,8 @@ class NodeBuilder {
|
|
|
1269
1257
|
/**
|
|
1270
1258
|
* Whether the given type is a vector type or not.
|
|
1271
1259
|
*
|
|
1272
|
-
* @param {
|
|
1273
|
-
* @return {
|
|
1260
|
+
* @param {string} type - The type to check.
|
|
1261
|
+
* @return {boolean} Whether the given type is a vector type or not.
|
|
1274
1262
|
*/
|
|
1275
1263
|
isVector( type ) {
|
|
1276
1264
|
|
|
@@ -1281,8 +1269,8 @@ class NodeBuilder {
|
|
|
1281
1269
|
/**
|
|
1282
1270
|
* Whether the given type is a matrix type or not.
|
|
1283
1271
|
*
|
|
1284
|
-
* @param {
|
|
1285
|
-
* @return {
|
|
1272
|
+
* @param {string} type - The type to check.
|
|
1273
|
+
* @return {boolean} Whether the given type is a matrix type or not.
|
|
1286
1274
|
*/
|
|
1287
1275
|
isMatrix( type ) {
|
|
1288
1276
|
|
|
@@ -1293,12 +1281,12 @@ class NodeBuilder {
|
|
|
1293
1281
|
/**
|
|
1294
1282
|
* Whether the given type is a reference type or not.
|
|
1295
1283
|
*
|
|
1296
|
-
* @param {
|
|
1297
|
-
* @return {
|
|
1284
|
+
* @param {string} type - The type to check.
|
|
1285
|
+
* @return {boolean} Whether the given type is a reference type or not.
|
|
1298
1286
|
*/
|
|
1299
1287
|
isReference( type ) {
|
|
1300
1288
|
|
|
1301
|
-
return type === 'void' || type === 'property' || type === 'sampler' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
|
|
1289
|
+
return type === 'void' || type === 'property' || type === 'sampler' || type === 'samplerComparison' || type === 'texture' || type === 'cubeTexture' || type === 'storageTexture' || type === 'depthTexture' || type === 'texture3D';
|
|
1302
1290
|
|
|
1303
1291
|
}
|
|
1304
1292
|
|
|
@@ -1307,7 +1295,7 @@ class NodeBuilder {
|
|
|
1307
1295
|
*
|
|
1308
1296
|
* @abstract
|
|
1309
1297
|
* @param {Texture} texture - The texture to check.
|
|
1310
|
-
* @return {
|
|
1298
|
+
* @return {boolean} Whether the given texture requires a conversion to working color space or not.
|
|
1311
1299
|
*/
|
|
1312
1300
|
needsToWorkingColorSpace( /*texture*/ ) {
|
|
1313
1301
|
|
|
@@ -1319,7 +1307,7 @@ class NodeBuilder {
|
|
|
1319
1307
|
* Returns the component type of a given texture.
|
|
1320
1308
|
*
|
|
1321
1309
|
* @param {Texture} texture - The texture.
|
|
1322
|
-
* @return {
|
|
1310
|
+
* @return {string} The component type.
|
|
1323
1311
|
*/
|
|
1324
1312
|
getComponentTypeFromTexture( texture ) {
|
|
1325
1313
|
|
|
@@ -1339,8 +1327,8 @@ class NodeBuilder {
|
|
|
1339
1327
|
/**
|
|
1340
1328
|
* Returns the element type for a given type.
|
|
1341
1329
|
*
|
|
1342
|
-
* @param {
|
|
1343
|
-
* @return {
|
|
1330
|
+
* @param {string} type - The type.
|
|
1331
|
+
* @return {string} The element type.
|
|
1344
1332
|
*/
|
|
1345
1333
|
getElementType( type ) {
|
|
1346
1334
|
|
|
@@ -1355,8 +1343,8 @@ class NodeBuilder {
|
|
|
1355
1343
|
/**
|
|
1356
1344
|
* Returns the component type for a given type.
|
|
1357
1345
|
*
|
|
1358
|
-
* @param {
|
|
1359
|
-
* @return {
|
|
1346
|
+
* @param {string} type - The type.
|
|
1347
|
+
* @return {string} The component type.
|
|
1360
1348
|
*/
|
|
1361
1349
|
getComponentType( type ) {
|
|
1362
1350
|
|
|
@@ -1379,8 +1367,8 @@ class NodeBuilder {
|
|
|
1379
1367
|
/**
|
|
1380
1368
|
* Returns the vector type for a given type.
|
|
1381
1369
|
*
|
|
1382
|
-
* @param {
|
|
1383
|
-
* @return {
|
|
1370
|
+
* @param {string} type - The type.
|
|
1371
|
+
* @return {string} The vector type.
|
|
1384
1372
|
*/
|
|
1385
1373
|
getVectorType( type ) {
|
|
1386
1374
|
|
|
@@ -1394,9 +1382,9 @@ class NodeBuilder {
|
|
|
1394
1382
|
/**
|
|
1395
1383
|
* Returns the data type for the given the length and component type.
|
|
1396
1384
|
*
|
|
1397
|
-
* @param {
|
|
1398
|
-
* @param {
|
|
1399
|
-
* @return {
|
|
1385
|
+
* @param {number} length - The length.
|
|
1386
|
+
* @param {string} [componentType='float'] - The component type.
|
|
1387
|
+
* @return {string} The type.
|
|
1400
1388
|
*/
|
|
1401
1389
|
getTypeFromLength( length, componentType = 'float' ) {
|
|
1402
1390
|
|
|
@@ -1420,7 +1408,7 @@ class NodeBuilder {
|
|
|
1420
1408
|
* Returns the type for a given typed array.
|
|
1421
1409
|
*
|
|
1422
1410
|
* @param {TypedArray} array - The typed array.
|
|
1423
|
-
* @return {
|
|
1411
|
+
* @return {string} The type.
|
|
1424
1412
|
*/
|
|
1425
1413
|
getTypeFromArray( array ) {
|
|
1426
1414
|
|
|
@@ -1428,11 +1416,23 @@ class NodeBuilder {
|
|
|
1428
1416
|
|
|
1429
1417
|
}
|
|
1430
1418
|
|
|
1419
|
+
/**
|
|
1420
|
+
* Returns the type is an integer type.
|
|
1421
|
+
*
|
|
1422
|
+
* @param {string} type - The type.
|
|
1423
|
+
* @return {boolean} Whether the type is an integer type or not.
|
|
1424
|
+
*/
|
|
1425
|
+
isInteger( type ) {
|
|
1426
|
+
|
|
1427
|
+
return /int|uint|(i|u)vec/.test( type );
|
|
1428
|
+
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
1431
|
/**
|
|
1432
1432
|
* Returns the type for a given buffer attribute.
|
|
1433
1433
|
*
|
|
1434
1434
|
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
1435
|
-
* @return {
|
|
1435
|
+
* @return {string} The type.
|
|
1436
1436
|
*/
|
|
1437
1437
|
getTypeFromAttribute( attribute ) {
|
|
1438
1438
|
|
|
@@ -1459,8 +1459,8 @@ class NodeBuilder {
|
|
|
1459
1459
|
/**
|
|
1460
1460
|
* Returns the length for the given data type.
|
|
1461
1461
|
*
|
|
1462
|
-
* @param {
|
|
1463
|
-
* @return {
|
|
1462
|
+
* @param {string} type - The data type.
|
|
1463
|
+
* @return {number} The length.
|
|
1464
1464
|
*/
|
|
1465
1465
|
getTypeLength( type ) {
|
|
1466
1466
|
|
|
@@ -1480,8 +1480,8 @@ class NodeBuilder {
|
|
|
1480
1480
|
/**
|
|
1481
1481
|
* Returns the vector type for a given matrix type.
|
|
1482
1482
|
*
|
|
1483
|
-
* @param {
|
|
1484
|
-
* @return {
|
|
1483
|
+
* @param {string} type - The matrix type.
|
|
1484
|
+
* @return {string} The vector type.
|
|
1485
1485
|
*/
|
|
1486
1486
|
getVectorFromMatrix( type ) {
|
|
1487
1487
|
|
|
@@ -1494,9 +1494,9 @@ class NodeBuilder {
|
|
|
1494
1494
|
* given value. E.g. `vec4` should be changed to the new component type
|
|
1495
1495
|
* `uint` which results in `uvec4`.
|
|
1496
1496
|
*
|
|
1497
|
-
* @param {
|
|
1498
|
-
* @param {
|
|
1499
|
-
* @return {
|
|
1497
|
+
* @param {string} type - The type.
|
|
1498
|
+
* @param {string} newComponentType - The new component type.
|
|
1499
|
+
* @return {string} The new type.
|
|
1500
1500
|
*/
|
|
1501
1501
|
changeComponentType( type, newComponentType ) {
|
|
1502
1502
|
|
|
@@ -1507,8 +1507,8 @@ class NodeBuilder {
|
|
|
1507
1507
|
/**
|
|
1508
1508
|
* Returns the integer type pendant for the given type.
|
|
1509
1509
|
*
|
|
1510
|
-
* @param {
|
|
1511
|
-
* @return {
|
|
1510
|
+
* @param {string} type - The type.
|
|
1511
|
+
* @return {string} The integer type.
|
|
1512
1512
|
*/
|
|
1513
1513
|
getIntegerType( type ) {
|
|
1514
1514
|
|
|
@@ -1558,7 +1558,7 @@ class NodeBuilder {
|
|
|
1558
1558
|
*
|
|
1559
1559
|
* @param {Node} node - The node to get the data for.
|
|
1560
1560
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1561
|
-
* @param {NodeCache
|
|
1561
|
+
* @param {?NodeCache} cache - An optional cache.
|
|
1562
1562
|
* @return {Object} The node data.
|
|
1563
1563
|
*/
|
|
1564
1564
|
getDataFromNode( node, shaderStage = this.shaderStage, cache = null ) {
|
|
@@ -1600,7 +1600,7 @@ class NodeBuilder {
|
|
|
1600
1600
|
* Returns an instance of {@link NodeAttribute} for the given buffer attribute node.
|
|
1601
1601
|
*
|
|
1602
1602
|
* @param {BufferAttributeNode} node - The buffer attribute node.
|
|
1603
|
-
* @param {
|
|
1603
|
+
* @param {string} type - The node type.
|
|
1604
1604
|
* @return {NodeAttribute} The node attribute.
|
|
1605
1605
|
*/
|
|
1606
1606
|
getBufferAttributeFromNode( node, type ) {
|
|
@@ -1630,13 +1630,13 @@ class NodeBuilder {
|
|
|
1630
1630
|
*
|
|
1631
1631
|
* @param {OutputStructNode} node - The output struct node.
|
|
1632
1632
|
* @param {Array<Object>} membersLayout - The output struct types.
|
|
1633
|
-
* @param {
|
|
1633
|
+
* @param {?string} [name=null] - The name of the struct.
|
|
1634
1634
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1635
1635
|
* @return {StructType} The struct type attribute.
|
|
1636
1636
|
*/
|
|
1637
1637
|
getStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) {
|
|
1638
1638
|
|
|
1639
|
-
const nodeData = this.getDataFromNode( node, shaderStage );
|
|
1639
|
+
const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
|
|
1640
1640
|
|
|
1641
1641
|
let structType = nodeData.structType;
|
|
1642
1642
|
|
|
@@ -1678,9 +1678,9 @@ class NodeBuilder {
|
|
|
1678
1678
|
* Returns an instance of {@link NodeUniform} for the given uniform node.
|
|
1679
1679
|
*
|
|
1680
1680
|
* @param {UniformNode} node - The uniform node.
|
|
1681
|
-
* @param {
|
|
1681
|
+
* @param {string} type - The uniform type.
|
|
1682
1682
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1683
|
-
* @param {
|
|
1683
|
+
* @param {?string} name - The name of the uniform.
|
|
1684
1684
|
* @return {NodeUniform} The node uniform.
|
|
1685
1685
|
*/
|
|
1686
1686
|
getUniformFromNode( node, type, shaderStage = this.shaderStage, name = null ) {
|
|
@@ -1697,6 +1697,8 @@ class NodeBuilder {
|
|
|
1697
1697
|
|
|
1698
1698
|
this.uniforms[ shaderStage ].push( nodeUniform );
|
|
1699
1699
|
|
|
1700
|
+
this.registerDeclaration( nodeUniform );
|
|
1701
|
+
|
|
1700
1702
|
nodeData.uniform = nodeUniform;
|
|
1701
1703
|
|
|
1702
1704
|
}
|
|
@@ -1709,7 +1711,7 @@ class NodeBuilder {
|
|
|
1709
1711
|
* Returns the array length.
|
|
1710
1712
|
*
|
|
1711
1713
|
* @param {Node} node - The node.
|
|
1712
|
-
* @return {
|
|
1714
|
+
* @return {?number} The array length.
|
|
1713
1715
|
*/
|
|
1714
1716
|
getArrayCount( node ) {
|
|
1715
1717
|
|
|
@@ -1726,10 +1728,10 @@ class NodeBuilder {
|
|
|
1726
1728
|
* Returns an instance of {@link NodeVar} for the given variable node.
|
|
1727
1729
|
*
|
|
1728
1730
|
* @param {VarNode} node - The variable node.
|
|
1729
|
-
* @param {
|
|
1730
|
-
* @param {
|
|
1731
|
+
* @param {?string} name - The variable's name.
|
|
1732
|
+
* @param {string} [type=node.getNodeType( this )] - The variable's type.
|
|
1731
1733
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1732
|
-
* @param {
|
|
1734
|
+
* @param {boolean} [readOnly=false] - Whether the variable is read-only or not.
|
|
1733
1735
|
*
|
|
1734
1736
|
* @return {NodeVar} The node variable.
|
|
1735
1737
|
*/
|
|
@@ -1766,6 +1768,8 @@ class NodeBuilder {
|
|
|
1766
1768
|
|
|
1767
1769
|
}
|
|
1768
1770
|
|
|
1771
|
+
this.registerDeclaration( nodeVar );
|
|
1772
|
+
|
|
1769
1773
|
nodeData.variable = nodeVar;
|
|
1770
1774
|
|
|
1771
1775
|
}
|
|
@@ -1778,7 +1782,7 @@ class NodeBuilder {
|
|
|
1778
1782
|
* Returns whether a Node or its flow is deterministic, useful for use in `const`.
|
|
1779
1783
|
*
|
|
1780
1784
|
* @param {Node} node - The varying node.
|
|
1781
|
-
* @return {
|
|
1785
|
+
* @return {boolean} Returns true if deterministic.
|
|
1782
1786
|
*/
|
|
1783
1787
|
isDeterministic( node ) {
|
|
1784
1788
|
|
|
@@ -1825,8 +1829,8 @@ class NodeBuilder {
|
|
|
1825
1829
|
* Returns an instance of {@link NodeVarying} for the given varying node.
|
|
1826
1830
|
*
|
|
1827
1831
|
* @param {(VaryingNode|PropertyNode)} node - The varying node.
|
|
1828
|
-
* @param {
|
|
1829
|
-
* @param {
|
|
1832
|
+
* @param {?string} name - The varying's name.
|
|
1833
|
+
* @param {string} [type=node.getNodeType( this )] - The varying's type.
|
|
1830
1834
|
* @return {NodeVar} The node varying.
|
|
1831
1835
|
*/
|
|
1832
1836
|
getVaryingFromNode( node, name = null, type = node.getNodeType( this ) ) {
|
|
@@ -1846,6 +1850,8 @@ class NodeBuilder {
|
|
|
1846
1850
|
|
|
1847
1851
|
varyings.push( nodeVarying );
|
|
1848
1852
|
|
|
1853
|
+
this.registerDeclaration( nodeVarying );
|
|
1854
|
+
|
|
1849
1855
|
nodeData.varying = nodeVarying;
|
|
1850
1856
|
|
|
1851
1857
|
}
|
|
@@ -1854,11 +1860,46 @@ class NodeBuilder {
|
|
|
1854
1860
|
|
|
1855
1861
|
}
|
|
1856
1862
|
|
|
1863
|
+
/**
|
|
1864
|
+
* Registers a node declaration in the current shader stage.
|
|
1865
|
+
*
|
|
1866
|
+
* @param {Object} node - The node to be registered.
|
|
1867
|
+
*/
|
|
1868
|
+
registerDeclaration( node ) {
|
|
1869
|
+
|
|
1870
|
+
const shaderStage = this.shaderStage;
|
|
1871
|
+
const declarations = this.declarations[ shaderStage ] || ( this.declarations[ shaderStage ] = {} );
|
|
1872
|
+
|
|
1873
|
+
const property = this.getPropertyName( node );
|
|
1874
|
+
|
|
1875
|
+
let index = 1;
|
|
1876
|
+
let name = property;
|
|
1877
|
+
|
|
1878
|
+
// Automatically renames the property if the name is already in use.
|
|
1879
|
+
|
|
1880
|
+
while ( declarations[ name ] !== undefined ) {
|
|
1881
|
+
|
|
1882
|
+
name = property + '_' + index ++;
|
|
1883
|
+
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1886
|
+
declarations[ name ] = node;
|
|
1887
|
+
|
|
1888
|
+
if ( index > 1 ) {
|
|
1889
|
+
|
|
1890
|
+
node.name = name;
|
|
1891
|
+
|
|
1892
|
+
console.warn( `THREE.TSL: Declaration name '${ property }' of '${ node.type }' already in use. Renamed to '${ name }'.` );
|
|
1893
|
+
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1857
1898
|
/**
|
|
1858
1899
|
* Returns an instance of {@link NodeCode} for the given code node.
|
|
1859
1900
|
*
|
|
1860
1901
|
* @param {CodeNode} node - The code node.
|
|
1861
|
-
* @param {
|
|
1902
|
+
* @param {string} type - The node type.
|
|
1862
1903
|
* @param {('vertex'|'fragment'|'compute'|'any')} [shaderStage=this.shaderStage] - The shader stage.
|
|
1863
1904
|
* @return {NodeCode} The node code.
|
|
1864
1905
|
*/
|
|
@@ -1930,7 +1971,7 @@ class NodeBuilder {
|
|
|
1930
1971
|
* Add a inline-code to the current flow code-block.
|
|
1931
1972
|
*
|
|
1932
1973
|
* @param {Node} node - The node to add.
|
|
1933
|
-
* @param {
|
|
1974
|
+
* @param {string} code - The code to add.
|
|
1934
1975
|
* @param {Node} nodeBlock - Current ConditionalNode
|
|
1935
1976
|
*/
|
|
1936
1977
|
addLineFlowCodeBlock( node, code, nodeBlock ) {
|
|
@@ -1947,8 +1988,8 @@ class NodeBuilder {
|
|
|
1947
1988
|
/**
|
|
1948
1989
|
* Add a inline-code to the current flow.
|
|
1949
1990
|
*
|
|
1950
|
-
* @param {
|
|
1951
|
-
* @param {Node
|
|
1991
|
+
* @param {string} code - The code to add.
|
|
1992
|
+
* @param {?Node} [node= null] - Optional Node, can help the system understand if the Node is part of a code-block.
|
|
1952
1993
|
* @return {NodeBuilder} A reference to this node builder.
|
|
1953
1994
|
*/
|
|
1954
1995
|
addLineFlowCode( code, node = null ) {
|
|
@@ -1978,7 +2019,7 @@ class NodeBuilder {
|
|
|
1978
2019
|
/**
|
|
1979
2020
|
* Adds a code to the current code flow.
|
|
1980
2021
|
*
|
|
1981
|
-
* @param {
|
|
2022
|
+
* @param {string} code - Shader code.
|
|
1982
2023
|
* @return {NodeBuilder} A reference to this node builder.
|
|
1983
2024
|
*/
|
|
1984
2025
|
addFlowCode( code ) {
|
|
@@ -2047,6 +2088,22 @@ class NodeBuilder {
|
|
|
2047
2088
|
|
|
2048
2089
|
}
|
|
2049
2090
|
|
|
2091
|
+
/**
|
|
2092
|
+
* Includes a node in the current function node.
|
|
2093
|
+
*
|
|
2094
|
+
* @param {Node} node - The node to include.
|
|
2095
|
+
* @returns {void}
|
|
2096
|
+
*/
|
|
2097
|
+
addInclude( node ) {
|
|
2098
|
+
|
|
2099
|
+
if ( this.currentFunctionNode !== null ) {
|
|
2100
|
+
|
|
2101
|
+
this.currentFunctionNode.includes.push( node );
|
|
2102
|
+
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
}
|
|
2106
|
+
|
|
2050
2107
|
/**
|
|
2051
2108
|
* Returns the native shader operator name for a given generic name.
|
|
2052
2109
|
* It is a similar type of method like {@link NodeBuilder#getMethod}.
|
|
@@ -2118,13 +2175,14 @@ class NodeBuilder {
|
|
|
2118
2175
|
* Runs the node flow through all the steps of creation, 'setup', 'analyze', 'generate'.
|
|
2119
2176
|
*
|
|
2120
2177
|
* @param {Node} node - The node to execute.
|
|
2121
|
-
* @param {
|
|
2178
|
+
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2122
2179
|
* @return {Object}
|
|
2123
2180
|
*/
|
|
2124
2181
|
flowStagesNode( node, output = null ) {
|
|
2125
2182
|
|
|
2126
2183
|
const previousFlow = this.flow;
|
|
2127
2184
|
const previousVars = this.vars;
|
|
2185
|
+
const previousDeclarations = this.declarations;
|
|
2128
2186
|
const previousCache = this.cache;
|
|
2129
2187
|
const previousBuildStage = this.buildStage;
|
|
2130
2188
|
const previousStack = this.stack;
|
|
@@ -2135,6 +2193,7 @@ class NodeBuilder {
|
|
|
2135
2193
|
|
|
2136
2194
|
this.flow = flow;
|
|
2137
2195
|
this.vars = {};
|
|
2196
|
+
this.declarations = {};
|
|
2138
2197
|
this.cache = new NodeCache();
|
|
2139
2198
|
this.stack = stack();
|
|
2140
2199
|
|
|
@@ -2150,6 +2209,7 @@ class NodeBuilder {
|
|
|
2150
2209
|
|
|
2151
2210
|
this.flow = previousFlow;
|
|
2152
2211
|
this.vars = previousVars;
|
|
2212
|
+
this.declarations = previousDeclarations;
|
|
2153
2213
|
this.cache = previousCache;
|
|
2154
2214
|
this.stack = previousStack;
|
|
2155
2215
|
|
|
@@ -2164,8 +2224,8 @@ class NodeBuilder {
|
|
|
2164
2224
|
* It is a similar type of method like {@link NodeBuilder#getMethod}.
|
|
2165
2225
|
*
|
|
2166
2226
|
* @abstract
|
|
2167
|
-
* @param {
|
|
2168
|
-
* @return {
|
|
2227
|
+
* @param {string} op - The operator name to resolve.
|
|
2228
|
+
* @return {?string} The resolved operator name.
|
|
2169
2229
|
*/
|
|
2170
2230
|
getFunctionOperator( /* op */ ) {
|
|
2171
2231
|
|
|
@@ -2173,11 +2233,24 @@ class NodeBuilder {
|
|
|
2173
2233
|
|
|
2174
2234
|
}
|
|
2175
2235
|
|
|
2236
|
+
/**
|
|
2237
|
+
* Builds the given shader node.
|
|
2238
|
+
*
|
|
2239
|
+
* @abstract
|
|
2240
|
+
* @param {ShaderNodeInternal} shaderNode - The shader node.
|
|
2241
|
+
* @return {string} The function code.
|
|
2242
|
+
*/
|
|
2243
|
+
buildFunctionCode( /* shaderNode */ ) {
|
|
2244
|
+
|
|
2245
|
+
console.warn( 'Abstract function.' );
|
|
2246
|
+
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2176
2249
|
/**
|
|
2177
2250
|
* Generates a code flow based on a child Node.
|
|
2178
2251
|
*
|
|
2179
2252
|
* @param {Node} node - The node to execute.
|
|
2180
|
-
* @param {
|
|
2253
|
+
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2181
2254
|
* @return {Object} The code flow.
|
|
2182
2255
|
*/
|
|
2183
2256
|
flowChildNode( node, output = null ) {
|
|
@@ -2206,8 +2279,8 @@ class NodeBuilder {
|
|
|
2206
2279
|
*
|
|
2207
2280
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2208
2281
|
* @param {Node} node - The node to execute.
|
|
2209
|
-
* @param {
|
|
2210
|
-
* @param {
|
|
2282
|
+
* @param {?string} output - Expected output type. For example 'vec3'.
|
|
2283
|
+
* @param {?string} propertyName - The property name to assign the result.
|
|
2211
2284
|
* @return {Object}
|
|
2212
2285
|
*/
|
|
2213
2286
|
flowNodeFromShaderStage( shaderStage, node, output = null, propertyName = null ) {
|
|
@@ -2248,7 +2321,7 @@ class NodeBuilder {
|
|
|
2248
2321
|
*
|
|
2249
2322
|
* @abstract
|
|
2250
2323
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2251
|
-
* @return {
|
|
2324
|
+
* @return {string} The attribute code section.
|
|
2252
2325
|
*/
|
|
2253
2326
|
getAttributes( /*shaderStage*/ ) {
|
|
2254
2327
|
|
|
@@ -2261,7 +2334,7 @@ class NodeBuilder {
|
|
|
2261
2334
|
*
|
|
2262
2335
|
* @abstract
|
|
2263
2336
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2264
|
-
* @return {
|
|
2337
|
+
* @return {string} The varying code section.
|
|
2265
2338
|
*/
|
|
2266
2339
|
getVaryings( /*shaderStage*/ ) {
|
|
2267
2340
|
|
|
@@ -2272,10 +2345,10 @@ class NodeBuilder {
|
|
|
2272
2345
|
/**
|
|
2273
2346
|
* Returns a single variable definition as a shader string for the given variable type and name.
|
|
2274
2347
|
*
|
|
2275
|
-
* @param {
|
|
2276
|
-
* @param {
|
|
2277
|
-
* @param {
|
|
2278
|
-
* @return {
|
|
2348
|
+
* @param {string} type - The variable's type.
|
|
2349
|
+
* @param {string} name - The variable's name.
|
|
2350
|
+
* @param {?number} [count=null] - The array length.
|
|
2351
|
+
* @return {string} The shader string.
|
|
2279
2352
|
*/
|
|
2280
2353
|
getVar( type, name, count = null ) {
|
|
2281
2354
|
|
|
@@ -2287,7 +2360,7 @@ class NodeBuilder {
|
|
|
2287
2360
|
* Returns the variable definitions as a shader string for the given shader stage.
|
|
2288
2361
|
*
|
|
2289
2362
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2290
|
-
* @return {
|
|
2363
|
+
* @return {string} The variable code section.
|
|
2291
2364
|
*/
|
|
2292
2365
|
getVars( shaderStage ) {
|
|
2293
2366
|
|
|
@@ -2314,7 +2387,7 @@ class NodeBuilder {
|
|
|
2314
2387
|
*
|
|
2315
2388
|
* @abstract
|
|
2316
2389
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2317
|
-
* @return {
|
|
2390
|
+
* @return {string} The uniform code section.
|
|
2318
2391
|
*/
|
|
2319
2392
|
getUniforms( /*shaderStage*/ ) {
|
|
2320
2393
|
|
|
@@ -2326,7 +2399,7 @@ class NodeBuilder {
|
|
|
2326
2399
|
* Returns the native code definitions as a shader string for the given shader stage.
|
|
2327
2400
|
*
|
|
2328
2401
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2329
|
-
* @return {
|
|
2402
|
+
* @return {string} The native code section.
|
|
2330
2403
|
*/
|
|
2331
2404
|
getCodes( shaderStage ) {
|
|
2332
2405
|
|
|
@@ -2351,7 +2424,7 @@ class NodeBuilder {
|
|
|
2351
2424
|
/**
|
|
2352
2425
|
* Returns the hash of this node builder.
|
|
2353
2426
|
*
|
|
2354
|
-
* @return {
|
|
2427
|
+
* @return {string} The hash.
|
|
2355
2428
|
*/
|
|
2356
2429
|
getHash() {
|
|
2357
2430
|
|
|
@@ -2362,7 +2435,7 @@ class NodeBuilder {
|
|
|
2362
2435
|
/**
|
|
2363
2436
|
* Sets the current shader stage.
|
|
2364
2437
|
*
|
|
2365
|
-
* @param {('vertex'|'fragment'|'compute'|'any')
|
|
2438
|
+
* @param {?('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage to set.
|
|
2366
2439
|
*/
|
|
2367
2440
|
setShaderStage( shaderStage ) {
|
|
2368
2441
|
|
|
@@ -2373,7 +2446,7 @@ class NodeBuilder {
|
|
|
2373
2446
|
/**
|
|
2374
2447
|
* Returns the current shader stage.
|
|
2375
2448
|
*
|
|
2376
|
-
* @return {('vertex'|'fragment'|'compute'|'any')
|
|
2449
|
+
* @return {?('vertex'|'fragment'|'compute'|'any')} The current shader stage.
|
|
2377
2450
|
*/
|
|
2378
2451
|
getShaderStage() {
|
|
2379
2452
|
|
|
@@ -2384,7 +2457,7 @@ class NodeBuilder {
|
|
|
2384
2457
|
/**
|
|
2385
2458
|
* Sets the current build stage.
|
|
2386
2459
|
*
|
|
2387
|
-
* @param {('setup'|'analyze'|'generate')
|
|
2460
|
+
* @param {?('setup'|'analyze'|'generate')} buildStage - The build stage to set.
|
|
2388
2461
|
*/
|
|
2389
2462
|
setBuildStage( buildStage ) {
|
|
2390
2463
|
|
|
@@ -2395,7 +2468,7 @@ class NodeBuilder {
|
|
|
2395
2468
|
/**
|
|
2396
2469
|
* Returns the current build stage.
|
|
2397
2470
|
*
|
|
2398
|
-
* @return {('setup'|'analyze'|'generate')
|
|
2471
|
+
* @return {?('setup'|'analyze'|'generate')} The current build stage.
|
|
2399
2472
|
*/
|
|
2400
2473
|
getBuildStage() {
|
|
2401
2474
|
|
|
@@ -2497,7 +2570,7 @@ class NodeBuilder {
|
|
|
2497
2570
|
* Returns a uniform representation which is later used for UBO generation and rendering.
|
|
2498
2571
|
*
|
|
2499
2572
|
* @param {NodeUniform} uniformNode - The uniform node.
|
|
2500
|
-
* @param {
|
|
2573
|
+
* @param {string} type - The requested type.
|
|
2501
2574
|
* @return {Uniform} The uniform.
|
|
2502
2575
|
*/
|
|
2503
2576
|
getNodeUniform( uniformNode, type ) {
|
|
@@ -2520,10 +2593,10 @@ class NodeBuilder {
|
|
|
2520
2593
|
* this method might be used to convert a simple float string `"1.0"` into a
|
|
2521
2594
|
* `vec3` representation: `"vec3<f32>( 1.0 )"`.
|
|
2522
2595
|
*
|
|
2523
|
-
* @param {
|
|
2524
|
-
* @param {
|
|
2525
|
-
* @param {
|
|
2526
|
-
* @return {
|
|
2596
|
+
* @param {string} snippet - The shader snippet.
|
|
2597
|
+
* @param {string} fromType - The source type.
|
|
2598
|
+
* @param {string} toType - The target type.
|
|
2599
|
+
* @return {string} The updated shader string.
|
|
2527
2600
|
*/
|
|
2528
2601
|
format( snippet, fromType, toType ) {
|
|
2529
2602
|
|
|
@@ -2541,13 +2614,13 @@ class NodeBuilder {
|
|
|
2541
2614
|
|
|
2542
2615
|
if ( fromTypeLength === 16 && toTypeLength === 9 ) {
|
|
2543
2616
|
|
|
2544
|
-
return `${ this.getType( toType ) }(${ snippet }[0].xyz, ${ snippet }[1].xyz, ${ snippet }[2].xyz)`;
|
|
2617
|
+
return `${ this.getType( toType ) }( ${ snippet }[ 0 ].xyz, ${ snippet }[ 1 ].xyz, ${ snippet }[ 2 ].xyz )`;
|
|
2545
2618
|
|
|
2546
2619
|
}
|
|
2547
2620
|
|
|
2548
2621
|
if ( fromTypeLength === 9 && toTypeLength === 4 ) {
|
|
2549
2622
|
|
|
2550
|
-
return `${ this.getType( toType ) }(${ snippet }[0].xy, ${ snippet }[1].xy)`;
|
|
2623
|
+
return `${ this.getType( toType ) }( ${ snippet }[ 0 ].xy, ${ snippet }[ 1 ].xy )`;
|
|
2551
2624
|
|
|
2552
2625
|
}
|
|
2553
2626
|
|
|
@@ -2608,7 +2681,7 @@ class NodeBuilder {
|
|
|
2608
2681
|
/**
|
|
2609
2682
|
* Returns a signature with the engine's current revision.
|
|
2610
2683
|
*
|
|
2611
|
-
* @return {
|
|
2684
|
+
* @return {string} The signature.
|
|
2612
2685
|
*/
|
|
2613
2686
|
getSignature() {
|
|
2614
2687
|
|
|
@@ -2622,7 +2695,7 @@ class NodeBuilder {
|
|
|
2622
2695
|
* @function
|
|
2623
2696
|
* @deprecated since r168. Use `new NodeMaterial()` instead, with targeted node material name.
|
|
2624
2697
|
*
|
|
2625
|
-
* @param {
|
|
2698
|
+
* @param {string} [type='NodeMaterial'] - The node material type.
|
|
2626
2699
|
* @throws {Error}
|
|
2627
2700
|
*/
|
|
2628
2701
|
createNodeMaterial( type = 'NodeMaterial' ) { // @deprecated, r168
|