@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
|
@@ -25,22 +25,28 @@ import { warnOnce } from '../../utils.js';
|
|
|
25
25
|
*/
|
|
26
26
|
class WebGPUBackend extends Backend {
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* WebGPUBackend options.
|
|
30
|
+
*
|
|
31
|
+
* @typedef {Object} WebGPUBackend~Options
|
|
32
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
33
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
35
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
36
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
37
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
38
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
39
|
+
* @property {boolean} [trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
40
|
+
* @property {string} [powerPreference=undefined] - The power preference.
|
|
41
|
+
* @property {Object} [requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
42
|
+
* @property {GPUDevice} [device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
43
|
+
* @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
44
|
+
*/
|
|
45
|
+
|
|
28
46
|
/**
|
|
29
47
|
* Constructs a new WebGPU backend.
|
|
30
48
|
*
|
|
31
|
-
* @param {
|
|
32
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
33
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
35
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
36
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
37
|
-
* @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
38
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
39
|
-
* @param {boolean} [parameters.trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
40
|
-
* @param {string} [parameters.powerPreference=undefined] - The power preference.
|
|
41
|
-
* @param {Object} [parameters.requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
42
|
-
* @param {GPUDevice} [parameters.device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
43
|
-
* @param {number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
49
|
+
* @param {WebGPUBackend~Options} [parameters] - The configuration parameter.
|
|
44
50
|
*/
|
|
45
51
|
constructor( parameters = {} ) {
|
|
46
52
|
|
|
@@ -60,14 +66,6 @@ class WebGPUBackend extends Backend {
|
|
|
60
66
|
|
|
61
67
|
this.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;
|
|
62
68
|
|
|
63
|
-
/**
|
|
64
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
65
|
-
*
|
|
66
|
-
* @type {boolean}
|
|
67
|
-
* @default false
|
|
68
|
-
*/
|
|
69
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
70
|
-
|
|
71
69
|
/**
|
|
72
70
|
* A reference to the device.
|
|
73
71
|
*
|
|
@@ -363,10 +361,9 @@ class WebGPUBackend extends Backend {
|
|
|
363
361
|
renderTargetData.width !== renderTarget.width ||
|
|
364
362
|
renderTargetData.height !== renderTarget.height ||
|
|
365
363
|
renderTargetData.dimensions !== renderTarget.dimensions ||
|
|
366
|
-
renderTargetData.activeMipmapLevel !==
|
|
364
|
+
renderTargetData.activeMipmapLevel !== renderContext.activeMipmapLevel ||
|
|
367
365
|
renderTargetData.activeCubeFace !== renderContext.activeCubeFace ||
|
|
368
|
-
renderTargetData.samples !== renderTarget.samples
|
|
369
|
-
renderTargetData.loadOp !== colorAttachmentsConfig.loadOp
|
|
366
|
+
renderTargetData.samples !== renderTarget.samples
|
|
370
367
|
) {
|
|
371
368
|
|
|
372
369
|
descriptors = {};
|
|
@@ -378,23 +375,25 @@ class WebGPUBackend extends Backend {
|
|
|
378
375
|
const onDispose = () => {
|
|
379
376
|
|
|
380
377
|
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
381
|
-
|
|
382
378
|
this.delete( renderTarget );
|
|
383
379
|
|
|
384
380
|
};
|
|
385
381
|
|
|
386
|
-
renderTarget.
|
|
382
|
+
if ( renderTarget.hasEventListener( 'dispose', onDispose ) === false ) {
|
|
383
|
+
|
|
384
|
+
renderTarget.addEventListener( 'dispose', onDispose );
|
|
385
|
+
|
|
386
|
+
}
|
|
387
387
|
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
const cacheKey = renderContext.getCacheKey();
|
|
391
|
+
let descriptorBase = descriptors[ cacheKey ];
|
|
391
392
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
if ( descriptor === undefined ) {
|
|
393
|
+
if ( descriptorBase === undefined ) {
|
|
395
394
|
|
|
396
395
|
const textures = renderContext.textures;
|
|
397
|
-
const
|
|
396
|
+
const textureViews = [];
|
|
398
397
|
|
|
399
398
|
let sliceIndex;
|
|
400
399
|
|
|
@@ -442,44 +441,24 @@ class WebGPUBackend extends Backend {
|
|
|
442
441
|
|
|
443
442
|
}
|
|
444
443
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
let clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
448
|
-
|
|
449
|
-
if ( i === 0 && colorAttachmentsConfig.clearValue ) {
|
|
450
|
-
|
|
451
|
-
clearValue = colorAttachmentsConfig.clearValue;
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
colorAttachments.push( {
|
|
444
|
+
textureViews.push( {
|
|
456
445
|
view,
|
|
457
|
-
depthSlice: sliceIndex,
|
|
458
446
|
resolveTarget,
|
|
459
|
-
|
|
460
|
-
storeOp: colorAttachmentsConfig.storeOP || GPUStoreOp.Store,
|
|
461
|
-
clearValue: clearValue
|
|
447
|
+
depthSlice: sliceIndex
|
|
462
448
|
} );
|
|
463
449
|
|
|
464
450
|
}
|
|
465
451
|
|
|
466
|
-
|
|
467
|
-
descriptor = {
|
|
468
|
-
colorAttachments,
|
|
469
|
-
};
|
|
452
|
+
descriptorBase = { textureViews };
|
|
470
453
|
|
|
471
454
|
if ( renderContext.depth ) {
|
|
472
455
|
|
|
473
456
|
const depthTextureData = this.get( renderContext.depthTexture );
|
|
474
|
-
|
|
475
|
-
const depthStencilAttachment = {
|
|
476
|
-
view: depthTextureData.texture.createView()
|
|
477
|
-
};
|
|
478
|
-
descriptor.depthStencilAttachment = depthStencilAttachment;
|
|
457
|
+
descriptorBase.depthStencilView = depthTextureData.texture.createView();
|
|
479
458
|
|
|
480
459
|
}
|
|
481
460
|
|
|
482
|
-
descriptors[ cacheKey ] =
|
|
461
|
+
descriptors[ cacheKey ] = descriptorBase;
|
|
483
462
|
|
|
484
463
|
renderTargetData.width = renderTarget.width;
|
|
485
464
|
renderTargetData.height = renderTarget.height;
|
|
@@ -487,8 +466,41 @@ class WebGPUBackend extends Backend {
|
|
|
487
466
|
renderTargetData.activeMipmapLevel = renderContext.activeMipmapLevel;
|
|
488
467
|
renderTargetData.activeCubeFace = renderContext.activeCubeFace;
|
|
489
468
|
renderTargetData.dimensions = renderTarget.dimensions;
|
|
490
|
-
|
|
491
|
-
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const descriptor = {
|
|
473
|
+
colorAttachments: []
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
// Apply dynamic properties to cached views
|
|
477
|
+
for ( let i = 0; i < descriptorBase.textureViews.length; i ++ ) {
|
|
478
|
+
|
|
479
|
+
const viewInfo = descriptorBase.textureViews[ i ];
|
|
480
|
+
|
|
481
|
+
let clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
482
|
+
if ( i === 0 && colorAttachmentsConfig.clearValue ) {
|
|
483
|
+
|
|
484
|
+
clearValue = colorAttachmentsConfig.clearValue;
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
descriptor.colorAttachments.push( {
|
|
489
|
+
view: viewInfo.view,
|
|
490
|
+
depthSlice: viewInfo.depthSlice,
|
|
491
|
+
resolveTarget: viewInfo.resolveTarget,
|
|
492
|
+
loadOp: colorAttachmentsConfig.loadOp || GPULoadOp.Load,
|
|
493
|
+
storeOp: colorAttachmentsConfig.storeOp || GPUStoreOp.Store,
|
|
494
|
+
clearValue: clearValue
|
|
495
|
+
} );
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if ( descriptorBase.depthStencilView ) {
|
|
500
|
+
|
|
501
|
+
descriptor.depthStencilAttachment = {
|
|
502
|
+
view: descriptorBase.depthStencilView
|
|
503
|
+
};
|
|
492
504
|
|
|
493
505
|
}
|
|
494
506
|
|
|
@@ -867,7 +879,6 @@ class WebGPUBackend extends Backend {
|
|
|
867
879
|
const renderer = this.renderer;
|
|
868
880
|
|
|
869
881
|
let colorAttachments = [];
|
|
870
|
-
|
|
871
882
|
let depthStencilAttachment;
|
|
872
883
|
let clearValue;
|
|
873
884
|
|
|
@@ -911,29 +922,35 @@ class WebGPUBackend extends Backend {
|
|
|
911
922
|
supportsDepth = renderTargetContext.depth;
|
|
912
923
|
supportsStencil = renderTargetContext.stencil;
|
|
913
924
|
|
|
914
|
-
|
|
925
|
+
const clearConfig = {
|
|
926
|
+
loadOp: color ? GPULoadOp.Clear : GPULoadOp.Load,
|
|
927
|
+
clearValue: color ? clearValue : undefined
|
|
928
|
+
};
|
|
915
929
|
|
|
916
|
-
|
|
930
|
+
if ( supportsDepth ) {
|
|
917
931
|
|
|
918
|
-
|
|
932
|
+
clearConfig.depthLoadOp = depth ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
933
|
+
clearConfig.depthClearValue = depth ? renderer.getClearDepth() : undefined;
|
|
934
|
+
clearConfig.depthStoreOp = GPUStoreOp.Store;
|
|
919
935
|
|
|
920
936
|
}
|
|
921
937
|
|
|
922
|
-
if (
|
|
923
|
-
|
|
924
|
-
const depthTextureData = this.get( renderTargetContext.depthTexture );
|
|
938
|
+
if ( supportsStencil ) {
|
|
925
939
|
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
940
|
+
clearConfig.stencilLoadOp = stencil ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
941
|
+
clearConfig.stencilClearValue = stencil ? renderer.getClearStencil() : undefined;
|
|
942
|
+
clearConfig.stencilStoreOp = GPUStoreOp.Store;
|
|
929
943
|
|
|
930
944
|
}
|
|
931
945
|
|
|
932
|
-
|
|
946
|
+
const descriptor = this._getRenderPassDescriptor( renderTargetContext, clearConfig );
|
|
933
947
|
|
|
934
|
-
|
|
948
|
+
colorAttachments = descriptor.colorAttachments;
|
|
949
|
+
depthStencilAttachment = descriptor.depthStencilAttachment;
|
|
950
|
+
|
|
951
|
+
}
|
|
935
952
|
|
|
936
|
-
if ( supportsDepth ) {
|
|
953
|
+
if ( supportsDepth && depthStencilAttachment && depthStencilAttachment.depthLoadOp === undefined ) {
|
|
937
954
|
|
|
938
955
|
if ( depth ) {
|
|
939
956
|
|
|
@@ -952,7 +969,7 @@ class WebGPUBackend extends Backend {
|
|
|
952
969
|
|
|
953
970
|
//
|
|
954
971
|
|
|
955
|
-
if ( supportsStencil ) {
|
|
972
|
+
if ( supportsStencil && depthStencilAttachment && depthStencilAttachment.stencilLoadOp === undefined ) {
|
|
956
973
|
|
|
957
974
|
if ( stencil ) {
|
|
958
975
|
|
|
@@ -1865,38 +1882,56 @@ class WebGPUBackend extends Backend {
|
|
|
1865
1882
|
*
|
|
1866
1883
|
* @param {Texture} srcTexture - The source texture.
|
|
1867
1884
|
* @param {Texture} dstTexture - The destination texture.
|
|
1868
|
-
* @param {?
|
|
1885
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1869
1886
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1870
|
-
* @param {number} [
|
|
1887
|
+
* @param {number} [srcLevel=0] - The mipmap level to copy.
|
|
1888
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1871
1889
|
*/
|
|
1872
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1890
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1873
1891
|
|
|
1874
1892
|
let dstX = 0;
|
|
1875
1893
|
let dstY = 0;
|
|
1876
|
-
let
|
|
1894
|
+
let dstZ = 0;
|
|
1877
1895
|
|
|
1878
1896
|
let srcX = 0;
|
|
1879
1897
|
let srcY = 0;
|
|
1880
|
-
let
|
|
1898
|
+
let srcZ = 0;
|
|
1881
1899
|
|
|
1882
1900
|
let srcWidth = srcTexture.image.width;
|
|
1883
1901
|
let srcHeight = srcTexture.image.height;
|
|
1902
|
+
let srcDepth = 1;
|
|
1903
|
+
|
|
1884
1904
|
|
|
1885
1905
|
if ( srcRegion !== null ) {
|
|
1886
1906
|
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1907
|
+
if ( srcRegion.isBox3 === true ) {
|
|
1908
|
+
|
|
1909
|
+
srcX = srcRegion.min.x;
|
|
1910
|
+
srcY = srcRegion.min.y;
|
|
1911
|
+
srcZ = srcRegion.min.z;
|
|
1912
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1913
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1914
|
+
srcDepth = srcRegion.max.z - srcRegion.min.z;
|
|
1915
|
+
|
|
1916
|
+
} else {
|
|
1917
|
+
|
|
1918
|
+
// Assume it's a Box2
|
|
1919
|
+
srcX = srcRegion.min.x;
|
|
1920
|
+
srcY = srcRegion.min.y;
|
|
1921
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1922
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1923
|
+
srcDepth = 1;
|
|
1924
|
+
|
|
1925
|
+
}
|
|
1892
1926
|
|
|
1893
1927
|
}
|
|
1894
1928
|
|
|
1929
|
+
|
|
1895
1930
|
if ( dstPosition !== null ) {
|
|
1896
1931
|
|
|
1897
1932
|
dstX = dstPosition.x;
|
|
1898
1933
|
dstY = dstPosition.y;
|
|
1899
|
-
|
|
1934
|
+
dstZ = dstPosition.z || 0;
|
|
1900
1935
|
|
|
1901
1936
|
}
|
|
1902
1937
|
|
|
@@ -1908,23 +1943,29 @@ class WebGPUBackend extends Backend {
|
|
|
1908
1943
|
encoder.copyTextureToTexture(
|
|
1909
1944
|
{
|
|
1910
1945
|
texture: sourceGPU,
|
|
1911
|
-
mipLevel:
|
|
1912
|
-
origin: { x: srcX, y: srcY, z:
|
|
1946
|
+
mipLevel: srcLevel,
|
|
1947
|
+
origin: { x: srcX, y: srcY, z: srcZ }
|
|
1913
1948
|
},
|
|
1914
1949
|
{
|
|
1915
1950
|
texture: destinationGPU,
|
|
1916
|
-
mipLevel:
|
|
1917
|
-
origin: { x: dstX, y: dstY, z:
|
|
1951
|
+
mipLevel: dstLevel,
|
|
1952
|
+
origin: { x: dstX, y: dstY, z: dstZ }
|
|
1918
1953
|
},
|
|
1919
1954
|
[
|
|
1920
1955
|
srcWidth,
|
|
1921
1956
|
srcHeight,
|
|
1922
|
-
|
|
1957
|
+
srcDepth
|
|
1923
1958
|
]
|
|
1924
1959
|
);
|
|
1925
1960
|
|
|
1926
1961
|
this.device.queue.submit( [ encoder.finish() ] );
|
|
1927
1962
|
|
|
1963
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
1964
|
+
|
|
1965
|
+
this.textureUtils.generateMipmaps( dstTexture );
|
|
1966
|
+
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1928
1969
|
}
|
|
1929
1970
|
|
|
1930
1971
|
/**
|
|
@@ -15,17 +15,7 @@ class WebGPURenderer extends Renderer {
|
|
|
15
15
|
/**
|
|
16
16
|
* Constructs a new WebGPU renderer.
|
|
17
17
|
*
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
20
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
21
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
22
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
23
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
24
|
-
* @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
25
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses it WebGL 2 backend no matter if WebGPU is supported or not.
|
|
26
|
-
* @param {number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
27
|
-
* @param {number} [parameters.colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
|
|
28
|
-
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
18
|
+
* @param {WebGPURenderer~Options} [parameters] - The configuration parameter.
|
|
29
19
|
*/
|
|
30
20
|
constructor( parameters = {} ) {
|
|
31
21
|
|
|
@@ -27,20 +27,26 @@ const debugHandler = {
|
|
|
27
27
|
class WebGPURenderer extends Renderer {
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* WebGPURenderer options.
|
|
31
31
|
*
|
|
32
|
-
* @
|
|
33
|
-
* @
|
|
34
|
-
* @
|
|
35
|
-
* @
|
|
36
|
-
* @
|
|
37
|
-
* @
|
|
38
|
-
* @
|
|
39
|
-
* @
|
|
40
|
-
* @
|
|
41
|
-
* @
|
|
32
|
+
* @typedef {Object} WebGPURenderer~Options
|
|
33
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
34
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
35
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
36
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
37
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
38
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
39
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
40
|
+
* @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
41
|
+
* @property {number} [colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
|
|
42
42
|
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
43
43
|
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Constructs a new WebGPU renderer.
|
|
47
|
+
*
|
|
48
|
+
* @param {WebGPURenderer~Options} [parameters] - The configuration parameter.
|
|
49
|
+
*/
|
|
44
50
|
constructor( parameters = {} ) {
|
|
45
51
|
|
|
46
52
|
let BackendClass;
|
|
@@ -321,7 +321,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
321
321
|
*/
|
|
322
322
|
generateWrapFunction( texture ) {
|
|
323
323
|
|
|
324
|
-
const functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${texture.isData3DTexture ? '3d' : '2d'}T`;
|
|
324
|
+
const functionName = `tsl_coord_${ wrapNames[ texture.wrapS ] }S_${ wrapNames[ texture.wrapT ] }_${ texture.isData3DTexture ? '3d' : '2d' }T`;
|
|
325
325
|
|
|
326
326
|
let nodeCode = wgslCodeCache[ functionName ];
|
|
327
327
|
|
|
@@ -331,7 +331,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
331
331
|
|
|
332
332
|
// For 3D textures, use vec3f; for texture arrays, keep vec2f since array index is separate
|
|
333
333
|
const coordType = texture.isData3DTexture ? 'vec3f' : 'vec2f';
|
|
334
|
-
let code = `fn ${functionName}( coord : ${coordType} ) -> ${coordType} {\n\n\treturn ${coordType}(\n`;
|
|
334
|
+
let code = `fn ${ functionName }( coord : ${ coordType } ) -> ${ coordType } {\n\n\treturn ${ coordType }(\n`;
|
|
335
335
|
|
|
336
336
|
const addWrapSnippet = ( wrap, axis ) => {
|
|
337
337
|
|
|
@@ -403,7 +403,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
403
403
|
|
|
404
404
|
/**
|
|
405
405
|
* Generates a WGSL variable that holds the texture dimension of the given texture.
|
|
406
|
-
* It also returns information about the
|
|
406
|
+
* It also returns information about the number of layers (elements) of an arrayed
|
|
407
407
|
* texture as well as the cube face count of cube textures.
|
|
408
408
|
*
|
|
409
409
|
* @param {Texture} texture - The texture to generate the function for.
|
|
@@ -516,7 +516,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
516
516
|
const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
|
|
517
517
|
|
|
518
518
|
const vecType = texture.isData3DTexture ? 'vec3' : 'vec2';
|
|
519
|
-
const coordSnippet = `${vecType}<u32>(${wrapFunction}(${uvSnippet}) * ${vecType}<f32>(${textureDimension}))`;
|
|
519
|
+
const coordSnippet = `${ vecType }<u32>(${ wrapFunction }(${ uvSnippet }) * ${ vecType }<f32>(${ textureDimension }))`;
|
|
520
520
|
|
|
521
521
|
return this.generateTextureLoad( texture, textureProperty, coordSnippet, depthSnippet, levelSnippet );
|
|
522
522
|
|
|
@@ -71,11 +71,11 @@ class WebGPUAttributeUtils {
|
|
|
71
71
|
// patch for INT16 and UINT16
|
|
72
72
|
if ( attribute.normalized === false ) {
|
|
73
73
|
|
|
74
|
-
if ( array.constructor === Int16Array ) {
|
|
74
|
+
if ( array.constructor === Int16Array || array.constructor === Int8Array ) {
|
|
75
75
|
|
|
76
76
|
array = new Int32Array( array );
|
|
77
77
|
|
|
78
|
-
} else if ( array.constructor === Uint16Array ) {
|
|
78
|
+
} else if ( array.constructor === Uint16Array || array.constructor === Uint8Array ) {
|
|
79
79
|
|
|
80
80
|
array = new Uint32Array( array );
|
|
81
81
|
|
|
@@ -202,9 +202,11 @@ class WebGPUAttributeUtils {
|
|
|
202
202
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
+
const bufferOffset = dataOffset * ( isTypedArray ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
206
|
+
|
|
205
207
|
device.queue.writeBuffer(
|
|
206
208
|
buffer,
|
|
207
|
-
|
|
209
|
+
bufferOffset,
|
|
208
210
|
array,
|
|
209
211
|
dataOffset,
|
|
210
212
|
size
|
|
@@ -877,7 +877,7 @@ class WebGPUTextureUtils {
|
|
|
877
877
|
if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
|
|
878
878
|
if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
|
|
879
879
|
if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
|
|
880
|
-
if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.
|
|
880
|
+
if ( format === GPUTextureFormat.BC4RUnorm || format === GPUTextureFormat.BC4RSnorm ) return { byteLength: 8, width: 4, height: 4 }; // RGTC1
|
|
881
881
|
if ( format === GPUTextureFormat.BC5RGUnorm || format === GPUTextureFormat.BC5RGSnorm ) return { byteLength: 16, width: 4, height: 4 }; // RGTC2
|
|
882
882
|
if ( format === GPUTextureFormat.BC6HRGBUFloat || format === GPUTextureFormat.BC6HRGBFloat ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (float)
|
|
883
883
|
if ( format === GPUTextureFormat.BC7RGBAUnorm || format === GPUTextureFormat.BC7RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // BPTC (unorm)
|
|
@@ -3,16 +3,56 @@ import { Group } from '../../objects/Group.js';
|
|
|
3
3
|
|
|
4
4
|
const _moveEvent = { type: 'move' };
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Class for representing a XR controller with its
|
|
8
|
+
* different coordinate systems.
|
|
9
|
+
*
|
|
10
|
+
* @private
|
|
11
|
+
*/
|
|
6
12
|
class WebXRController {
|
|
7
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new XR controller.
|
|
16
|
+
*/
|
|
8
17
|
constructor() {
|
|
9
18
|
|
|
19
|
+
/**
|
|
20
|
+
* A group representing the target ray space
|
|
21
|
+
* of the XR controller.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
* @type {?Group}
|
|
25
|
+
* @default null
|
|
26
|
+
*/
|
|
10
27
|
this._targetRay = null;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* A group representing the grip space
|
|
31
|
+
* of the XR controller.
|
|
32
|
+
*
|
|
33
|
+
* @private
|
|
34
|
+
* @type {?Group}
|
|
35
|
+
* @default null
|
|
36
|
+
*/
|
|
11
37
|
this._grip = null;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A group representing the hand space
|
|
41
|
+
* of the XR controller.
|
|
42
|
+
*
|
|
43
|
+
* @private
|
|
44
|
+
* @type {?Group}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
12
47
|
this._hand = null;
|
|
13
48
|
|
|
14
49
|
}
|
|
15
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Returns a group representing the hand space of the XR controller.
|
|
53
|
+
*
|
|
54
|
+
* @return {Group} A group representing the hand space of the XR controller.
|
|
55
|
+
*/
|
|
16
56
|
getHandSpace() {
|
|
17
57
|
|
|
18
58
|
if ( this._hand === null ) {
|
|
@@ -30,6 +70,11 @@ class WebXRController {
|
|
|
30
70
|
|
|
31
71
|
}
|
|
32
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Returns a group representing the target ray space of the XR controller.
|
|
75
|
+
*
|
|
76
|
+
* @return {Group} A group representing the target ray space of the XR controller.
|
|
77
|
+
*/
|
|
33
78
|
getTargetRaySpace() {
|
|
34
79
|
|
|
35
80
|
if ( this._targetRay === null ) {
|
|
@@ -48,6 +93,11 @@ class WebXRController {
|
|
|
48
93
|
|
|
49
94
|
}
|
|
50
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Returns a group representing the grip space of the XR controller.
|
|
98
|
+
*
|
|
99
|
+
* @return {Group} A group representing the grip space of the XR controller.
|
|
100
|
+
*/
|
|
51
101
|
getGripSpace() {
|
|
52
102
|
|
|
53
103
|
if ( this._grip === null ) {
|
|
@@ -66,6 +116,13 @@ class WebXRController {
|
|
|
66
116
|
|
|
67
117
|
}
|
|
68
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Dispatches the given event to the groups representing
|
|
121
|
+
* the different coordinate spaces of the XR controller.
|
|
122
|
+
*
|
|
123
|
+
* @param {Object} event - The event to dispatch.
|
|
124
|
+
* @return {WebXRController} A reference to this instance.
|
|
125
|
+
*/
|
|
69
126
|
dispatchEvent( event ) {
|
|
70
127
|
|
|
71
128
|
if ( this._targetRay !== null ) {
|
|
@@ -90,6 +147,12 @@ class WebXRController {
|
|
|
90
147
|
|
|
91
148
|
}
|
|
92
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Connects the controller with the given XR input source.
|
|
152
|
+
*
|
|
153
|
+
* @param {XRInputSource} inputSource - The input source.
|
|
154
|
+
* @return {WebXRController} A reference to this instance.
|
|
155
|
+
*/
|
|
93
156
|
connect( inputSource ) {
|
|
94
157
|
|
|
95
158
|
if ( inputSource && inputSource.hand ) {
|
|
@@ -115,6 +178,12 @@ class WebXRController {
|
|
|
115
178
|
|
|
116
179
|
}
|
|
117
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Disconnects the controller from the given XR input source.
|
|
183
|
+
*
|
|
184
|
+
* @param {XRInputSource} inputSource - The input source.
|
|
185
|
+
* @return {WebXRController} A reference to this instance.
|
|
186
|
+
*/
|
|
118
187
|
disconnect( inputSource ) {
|
|
119
188
|
|
|
120
189
|
this.dispatchEvent( { type: 'disconnected', data: inputSource } );
|
|
@@ -141,6 +210,16 @@ class WebXRController {
|
|
|
141
210
|
|
|
142
211
|
}
|
|
143
212
|
|
|
213
|
+
/**
|
|
214
|
+
* Updates the controller with the given input source, XR frame and reference space.
|
|
215
|
+
* This updates the transformations of the groups that represent the different
|
|
216
|
+
* coordinate systems of the controller.
|
|
217
|
+
*
|
|
218
|
+
* @param {XRInputSource} inputSource - The input source.
|
|
219
|
+
* @param {XRFrame} frame - The XR frame.
|
|
220
|
+
* @param {XRReferenceSpace} referenceSpace - The reference space.
|
|
221
|
+
* @return {WebXRController} A reference to this instance.
|
|
222
|
+
*/
|
|
144
223
|
update( inputSource, frame, referenceSpace ) {
|
|
145
224
|
|
|
146
225
|
let inputPose = null;
|
|
@@ -318,8 +397,14 @@ class WebXRController {
|
|
|
318
397
|
|
|
319
398
|
}
|
|
320
399
|
|
|
321
|
-
|
|
322
|
-
|
|
400
|
+
/**
|
|
401
|
+
* Returns a group representing the hand joint for the given input joint.
|
|
402
|
+
*
|
|
403
|
+
* @private
|
|
404
|
+
* @param {Group} hand - The group representing the hand space.
|
|
405
|
+
* @param {XRHandJoint} inputjoint - The XR frame.
|
|
406
|
+
* @return {Group} A group representing the hand joint for the given input joint.
|
|
407
|
+
*/
|
|
323
408
|
_getHandJoint( hand, inputjoint ) {
|
|
324
409
|
|
|
325
410
|
if ( hand.joints[ inputjoint.jointName ] === undefined ) {
|