@plastic-software/three 0.174.0 → 0.175.1
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 +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- 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 +93 -39
- 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 +171 -48
- 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 +71 -29
- 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 +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- 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 +86 -18
- 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 +38 -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 +81 -61
- 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 +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- 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 +70 -0
- 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 +131 -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 +266 -133
- 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/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- 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 +1 -1
- package/src/Three.TSL.js +3 -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 +168 -18
- 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/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -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/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 +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- 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 +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- 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 +4 -6
- 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 +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- 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 +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- 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 +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- 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 +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,27 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An alternative version of a buffer attribute with more control over the VBO.
|
|
3
|
+
*
|
|
4
|
+
* The renderer does not construct a VBO for this kind of attribute. Instead, it uses
|
|
5
|
+
* whatever VBO is passed in constructor and can later be altered via the `buffer` property.
|
|
6
|
+
*
|
|
7
|
+
* The most common use case for this class is when some kind of GPGPU calculation interferes
|
|
8
|
+
* or even produces the VBOs in question.
|
|
9
|
+
*
|
|
10
|
+
* Notice that this class can only be used with {@link WebGLRenderer}.
|
|
11
|
+
*/
|
|
1
12
|
class GLBufferAttribute {
|
|
2
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new GL buffer attribute.
|
|
16
|
+
*
|
|
17
|
+
* @param {WebGLBuffer} buffer - The native WebGL buffer.
|
|
18
|
+
* @param {number} type - The native data type (e.g. `gl.FLOAT`).
|
|
19
|
+
* @param {number} itemSize - The item size.
|
|
20
|
+
* @param {number} elementSize - The corresponding size (in bytes) for the given `type` parameter.
|
|
21
|
+
* @param {number} count - The expected number of vertices in VBO.
|
|
22
|
+
*/
|
|
3
23
|
constructor( buffer, type, itemSize, elementSize, count ) {
|
|
4
24
|
|
|
25
|
+
/**
|
|
26
|
+
* This flag can be used for type testing.
|
|
27
|
+
*
|
|
28
|
+
* @type {boolean}
|
|
29
|
+
* @readonly
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
5
32
|
this.isGLBufferAttribute = true;
|
|
6
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The name of the buffer attribute.
|
|
36
|
+
*
|
|
37
|
+
* @type {string}
|
|
38
|
+
*/
|
|
7
39
|
this.name = '';
|
|
8
40
|
|
|
41
|
+
/**
|
|
42
|
+
* The native WebGL buffer.
|
|
43
|
+
*
|
|
44
|
+
* @type {WebGLBuffer}
|
|
45
|
+
*/
|
|
9
46
|
this.buffer = buffer;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The native data type.
|
|
50
|
+
*
|
|
51
|
+
* @type {number}
|
|
52
|
+
*/
|
|
10
53
|
this.type = type;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The item size, see {@link BufferAttribute#itemSize}.
|
|
57
|
+
*
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
11
60
|
this.itemSize = itemSize;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The corresponding size (in bytes) for the given `type` parameter.
|
|
64
|
+
*
|
|
65
|
+
* @type {number}
|
|
66
|
+
*/
|
|
12
67
|
this.elementSize = elementSize;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The expected number of vertices in VBO.
|
|
71
|
+
*
|
|
72
|
+
* @type {number}
|
|
73
|
+
*/
|
|
13
74
|
this.count = count;
|
|
14
75
|
|
|
76
|
+
/**
|
|
77
|
+
* A version number, incremented every time the `needsUpdate` is set to `true`.
|
|
78
|
+
*
|
|
79
|
+
* @type {number}
|
|
80
|
+
*/
|
|
15
81
|
this.version = 0;
|
|
16
82
|
|
|
17
83
|
}
|
|
18
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Flag to indicate that this attribute has changed and should be re-sent to
|
|
87
|
+
* the GPU. Set this to `true` when you modify the value of the array.
|
|
88
|
+
*
|
|
89
|
+
* @type {number}
|
|
90
|
+
* @default false
|
|
91
|
+
* @param {boolean} value
|
|
92
|
+
*/
|
|
19
93
|
set needsUpdate( value ) {
|
|
20
94
|
|
|
21
95
|
if ( value === true ) this.version ++;
|
|
22
96
|
|
|
23
97
|
}
|
|
24
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Sets the given native WebGL buffer.
|
|
101
|
+
*
|
|
102
|
+
* @param {WebGLBuffer} buffer - The buffer to set.
|
|
103
|
+
* @return {BufferAttribute} A reference to this instance.
|
|
104
|
+
*/
|
|
25
105
|
setBuffer( buffer ) {
|
|
26
106
|
|
|
27
107
|
this.buffer = buffer;
|
|
@@ -30,6 +110,13 @@ class GLBufferAttribute {
|
|
|
30
110
|
|
|
31
111
|
}
|
|
32
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Sets the given native data type and element size.
|
|
115
|
+
*
|
|
116
|
+
* @param {number} type - The native data type (e.g. `gl.FLOAT`).
|
|
117
|
+
* @param {number} elementSize - The corresponding size (in bytes) for the given `type` parameter.
|
|
118
|
+
* @return {BufferAttribute} A reference to this instance.
|
|
119
|
+
*/
|
|
33
120
|
setType( type, elementSize ) {
|
|
34
121
|
|
|
35
122
|
this.type = type;
|
|
@@ -39,6 +126,12 @@ class GLBufferAttribute {
|
|
|
39
126
|
|
|
40
127
|
}
|
|
41
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Sets the item size.
|
|
131
|
+
*
|
|
132
|
+
* @param {number} itemSize - The item size.
|
|
133
|
+
* @return {BufferAttribute} A reference to this instance.
|
|
134
|
+
*/
|
|
42
135
|
setItemSize( itemSize ) {
|
|
43
136
|
|
|
44
137
|
this.itemSize = itemSize;
|
|
@@ -47,6 +140,12 @@ class GLBufferAttribute {
|
|
|
47
140
|
|
|
48
141
|
}
|
|
49
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Sets the count (the expected number of vertices in VBO).
|
|
145
|
+
*
|
|
146
|
+
* @param {number} count - The count.
|
|
147
|
+
* @return {BufferAttribute} A reference to this instance.
|
|
148
|
+
*/
|
|
50
149
|
setCount( count ) {
|
|
51
150
|
|
|
52
151
|
this.count = count;
|
|
@@ -1,13 +1,42 @@
|
|
|
1
1
|
import { BufferAttribute } from './BufferAttribute.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* An instanced version of a buffer attribute.
|
|
5
|
+
*
|
|
6
|
+
* @augments BufferAttribute
|
|
7
|
+
*/
|
|
3
8
|
class InstancedBufferAttribute extends BufferAttribute {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new instanced buffer attribute.
|
|
12
|
+
*
|
|
13
|
+
* @param {TypedArray} array - The array holding the attribute data.
|
|
14
|
+
* @param {number} itemSize - The item size.
|
|
15
|
+
* @param {boolean} [normalized=false] - Whether the data are normalized or not.
|
|
16
|
+
* @param {number} [meshPerAttribute=1] - How often a value of this buffer attribute should be repeated.
|
|
17
|
+
*/
|
|
5
18
|
constructor( array, itemSize, normalized, meshPerAttribute = 1 ) {
|
|
6
19
|
|
|
7
20
|
super( array, itemSize, normalized );
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* This flag can be used for type testing.
|
|
24
|
+
*
|
|
25
|
+
* @type {boolean}
|
|
26
|
+
* @readonly
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
9
29
|
this.isInstancedBufferAttribute = true;
|
|
10
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Defines how often a value of this buffer attribute should be repeated. A
|
|
33
|
+
* value of one means that each value of the instanced attribute is used for
|
|
34
|
+
* a single instance. A value of two means that each value is used for two
|
|
35
|
+
* consecutive instances (and so on).
|
|
36
|
+
*
|
|
37
|
+
* @type {number}
|
|
38
|
+
* @default 1
|
|
39
|
+
*/
|
|
11
40
|
this.meshPerAttribute = meshPerAttribute;
|
|
12
41
|
|
|
13
42
|
}
|
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
import { BufferGeometry } from './BufferGeometry.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* An instanced version of a geometry.
|
|
5
|
+
*/
|
|
3
6
|
class InstancedBufferGeometry extends BufferGeometry {
|
|
4
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Constructs a new instanced buffer geometry.
|
|
10
|
+
*/
|
|
5
11
|
constructor() {
|
|
6
12
|
|
|
7
13
|
super();
|
|
8
14
|
|
|
15
|
+
/**
|
|
16
|
+
* This flag can be used for type testing.
|
|
17
|
+
*
|
|
18
|
+
* @type {boolean}
|
|
19
|
+
* @readonly
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
9
22
|
this.isInstancedBufferGeometry = true;
|
|
10
23
|
|
|
11
24
|
this.type = 'InstancedBufferGeometry';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The instance count.
|
|
28
|
+
*
|
|
29
|
+
* @type {number}
|
|
30
|
+
* @default Infinity
|
|
31
|
+
*/
|
|
12
32
|
this.instanceCount = Infinity;
|
|
13
33
|
|
|
14
34
|
}
|
|
@@ -1,13 +1,39 @@
|
|
|
1
1
|
import { InterleavedBuffer } from './InterleavedBuffer.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* An instanced version of an interleaved buffer.
|
|
5
|
+
*
|
|
6
|
+
* @augments InterleavedBuffer
|
|
7
|
+
*/
|
|
3
8
|
class InstancedInterleavedBuffer extends InterleavedBuffer {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new instanced interleaved buffer.
|
|
12
|
+
*
|
|
13
|
+
* @param {TypedArray} array - A typed array with a shared buffer storing attribute data.
|
|
14
|
+
* @param {number} stride - The number of typed-array elements per vertex.
|
|
15
|
+
* @param {number} [meshPerAttribute=1] - Defines how often a value of this interleaved buffer should be repeated.
|
|
16
|
+
*/
|
|
5
17
|
constructor( array, stride, meshPerAttribute = 1 ) {
|
|
6
18
|
|
|
7
19
|
super( array, stride );
|
|
8
20
|
|
|
21
|
+
/**
|
|
22
|
+
* This flag can be used for type testing.
|
|
23
|
+
*
|
|
24
|
+
* @type {boolean}
|
|
25
|
+
* @readonly
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
9
28
|
this.isInstancedInterleavedBuffer = true;
|
|
10
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Defines how often a value of this buffer attribute should be repeated,
|
|
32
|
+
* see {@link InstancedBufferAttribute#meshPerAttribute}.
|
|
33
|
+
*
|
|
34
|
+
* @type {number}
|
|
35
|
+
* @default 1
|
|
36
|
+
*/
|
|
11
37
|
this.meshPerAttribute = meshPerAttribute;
|
|
12
38
|
|
|
13
39
|
}
|
|
@@ -1,33 +1,115 @@
|
|
|
1
1
|
import { generateUUID } from '../math/MathUtils.js';
|
|
2
2
|
import { StaticDrawUsage } from '../constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* "Interleaved" means that multiple attributes, possibly of different types,
|
|
6
|
+
* (e.g., position, normal, uv, color) are packed into a single array buffer.
|
|
7
|
+
*
|
|
8
|
+
* An introduction into interleaved arrays can be found here: [Interleaved array basics]{@link https://blog.tojicode.com/2011/05/interleaved-array-basics.html}
|
|
9
|
+
*/
|
|
4
10
|
class InterleavedBuffer {
|
|
5
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new interleaved buffer.
|
|
14
|
+
*
|
|
15
|
+
* @param {TypedArray} array - A typed array with a shared buffer storing attribute data.
|
|
16
|
+
* @param {number} stride - The number of typed-array elements per vertex.
|
|
17
|
+
*/
|
|
6
18
|
constructor( array, stride ) {
|
|
7
19
|
|
|
20
|
+
/**
|
|
21
|
+
* This flag can be used for type testing.
|
|
22
|
+
*
|
|
23
|
+
* @type {boolean}
|
|
24
|
+
* @readonly
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
8
27
|
this.isInterleavedBuffer = true;
|
|
9
28
|
|
|
29
|
+
/**
|
|
30
|
+
* A typed array with a shared buffer storing attribute data.
|
|
31
|
+
*
|
|
32
|
+
* @type {TypedArray}
|
|
33
|
+
*/
|
|
10
34
|
this.array = array;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The number of typed-array elements per vertex.
|
|
38
|
+
*
|
|
39
|
+
* @type {number}
|
|
40
|
+
*/
|
|
11
41
|
this.stride = stride;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The total number of elements in the array
|
|
45
|
+
*
|
|
46
|
+
* @type {number}
|
|
47
|
+
* @readonly
|
|
48
|
+
*/
|
|
12
49
|
this.count = array !== undefined ? array.length / stride : 0;
|
|
13
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Defines the intended usage pattern of the data store for optimization purposes.
|
|
53
|
+
*
|
|
54
|
+
* Note: After the initial use of a buffer, its usage cannot be changed. Instead,
|
|
55
|
+
* instantiate a new one and set the desired usage before the next render.
|
|
56
|
+
*
|
|
57
|
+
* @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}
|
|
58
|
+
* @default StaticDrawUsage
|
|
59
|
+
*/
|
|
14
60
|
this.usage = StaticDrawUsage;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* This can be used to only update some components of stored vectors (for example, just the
|
|
64
|
+
* component related to color). Use the `addUpdateRange()` function to add ranges to this array.
|
|
65
|
+
*
|
|
66
|
+
* @type {Array<Object>}
|
|
67
|
+
*/
|
|
15
68
|
this.updateRanges = [];
|
|
16
69
|
|
|
70
|
+
/**
|
|
71
|
+
* A version number, incremented every time the `needsUpdate` is set to `true`.
|
|
72
|
+
*
|
|
73
|
+
* @type {number}
|
|
74
|
+
*/
|
|
17
75
|
this.version = 0;
|
|
18
76
|
|
|
77
|
+
/**
|
|
78
|
+
* The UUID of the interleaved buffer.
|
|
79
|
+
*
|
|
80
|
+
* @type {string}
|
|
81
|
+
* @readonly
|
|
82
|
+
*/
|
|
19
83
|
this.uuid = generateUUID();
|
|
20
84
|
|
|
21
85
|
}
|
|
22
86
|
|
|
87
|
+
/**
|
|
88
|
+
* A callback function that is executed after the renderer has transferred the attribute array
|
|
89
|
+
* data to the GPU.
|
|
90
|
+
*/
|
|
23
91
|
onUploadCallback() {}
|
|
24
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Flag to indicate that this attribute has changed and should be re-sent to
|
|
95
|
+
* the GPU. Set this to `true` when you modify the value of the array.
|
|
96
|
+
*
|
|
97
|
+
* @type {number}
|
|
98
|
+
* @default false
|
|
99
|
+
* @param {boolean} value
|
|
100
|
+
*/
|
|
25
101
|
set needsUpdate( value ) {
|
|
26
102
|
|
|
27
103
|
if ( value === true ) this.version ++;
|
|
28
104
|
|
|
29
105
|
}
|
|
30
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Sets the usage of this interleaved buffer.
|
|
109
|
+
*
|
|
110
|
+
* @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.
|
|
111
|
+
* @return {InterleavedBuffer} A reference to this interleaved buffer.
|
|
112
|
+
*/
|
|
31
113
|
setUsage( value ) {
|
|
32
114
|
|
|
33
115
|
this.usage = value;
|
|
@@ -36,18 +118,33 @@ class InterleavedBuffer {
|
|
|
36
118
|
|
|
37
119
|
}
|
|
38
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Adds a range of data in the data array to be updated on the GPU.
|
|
123
|
+
*
|
|
124
|
+
* @param {number} start - Position at which to start update.
|
|
125
|
+
* @param {number} count - The number of components to update.
|
|
126
|
+
*/
|
|
39
127
|
addUpdateRange( start, count ) {
|
|
40
128
|
|
|
41
129
|
this.updateRanges.push( { start, count } );
|
|
42
130
|
|
|
43
131
|
}
|
|
44
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Clears the update ranges.
|
|
135
|
+
*/
|
|
45
136
|
clearUpdateRanges() {
|
|
46
137
|
|
|
47
138
|
this.updateRanges.length = 0;
|
|
48
139
|
|
|
49
140
|
}
|
|
50
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Copies the values of the given interleaved buffer to this instance.
|
|
144
|
+
*
|
|
145
|
+
* @param {InterleavedBuffer} source - The interleaved buffer to copy.
|
|
146
|
+
* @return {InterleavedBuffer} A reference to this instance.
|
|
147
|
+
*/
|
|
51
148
|
copy( source ) {
|
|
52
149
|
|
|
53
150
|
this.array = new source.array.constructor( source.array );
|
|
@@ -59,14 +156,24 @@ class InterleavedBuffer {
|
|
|
59
156
|
|
|
60
157
|
}
|
|
61
158
|
|
|
62
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Copies a vector from the given interleaved buffer to this one. The start
|
|
161
|
+
* and destination position in the attribute buffers are represented by the
|
|
162
|
+
* given indices.
|
|
163
|
+
*
|
|
164
|
+
* @param {number} index1 - The destination index into this interleaved buffer.
|
|
165
|
+
* @param {InterleavedBuffer} interleavedBuffer - The interleaved buffer to copy from.
|
|
166
|
+
* @param {number} index2 - The source index into the given interleaved buffer.
|
|
167
|
+
* @return {InterleavedBuffer} A reference to this instance.
|
|
168
|
+
*/
|
|
169
|
+
copyAt( index1, interleavedBuffer, index2 ) {
|
|
63
170
|
|
|
64
171
|
index1 *= this.stride;
|
|
65
|
-
index2 *=
|
|
172
|
+
index2 *= interleavedBuffer.stride;
|
|
66
173
|
|
|
67
174
|
for ( let i = 0, l = this.stride; i < l; i ++ ) {
|
|
68
175
|
|
|
69
|
-
this.array[ index1 + i ] =
|
|
176
|
+
this.array[ index1 + i ] = interleavedBuffer.array[ index2 + i ];
|
|
70
177
|
|
|
71
178
|
}
|
|
72
179
|
|
|
@@ -74,6 +181,13 @@ class InterleavedBuffer {
|
|
|
74
181
|
|
|
75
182
|
}
|
|
76
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Sets the given array data in the interleaved buffer.
|
|
186
|
+
*
|
|
187
|
+
* @param {(TypedArray|Array)} value - The array data to set.
|
|
188
|
+
* @param {number} [offset=0] - The offset in this interleaved buffer's array.
|
|
189
|
+
* @return {InterleavedBuffer} A reference to this instance.
|
|
190
|
+
*/
|
|
77
191
|
set( value, offset = 0 ) {
|
|
78
192
|
|
|
79
193
|
this.array.set( value, offset );
|
|
@@ -82,6 +196,12 @@ class InterleavedBuffer {
|
|
|
82
196
|
|
|
83
197
|
}
|
|
84
198
|
|
|
199
|
+
/**
|
|
200
|
+
* Returns a new interleaved buffer with copied values from this instance.
|
|
201
|
+
*
|
|
202
|
+
* @param {Object} [data] - An object with shared array buffers that allows to retain shared structures.
|
|
203
|
+
* @return {InterleavedBuffer} A clone of this instance.
|
|
204
|
+
*/
|
|
85
205
|
clone( data ) {
|
|
86
206
|
|
|
87
207
|
if ( data.arrayBuffers === undefined ) {
|
|
@@ -111,6 +231,14 @@ class InterleavedBuffer {
|
|
|
111
231
|
|
|
112
232
|
}
|
|
113
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Sets the given callback function that is executed after the Renderer has transferred
|
|
236
|
+
* the array data to the GPU. Can be used to perform clean-up operations after
|
|
237
|
+
* the upload when data are not needed anymore on the CPU side.
|
|
238
|
+
*
|
|
239
|
+
* @param {Function} callback - The `onUpload()` callback.
|
|
240
|
+
* @return {InterleavedBuffer} A reference to this instance.
|
|
241
|
+
*/
|
|
114
242
|
onUpload( callback ) {
|
|
115
243
|
|
|
116
244
|
this.onUploadCallback = callback;
|
|
@@ -119,6 +247,12 @@ class InterleavedBuffer {
|
|
|
119
247
|
|
|
120
248
|
}
|
|
121
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Serializes the interleaved buffer into JSON.
|
|
252
|
+
*
|
|
253
|
+
* @param {Object} [data] - An optional value holding meta information about the serialization.
|
|
254
|
+
* @return {Object} A JSON object representing the serialized interleaved buffer.
|
|
255
|
+
*/
|
|
122
256
|
toJSON( data ) {
|
|
123
257
|
|
|
124
258
|
if ( data.arrayBuffers === undefined ) {
|