super-three 0.173.4 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +22198 -1564
- package/build/three.core.js +21287 -1346
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +882 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19358 -17482
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19342 -17482
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +144 -42
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +194 -71
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +74 -30
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +87 -19
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +56 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +90 -70
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +75 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +134 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +268 -134
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +3 -4
- package/src/Three.TSL.js +7 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +169 -19
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +339 -0
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +28 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/EventDispatcher.js +44 -2
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +63 -0
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +45 -5
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +130 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +94 -0
- package/src/math/MathUtils.js +405 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +187 -11
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -73,6 +73,9 @@ class WebGLState {
|
|
|
73
73
|
this.currentLineWidth = null;
|
|
74
74
|
this.currentClippingPlanes = 0;
|
|
75
75
|
|
|
76
|
+
this.currentVAO = null;
|
|
77
|
+
this.currentIndex = null;
|
|
78
|
+
|
|
76
79
|
this.currentBoundFramebuffers = {};
|
|
77
80
|
this.currentDrawbuffers = new WeakMap();
|
|
78
81
|
|
|
@@ -176,7 +179,7 @@ class WebGLState {
|
|
|
176
179
|
* This method caches the state so `gl.frontFace()` is only
|
|
177
180
|
* called when necessary.
|
|
178
181
|
*
|
|
179
|
-
* @param {
|
|
182
|
+
* @param {boolean} flipSided - Whether triangles flipped their sides or not.
|
|
180
183
|
*/
|
|
181
184
|
setFlipSided( flipSided ) {
|
|
182
185
|
|
|
@@ -207,7 +210,7 @@ class WebGLState {
|
|
|
207
210
|
* This method caches the state so `gl.cullFace()` is only
|
|
208
211
|
* called when necessary.
|
|
209
212
|
*
|
|
210
|
-
* @param {
|
|
213
|
+
* @param {number} cullFace - Defines which polygons are candidates for culling.
|
|
211
214
|
*/
|
|
212
215
|
setCullFace( cullFace ) {
|
|
213
216
|
|
|
@@ -251,7 +254,7 @@ class WebGLState {
|
|
|
251
254
|
* This method caches the state so `gl.lineWidth()` is only
|
|
252
255
|
* called when necessary.
|
|
253
256
|
*
|
|
254
|
-
* @param {
|
|
257
|
+
* @param {number} width - The line width.
|
|
255
258
|
*/
|
|
256
259
|
setLineWidth( width ) {
|
|
257
260
|
|
|
@@ -273,14 +276,14 @@ class WebGLState {
|
|
|
273
276
|
* This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
|
|
274
277
|
* `gl.blendFunc()` and `gl.blendFuncSeparate()` are only called when necessary.
|
|
275
278
|
*
|
|
276
|
-
* @param {
|
|
277
|
-
* @param {
|
|
278
|
-
* @param {
|
|
279
|
-
* @param {
|
|
280
|
-
* @param {
|
|
281
|
-
* @param {
|
|
282
|
-
* @param {
|
|
283
|
-
* @param {
|
|
279
|
+
* @param {number} blending - The blending type.
|
|
280
|
+
* @param {number} blendEquation - The blending equation.
|
|
281
|
+
* @param {number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
|
|
282
|
+
* @param {number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
|
|
283
|
+
* @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
|
|
284
|
+
* @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
|
|
285
|
+
* @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
|
|
286
|
+
* @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
|
|
284
287
|
*/
|
|
285
288
|
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
286
289
|
|
|
@@ -425,7 +428,7 @@ class WebGLState {
|
|
|
425
428
|
* This method caches the state so `gl.colorMask()` is only
|
|
426
429
|
* called when necessary.
|
|
427
430
|
*
|
|
428
|
-
* @param {
|
|
431
|
+
* @param {boolean} colorMask - The color mask.
|
|
429
432
|
*/
|
|
430
433
|
setColorMask( colorMask ) {
|
|
431
434
|
|
|
@@ -441,7 +444,7 @@ class WebGLState {
|
|
|
441
444
|
/**
|
|
442
445
|
* Specifies whether the depth test is enabled or not.
|
|
443
446
|
*
|
|
444
|
-
* @param {
|
|
447
|
+
* @param {boolean} depthTest - Whether the depth test is enabled or not.
|
|
445
448
|
*/
|
|
446
449
|
setDepthTest( depthTest ) {
|
|
447
450
|
|
|
@@ -466,7 +469,7 @@ class WebGLState {
|
|
|
466
469
|
* This method caches the state so `gl.depthMask()` is only
|
|
467
470
|
* called when necessary.
|
|
468
471
|
*
|
|
469
|
-
* @param {
|
|
472
|
+
* @param {boolean} depthMask - The depth mask.
|
|
470
473
|
*/
|
|
471
474
|
setDepthMask( depthMask ) {
|
|
472
475
|
|
|
@@ -485,7 +488,7 @@ class WebGLState {
|
|
|
485
488
|
* This method caches the state so `gl.depthFunc()` is only
|
|
486
489
|
* called when necessary.
|
|
487
490
|
*
|
|
488
|
-
* @param {
|
|
491
|
+
* @param {number} depthFunc - The depth compare function.
|
|
489
492
|
*/
|
|
490
493
|
setDepthFunc( depthFunc ) {
|
|
491
494
|
|
|
@@ -548,12 +551,12 @@ class WebGLState {
|
|
|
548
551
|
}
|
|
549
552
|
|
|
550
553
|
/**
|
|
551
|
-
* Specifies the
|
|
554
|
+
* Specifies the scissor box.
|
|
552
555
|
*
|
|
553
|
-
* @param {
|
|
554
|
-
* @param {
|
|
555
|
-
* @param {
|
|
556
|
-
* @param {
|
|
556
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
557
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
558
|
+
* @param {number} width - The width of the viewport.
|
|
559
|
+
* @param {number} height - The height of the viewport.
|
|
557
560
|
*
|
|
558
561
|
*/
|
|
559
562
|
scissor( x, y, width, height ) {
|
|
@@ -574,10 +577,10 @@ class WebGLState {
|
|
|
574
577
|
/**
|
|
575
578
|
* Specifies the viewport.
|
|
576
579
|
*
|
|
577
|
-
* @param {
|
|
578
|
-
* @param {
|
|
579
|
-
* @param {
|
|
580
|
-
* @param {
|
|
580
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
581
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
582
|
+
* @param {number} width - The width of the viewport.
|
|
583
|
+
* @param {number} height - The height of the viewport.
|
|
581
584
|
*
|
|
582
585
|
*/
|
|
583
586
|
viewport( x, y, width, height ) {
|
|
@@ -598,7 +601,7 @@ class WebGLState {
|
|
|
598
601
|
/**
|
|
599
602
|
* Defines the scissor test.
|
|
600
603
|
*
|
|
601
|
-
* @param {
|
|
604
|
+
* @param {boolean} boolean - Whether the scissor test should be enabled or not.
|
|
602
605
|
*/
|
|
603
606
|
setScissorTest( boolean ) {
|
|
604
607
|
|
|
@@ -619,7 +622,7 @@ class WebGLState {
|
|
|
619
622
|
/**
|
|
620
623
|
* Specifies whether the stencil test is enabled or not.
|
|
621
624
|
*
|
|
622
|
-
* @param {
|
|
625
|
+
* @param {boolean} stencilTest - Whether the stencil test is enabled or not.
|
|
623
626
|
*/
|
|
624
627
|
setStencilTest( stencilTest ) {
|
|
625
628
|
|
|
@@ -644,7 +647,7 @@ class WebGLState {
|
|
|
644
647
|
* This method caches the state so `gl.stencilMask()` is only
|
|
645
648
|
* called when necessary.
|
|
646
649
|
*
|
|
647
|
-
* @param {
|
|
650
|
+
* @param {boolean} stencilMask - The stencil mask.
|
|
648
651
|
*/
|
|
649
652
|
setStencilMask( stencilMask ) {
|
|
650
653
|
|
|
@@ -663,9 +666,9 @@ class WebGLState {
|
|
|
663
666
|
* This method caches the state so `gl.stencilFunc()` is only
|
|
664
667
|
* called when necessary.
|
|
665
668
|
*
|
|
666
|
-
* @param {
|
|
667
|
-
* @param {
|
|
668
|
-
* @param {
|
|
669
|
+
* @param {number} stencilFunc - The stencil compare function.
|
|
670
|
+
* @param {number} stencilRef - The reference value for the stencil test.
|
|
671
|
+
* @param {number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.
|
|
669
672
|
*/
|
|
670
673
|
setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
|
|
671
674
|
|
|
@@ -689,9 +692,9 @@ class WebGLState {
|
|
|
689
692
|
* This method caches the state so `gl.stencilOp()` is only
|
|
690
693
|
* called when necessary.
|
|
691
694
|
*
|
|
692
|
-
* @param {
|
|
693
|
-
* @param {
|
|
694
|
-
* @param {
|
|
695
|
+
* @param {number} stencilFail - The function to use when the stencil test fails.
|
|
696
|
+
* @param {number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
|
|
697
|
+
* @param {number} stencilZPass - The function to use when both the stencil test and the depth test pass,
|
|
695
698
|
* or when the stencil test passes and there is no depth buffer or depth testing is disabled.
|
|
696
699
|
*/
|
|
697
700
|
setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
|
|
@@ -714,8 +717,8 @@ class WebGLState {
|
|
|
714
717
|
* Configures the WebGL state for the given material.
|
|
715
718
|
*
|
|
716
719
|
* @param {Material} material - The material to configure the state for.
|
|
717
|
-
* @param {
|
|
718
|
-
* @param {
|
|
720
|
+
* @param {number} frontFaceCW - Whether the front faces are counter-clockwise or not.
|
|
721
|
+
* @param {number} hardwareClippingPlanes - The number of hardware clipping planes.
|
|
719
722
|
*/
|
|
720
723
|
setMaterial( material, frontFaceCW, hardwareClippingPlanes ) {
|
|
721
724
|
|
|
@@ -787,9 +790,9 @@ class WebGLState {
|
|
|
787
790
|
* This method caches the state so `gl.polygonOffset()` is only
|
|
788
791
|
* called when necessary.
|
|
789
792
|
*
|
|
790
|
-
* @param {
|
|
791
|
-
* @param {
|
|
792
|
-
* @param {
|
|
793
|
+
* @param {boolean} polygonOffset - Whether polygon offset is enabled or not.
|
|
794
|
+
* @param {number} factor - The scale factor for the variable depth offset for each polygon.
|
|
795
|
+
* @param {number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
|
|
793
796
|
*/
|
|
794
797
|
setPolygonOffset( polygonOffset, factor, units ) {
|
|
795
798
|
|
|
@@ -823,7 +826,7 @@ class WebGLState {
|
|
|
823
826
|
* called when necessary.
|
|
824
827
|
*
|
|
825
828
|
* @param {WebGLProgram} program - The WebGL program to use.
|
|
826
|
-
* @return {
|
|
829
|
+
* @return {boolean} Whether a program change has been executed or not.
|
|
827
830
|
*/
|
|
828
831
|
useProgram( program ) {
|
|
829
832
|
|
|
@@ -841,6 +844,53 @@ class WebGLState {
|
|
|
841
844
|
|
|
842
845
|
}
|
|
843
846
|
|
|
847
|
+
/**
|
|
848
|
+
* Sets the vertex state by binding the given VAO and element buffer.
|
|
849
|
+
*
|
|
850
|
+
* @param {WebGLVertexArrayObject} vao - The VAO.
|
|
851
|
+
* @param {WebGLBuffer} indexBuffer - The index buffer.
|
|
852
|
+
* @return {boolean} Whether a vertex state has been changed or not.
|
|
853
|
+
*/
|
|
854
|
+
setVertexState( vao, indexBuffer = null ) {
|
|
855
|
+
|
|
856
|
+
const gl = this.gl;
|
|
857
|
+
|
|
858
|
+
if ( this.currentVAO !== vao || this.currentIndex !== indexBuffer ) {
|
|
859
|
+
|
|
860
|
+
gl.bindVertexArray( vao );
|
|
861
|
+
|
|
862
|
+
if ( indexBuffer !== null ) {
|
|
863
|
+
|
|
864
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexBuffer );
|
|
865
|
+
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
this.currentVAO = vao;
|
|
869
|
+
this.currentIndex = indexBuffer;
|
|
870
|
+
|
|
871
|
+
return true;
|
|
872
|
+
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
return false;
|
|
876
|
+
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
/**
|
|
880
|
+
* Resets the vertex array state by resetting the VAO and element buffer.
|
|
881
|
+
*/
|
|
882
|
+
resetVertexState() {
|
|
883
|
+
|
|
884
|
+
const gl = this.gl;
|
|
885
|
+
|
|
886
|
+
gl.bindVertexArray( null );
|
|
887
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, null );
|
|
888
|
+
|
|
889
|
+
this.currentVAO = null;
|
|
890
|
+
this.currentIndex = null;
|
|
891
|
+
|
|
892
|
+
}
|
|
893
|
+
|
|
844
894
|
// framebuffer
|
|
845
895
|
|
|
846
896
|
|
|
@@ -850,9 +900,9 @@ class WebGLState {
|
|
|
850
900
|
* This method caches the state so `gl.bindFramebuffer()` is only
|
|
851
901
|
* called when necessary.
|
|
852
902
|
*
|
|
853
|
-
* @param {
|
|
903
|
+
* @param {number} target - The binding point (target).
|
|
854
904
|
* @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.
|
|
855
|
-
* @return {
|
|
905
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
856
906
|
*/
|
|
857
907
|
bindFramebuffer( target, framebuffer ) {
|
|
858
908
|
|
|
@@ -962,7 +1012,7 @@ class WebGLState {
|
|
|
962
1012
|
* This method caches the state so `gl.activeTexture()` is only
|
|
963
1013
|
* called when necessary.
|
|
964
1014
|
*
|
|
965
|
-
* @param {
|
|
1015
|
+
* @param {number} webglSlot - The texture unit to make active.
|
|
966
1016
|
*/
|
|
967
1017
|
activeTexture( webglSlot ) {
|
|
968
1018
|
|
|
@@ -985,9 +1035,9 @@ class WebGLState {
|
|
|
985
1035
|
* This method caches the state so `gl.bindTexture()` is only
|
|
986
1036
|
* called when necessary.
|
|
987
1037
|
*
|
|
988
|
-
* @param {
|
|
1038
|
+
* @param {number} webglType - The binding point (target).
|
|
989
1039
|
* @param {WebGLTexture} webglTexture - The WebGL texture to bind.
|
|
990
|
-
* @param {
|
|
1040
|
+
* @param {number} webglSlot - The texture.
|
|
991
1041
|
*/
|
|
992
1042
|
bindTexture( webglType, webglTexture, webglSlot ) {
|
|
993
1043
|
|
|
@@ -1040,10 +1090,10 @@ class WebGLState {
|
|
|
1040
1090
|
* This method caches the state so `gl.bindBufferBase()` is only
|
|
1041
1091
|
* called when necessary.
|
|
1042
1092
|
*
|
|
1043
|
-
* @param {
|
|
1044
|
-
* @param {
|
|
1093
|
+
* @param {number} target - The target for the bind operation.
|
|
1094
|
+
* @param {number} index - The index of the target.
|
|
1045
1095
|
* @param {WebGLBuffer} buffer - The WebGL buffer.
|
|
1046
|
-
* @return {
|
|
1096
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
1047
1097
|
*/
|
|
1048
1098
|
bindBufferBase( target, index, buffer ) {
|
|
1049
1099
|
|
|
@@ -134,11 +134,11 @@ class WebGLTextureUtils {
|
|
|
134
134
|
/**
|
|
135
135
|
* Returns the native texture type for the given texture.
|
|
136
136
|
*
|
|
137
|
-
* @param {
|
|
137
|
+
* @param {?string} internalFormatName - The internal format name. When `null`, the internal format is derived from the subsequent parameters.
|
|
138
138
|
* @param {GLenum} glFormat - The WebGL format.
|
|
139
139
|
* @param {GLenum} glType - The WebGL type.
|
|
140
|
-
* @param {
|
|
141
|
-
* @param {
|
|
140
|
+
* @param {string} colorSpace - The texture's color space.
|
|
141
|
+
* @param {boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.
|
|
142
142
|
* @return {GLenum} The internal format.
|
|
143
143
|
*/
|
|
144
144
|
getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
|
|
@@ -697,33 +697,57 @@ class WebGLTextureUtils {
|
|
|
697
697
|
*
|
|
698
698
|
* @param {Texture} srcTexture - The source texture.
|
|
699
699
|
* @param {Texture} dstTexture - The destination texture.
|
|
700
|
-
* @param {
|
|
701
|
-
* @param {(Vector2|Vector3)
|
|
702
|
-
* @param {
|
|
700
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
701
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
702
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
703
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
703
704
|
*/
|
|
704
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
705
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
705
706
|
|
|
706
707
|
const { gl, backend } = this;
|
|
707
708
|
const { state } = this.backend;
|
|
708
709
|
|
|
709
710
|
const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );
|
|
710
711
|
|
|
711
|
-
|
|
712
|
-
|
|
712
|
+
state.bindTexture( glTextureType, dstTextureGPU );
|
|
713
|
+
|
|
714
|
+
// gather the necessary dimensions to copy
|
|
715
|
+
let width, height, depth, minX, minY, minZ;
|
|
716
|
+
let dstX, dstY, dstZ;
|
|
717
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
|
|
713
718
|
|
|
714
719
|
if ( srcRegion !== null ) {
|
|
715
720
|
|
|
716
721
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
717
722
|
height = srcRegion.max.y - srcRegion.min.y;
|
|
723
|
+
depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
|
|
718
724
|
minX = srcRegion.min.x;
|
|
719
725
|
minY = srcRegion.min.y;
|
|
726
|
+
minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
|
|
720
727
|
|
|
721
728
|
} else {
|
|
722
729
|
|
|
723
|
-
|
|
724
|
-
|
|
730
|
+
const levelScale = Math.pow( 2, - srcLevel );
|
|
731
|
+
width = Math.floor( image.width * levelScale );
|
|
732
|
+
height = Math.floor( image.height * levelScale );
|
|
733
|
+
|
|
734
|
+
if ( srcTexture.isDataArrayTexture ) {
|
|
735
|
+
|
|
736
|
+
depth = image.depth;
|
|
737
|
+
|
|
738
|
+
} else if ( srcTexture.isData3DTexture ) {
|
|
739
|
+
|
|
740
|
+
depth = Math.floor( image.depth * levelScale );
|
|
741
|
+
|
|
742
|
+
} else {
|
|
743
|
+
|
|
744
|
+
depth = 1;
|
|
745
|
+
|
|
746
|
+
}
|
|
747
|
+
|
|
725
748
|
minX = 0;
|
|
726
749
|
minY = 0;
|
|
750
|
+
minZ = 0;
|
|
727
751
|
|
|
728
752
|
}
|
|
729
753
|
|
|
@@ -731,36 +755,36 @@ class WebGLTextureUtils {
|
|
|
731
755
|
|
|
732
756
|
dstX = dstPosition.x;
|
|
733
757
|
dstY = dstPosition.y;
|
|
758
|
+
dstZ = dstPosition.z;
|
|
734
759
|
|
|
735
760
|
} else {
|
|
736
761
|
|
|
737
762
|
dstX = 0;
|
|
738
763
|
dstY = 0;
|
|
764
|
+
dstZ = 0;
|
|
739
765
|
|
|
740
766
|
}
|
|
741
767
|
|
|
742
|
-
state.bindTexture( glTextureType, dstTextureGPU );
|
|
743
768
|
|
|
744
|
-
// As another texture upload may have changed pixelStorei
|
|
745
|
-
// parameters, make sure they are correct for the dstTexture
|
|
746
|
-
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
747
769
|
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
748
770
|
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
749
771
|
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
750
772
|
|
|
773
|
+
// used for copying data from cpu
|
|
751
774
|
const currentUnpackRowLen = gl.getParameter( gl.UNPACK_ROW_LENGTH );
|
|
752
775
|
const currentUnpackImageHeight = gl.getParameter( gl.UNPACK_IMAGE_HEIGHT );
|
|
753
776
|
const currentUnpackSkipPixels = gl.getParameter( gl.UNPACK_SKIP_PIXELS );
|
|
754
777
|
const currentUnpackSkipRows = gl.getParameter( gl.UNPACK_SKIP_ROWS );
|
|
755
778
|
const currentUnpackSkipImages = gl.getParameter( gl.UNPACK_SKIP_IMAGES );
|
|
756
779
|
|
|
757
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
758
|
-
|
|
759
780
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
|
|
760
781
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
761
782
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
|
|
762
783
|
gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
|
|
784
|
+
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
|
|
763
785
|
|
|
786
|
+
// set up the src texture
|
|
787
|
+
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
|
|
764
788
|
if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
|
|
765
789
|
|
|
766
790
|
const srcTextureData = backend.get( srcTexture );
|
|
@@ -786,19 +810,37 @@ class WebGLTextureUtils {
|
|
|
786
810
|
|
|
787
811
|
} else {
|
|
788
812
|
|
|
789
|
-
if (
|
|
813
|
+
if ( isDst3D ) {
|
|
790
814
|
|
|
791
|
-
|
|
815
|
+
// copy data into the 3d texture
|
|
816
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
817
|
+
|
|
818
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
|
|
819
|
+
|
|
820
|
+
} else if ( dstTexture.isCompressedArrayTexture ) {
|
|
821
|
+
|
|
822
|
+
gl.compressedTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
|
|
823
|
+
|
|
824
|
+
} else {
|
|
825
|
+
|
|
826
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
|
|
827
|
+
|
|
828
|
+
}
|
|
792
829
|
|
|
793
830
|
} else {
|
|
794
831
|
|
|
795
|
-
|
|
832
|
+
// copy data into the 2d texture
|
|
833
|
+
if ( srcTexture.isDataTexture ) {
|
|
834
|
+
|
|
835
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
796
836
|
|
|
797
|
-
|
|
837
|
+
} else if ( srcTexture.isCompressedTexture ) {
|
|
838
|
+
|
|
839
|
+
gl.compressedTexSubImage2D( glTextureType, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
798
840
|
|
|
799
841
|
} else {
|
|
800
842
|
|
|
801
|
-
gl.texSubImage2D(
|
|
843
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
802
844
|
|
|
803
845
|
}
|
|
804
846
|
|
|
@@ -806,6 +848,7 @@ class WebGLTextureUtils {
|
|
|
806
848
|
|
|
807
849
|
}
|
|
808
850
|
|
|
851
|
+
// reset values
|
|
809
852
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
810
853
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
811
854
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
@@ -813,12 +856,17 @@ class WebGLTextureUtils {
|
|
|
813
856
|
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
814
857
|
|
|
815
858
|
// Generate mipmaps only when copying level 0
|
|
816
|
-
if (
|
|
859
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
860
|
+
|
|
861
|
+
gl.generateMipmap( glTextureType );
|
|
862
|
+
|
|
863
|
+
}
|
|
817
864
|
|
|
818
865
|
state.unbindTexture();
|
|
819
866
|
|
|
820
867
|
}
|
|
821
868
|
|
|
869
|
+
|
|
822
870
|
/**
|
|
823
871
|
* Copies the current bound framebuffer to the given texture.
|
|
824
872
|
*
|
|
@@ -918,8 +966,8 @@ class WebGLTextureUtils {
|
|
|
918
966
|
*
|
|
919
967
|
* @param {WebGLRenderbuffer} renderbuffer - The render buffer.
|
|
920
968
|
* @param {RenderContext} renderContext - The render context.
|
|
921
|
-
* @param {
|
|
922
|
-
* @param {
|
|
969
|
+
* @param {number} samples - The MSAA sample count.
|
|
970
|
+
* @param {boolean} [useMultisampledRTT=false] - Whether to use WEBGL_multisampled_render_to_texture or not.
|
|
923
971
|
*/
|
|
924
972
|
setupRenderBufferStorage( renderbuffer, renderContext, samples, useMultisampledRTT = false ) {
|
|
925
973
|
|
|
@@ -986,11 +1034,11 @@ class WebGLTextureUtils {
|
|
|
986
1034
|
*
|
|
987
1035
|
* @async
|
|
988
1036
|
* @param {Texture} texture - The texture to copy.
|
|
989
|
-
* @param {
|
|
990
|
-
* @param {
|
|
991
|
-
* @param {
|
|
992
|
-
* @param {
|
|
993
|
-
* @param {
|
|
1037
|
+
* @param {number} x - The x coordinate of the copy origin.
|
|
1038
|
+
* @param {number} y - The y coordinate of the copy origin.
|
|
1039
|
+
* @param {number} width - The width of the copy.
|
|
1040
|
+
* @param {number} height - The height of the copy.
|
|
1041
|
+
* @param {number} faceIndex - The face index.
|
|
994
1042
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
995
1043
|
*/
|
|
996
1044
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
@@ -1066,7 +1114,7 @@ class WebGLTextureUtils {
|
|
|
1066
1114
|
* @private
|
|
1067
1115
|
* @param {GLenum} glType - The WebGL data type.
|
|
1068
1116
|
* @param {GLenum} glFormat - The WebGL texture format.
|
|
1069
|
-
* @return {
|
|
1117
|
+
* @return {number} The bytes-per-texel.
|
|
1070
1118
|
*/
|
|
1071
1119
|
_getBytesPerTexel( glType, glFormat ) {
|
|
1072
1120
|
|
|
@@ -4,16 +4,18 @@ import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Manages a pool of WebGL timestamp queries for performance measurement.
|
|
6
6
|
* Handles creation, execution, and resolution of timer queries using WebGL extensions.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
|
+
* @augments TimestampQueryPool
|
|
8
9
|
*/
|
|
9
10
|
class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
* Creates a new WebGL timestamp query pool.
|
|
14
|
+
*
|
|
15
|
+
* @param {WebGLRenderingContext|WebGL2RenderingContext} gl - The WebGL context.
|
|
16
|
+
* @param {string} type - The type identifier for this query pool.
|
|
17
|
+
* @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.
|
|
18
|
+
*/
|
|
17
19
|
constructor( gl, type, maxQueries = 2048 ) {
|
|
18
20
|
|
|
19
21
|
super( maxQueries );
|
|
@@ -23,7 +25,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
23
25
|
|
|
24
26
|
// Check for timer query extensions
|
|
25
27
|
this.ext = gl.getExtension( 'EXT_disjoint_timer_query_webgl2' ) ||
|
|
26
|
-
|
|
28
|
+
gl.getExtension( 'EXT_disjoint_timer_query' );
|
|
27
29
|
|
|
28
30
|
if ( ! this.ext ) {
|
|
29
31
|
|
|
@@ -47,10 +49,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
* Allocates a pair of queries for a given render context.
|
|
53
|
+
*
|
|
54
|
+
* @param {Object} renderContext - The render context to allocate queries for.
|
|
55
|
+
* @returns {?number} The base offset for the allocated queries, or null if allocation failed.
|
|
56
|
+
*/
|
|
54
57
|
allocateQueriesForContext( renderContext ) {
|
|
55
58
|
|
|
56
59
|
if ( ! this.trackTimestamp ) return null;
|
|
@@ -75,9 +78,10 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
75
78
|
}
|
|
76
79
|
|
|
77
80
|
/**
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
* Begins a timestamp query for the specified render context.
|
|
82
|
+
*
|
|
83
|
+
* @param {Object} renderContext - The render context to begin timing for.
|
|
84
|
+
*/
|
|
81
85
|
beginQuery( renderContext ) {
|
|
82
86
|
|
|
83
87
|
if ( ! this.trackTimestamp || this.isDisposed ) {
|
|
@@ -129,10 +133,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
/**
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
* Ends the active timestamp query for the specified render context.
|
|
137
|
+
*
|
|
138
|
+
* @param {Object} renderContext - The render context to end timing for.
|
|
139
|
+
* @param {string} renderContext.id - Unique identifier for the render context.
|
|
140
|
+
*/
|
|
136
141
|
endQuery( renderContext ) {
|
|
137
142
|
|
|
138
143
|
if ( ! this.trackTimestamp || this.isDisposed ) {
|
|
@@ -173,9 +178,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
173
178
|
}
|
|
174
179
|
|
|
175
180
|
/**
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
* Asynchronously resolves all completed queries and returns the total duration.
|
|
182
|
+
*
|
|
183
|
+
* @async
|
|
184
|
+
* @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.
|
|
185
|
+
*/
|
|
179
186
|
async resolveQueriesAsync() {
|
|
180
187
|
|
|
181
188
|
if ( ! this.trackTimestamp || this.pendingResolve ) {
|
|
@@ -236,11 +243,12 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
236
243
|
}
|
|
237
244
|
|
|
238
245
|
/**
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
246
|
+
* Resolves a single query, checking for completion and disjoint operation.
|
|
247
|
+
*
|
|
248
|
+
* @async
|
|
249
|
+
* @param {WebGLQuery} query - The query object to resolve.
|
|
250
|
+
* @returns {Promise<number>} The elapsed time in milliseconds.
|
|
251
|
+
*/
|
|
244
252
|
async resolveQuery( query ) {
|
|
245
253
|
|
|
246
254
|
return new Promise( ( resolve ) => {
|
|
@@ -325,9 +333,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
325
333
|
}
|
|
326
334
|
|
|
327
335
|
/**
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
336
|
+
* Releases all resources held by this query pool.
|
|
337
|
+
* This includes deleting all query objects and clearing internal state.
|
|
338
|
+
*/
|
|
331
339
|
dispose() {
|
|
332
340
|
|
|
333
341
|
if ( this.isDisposed ) {
|
|
@@ -43,9 +43,9 @@ class WebGLUtils {
|
|
|
43
43
|
* The method currently supports the conversion of texture formats
|
|
44
44
|
* and types.
|
|
45
45
|
*
|
|
46
|
-
* @param {
|
|
47
|
-
* @param {
|
|
48
|
-
* @return {
|
|
46
|
+
* @param {number} p - The three.js constant.
|
|
47
|
+
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
48
|
+
* @return {?number} The corresponding WebGL constant.
|
|
49
49
|
*/
|
|
50
50
|
convert( p, colorSpace = NoColorSpace ) {
|
|
51
51
|
|