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
|
@@ -23,18 +23,24 @@ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
|
23
23
|
*/
|
|
24
24
|
class WebGLBackend extends Backend {
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* WebGLBackend options.
|
|
28
|
+
*
|
|
29
|
+
* @typedef {Object} WebGLBackend~Options
|
|
30
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
+
* @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.
|
|
36
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
+
* @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
|
|
38
|
+
*/
|
|
39
|
+
|
|
26
40
|
/**
|
|
27
41
|
* Constructs a new WebGPU backend.
|
|
28
42
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
* @param {Boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
-
* @param {Boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
-
* @param {Boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
-
* @param {Boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
-
* @param {Boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
-
* @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.
|
|
36
|
-
* @param {Boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
-
* @param {WebGL2RenderingContext} [parameters.context=undefined] - A WebGL 2 rendering context.
|
|
43
|
+
* @param {WebGLBackend~Options} [parameters] - The configuration parameter.
|
|
38
44
|
*/
|
|
39
45
|
constructor( parameters = {} ) {
|
|
40
46
|
|
|
@@ -43,7 +49,7 @@ class WebGLBackend extends Backend {
|
|
|
43
49
|
/**
|
|
44
50
|
* This flag can be used for type testing.
|
|
45
51
|
*
|
|
46
|
-
* @type {
|
|
52
|
+
* @type {boolean}
|
|
47
53
|
* @readonly
|
|
48
54
|
* @default true
|
|
49
55
|
*/
|
|
@@ -53,7 +59,7 @@ class WebGLBackend extends Backend {
|
|
|
53
59
|
* A reference to a backend module holding shader attribute-related
|
|
54
60
|
* utility functions.
|
|
55
61
|
*
|
|
56
|
-
* @type {WebGLAttributeUtils
|
|
62
|
+
* @type {?WebGLAttributeUtils}
|
|
57
63
|
* @default null
|
|
58
64
|
*/
|
|
59
65
|
this.attributeUtils = null;
|
|
@@ -62,7 +68,7 @@ class WebGLBackend extends Backend {
|
|
|
62
68
|
* A reference to a backend module holding extension-related
|
|
63
69
|
* utility functions.
|
|
64
70
|
*
|
|
65
|
-
* @type {WebGLExtensions
|
|
71
|
+
* @type {?WebGLExtensions}
|
|
66
72
|
* @default null
|
|
67
73
|
*/
|
|
68
74
|
this.extensions = null;
|
|
@@ -71,7 +77,7 @@ class WebGLBackend extends Backend {
|
|
|
71
77
|
* A reference to a backend module holding capability-related
|
|
72
78
|
* utility functions.
|
|
73
79
|
*
|
|
74
|
-
* @type {WebGLCapabilities
|
|
80
|
+
* @type {?WebGLCapabilities}
|
|
75
81
|
* @default null
|
|
76
82
|
*/
|
|
77
83
|
this.capabilities = null;
|
|
@@ -80,7 +86,7 @@ class WebGLBackend extends Backend {
|
|
|
80
86
|
* A reference to a backend module holding texture-related
|
|
81
87
|
* utility functions.
|
|
82
88
|
*
|
|
83
|
-
* @type {WebGLTextureUtils
|
|
89
|
+
* @type {?WebGLTextureUtils}
|
|
84
90
|
* @default null
|
|
85
91
|
*/
|
|
86
92
|
this.textureUtils = null;
|
|
@@ -89,7 +95,7 @@ class WebGLBackend extends Backend {
|
|
|
89
95
|
* A reference to a backend module holding renderer-related
|
|
90
96
|
* utility functions.
|
|
91
97
|
*
|
|
92
|
-
* @type {WebGLBufferRenderer
|
|
98
|
+
* @type {?WebGLBufferRenderer}
|
|
93
99
|
* @default null
|
|
94
100
|
*/
|
|
95
101
|
this.bufferRenderer = null;
|
|
@@ -97,7 +103,7 @@ class WebGLBackend extends Backend {
|
|
|
97
103
|
/**
|
|
98
104
|
* A reference to the rendering context.
|
|
99
105
|
*
|
|
100
|
-
* @type {WebGL2RenderingContext
|
|
106
|
+
* @type {?WebGL2RenderingContext}
|
|
101
107
|
* @default null
|
|
102
108
|
*/
|
|
103
109
|
this.gl = null;
|
|
@@ -106,7 +112,7 @@ class WebGLBackend extends Backend {
|
|
|
106
112
|
* A reference to a backend module holding state-related
|
|
107
113
|
* utility functions.
|
|
108
114
|
*
|
|
109
|
-
* @type {WebGLState
|
|
115
|
+
* @type {?WebGLState}
|
|
110
116
|
* @default null
|
|
111
117
|
*/
|
|
112
118
|
this.state = null;
|
|
@@ -115,7 +121,7 @@ class WebGLBackend extends Backend {
|
|
|
115
121
|
* A reference to a backend module holding common
|
|
116
122
|
* utility functions.
|
|
117
123
|
*
|
|
118
|
-
* @type {WebGLUtils
|
|
124
|
+
* @type {?WebGLUtils}
|
|
119
125
|
* @default null
|
|
120
126
|
*/
|
|
121
127
|
this.utils = null;
|
|
@@ -123,14 +129,14 @@ class WebGLBackend extends Backend {
|
|
|
123
129
|
/**
|
|
124
130
|
* Dictionary for caching VAOs.
|
|
125
131
|
*
|
|
126
|
-
* @type {Object<
|
|
132
|
+
* @type {Object<string,WebGLVertexArrayObject>}
|
|
127
133
|
*/
|
|
128
134
|
this.vaoCache = {};
|
|
129
135
|
|
|
130
136
|
/**
|
|
131
137
|
* Dictionary for caching transform feedback objects.
|
|
132
138
|
*
|
|
133
|
-
* @type {Object<
|
|
139
|
+
* @type {Object<string,WebGLTransformFeedback>}
|
|
134
140
|
*/
|
|
135
141
|
this.transformFeedbackCache = {};
|
|
136
142
|
|
|
@@ -138,7 +144,7 @@ class WebGLBackend extends Backend {
|
|
|
138
144
|
* Controls if `gl.RASTERIZER_DISCARD` should be enabled or not.
|
|
139
145
|
* Only relevant when using compute shaders.
|
|
140
146
|
*
|
|
141
|
-
* @type {
|
|
147
|
+
* @type {boolean}
|
|
142
148
|
* @default false
|
|
143
149
|
*/
|
|
144
150
|
this.discard = false;
|
|
@@ -147,7 +153,7 @@ class WebGLBackend extends Backend {
|
|
|
147
153
|
* A reference to the `EXT_disjoint_timer_query_webgl2` extension. `null` if the
|
|
148
154
|
* device does not support the extension.
|
|
149
155
|
*
|
|
150
|
-
* @type {EXTDisjointTimerQueryWebGL2
|
|
156
|
+
* @type {?EXTDisjointTimerQueryWebGL2}
|
|
151
157
|
* @default null
|
|
152
158
|
*/
|
|
153
159
|
this.disjoint = null;
|
|
@@ -156,19 +162,11 @@ class WebGLBackend extends Backend {
|
|
|
156
162
|
* A reference to the `KHR_parallel_shader_compile` extension. `null` if the
|
|
157
163
|
* device does not support the extension.
|
|
158
164
|
*
|
|
159
|
-
* @type {KHRParallelShaderCompile
|
|
165
|
+
* @type {?KHRParallelShaderCompile}
|
|
160
166
|
* @default null
|
|
161
167
|
*/
|
|
162
168
|
this.parallel = null;
|
|
163
169
|
|
|
164
|
-
/**
|
|
165
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
166
|
-
*
|
|
167
|
-
* @type {Boolean}
|
|
168
|
-
* @default false
|
|
169
|
-
*/
|
|
170
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
171
|
-
|
|
172
170
|
/**
|
|
173
171
|
* A reference to the current render context.
|
|
174
172
|
*
|
|
@@ -186,6 +184,15 @@ class WebGLBackend extends Backend {
|
|
|
186
184
|
*/
|
|
187
185
|
this._knownBindings = new WeakSet();
|
|
188
186
|
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Whether the device supports framebuffers invalidation or not.
|
|
190
|
+
*
|
|
191
|
+
* @private
|
|
192
|
+
* @type {boolean}
|
|
193
|
+
*/
|
|
194
|
+
this._supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
|
|
195
|
+
|
|
189
196
|
/**
|
|
190
197
|
* The target framebuffer when rendering with
|
|
191
198
|
* the WebXR device API.
|
|
@@ -194,7 +201,7 @@ class WebGLBackend extends Backend {
|
|
|
194
201
|
* @type {WebGLFramebuffer}
|
|
195
202
|
* @default null
|
|
196
203
|
*/
|
|
197
|
-
this.
|
|
204
|
+
this._xrFramebuffer = null;
|
|
198
205
|
|
|
199
206
|
}
|
|
200
207
|
|
|
@@ -212,10 +219,10 @@ class WebGLBackend extends Backend {
|
|
|
212
219
|
const parameters = this.parameters;
|
|
213
220
|
|
|
214
221
|
const contextAttributes = {
|
|
215
|
-
antialias:
|
|
222
|
+
antialias: renderer.samples > 0,
|
|
216
223
|
alpha: true, // always true for performance reasons
|
|
217
|
-
depth:
|
|
218
|
-
stencil:
|
|
224
|
+
depth: renderer.depth,
|
|
225
|
+
stencil: renderer.stencil
|
|
219
226
|
};
|
|
220
227
|
|
|
221
228
|
const glContext = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgl2', contextAttributes );
|
|
@@ -266,7 +273,7 @@ class WebGLBackend extends Backend {
|
|
|
266
273
|
/**
|
|
267
274
|
* The coordinate system of the backend.
|
|
268
275
|
*
|
|
269
|
-
* @type {
|
|
276
|
+
* @type {number}
|
|
270
277
|
* @readonly
|
|
271
278
|
*/
|
|
272
279
|
get coordinateSystem() {
|
|
@@ -322,11 +329,11 @@ class WebGLBackend extends Backend {
|
|
|
322
329
|
/**
|
|
323
330
|
* Sets the XR rendering destination.
|
|
324
331
|
*
|
|
325
|
-
* @param {WebGLFramebuffer}
|
|
332
|
+
* @param {WebGLFramebuffer} xrFramebuffer - The XR framebuffer.
|
|
326
333
|
*/
|
|
327
|
-
setXRTarget(
|
|
334
|
+
setXRTarget( xrFramebuffer ) {
|
|
328
335
|
|
|
329
|
-
this.
|
|
336
|
+
this._xrFramebuffer = xrFramebuffer;
|
|
330
337
|
|
|
331
338
|
}
|
|
332
339
|
|
|
@@ -337,7 +344,7 @@ class WebGLBackend extends Backend {
|
|
|
337
344
|
*
|
|
338
345
|
* @param {XRRenderTarget} renderTarget - The XR render target.
|
|
339
346
|
* @param {WebGLTexture} colorTexture - A native color texture.
|
|
340
|
-
* @param {WebGLTexture
|
|
347
|
+
* @param {?WebGLTexture} [depthTexture=null] - A native depth texture.
|
|
341
348
|
*/
|
|
342
349
|
setXRRenderTargetTextures( renderTarget, colorTexture, depthTexture = null ) {
|
|
343
350
|
|
|
@@ -351,16 +358,16 @@ class WebGLBackend extends Backend {
|
|
|
351
358
|
|
|
352
359
|
this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
|
|
353
360
|
|
|
354
|
-
renderTarget.autoAllocateDepthBuffer = false;
|
|
355
|
-
|
|
356
361
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
357
362
|
// are midframe flushes and an external depth texture.
|
|
358
|
-
if ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
|
|
363
|
+
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.autoAllocateDepthBuffer ) {
|
|
359
364
|
|
|
360
365
|
console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
361
366
|
|
|
362
367
|
}
|
|
363
368
|
|
|
369
|
+
renderTarget.autoAllocateDepthBuffer = false;
|
|
370
|
+
|
|
364
371
|
}
|
|
365
372
|
|
|
366
373
|
}
|
|
@@ -438,18 +445,6 @@ class WebGLBackend extends Backend {
|
|
|
438
445
|
|
|
439
446
|
//
|
|
440
447
|
|
|
441
|
-
//
|
|
442
|
-
|
|
443
|
-
this.initTimestampQuery( renderContext );
|
|
444
|
-
|
|
445
|
-
renderContextData.previousContext = this._currentContext;
|
|
446
|
-
this._currentContext = renderContext;
|
|
447
|
-
|
|
448
|
-
this._setFramebuffer( renderContext );
|
|
449
|
-
|
|
450
|
-
this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
|
|
451
|
-
|
|
452
|
-
//
|
|
453
448
|
if ( renderContext.viewport ) {
|
|
454
449
|
|
|
455
450
|
this.updateViewport( renderContext );
|
|
@@ -468,6 +463,18 @@ class WebGLBackend extends Backend {
|
|
|
468
463
|
|
|
469
464
|
}
|
|
470
465
|
|
|
466
|
+
//
|
|
467
|
+
|
|
468
|
+
this.initTimestampQuery( renderContext );
|
|
469
|
+
|
|
470
|
+
renderContextData.previousContext = this._currentContext;
|
|
471
|
+
this._currentContext = renderContext;
|
|
472
|
+
|
|
473
|
+
this._setFramebuffer( renderContext );
|
|
474
|
+
|
|
475
|
+
this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
|
|
476
|
+
|
|
477
|
+
|
|
471
478
|
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
472
479
|
|
|
473
480
|
if ( occlusionQueryCount > 0 ) {
|
|
@@ -498,6 +505,8 @@ class WebGLBackend extends Backend {
|
|
|
498
505
|
const renderContextData = this.get( renderContext );
|
|
499
506
|
const previousContext = renderContextData.previousContext;
|
|
500
507
|
|
|
508
|
+
state.resetVertexState();
|
|
509
|
+
|
|
501
510
|
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
502
511
|
|
|
503
512
|
if ( occlusionQueryCount > 0 ) {
|
|
@@ -562,12 +571,22 @@ class WebGLBackend extends Backend {
|
|
|
562
571
|
const viewY = renderContext.height - height - y;
|
|
563
572
|
|
|
564
573
|
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
565
|
-
|
|
574
|
+
|
|
575
|
+
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
576
|
+
|
|
577
|
+
gl.invalidateSubFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, viewY, width, height );
|
|
578
|
+
|
|
579
|
+
}
|
|
566
580
|
|
|
567
581
|
} else {
|
|
568
582
|
|
|
569
583
|
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
570
|
-
|
|
584
|
+
|
|
585
|
+
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
586
|
+
|
|
587
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
588
|
+
|
|
589
|
+
}
|
|
571
590
|
|
|
572
591
|
}
|
|
573
592
|
|
|
@@ -669,7 +688,7 @@ class WebGLBackend extends Backend {
|
|
|
669
688
|
*
|
|
670
689
|
* @param {RenderContext} renderContext - The render context.
|
|
671
690
|
* @param {Object3D} object - The 3D object to test.
|
|
672
|
-
* @return {
|
|
691
|
+
* @return {boolean} Whether the 3D object is fully occluded or not.
|
|
673
692
|
*/
|
|
674
693
|
isOccluded( renderContext, object ) {
|
|
675
694
|
|
|
@@ -696,7 +715,7 @@ class WebGLBackend extends Backend {
|
|
|
696
715
|
/**
|
|
697
716
|
* Defines the scissor test.
|
|
698
717
|
*
|
|
699
|
-
* @param {
|
|
718
|
+
* @param {boolean} boolean - Whether the scissor test should be enabled or not.
|
|
700
719
|
*/
|
|
701
720
|
setScissorTest( boolean ) {
|
|
702
721
|
|
|
@@ -706,29 +725,44 @@ class WebGLBackend extends Backend {
|
|
|
706
725
|
|
|
707
726
|
}
|
|
708
727
|
|
|
728
|
+
/**
|
|
729
|
+
* Returns the clear color and alpha into a single
|
|
730
|
+
* color object.
|
|
731
|
+
*
|
|
732
|
+
* @return {Color4} The clear color.
|
|
733
|
+
*/
|
|
734
|
+
getClearColor() {
|
|
735
|
+
|
|
736
|
+
const clearColor = super.getClearColor();
|
|
737
|
+
|
|
738
|
+
// Since the canvas is always created with alpha: true,
|
|
739
|
+
// WebGL must always premultiply the clear color.
|
|
740
|
+
|
|
741
|
+
clearColor.r *= clearColor.a;
|
|
742
|
+
clearColor.g *= clearColor.a;
|
|
743
|
+
clearColor.b *= clearColor.a;
|
|
744
|
+
|
|
745
|
+
return clearColor;
|
|
746
|
+
|
|
747
|
+
}
|
|
748
|
+
|
|
709
749
|
/**
|
|
710
750
|
* Performs a clear operation.
|
|
711
751
|
*
|
|
712
|
-
* @param {
|
|
713
|
-
* @param {
|
|
714
|
-
* @param {
|
|
715
|
-
* @param {Object
|
|
716
|
-
* @param {
|
|
752
|
+
* @param {boolean} color - Whether the color buffer should be cleared or not.
|
|
753
|
+
* @param {boolean} depth - Whether the depth buffer should be cleared or not.
|
|
754
|
+
* @param {boolean} stencil - Whether the stencil buffer should be cleared or not.
|
|
755
|
+
* @param {?Object} [descriptor=null] - The render context of the current set render target.
|
|
756
|
+
* @param {boolean} [setFrameBuffer=true] - TODO.
|
|
717
757
|
*/
|
|
718
758
|
clear( color, depth, stencil, descriptor = null, setFrameBuffer = true ) {
|
|
719
759
|
|
|
720
|
-
const { gl } = this;
|
|
760
|
+
const { gl, renderer } = this;
|
|
721
761
|
|
|
722
762
|
if ( descriptor === null ) {
|
|
723
763
|
|
|
724
764
|
const clearColor = this.getClearColor();
|
|
725
765
|
|
|
726
|
-
// premultiply alpha
|
|
727
|
-
|
|
728
|
-
clearColor.r *= clearColor.a;
|
|
729
|
-
clearColor.g *= clearColor.a;
|
|
730
|
-
clearColor.b *= clearColor.a;
|
|
731
|
-
|
|
732
766
|
descriptor = {
|
|
733
767
|
textures: null,
|
|
734
768
|
clearColorValue: clearColor
|
|
@@ -756,14 +790,11 @@ class WebGLBackend extends Backend {
|
|
|
756
790
|
|
|
757
791
|
clearColor = this.getClearColor();
|
|
758
792
|
|
|
759
|
-
// premultiply alpha
|
|
760
|
-
|
|
761
|
-
clearColor.r *= clearColor.a;
|
|
762
|
-
clearColor.g *= clearColor.a;
|
|
763
|
-
clearColor.b *= clearColor.a;
|
|
764
|
-
|
|
765
793
|
}
|
|
766
794
|
|
|
795
|
+
const clearDepth = renderer.getClearDepth();
|
|
796
|
+
const clearStencil = renderer.getClearStencil();
|
|
797
|
+
|
|
767
798
|
if ( depth ) this.state.setDepthMask( true );
|
|
768
799
|
|
|
769
800
|
if ( descriptor.textures === null ) {
|
|
@@ -779,7 +810,15 @@ class WebGLBackend extends Backend {
|
|
|
779
810
|
|
|
780
811
|
for ( let i = 0; i < descriptor.textures.length; i ++ ) {
|
|
781
812
|
|
|
782
|
-
|
|
813
|
+
if ( i === 0 ) {
|
|
814
|
+
|
|
815
|
+
gl.clearBufferfv( gl.COLOR, i, [ clearColor.r, clearColor.g, clearColor.b, clearColor.a ] );
|
|
816
|
+
|
|
817
|
+
} else {
|
|
818
|
+
|
|
819
|
+
gl.clearBufferfv( gl.COLOR, i, [ 0, 0, 0, 1 ] );
|
|
820
|
+
|
|
821
|
+
}
|
|
783
822
|
|
|
784
823
|
}
|
|
785
824
|
|
|
@@ -787,15 +826,15 @@ class WebGLBackend extends Backend {
|
|
|
787
826
|
|
|
788
827
|
if ( depth && stencil ) {
|
|
789
828
|
|
|
790
|
-
gl.clearBufferfi( gl.DEPTH_STENCIL, 0,
|
|
829
|
+
gl.clearBufferfi( gl.DEPTH_STENCIL, 0, clearDepth, clearStencil );
|
|
791
830
|
|
|
792
831
|
} else if ( depth ) {
|
|
793
832
|
|
|
794
|
-
gl.clearBufferfv( gl.DEPTH, 0, [
|
|
833
|
+
gl.clearBufferfv( gl.DEPTH, 0, [ clearDepth ] );
|
|
795
834
|
|
|
796
835
|
} else if ( stencil ) {
|
|
797
836
|
|
|
798
|
-
gl.clearBufferiv( gl.STENCIL, 0, [
|
|
837
|
+
gl.clearBufferiv( gl.STENCIL, 0, [ clearStencil ] );
|
|
799
838
|
|
|
800
839
|
}
|
|
801
840
|
|
|
@@ -842,17 +881,17 @@ class WebGLBackend extends Backend {
|
|
|
842
881
|
|
|
843
882
|
const { programGPU, transformBuffers, attributes } = this.get( pipeline );
|
|
844
883
|
|
|
845
|
-
const vaoKey = this._getVaoKey(
|
|
884
|
+
const vaoKey = this._getVaoKey( attributes );
|
|
846
885
|
|
|
847
886
|
const vaoGPU = this.vaoCache[ vaoKey ];
|
|
848
887
|
|
|
849
888
|
if ( vaoGPU === undefined ) {
|
|
850
889
|
|
|
851
|
-
this._createVao(
|
|
890
|
+
this._createVao( attributes );
|
|
852
891
|
|
|
853
892
|
} else {
|
|
854
893
|
|
|
855
|
-
|
|
894
|
+
state.setVertexState( vaoGPU );
|
|
856
895
|
|
|
857
896
|
}
|
|
858
897
|
|
|
@@ -950,7 +989,7 @@ class WebGLBackend extends Backend {
|
|
|
950
989
|
|
|
951
990
|
state.useProgram( programGPU );
|
|
952
991
|
|
|
953
|
-
//
|
|
992
|
+
// vertex state
|
|
954
993
|
|
|
955
994
|
const renderObjectData = this.get( renderObject );
|
|
956
995
|
|
|
@@ -958,7 +997,7 @@ class WebGLBackend extends Backend {
|
|
|
958
997
|
|
|
959
998
|
if ( vaoGPU === undefined || renderObjectData.geometryId !== renderObject.geometry.id ) {
|
|
960
999
|
|
|
961
|
-
const vaoKey = this._getVaoKey( renderObject.
|
|
1000
|
+
const vaoKey = this._getVaoKey( renderObject.getAttributes() );
|
|
962
1001
|
|
|
963
1002
|
vaoGPU = this.vaoCache[ vaoKey ];
|
|
964
1003
|
|
|
@@ -966,7 +1005,7 @@ class WebGLBackend extends Backend {
|
|
|
966
1005
|
|
|
967
1006
|
let staticVao;
|
|
968
1007
|
|
|
969
|
-
( { vaoGPU, staticVao } = this._createVao( renderObject.
|
|
1008
|
+
( { vaoGPU, staticVao } = this._createVao( renderObject.getAttributes() ) );
|
|
970
1009
|
|
|
971
1010
|
if ( staticVao ) {
|
|
972
1011
|
|
|
@@ -979,11 +1018,10 @@ class WebGLBackend extends Backend {
|
|
|
979
1018
|
|
|
980
1019
|
}
|
|
981
1020
|
|
|
982
|
-
gl.bindVertexArray( vaoGPU );
|
|
983
|
-
|
|
984
|
-
//
|
|
985
|
-
|
|
986
1021
|
const index = renderObject.getIndex();
|
|
1022
|
+
const indexGPU = ( index !== null ) ? this.get( index ).bufferGPU : null;
|
|
1023
|
+
|
|
1024
|
+
state.setVertexState( vaoGPU, indexGPU );
|
|
987
1025
|
|
|
988
1026
|
//
|
|
989
1027
|
|
|
@@ -1064,6 +1102,8 @@ class WebGLBackend extends Backend {
|
|
|
1064
1102
|
|
|
1065
1103
|
if ( object._multiDrawInstances !== null ) {
|
|
1066
1104
|
|
|
1105
|
+
// @deprecated, r174
|
|
1106
|
+
warnOnce( 'THREE.WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1067
1107
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1068
1108
|
|
|
1069
1109
|
} else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
|
|
@@ -1153,17 +1193,13 @@ class WebGLBackend extends Backend {
|
|
|
1153
1193
|
|
|
1154
1194
|
}
|
|
1155
1195
|
|
|
1156
|
-
//
|
|
1157
|
-
|
|
1158
|
-
gl.bindVertexArray( null );
|
|
1159
|
-
|
|
1160
1196
|
}
|
|
1161
1197
|
|
|
1162
1198
|
/**
|
|
1163
1199
|
* Explain why always null is returned.
|
|
1164
1200
|
*
|
|
1165
1201
|
* @param {RenderObject} renderObject - The render object.
|
|
1166
|
-
* @return {
|
|
1202
|
+
* @return {boolean} Whether the render pipeline requires an update or not.
|
|
1167
1203
|
*/
|
|
1168
1204
|
needsRenderUpdate( /*renderObject*/ ) {
|
|
1169
1205
|
|
|
@@ -1175,7 +1211,7 @@ class WebGLBackend extends Backend {
|
|
|
1175
1211
|
* Explain why no cache key is computed.
|
|
1176
1212
|
*
|
|
1177
1213
|
* @param {RenderObject} renderObject - The render object.
|
|
1178
|
-
* @return {
|
|
1214
|
+
* @return {string} The cache key.
|
|
1179
1215
|
*/
|
|
1180
1216
|
getRenderCacheKey( /*renderObject*/ ) {
|
|
1181
1217
|
|
|
@@ -1248,11 +1284,11 @@ class WebGLBackend extends Backend {
|
|
|
1248
1284
|
*
|
|
1249
1285
|
* @async
|
|
1250
1286
|
* @param {Texture} texture - The texture to copy.
|
|
1251
|
-
* @param {
|
|
1252
|
-
* @param {
|
|
1253
|
-
* @param {
|
|
1254
|
-
* @param {
|
|
1255
|
-
* @param {
|
|
1287
|
+
* @param {number} x - The x coordinate of the copy origin.
|
|
1288
|
+
* @param {number} y - The y coordinate of the copy origin.
|
|
1289
|
+
* @param {number} width - The width of the copy.
|
|
1290
|
+
* @param {number} height - The height of the copy.
|
|
1291
|
+
* @param {number} faceIndex - The face index.
|
|
1256
1292
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
1257
1293
|
*/
|
|
1258
1294
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
@@ -1396,9 +1432,9 @@ class WebGLBackend extends Backend {
|
|
|
1396
1432
|
* Formats the source code of error messages.
|
|
1397
1433
|
*
|
|
1398
1434
|
* @private
|
|
1399
|
-
* @param {
|
|
1400
|
-
* @param {
|
|
1401
|
-
* @return {
|
|
1435
|
+
* @param {string} string - The code.
|
|
1436
|
+
* @param {number} errorLine - The error line.
|
|
1437
|
+
* @return {string} The formatted code.
|
|
1402
1438
|
*/
|
|
1403
1439
|
_handleSource( string, errorLine ) {
|
|
1404
1440
|
|
|
@@ -1425,8 +1461,8 @@ class WebGLBackend extends Backend {
|
|
|
1425
1461
|
* @private
|
|
1426
1462
|
* @param {WebGL2RenderingContext} gl - The rendering context.
|
|
1427
1463
|
* @param {WebGLShader} shader - The WebGL shader object.
|
|
1428
|
-
* @param {
|
|
1429
|
-
* @return {
|
|
1464
|
+
* @param {string} type - The shader type.
|
|
1465
|
+
* @return {string} The shader errors.
|
|
1430
1466
|
*/
|
|
1431
1467
|
_getShaderErrors( gl, shader, type ) {
|
|
1432
1468
|
|
|
@@ -1639,8 +1675,8 @@ class WebGLBackend extends Backend {
|
|
|
1639
1675
|
*
|
|
1640
1676
|
* @param {BindGroup} bindGroup - The bind group.
|
|
1641
1677
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
1642
|
-
* @param {
|
|
1643
|
-
* @param {
|
|
1678
|
+
* @param {number} cacheIndex - The cache index.
|
|
1679
|
+
* @param {number} version - The version.
|
|
1644
1680
|
*/
|
|
1645
1681
|
createBindings( bindGroup, bindings /*, cacheIndex, version*/ ) {
|
|
1646
1682
|
|
|
@@ -1678,8 +1714,8 @@ class WebGLBackend extends Backend {
|
|
|
1678
1714
|
*
|
|
1679
1715
|
* @param {BindGroup} bindGroup - The bind group.
|
|
1680
1716
|
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
1681
|
-
* @param {
|
|
1682
|
-
* @param {
|
|
1717
|
+
* @param {number} cacheIndex - The cache index.
|
|
1718
|
+
* @param {number} version - The version.
|
|
1683
1719
|
*/
|
|
1684
1720
|
updateBindings( bindGroup /*, bindings, cacheIndex, version*/ ) {
|
|
1685
1721
|
|
|
@@ -1813,8 +1849,8 @@ class WebGLBackend extends Backend {
|
|
|
1813
1849
|
/**
|
|
1814
1850
|
* Checks if the given feature is supported by the backend.
|
|
1815
1851
|
*
|
|
1816
|
-
* @param {
|
|
1817
|
-
* @return {
|
|
1852
|
+
* @param {string} name - The feature's name.
|
|
1853
|
+
* @return {boolean} Whether the feature is supported or not.
|
|
1818
1854
|
*/
|
|
1819
1855
|
hasFeature( name ) {
|
|
1820
1856
|
|
|
@@ -1835,7 +1871,7 @@ class WebGLBackend extends Backend {
|
|
|
1835
1871
|
/**
|
|
1836
1872
|
* Returns the maximum anisotropy texture filtering value.
|
|
1837
1873
|
*
|
|
1838
|
-
* @return {
|
|
1874
|
+
* @return {number} The maximum anisotropy texture filtering value.
|
|
1839
1875
|
*/
|
|
1840
1876
|
getMaxAnisotropy() {
|
|
1841
1877
|
|
|
@@ -1848,13 +1884,14 @@ class WebGLBackend extends Backend {
|
|
|
1848
1884
|
*
|
|
1849
1885
|
* @param {Texture} srcTexture - The source texture.
|
|
1850
1886
|
* @param {Texture} dstTexture - The destination texture.
|
|
1851
|
-
* @param {
|
|
1852
|
-
* @param {(Vector2|Vector3)
|
|
1853
|
-
* @param {
|
|
1887
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1888
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1889
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
1890
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1854
1891
|
*/
|
|
1855
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1892
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1856
1893
|
|
|
1857
|
-
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition,
|
|
1894
|
+
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
|
|
1858
1895
|
|
|
1859
1896
|
}
|
|
1860
1897
|
|
|
@@ -1912,7 +1949,7 @@ class WebGLBackend extends Backend {
|
|
|
1912
1949
|
|
|
1913
1950
|
} else if ( isXRRenderTarget && hasExternalTextures === false ) {
|
|
1914
1951
|
|
|
1915
|
-
fb = this.
|
|
1952
|
+
fb = this._xrFramebuffer;
|
|
1916
1953
|
|
|
1917
1954
|
} else {
|
|
1918
1955
|
|
|
@@ -1961,7 +1998,7 @@ class WebGLBackend extends Backend {
|
|
|
1961
1998
|
|
|
1962
1999
|
} else {
|
|
1963
2000
|
|
|
1964
|
-
if ( useMultisampledRTT ) {
|
|
2001
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
1965
2002
|
|
|
1966
2003
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
1967
2004
|
|
|
@@ -1994,7 +2031,7 @@ class WebGLBackend extends Backend {
|
|
|
1994
2031
|
textureData.renderTarget = descriptor.renderTarget;
|
|
1995
2032
|
textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
|
|
1996
2033
|
|
|
1997
|
-
if ( useMultisampledRTT ) {
|
|
2034
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
1998
2035
|
|
|
1999
2036
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2000
2037
|
|
|
@@ -2135,22 +2172,13 @@ class WebGLBackend extends Backend {
|
|
|
2135
2172
|
* Computes the VAO key for the given index and attributes.
|
|
2136
2173
|
*
|
|
2137
2174
|
* @private
|
|
2138
|
-
* @param {BufferAttribute?} index - The index. `null` for non-indexed geometries.
|
|
2139
2175
|
* @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
|
|
2140
|
-
* @return {
|
|
2176
|
+
* @return {string} The VAO key.
|
|
2141
2177
|
*/
|
|
2142
|
-
_getVaoKey(
|
|
2178
|
+
_getVaoKey( attributes ) {
|
|
2143
2179
|
|
|
2144
2180
|
let key = '';
|
|
2145
2181
|
|
|
2146
|
-
if ( index !== null ) {
|
|
2147
|
-
|
|
2148
|
-
const indexData = this.get( index );
|
|
2149
|
-
|
|
2150
|
-
key += ':' + indexData.id;
|
|
2151
|
-
|
|
2152
|
-
}
|
|
2153
|
-
|
|
2154
2182
|
for ( let i = 0; i < attributes.length; i ++ ) {
|
|
2155
2183
|
|
|
2156
2184
|
const attributeData = this.get( attributes[ i ] );
|
|
@@ -2167,11 +2195,10 @@ class WebGLBackend extends Backend {
|
|
|
2167
2195
|
* Creates a VAO from the index and attributes.
|
|
2168
2196
|
*
|
|
2169
2197
|
* @private
|
|
2170
|
-
* @param {BufferAttribute?} index - The index. `null` for non-indexed geometries.
|
|
2171
2198
|
* @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
|
|
2172
2199
|
* @return {Object} The VAO data.
|
|
2173
2200
|
*/
|
|
2174
|
-
_createVao(
|
|
2201
|
+
_createVao( attributes ) {
|
|
2175
2202
|
|
|
2176
2203
|
const { gl } = this;
|
|
2177
2204
|
|
|
@@ -2182,16 +2209,6 @@ class WebGLBackend extends Backend {
|
|
|
2182
2209
|
|
|
2183
2210
|
gl.bindVertexArray( vaoGPU );
|
|
2184
2211
|
|
|
2185
|
-
if ( index !== null ) {
|
|
2186
|
-
|
|
2187
|
-
const indexData = this.get( index );
|
|
2188
|
-
|
|
2189
|
-
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexData.bufferGPU );
|
|
2190
|
-
|
|
2191
|
-
key += ':' + indexData.id;
|
|
2192
|
-
|
|
2193
|
-
}
|
|
2194
|
-
|
|
2195
2212
|
for ( let i = 0; i < attributes.length; i ++ ) {
|
|
2196
2213
|
|
|
2197
2214
|
const attribute = attributes[ i ];
|
|
@@ -2371,7 +2388,7 @@ class WebGLBackend extends Backend {
|
|
|
2371
2388
|
*
|
|
2372
2389
|
* @private
|
|
2373
2390
|
* @param {RenderTarget} renderTarget - The render target that should be multisampled.
|
|
2374
|
-
* @return {
|
|
2391
|
+
* @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
|
|
2375
2392
|
*/
|
|
2376
2393
|
_useMultisampledRTT( renderTarget ) {
|
|
2377
2394
|
|