super-three 0.173.5 → 0.176.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +21993 -1359
- package/build/three.core.js +21129 -1188
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +835 -142
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19493 -17617
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19477 -17617
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +144 -42
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +194 -71
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +74 -30
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +87 -19
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +56 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +90 -70
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +75 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +134 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +268 -134
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +3 -4
- package/src/Three.TSL.js +7 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +169 -19
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +339 -0
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +28 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/EventDispatcher.js +44 -2
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +63 -0
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +45 -5
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +130 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +94 -0
- package/src/math/MathUtils.js +405 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +185 -9
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -56,8 +56,18 @@ import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
|
56
56
|
import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
|
|
57
57
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* This renderer uses WebGL 2 to display scenes.
|
|
61
|
+
*
|
|
62
|
+
* WebGL 1 is not supported since `r163`.
|
|
63
|
+
*/
|
|
59
64
|
class WebGLRenderer {
|
|
60
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Constructs a new WebGL renderer.
|
|
68
|
+
*
|
|
69
|
+
* @param {WebGLRenderer~Options} [parameters] - The configuration parameter.
|
|
70
|
+
*/
|
|
61
71
|
constructor( parameters = {} ) {
|
|
62
72
|
|
|
63
73
|
const {
|
|
@@ -75,6 +85,13 @@ class WebGLRenderer {
|
|
|
75
85
|
multiviewStereo = false,
|
|
76
86
|
} = parameters;
|
|
77
87
|
|
|
88
|
+
/**
|
|
89
|
+
* This flag can be used for type testing.
|
|
90
|
+
*
|
|
91
|
+
* @type {boolean}
|
|
92
|
+
* @readonly
|
|
93
|
+
* @default true
|
|
94
|
+
*/
|
|
78
95
|
this.isWebGLRenderer = true;
|
|
79
96
|
|
|
80
97
|
let _alpha;
|
|
@@ -109,13 +126,36 @@ class WebGLRenderer {
|
|
|
109
126
|
|
|
110
127
|
// public properties
|
|
111
128
|
|
|
129
|
+
/**
|
|
130
|
+
* A canvas where the renderer draws its output.This is automatically created by the renderer
|
|
131
|
+
* in the constructor (if not provided already); you just need to add it to your page like so:
|
|
132
|
+
* ```js
|
|
133
|
+
* document.body.appendChild( renderer.domElement );
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @type {DOMElement}
|
|
137
|
+
*/
|
|
112
138
|
this.domElement = canvas;
|
|
113
139
|
|
|
114
|
-
|
|
140
|
+
/**
|
|
141
|
+
* A object with debug configuration settings.
|
|
142
|
+
*
|
|
143
|
+
* - `checkShaderErrors`: If it is `true`, defines whether material shader programs are
|
|
144
|
+
* checked for errors during compilation and linkage process. It may be useful to disable
|
|
145
|
+
* this check in production for performance gain. It is strongly recommended to keep these
|
|
146
|
+
* checks enabled during development. If the shader does not compile and link - it will not
|
|
147
|
+
* work and associated material will not render.
|
|
148
|
+
* - `onShaderError(gl, program, glVertexShader,glFragmentShader)`: A callback function that
|
|
149
|
+
* can be used for custom error reporting. The callback receives the WebGL context, an instance
|
|
150
|
+
* of WebGLProgram as well two instances of WebGLShader representing the vertex and fragment shader.
|
|
151
|
+
* Assigning a custom function disables the default error reporting.
|
|
152
|
+
*
|
|
153
|
+
* @type {Object}
|
|
154
|
+
*/
|
|
115
155
|
this.debug = {
|
|
116
156
|
|
|
117
157
|
/**
|
|
118
|
-
* Enables error checking and reporting when shader programs are being compiled
|
|
158
|
+
* Enables error checking and reporting when shader programs are being compiled.
|
|
119
159
|
* @type {boolean}
|
|
120
160
|
*/
|
|
121
161
|
checkShaderErrors: true,
|
|
@@ -128,29 +168,105 @@ class WebGLRenderer {
|
|
|
128
168
|
|
|
129
169
|
// clearing
|
|
130
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Whether the renderer should automatically clear its output before rendering a frame or not.
|
|
173
|
+
*
|
|
174
|
+
* @type {boolean}
|
|
175
|
+
* @default true
|
|
176
|
+
*/
|
|
131
177
|
this.autoClear = true;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
|
|
181
|
+
* the color buffer or not.
|
|
182
|
+
*
|
|
183
|
+
* @type {boolean}
|
|
184
|
+
* @default true
|
|
185
|
+
*/
|
|
132
186
|
this.autoClearColor = true;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
|
|
190
|
+
* the depth buffer or not.
|
|
191
|
+
*
|
|
192
|
+
* @type {boolean}
|
|
193
|
+
* @default true
|
|
194
|
+
*/
|
|
133
195
|
this.autoClearDepth = true;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
|
|
199
|
+
* the stencil buffer or not.
|
|
200
|
+
*
|
|
201
|
+
* @type {boolean}
|
|
202
|
+
* @default true
|
|
203
|
+
*/
|
|
134
204
|
this.autoClearStencil = true;
|
|
135
205
|
|
|
136
206
|
// scene graph
|
|
137
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Whether the renderer should sort objects or not.
|
|
210
|
+
*
|
|
211
|
+
* Note: Sorting is used to attempt to properly render objects that have some
|
|
212
|
+
* degree of transparency. By definition, sorting objects may not work in all
|
|
213
|
+
* cases. Depending on the needs of application, it may be necessary to turn
|
|
214
|
+
* off sorting and use other methods to deal with transparency rendering e.g.
|
|
215
|
+
* manually determining each object's rendering order.
|
|
216
|
+
*
|
|
217
|
+
* @type {boolean}
|
|
218
|
+
* @default true
|
|
219
|
+
*/
|
|
138
220
|
this.sortObjects = true;
|
|
139
221
|
|
|
140
222
|
// user-defined clipping
|
|
141
223
|
|
|
224
|
+
/**
|
|
225
|
+
* User-defined clipping planes specified in world space. These planes apply globally.
|
|
226
|
+
* Points in space whose dot product with the plane is negative are cut away.
|
|
227
|
+
*
|
|
228
|
+
* @type {Array<Plane>}
|
|
229
|
+
*/
|
|
142
230
|
this.clippingPlanes = [];
|
|
143
|
-
this.localClippingEnabled = false;
|
|
144
|
-
|
|
145
|
-
// physically based shading
|
|
146
231
|
|
|
147
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Whether the renderer respects object-level clipping planes or not.
|
|
234
|
+
*
|
|
235
|
+
* @type {boolean}
|
|
236
|
+
* @default false
|
|
237
|
+
*/
|
|
238
|
+
this.localClippingEnabled = false;
|
|
148
239
|
|
|
149
240
|
// tone mapping
|
|
150
241
|
|
|
242
|
+
/**
|
|
243
|
+
* The tone mapping technique of the renderer.
|
|
244
|
+
*
|
|
245
|
+
* @type {(NoToneMapping|LinearToneMapping|ReinhardToneMapping|CineonToneMapping|ACESFilmicToneMapping|CustomToneMapping|AgXToneMapping|NeutralToneMapping)}
|
|
246
|
+
* @default NoToneMapping
|
|
247
|
+
*/
|
|
151
248
|
this.toneMapping = NoToneMapping;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Exposure level of tone mapping.
|
|
252
|
+
*
|
|
253
|
+
* @type {number}
|
|
254
|
+
* @default 1
|
|
255
|
+
*/
|
|
152
256
|
this.toneMappingExposure = 1.0;
|
|
153
257
|
|
|
258
|
+
// transmission
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* The normalized resolution scale for the transmission render target, measured in percentage
|
|
262
|
+
* of viewport dimensions. Lowering this value can result in significant performance improvements
|
|
263
|
+
* when using {@link MeshPhysicalMaterial#transmission}.
|
|
264
|
+
*
|
|
265
|
+
* @type {number}
|
|
266
|
+
* @default 1
|
|
267
|
+
*/
|
|
268
|
+
this.transmissionResolutionScale = 1.0;
|
|
269
|
+
|
|
154
270
|
// internal properties
|
|
155
271
|
|
|
156
272
|
const _this = this;
|
|
@@ -159,6 +275,8 @@ class WebGLRenderer {
|
|
|
159
275
|
|
|
160
276
|
// internal state cache
|
|
161
277
|
|
|
278
|
+
this._outputColorSpace = SRGBColorSpace;
|
|
279
|
+
|
|
162
280
|
let _currentActiveCubeFace = 0;
|
|
163
281
|
let _currentActiveMipmapLevel = 0;
|
|
164
282
|
let _currentRenderTarget = null;
|
|
@@ -195,9 +313,6 @@ class WebGLRenderer {
|
|
|
195
313
|
let _clippingEnabled = false;
|
|
196
314
|
let _localClippingEnabled = false;
|
|
197
315
|
|
|
198
|
-
// transmission render target scale
|
|
199
|
-
this.transmissionResolutionScale = 1.0;
|
|
200
|
-
|
|
201
316
|
// camera matrices cache
|
|
202
317
|
|
|
203
318
|
const _currentProjectionMatrix = new Matrix4();
|
|
@@ -328,12 +443,79 @@ class WebGLRenderer {
|
|
|
328
443
|
|
|
329
444
|
info.programs = programCache.programs;
|
|
330
445
|
|
|
446
|
+
/**
|
|
447
|
+
* Holds details about the capabilities of the current rendering context.
|
|
448
|
+
*
|
|
449
|
+
* @name WebGLRenderer#capabilities
|
|
450
|
+
* @type {WebGLRenderer~Capabilities}
|
|
451
|
+
*/
|
|
331
452
|
_this.capabilities = capabilities;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Provides methods for retrieving and testing WebGL extensions.
|
|
456
|
+
*
|
|
457
|
+
* - `get(extensionName:string)`: Used to check whether a WebGL extension is supported
|
|
458
|
+
* and return the extension object if available.
|
|
459
|
+
* - `has(extensionName:string)`: returns `true` if the extension is supported.
|
|
460
|
+
*
|
|
461
|
+
* @name WebGLRenderer#extensions
|
|
462
|
+
* @type {Object}
|
|
463
|
+
*/
|
|
332
464
|
_this.extensions = extensions;
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Used to track properties of other objects like native WebGL objects.
|
|
468
|
+
*
|
|
469
|
+
* @name WebGLRenderer#properties
|
|
470
|
+
* @type {Object}
|
|
471
|
+
*/
|
|
333
472
|
_this.properties = properties;
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Manages the render lists of the renderer.
|
|
476
|
+
*
|
|
477
|
+
* @name WebGLRenderer#renderLists
|
|
478
|
+
* @type {Object}
|
|
479
|
+
*/
|
|
334
480
|
_this.renderLists = renderLists;
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Interface for managing shadows.
|
|
486
|
+
*
|
|
487
|
+
* @name WebGLRenderer#shadowMap
|
|
488
|
+
* @type {WebGLRenderer~ShadowMap}
|
|
489
|
+
*/
|
|
335
490
|
_this.shadowMap = shadowMap;
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Interface for managing the WebGL state.
|
|
494
|
+
*
|
|
495
|
+
* @name WebGLRenderer#state
|
|
496
|
+
* @type {Object}
|
|
497
|
+
*/
|
|
336
498
|
_this.state = state;
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Holds a series of statistical information about the GPU memory
|
|
502
|
+
* and the rendering process. Useful for debugging and monitoring.
|
|
503
|
+
*
|
|
504
|
+
* By default these data are reset at each render call but when having
|
|
505
|
+
* multiple render passes per frame (e.g. when using post processing) it can
|
|
506
|
+
* be preferred to reset with a custom pattern. First, set `autoReset` to
|
|
507
|
+
* `false`.
|
|
508
|
+
* ```js
|
|
509
|
+
* renderer.info.autoReset = false;
|
|
510
|
+
* ```
|
|
511
|
+
* Call `reset()` whenever you have finished to render a single frame.
|
|
512
|
+
* ```js
|
|
513
|
+
* renderer.info.reset();
|
|
514
|
+
* ```
|
|
515
|
+
*
|
|
516
|
+
* @name WebGLRenderer#info
|
|
517
|
+
* @type {WebGLRenderer~Info}
|
|
518
|
+
*/
|
|
337
519
|
_this.info = info;
|
|
338
520
|
|
|
339
521
|
}
|
|
@@ -344,22 +526,38 @@ class WebGLRenderer {
|
|
|
344
526
|
|
|
345
527
|
const xr = new WebXRManager( _this, _gl );
|
|
346
528
|
|
|
529
|
+
/**
|
|
530
|
+
* A reference to the XR manager.
|
|
531
|
+
*
|
|
532
|
+
* @type {WebXRManager}
|
|
533
|
+
*/
|
|
347
534
|
this.xr = xr;
|
|
348
535
|
|
|
349
|
-
|
|
350
|
-
|
|
536
|
+
/**
|
|
537
|
+
* Returns the rendering context.
|
|
538
|
+
*
|
|
539
|
+
* @return {WebGL2RenderingContext} The rendering context.
|
|
540
|
+
*/
|
|
351
541
|
this.getContext = function () {
|
|
352
542
|
|
|
353
543
|
return _gl;
|
|
354
544
|
|
|
355
545
|
};
|
|
356
546
|
|
|
547
|
+
/**
|
|
548
|
+
* Returns the rendering context attributes.
|
|
549
|
+
*
|
|
550
|
+
* @return {WebGLContextAttributes} The rendering context attributes.
|
|
551
|
+
*/
|
|
357
552
|
this.getContextAttributes = function () {
|
|
358
553
|
|
|
359
554
|
return _gl.getContextAttributes();
|
|
360
555
|
|
|
361
556
|
};
|
|
362
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Simulates a loss of the WebGL context. This requires support for the `WEBGL_lose_context` extension.
|
|
560
|
+
*/
|
|
363
561
|
this.forceContextLoss = function () {
|
|
364
562
|
|
|
365
563
|
const extension = extensions.get( 'WEBGL_lose_context' );
|
|
@@ -367,6 +565,9 @@ class WebGLRenderer {
|
|
|
367
565
|
|
|
368
566
|
};
|
|
369
567
|
|
|
568
|
+
/**
|
|
569
|
+
* Simulates a restore of the WebGL context. This requires support for the `WEBGL_lose_context` extension.
|
|
570
|
+
*/
|
|
370
571
|
this.forceContextRestore = function () {
|
|
371
572
|
|
|
372
573
|
const extension = extensions.get( 'WEBGL_lose_context' );
|
|
@@ -374,12 +575,22 @@ class WebGLRenderer {
|
|
|
374
575
|
|
|
375
576
|
};
|
|
376
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Returns the pixel ratio.
|
|
580
|
+
*
|
|
581
|
+
* @return {number} The pixel ratio.
|
|
582
|
+
*/
|
|
377
583
|
this.getPixelRatio = function () {
|
|
378
584
|
|
|
379
585
|
return _pixelRatio;
|
|
380
586
|
|
|
381
587
|
};
|
|
382
588
|
|
|
589
|
+
/**
|
|
590
|
+
* Sets the given pixel ratio and resizes the canvas if necessary.
|
|
591
|
+
*
|
|
592
|
+
* @param {number} value - The pixel ratio.
|
|
593
|
+
*/
|
|
383
594
|
this.setPixelRatio = function ( value ) {
|
|
384
595
|
|
|
385
596
|
if ( value === undefined ) return;
|
|
@@ -390,12 +601,27 @@ class WebGLRenderer {
|
|
|
390
601
|
|
|
391
602
|
};
|
|
392
603
|
|
|
604
|
+
/**
|
|
605
|
+
* Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
|
|
606
|
+
*
|
|
607
|
+
* @param {Vector2} target - The method writes the result in this target object.
|
|
608
|
+
* @return {Vector2} The renderer's size in logical pixels.
|
|
609
|
+
*/
|
|
393
610
|
this.getSize = function ( target ) {
|
|
394
611
|
|
|
395
612
|
return target.set( _width, _height );
|
|
396
613
|
|
|
397
614
|
};
|
|
398
615
|
|
|
616
|
+
/**
|
|
617
|
+
* Resizes the output canvas to (width, height) with device pixel ratio taken
|
|
618
|
+
* into account, and also sets the viewport to fit that size, starting in (0,
|
|
619
|
+
* 0). Setting `updateStyle` to false prevents any style changes to the output canvas.
|
|
620
|
+
*
|
|
621
|
+
* @param {number} width - The width in logical pixels.
|
|
622
|
+
* @param {number} height - The height in logical pixels.
|
|
623
|
+
* @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
|
|
624
|
+
*/
|
|
399
625
|
this.setSize = function ( width, height, updateStyle = true ) {
|
|
400
626
|
|
|
401
627
|
if ( xr.isPresenting ) {
|
|
@@ -422,12 +648,31 @@ class WebGLRenderer {
|
|
|
422
648
|
|
|
423
649
|
};
|
|
424
650
|
|
|
651
|
+
/**
|
|
652
|
+
* Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.
|
|
653
|
+
*
|
|
654
|
+
* @param {Vector2} target - The method writes the result in this target object.
|
|
655
|
+
* @return {Vector2} The drawing buffer size.
|
|
656
|
+
*/
|
|
425
657
|
this.getDrawingBufferSize = function ( target ) {
|
|
426
658
|
|
|
427
659
|
return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();
|
|
428
660
|
|
|
429
661
|
};
|
|
430
662
|
|
|
663
|
+
/**
|
|
664
|
+
* This method allows to define the drawing buffer size by specifying
|
|
665
|
+
* width, height and pixel ratio all at once. The size of the drawing
|
|
666
|
+
* buffer is computed with this formula:
|
|
667
|
+
* ```js
|
|
668
|
+
* size.x = width * pixelRatio;
|
|
669
|
+
* size.y = height * pixelRatio;
|
|
670
|
+
* ```
|
|
671
|
+
*
|
|
672
|
+
* @param {number} width - The width in logical pixels.
|
|
673
|
+
* @param {number} height - The height in logical pixels.
|
|
674
|
+
* @param {number} pixelRatio - The pixel ratio.
|
|
675
|
+
*/
|
|
431
676
|
this.setDrawingBufferSize = function ( width, height, pixelRatio ) {
|
|
432
677
|
|
|
433
678
|
_width = width;
|
|
@@ -442,18 +687,39 @@ class WebGLRenderer {
|
|
|
442
687
|
|
|
443
688
|
};
|
|
444
689
|
|
|
690
|
+
/**
|
|
691
|
+
* Returns the current viewport definition.
|
|
692
|
+
*
|
|
693
|
+
* @param {Vector2} target - The method writes the result in this target object.
|
|
694
|
+
* @return {Vector2} The current viewport definition.
|
|
695
|
+
*/
|
|
445
696
|
this.getCurrentViewport = function ( target ) {
|
|
446
697
|
|
|
447
698
|
return target.copy( _currentViewport );
|
|
448
699
|
|
|
449
700
|
};
|
|
450
701
|
|
|
702
|
+
/**
|
|
703
|
+
* Returns the viewport definition.
|
|
704
|
+
*
|
|
705
|
+
* @param {Vector4} target - The method writes the result in this target object.
|
|
706
|
+
* @return {Vector4} The viewport definition.
|
|
707
|
+
*/
|
|
451
708
|
this.getViewport = function ( target ) {
|
|
452
709
|
|
|
453
710
|
return target.copy( _viewport );
|
|
454
711
|
|
|
455
712
|
};
|
|
456
713
|
|
|
714
|
+
/**
|
|
715
|
+
* Sets the viewport to render from `(x, y)` to `(x + width, y + height)`.
|
|
716
|
+
*
|
|
717
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
718
|
+
* Or alternatively a four-component vector specifying all the parameters of the viewport.
|
|
719
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
720
|
+
* @param {number} width - The width of the viewport in logical pixel unit.
|
|
721
|
+
* @param {number} height - The height of the viewport in logical pixel unit.
|
|
722
|
+
*/
|
|
457
723
|
this.setViewport = function ( x, y, width, height ) {
|
|
458
724
|
|
|
459
725
|
if ( x.isVector4 ) {
|
|
@@ -470,12 +736,27 @@ class WebGLRenderer {
|
|
|
470
736
|
|
|
471
737
|
};
|
|
472
738
|
|
|
739
|
+
/**
|
|
740
|
+
* Returns the scissor region.
|
|
741
|
+
*
|
|
742
|
+
* @param {Vector4} target - The method writes the result in this target object.
|
|
743
|
+
* @return {Vector4} The scissor region.
|
|
744
|
+
*/
|
|
473
745
|
this.getScissor = function ( target ) {
|
|
474
746
|
|
|
475
747
|
return target.copy( _scissor );
|
|
476
748
|
|
|
477
749
|
};
|
|
478
750
|
|
|
751
|
+
/**
|
|
752
|
+
* Sets the scissor region to render from `(x, y)` to `(x + width, y + height)`.
|
|
753
|
+
*
|
|
754
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the scissor region origin in logical pixel unit.
|
|
755
|
+
* Or alternatively a four-component vector specifying all the parameters of the scissor region.
|
|
756
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the scissor region origin in logical pixel unit.
|
|
757
|
+
* @param {number} width - The width of the scissor region in logical pixel unit.
|
|
758
|
+
* @param {number} height - The height of the scissor region in logical pixel unit.
|
|
759
|
+
*/
|
|
479
760
|
this.setScissor = function ( x, y, width, height ) {
|
|
480
761
|
|
|
481
762
|
if ( x.isVector4 ) {
|
|
@@ -492,24 +773,48 @@ class WebGLRenderer {
|
|
|
492
773
|
|
|
493
774
|
};
|
|
494
775
|
|
|
776
|
+
/**
|
|
777
|
+
* Returns `true` if the scissor test is enabled.
|
|
778
|
+
*
|
|
779
|
+
* @return {boolean} Whether the scissor test is enabled or not.
|
|
780
|
+
*/
|
|
495
781
|
this.getScissorTest = function () {
|
|
496
782
|
|
|
497
783
|
return _scissorTest;
|
|
498
784
|
|
|
499
785
|
};
|
|
500
786
|
|
|
787
|
+
/**
|
|
788
|
+
* Enable or disable the scissor test. When this is enabled, only the pixels
|
|
789
|
+
* within the defined scissor area will be affected by further renderer
|
|
790
|
+
* actions.
|
|
791
|
+
*
|
|
792
|
+
* @param {boolean} boolean - Whether the scissor test is enabled or not.
|
|
793
|
+
*/
|
|
501
794
|
this.setScissorTest = function ( boolean ) {
|
|
502
795
|
|
|
503
796
|
state.setScissorTest( _scissorTest = boolean );
|
|
504
797
|
|
|
505
798
|
};
|
|
506
799
|
|
|
800
|
+
/**
|
|
801
|
+
* Sets a custom opaque sort function for the render lists. Pass `null`
|
|
802
|
+
* to use the default `painterSortStable` function.
|
|
803
|
+
*
|
|
804
|
+
* @param {?Function} method - The opaque sort function.
|
|
805
|
+
*/
|
|
507
806
|
this.setOpaqueSort = function ( method ) {
|
|
508
807
|
|
|
509
808
|
_opaqueSort = method;
|
|
510
809
|
|
|
511
810
|
};
|
|
512
811
|
|
|
812
|
+
/**
|
|
813
|
+
* Sets a custom transparent sort function for the render lists. Pass `null`
|
|
814
|
+
* to use the default `reversePainterSortStable` function.
|
|
815
|
+
*
|
|
816
|
+
* @param {?Function} method - The opaque sort function.
|
|
817
|
+
*/
|
|
513
818
|
this.setTransparentSort = function ( method ) {
|
|
514
819
|
|
|
515
820
|
_transparentSort = method;
|
|
@@ -518,30 +823,60 @@ class WebGLRenderer {
|
|
|
518
823
|
|
|
519
824
|
// Clearing
|
|
520
825
|
|
|
826
|
+
/**
|
|
827
|
+
* Returns the clear color.
|
|
828
|
+
*
|
|
829
|
+
* @param {Color} target - The method writes the result in this target object.
|
|
830
|
+
* @return {Color} The clear color.
|
|
831
|
+
*/
|
|
521
832
|
this.getClearColor = function ( target ) {
|
|
522
833
|
|
|
523
834
|
return target.copy( background.getClearColor() );
|
|
524
835
|
|
|
525
836
|
};
|
|
526
837
|
|
|
838
|
+
/**
|
|
839
|
+
* Sets the clear color and alpha.
|
|
840
|
+
*
|
|
841
|
+
* @param {Color} color - The clear color.
|
|
842
|
+
* @param {number} [alpha=1] - The clear alpha.
|
|
843
|
+
*/
|
|
527
844
|
this.setClearColor = function () {
|
|
528
845
|
|
|
529
|
-
background.setClearColor
|
|
846
|
+
background.setClearColor( ...arguments );
|
|
530
847
|
|
|
531
848
|
};
|
|
532
849
|
|
|
850
|
+
/**
|
|
851
|
+
* Returns the clear alpha. Ranges within `[0,1]`.
|
|
852
|
+
*
|
|
853
|
+
* @return {number} The clear alpha.
|
|
854
|
+
*/
|
|
533
855
|
this.getClearAlpha = function () {
|
|
534
856
|
|
|
535
857
|
return background.getClearAlpha();
|
|
536
858
|
|
|
537
859
|
};
|
|
538
860
|
|
|
861
|
+
/**
|
|
862
|
+
* Sets the clear alpha.
|
|
863
|
+
*
|
|
864
|
+
* @param {number} alpha - The clear alpha.
|
|
865
|
+
*/
|
|
539
866
|
this.setClearAlpha = function () {
|
|
540
867
|
|
|
541
|
-
background.setClearAlpha
|
|
868
|
+
background.setClearAlpha( ...arguments );
|
|
542
869
|
|
|
543
870
|
};
|
|
544
871
|
|
|
872
|
+
/**
|
|
873
|
+
* Tells the renderer to clear its color, depth or stencil drawing buffer(s).
|
|
874
|
+
* This method initializes the buffers to the current clear color values.
|
|
875
|
+
*
|
|
876
|
+
* @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
|
|
877
|
+
* @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
|
|
878
|
+
* @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
|
|
879
|
+
*/
|
|
545
880
|
this.clear = function ( color = true, depth = true, stencil = true ) {
|
|
546
881
|
|
|
547
882
|
let bits = 0;
|
|
@@ -620,26 +955,37 @@ class WebGLRenderer {
|
|
|
620
955
|
|
|
621
956
|
};
|
|
622
957
|
|
|
958
|
+
/**
|
|
959
|
+
* Clears the color buffer. Equivalent to calling `renderer.clear( true, false, false )`.
|
|
960
|
+
*/
|
|
623
961
|
this.clearColor = function () {
|
|
624
962
|
|
|
625
963
|
this.clear( true, false, false );
|
|
626
964
|
|
|
627
965
|
};
|
|
628
966
|
|
|
967
|
+
/**
|
|
968
|
+
* Clears the depth buffer. Equivalent to calling `renderer.clear( false, true, false )`.
|
|
969
|
+
*/
|
|
629
970
|
this.clearDepth = function () {
|
|
630
971
|
|
|
631
972
|
this.clear( false, true, false );
|
|
632
973
|
|
|
633
974
|
};
|
|
634
975
|
|
|
976
|
+
/**
|
|
977
|
+
* Clears the stencil buffer. Equivalent to calling `renderer.clear( false, false, true )`.
|
|
978
|
+
*/
|
|
635
979
|
this.clearStencil = function () {
|
|
636
980
|
|
|
637
981
|
this.clear( false, false, true );
|
|
638
982
|
|
|
639
983
|
};
|
|
640
984
|
|
|
641
|
-
|
|
642
|
-
|
|
985
|
+
/**
|
|
986
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
987
|
+
* method whenever this instance is no longer used in your app.
|
|
988
|
+
*/
|
|
643
989
|
this.dispose = function () {
|
|
644
990
|
|
|
645
991
|
canvas.removeEventListener( 'webglcontextlost', onContextLost, false );
|
|
@@ -874,6 +1220,8 @@ class WebGLRenderer {
|
|
|
874
1220
|
|
|
875
1221
|
if ( object._multiDrawInstances !== null ) {
|
|
876
1222
|
|
|
1223
|
+
// @deprecated, r174
|
|
1224
|
+
warnOnce( 'THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
877
1225
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
878
1226
|
|
|
879
1227
|
} else {
|
|
@@ -943,6 +1291,18 @@ class WebGLRenderer {
|
|
|
943
1291
|
|
|
944
1292
|
}
|
|
945
1293
|
|
|
1294
|
+
/**
|
|
1295
|
+
* Compiles all materials in the scene with the camera. This is useful to precompile shaders
|
|
1296
|
+
* before the first rendering. If you want to add a 3D object to an existing scene, use the third
|
|
1297
|
+
* optional parameter for applying the target scene.
|
|
1298
|
+
*
|
|
1299
|
+
* Note that the (target) scene's lighting and environment must be configured before calling this method.
|
|
1300
|
+
*
|
|
1301
|
+
* @param {Object3D} scene - The scene or another type of 3D object to precompile.
|
|
1302
|
+
* @param {Camera} camera - The camera.
|
|
1303
|
+
* @param {?Scene} [targetScene=null] - The target scene.
|
|
1304
|
+
* @return {?Set} The precompiled materials.
|
|
1305
|
+
*/
|
|
946
1306
|
this.compile = function ( scene, camera, targetScene = null ) {
|
|
947
1307
|
|
|
948
1308
|
if ( targetScene === null ) targetScene = scene;
|
|
@@ -1030,8 +1390,7 @@ class WebGLRenderer {
|
|
|
1030
1390
|
|
|
1031
1391
|
} );
|
|
1032
1392
|
|
|
1033
|
-
renderStateStack.pop();
|
|
1034
|
-
currentRenderState = null;
|
|
1393
|
+
currentRenderState = renderStateStack.pop();
|
|
1035
1394
|
|
|
1036
1395
|
return materials;
|
|
1037
1396
|
|
|
@@ -1039,6 +1398,18 @@ class WebGLRenderer {
|
|
|
1039
1398
|
|
|
1040
1399
|
// compileAsync
|
|
1041
1400
|
|
|
1401
|
+
/**
|
|
1402
|
+
* Asynchronous version of {@link WebGLRenderer#compile}.
|
|
1403
|
+
*
|
|
1404
|
+
* This method makes use of the `KHR_parallel_shader_compile` WebGL extension. Hence,
|
|
1405
|
+
* it is recommended to use this version of `compile()` whenever possible.
|
|
1406
|
+
*
|
|
1407
|
+
* @async
|
|
1408
|
+
* @param {Object3D} scene - The scene or another type of 3D object to precompile.
|
|
1409
|
+
* @param {Camera} camera - The camera.
|
|
1410
|
+
* @param {?Scene} [targetScene=null] - The target scene.
|
|
1411
|
+
* @return {Promise} A Promise that resolves when the given scene can be rendered without unnecessary stalling due to shader compilation.
|
|
1412
|
+
*/
|
|
1042
1413
|
this.compileAsync = function ( scene, camera, targetScene = null ) {
|
|
1043
1414
|
|
|
1044
1415
|
const materials = this.compile( scene, camera, targetScene );
|
|
@@ -1140,6 +1511,20 @@ class WebGLRenderer {
|
|
|
1140
1511
|
|
|
1141
1512
|
// Rendering
|
|
1142
1513
|
|
|
1514
|
+
/**
|
|
1515
|
+
* Renders the given scene (or other type of 3D object) using the given camera.
|
|
1516
|
+
*
|
|
1517
|
+
* The render is done to a previously specified render target set by calling {@link WebGLRenderer#setRenderTarget}
|
|
1518
|
+
* or to the canvas as usual.
|
|
1519
|
+
*
|
|
1520
|
+
* By default render buffers are cleared before rendering but you can prevent
|
|
1521
|
+
* this by setting the property `autoClear` to `false`. If you want to prevent
|
|
1522
|
+
* only certain buffers being cleared you can `autoClearColor`, `autoClearDepth`
|
|
1523
|
+
* or `autoClearStencil` to `false`. To force a clear, use {@link WebGLRenderer#clear}.
|
|
1524
|
+
*
|
|
1525
|
+
* @param {Object3D} scene - The scene to render.
|
|
1526
|
+
* @param {Camera} camera - The camera.
|
|
1527
|
+
*/
|
|
1143
1528
|
this.render = function ( scene, camera ) {
|
|
1144
1529
|
|
|
1145
1530
|
if ( camera !== undefined && camera.isCamera !== true ) {
|
|
@@ -1608,8 +1993,14 @@ class WebGLRenderer {
|
|
|
1608
1993
|
|
|
1609
1994
|
const object = renderItem.object;
|
|
1610
1995
|
const geometry = renderItem.geometry;
|
|
1611
|
-
const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
1612
1996
|
const group = renderItem.group;
|
|
1997
|
+
let material = renderItem.material;
|
|
1998
|
+
|
|
1999
|
+
if ( material.allowOverride === true && overrideMaterial !== null ) {
|
|
2000
|
+
|
|
2001
|
+
material = overrideMaterial;
|
|
2002
|
+
|
|
2003
|
+
}
|
|
1613
2004
|
|
|
1614
2005
|
if ( object.layers.test( camera.layers ) ) {
|
|
1615
2006
|
|
|
@@ -2281,18 +2672,34 @@ class WebGLRenderer {
|
|
|
2281
2672
|
|
|
2282
2673
|
}() );
|
|
2283
2674
|
|
|
2675
|
+
/**
|
|
2676
|
+
* Returns the active cube face.
|
|
2677
|
+
*
|
|
2678
|
+
* @return {number} The active cube face.
|
|
2679
|
+
*/
|
|
2284
2680
|
this.getActiveCubeFace = function () {
|
|
2285
2681
|
|
|
2286
2682
|
return _currentActiveCubeFace;
|
|
2287
2683
|
|
|
2288
2684
|
};
|
|
2289
2685
|
|
|
2686
|
+
/**
|
|
2687
|
+
* Returns the active mipmap level.
|
|
2688
|
+
*
|
|
2689
|
+
* @return {number} The active mipmap level.
|
|
2690
|
+
*/
|
|
2290
2691
|
this.getActiveMipmapLevel = function () {
|
|
2291
2692
|
|
|
2292
2693
|
return _currentActiveMipmapLevel;
|
|
2293
2694
|
|
|
2294
2695
|
};
|
|
2295
2696
|
|
|
2697
|
+
/**
|
|
2698
|
+
* Returns the active render target.
|
|
2699
|
+
*
|
|
2700
|
+
* @return {?WebGLRenderTarget} The active render target. Returns `null` if no render target
|
|
2701
|
+
* is currently set.
|
|
2702
|
+
*/
|
|
2296
2703
|
this.getRenderTarget = function () {
|
|
2297
2704
|
|
|
2298
2705
|
return _currentRenderTarget;
|
|
@@ -2301,26 +2708,21 @@ class WebGLRenderer {
|
|
|
2301
2708
|
|
|
2302
2709
|
this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
|
|
2303
2710
|
|
|
2304
|
-
properties.get( renderTarget.texture ).__webglTexture = colorTexture;
|
|
2305
|
-
properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
|
|
2306
|
-
|
|
2307
2711
|
const renderTargetProperties = properties.get( renderTarget );
|
|
2308
|
-
renderTargetProperties.__hasExternalTextures = true;
|
|
2309
2712
|
|
|
2310
|
-
renderTargetProperties.__autoAllocateDepthBuffer =
|
|
2311
|
-
|
|
2312
|
-
if ( ! renderTargetProperties.__autoAllocateDepthBuffer && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
|
|
2713
|
+
renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
|
|
2714
|
+
if ( ! renderTargetProperties.__autoAllocateDepthBuffer === false && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
|
|
2313
2715
|
|
|
2314
2716
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
2315
2717
|
// are midframe flushes and an external depth buffer. Disable use of the extension.
|
|
2316
|
-
|
|
2718
|
+
renderTargetProperties.__useRenderToTexture = false;
|
|
2317
2719
|
|
|
2318
|
-
|
|
2319
|
-
renderTargetProperties.__useRenderToTexture = false;
|
|
2720
|
+
}
|
|
2320
2721
|
|
|
2321
|
-
|
|
2722
|
+
properties.get( renderTarget.texture ).__webglTexture = colorTexture;
|
|
2723
|
+
properties.get( renderTarget.depthTexture ).__webglTexture = renderTargetProperties.__autoAllocateDepthBuffer ? undefined : depthTexture;
|
|
2322
2724
|
|
|
2323
|
-
|
|
2725
|
+
renderTargetProperties.__hasExternalTextures = true;
|
|
2324
2726
|
|
|
2325
2727
|
};
|
|
2326
2728
|
|
|
@@ -2333,6 +2735,16 @@ class WebGLRenderer {
|
|
|
2333
2735
|
};
|
|
2334
2736
|
|
|
2335
2737
|
const _scratchFrameBuffer = _gl.createFramebuffer();
|
|
2738
|
+
|
|
2739
|
+
/**
|
|
2740
|
+
* Sets the active rendertarget.
|
|
2741
|
+
*
|
|
2742
|
+
* @param {?WebGLRenderTarget} renderTarget - The render target to set. When `null` is given,
|
|
2743
|
+
* the canvas is set as the active render target instead.
|
|
2744
|
+
* @param {number} [activeCubeFace=0] - The active cube face when using a cube render target.
|
|
2745
|
+
* Indicates the z layer to render in to when using 3D or array render targets.
|
|
2746
|
+
* @param {number} [activeMipmapLevel=0] - The active mipmap level.
|
|
2747
|
+
*/
|
|
2336
2748
|
this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
|
|
2337
2749
|
|
|
2338
2750
|
// Render to base layer instead of canvas in WebXR
|
|
@@ -2492,6 +2904,17 @@ class WebGLRenderer {
|
|
|
2492
2904
|
|
|
2493
2905
|
};
|
|
2494
2906
|
|
|
2907
|
+
/**
|
|
2908
|
+
* Reads the pixel data from the given render target into the given buffer.
|
|
2909
|
+
*
|
|
2910
|
+
* @param {WebGLRenderTarget} renderTarget - The render target to read from.
|
|
2911
|
+
* @param {number} x - The `x` coordinate of the copy region's origin.
|
|
2912
|
+
* @param {number} y - The `y` coordinate of the copy region's origin.
|
|
2913
|
+
* @param {number} width - The width of the copy region.
|
|
2914
|
+
* @param {number} height - The height of the copy region.
|
|
2915
|
+
* @param {TypedArray} buffer - The result buffer.
|
|
2916
|
+
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2917
|
+
*/
|
|
2495
2918
|
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2496
2919
|
|
|
2497
2920
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
@@ -2554,6 +2977,21 @@ class WebGLRenderer {
|
|
|
2554
2977
|
|
|
2555
2978
|
};
|
|
2556
2979
|
|
|
2980
|
+
/**
|
|
2981
|
+
* Asynchronous, non-blocking version of {@link WebGLRenderer#readRenderTargetPixels}.
|
|
2982
|
+
*
|
|
2983
|
+
* It is recommended to use this version of `readRenderTargetPixels()` whenever possible.
|
|
2984
|
+
*
|
|
2985
|
+
* @async
|
|
2986
|
+
* @param {WebGLRenderTarget} renderTarget - The render target to read from.
|
|
2987
|
+
* @param {number} x - The `x` coordinate of the copy region's origin.
|
|
2988
|
+
* @param {number} y - The `y` coordinate of the copy region's origin.
|
|
2989
|
+
* @param {number} width - The width of the copy region.
|
|
2990
|
+
* @param {number} height - The height of the copy region.
|
|
2991
|
+
* @param {TypedArray} buffer - The result buffer.
|
|
2992
|
+
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2993
|
+
* @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
|
|
2994
|
+
*/
|
|
2557
2995
|
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2558
2996
|
|
|
2559
2997
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
@@ -2571,27 +3009,27 @@ class WebGLRenderer {
|
|
|
2571
3009
|
|
|
2572
3010
|
if ( framebuffer ) {
|
|
2573
3011
|
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
const textureType = texture.type;
|
|
3012
|
+
// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
|
|
3013
|
+
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2577
3014
|
|
|
2578
|
-
|
|
3015
|
+
// set the active frame buffer to the one we want to read
|
|
3016
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2579
3017
|
|
|
2580
|
-
|
|
3018
|
+
const texture = renderTarget.texture;
|
|
3019
|
+
const textureFormat = texture.format;
|
|
3020
|
+
const textureType = texture.type;
|
|
2581
3021
|
|
|
2582
|
-
|
|
3022
|
+
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2583
3023
|
|
|
2584
|
-
|
|
3024
|
+
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
|
|
2585
3025
|
|
|
2586
|
-
|
|
3026
|
+
}
|
|
2587
3027
|
|
|
2588
|
-
|
|
3028
|
+
if ( ! capabilities.textureTypeReadable( textureType ) ) {
|
|
2589
3029
|
|
|
2590
|
-
|
|
2591
|
-
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
3030
|
+
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2592
3031
|
|
|
2593
|
-
|
|
2594
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
3032
|
+
}
|
|
2595
3033
|
|
|
2596
3034
|
const glBuffer = _gl.createBuffer();
|
|
2597
3035
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
@@ -2627,19 +3065,15 @@ class WebGLRenderer {
|
|
|
2627
3065
|
|
|
2628
3066
|
};
|
|
2629
3067
|
|
|
3068
|
+
/**
|
|
3069
|
+
* Copies pixels from the current bound framebuffer into the given texture.
|
|
3070
|
+
*
|
|
3071
|
+
* @param {FramebufferTexture} texture - The texture.
|
|
3072
|
+
* @param {Vector2} position - The start position of the copy operation.
|
|
3073
|
+
* @param {number} [level=0] - The mip level. The default represents the base mip.
|
|
3074
|
+
*/
|
|
2630
3075
|
this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
|
|
2631
3076
|
|
|
2632
|
-
// support previous signature with position first
|
|
2633
|
-
if ( texture.isTexture !== true ) {
|
|
2634
|
-
|
|
2635
|
-
// @deprecated, r165
|
|
2636
|
-
warnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );
|
|
2637
|
-
|
|
2638
|
-
position = arguments[ 0 ] || null;
|
|
2639
|
-
texture = arguments[ 1 ];
|
|
2640
|
-
|
|
2641
|
-
}
|
|
2642
|
-
|
|
2643
3077
|
const levelScale = Math.pow( 2, - level );
|
|
2644
3078
|
const width = Math.floor( texture.image.width * levelScale );
|
|
2645
3079
|
const height = Math.floor( texture.image.height * levelScale );
|
|
@@ -2657,21 +3091,21 @@ class WebGLRenderer {
|
|
|
2657
3091
|
|
|
2658
3092
|
const _srcFramebuffer = _gl.createFramebuffer();
|
|
2659
3093
|
const _dstFramebuffer = _gl.createFramebuffer();
|
|
2660
|
-
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
2661
|
-
|
|
2662
|
-
// support previous signature with dstPosition first
|
|
2663
|
-
if ( srcTexture.isTexture !== true ) {
|
|
2664
|
-
|
|
2665
|
-
// @deprecated, r165
|
|
2666
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );
|
|
2667
3094
|
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
3095
|
+
/**
|
|
3096
|
+
* Copies data of the given source texture into a destination texture.
|
|
3097
|
+
*
|
|
3098
|
+
* When using render target textures as `srcTexture` and `dstTexture`, you must make sure both render targets are initialized
|
|
3099
|
+
* {@link WebGLRenderer#initRenderTarget}.
|
|
3100
|
+
*
|
|
3101
|
+
* @param {Texture} srcTexture - The source texture.
|
|
3102
|
+
* @param {Texture} dstTexture - The destination texture.
|
|
3103
|
+
* @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3104
|
+
* @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3105
|
+
* @param {number} srcLevel - The source mipmap level to copy.
|
|
3106
|
+
* @param {number} dstLevel - The destination mipmap level.
|
|
3107
|
+
*/
|
|
3108
|
+
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
2675
3109
|
|
|
2676
3110
|
// support the previous signature with just a single dst mipmap level
|
|
2677
3111
|
if ( dstLevel === null ) {
|
|
@@ -2925,20 +3359,6 @@ class WebGLRenderer {
|
|
|
2925
3359
|
|
|
2926
3360
|
this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
|
|
2927
3361
|
|
|
2928
|
-
// support previous signature with source box first
|
|
2929
|
-
if ( srcTexture.isTexture !== true ) {
|
|
2930
|
-
|
|
2931
|
-
// @deprecated, r165
|
|
2932
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
|
|
2933
|
-
|
|
2934
|
-
srcRegion = arguments[ 0 ] || null;
|
|
2935
|
-
dstPosition = arguments[ 1 ] || null;
|
|
2936
|
-
srcTexture = arguments[ 2 ];
|
|
2937
|
-
dstTexture = arguments[ 3 ];
|
|
2938
|
-
level = arguments[ 4 ] || 0;
|
|
2939
|
-
|
|
2940
|
-
}
|
|
2941
|
-
|
|
2942
3362
|
// @deprecated, r170
|
|
2943
3363
|
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
|
|
2944
3364
|
|
|
@@ -2946,6 +3366,13 @@ class WebGLRenderer {
|
|
|
2946
3366
|
|
|
2947
3367
|
};
|
|
2948
3368
|
|
|
3369
|
+
/**
|
|
3370
|
+
* Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data
|
|
3371
|
+
* can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been
|
|
3372
|
+
* rendered to.
|
|
3373
|
+
*
|
|
3374
|
+
* @param {WebGLRenderTarget} target - The render target.
|
|
3375
|
+
*/
|
|
2949
3376
|
this.initRenderTarget = function ( target ) {
|
|
2950
3377
|
|
|
2951
3378
|
if ( properties.get( target ).__webglFramebuffer === undefined ) {
|
|
@@ -2956,6 +3383,12 @@ class WebGLRenderer {
|
|
|
2956
3383
|
|
|
2957
3384
|
};
|
|
2958
3385
|
|
|
3386
|
+
/**
|
|
3387
|
+
* Initializes the given texture. Useful for preloading a texture rather than waiting until first
|
|
3388
|
+
* render (which can cause noticeable lags due to decode and GPU upload overhead).
|
|
3389
|
+
*
|
|
3390
|
+
* @param {Texture} texture - The texture.
|
|
3391
|
+
*/
|
|
2959
3392
|
this.initTexture = function ( texture ) {
|
|
2960
3393
|
|
|
2961
3394
|
if ( texture.isCubeTexture ) {
|
|
@@ -2980,6 +3413,11 @@ class WebGLRenderer {
|
|
|
2980
3413
|
|
|
2981
3414
|
};
|
|
2982
3415
|
|
|
3416
|
+
/**
|
|
3417
|
+
* Can be used to reset the internal WebGL state. This method is mostly
|
|
3418
|
+
* relevant for applications which share a single WebGL context across
|
|
3419
|
+
* multiple WebGL libraries.
|
|
3420
|
+
*/
|
|
2983
3421
|
this.resetState = function () {
|
|
2984
3422
|
|
|
2985
3423
|
_currentActiveCubeFace = 0;
|
|
@@ -2999,12 +3437,27 @@ class WebGLRenderer {
|
|
|
2999
3437
|
|
|
3000
3438
|
}
|
|
3001
3439
|
|
|
3440
|
+
/**
|
|
3441
|
+
* Defines the coordinate system of the renderer.
|
|
3442
|
+
*
|
|
3443
|
+
* In `WebGLRenderer`, the value is always `WebGLCoordinateSystem`.
|
|
3444
|
+
*
|
|
3445
|
+
* @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}
|
|
3446
|
+
* @default WebGLCoordinateSystem
|
|
3447
|
+
* @readonly
|
|
3448
|
+
*/
|
|
3002
3449
|
get coordinateSystem() {
|
|
3003
3450
|
|
|
3004
3451
|
return WebGLCoordinateSystem;
|
|
3005
3452
|
|
|
3006
3453
|
}
|
|
3007
3454
|
|
|
3455
|
+
/**
|
|
3456
|
+
* Defines the output color space of the renderer.
|
|
3457
|
+
*
|
|
3458
|
+
* @type {SRGBColorSpace|LinearSRGBColorSpace}
|
|
3459
|
+
* @default SRGBColorSpace
|
|
3460
|
+
*/
|
|
3008
3461
|
get outputColorSpace() {
|
|
3009
3462
|
|
|
3010
3463
|
return this._outputColorSpace;
|
|
@@ -3016,12 +3469,98 @@ class WebGLRenderer {
|
|
|
3016
3469
|
this._outputColorSpace = colorSpace;
|
|
3017
3470
|
|
|
3018
3471
|
const gl = this.getContext();
|
|
3019
|
-
gl.
|
|
3472
|
+
gl.drawingBufferColorSpace = ColorManagement._getDrawingBufferColorSpace( colorSpace );
|
|
3020
3473
|
gl.unpackColorSpace = ColorManagement._getUnpackColorSpace();
|
|
3021
3474
|
|
|
3022
3475
|
}
|
|
3023
3476
|
|
|
3024
3477
|
}
|
|
3025
3478
|
|
|
3479
|
+
// JSDoc
|
|
3480
|
+
|
|
3481
|
+
/**
|
|
3482
|
+
* WebGLRenderer options.
|
|
3483
|
+
*
|
|
3484
|
+
* @typedef {Object} WebGLRenderer~Options
|
|
3485
|
+
* @property {DOMElement} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
|
|
3486
|
+
* @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
|
|
3487
|
+
* @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
|
|
3488
|
+
* @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
|
|
3489
|
+
* @property {boolean} [premultipliedAlpha=true] Whether the renderer will assume colors have premultiplied alpha or not.
|
|
3490
|
+
* @property {boolean} [antialias=false] Whether to use the default MSAA or not.
|
|
3491
|
+
* @property {boolean} [stencil=false] Whether the drawing buffer has a stencil buffer of at least 8 bits or not.
|
|
3492
|
+
* @property {boolean} [preserveDrawingBuffer=false] Whether to preserve the buffer until manually cleared or overwritten.
|
|
3493
|
+
* @property {('default'|'low-power'|'high-performance')} [powerPreference='default'] Provides a hint to the user agent indicating what configuration of GPU is suitable for this WebGL context.
|
|
3494
|
+
* @property {boolean} [failIfMajorPerformanceCaveat=false] Whether the renderer creation will fail upon low performance is detected.
|
|
3495
|
+
* @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
|
|
3496
|
+
* @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
|
|
3497
|
+
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3498
|
+
* @property {boolean} [reverseDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3499
|
+
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3500
|
+
**/
|
|
3501
|
+
|
|
3502
|
+
/**
|
|
3503
|
+
* WebGLRenderer Capabilities.
|
|
3504
|
+
*
|
|
3505
|
+
* @typedef {Object} WebGLRenderer~Capabilities
|
|
3506
|
+
* @property {Function} getMaxAnisotropy - Returns the maximum available anisotropy.
|
|
3507
|
+
* @property {Function} getMaxPrecision - Returns the maximum available precision for vertex and fragment shaders.
|
|
3508
|
+
* @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor.
|
|
3509
|
+
* @property {number} maxAttributes - The number of shader attributes that can be used by the vertex shader.
|
|
3510
|
+
* @property {number} maxCubemapSize - Maximum height * width of cube map textures that a shader can use.
|
|
3511
|
+
* @property {number} maxFragmentUniforms - The number of uniforms that can be used by a fragment shader.
|
|
3512
|
+
* @property {number} maxSamples - Maximum number of samples in context of Multisample anti-aliasing (MSAA).
|
|
3513
|
+
* @property {number} maxTextures - The maximum number of textures that can be used by a shader.
|
|
3514
|
+
* @property {number} maxTextureSize - Maximum height * width of a texture that a shader use.
|
|
3515
|
+
* @property {number} maxVaryings - The number of varying vectors that can used by shaders.
|
|
3516
|
+
* @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
|
|
3517
|
+
* @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
|
|
3518
|
+
* @property {string} precision - The shader precision currently being used by the renderer.
|
|
3519
|
+
* @property {boolean} reverseDepthBuffer - `true` if `reverseDepthBuffer` was set to `true` in the constructor
|
|
3520
|
+
* and the rendering context supports `EXT_clip_control`.
|
|
3521
|
+
* @property {boolean} vertexTextures - `true` if vertex textures can be used.
|
|
3522
|
+
**/
|
|
3523
|
+
|
|
3524
|
+
/**
|
|
3525
|
+
* WebGLRenderer Info Memory
|
|
3526
|
+
*
|
|
3527
|
+
* @typedef {Object} WebGLRenderer~InfoMemory
|
|
3528
|
+
* @property {number} geometries - The number of active geometries.
|
|
3529
|
+
* @property {number} textures - The number of active textures.
|
|
3530
|
+
**/
|
|
3531
|
+
|
|
3532
|
+
/**
|
|
3533
|
+
* WebGLRenderer Info Render
|
|
3534
|
+
*
|
|
3535
|
+
* @typedef {Object} WebGLRenderer~InfoRender
|
|
3536
|
+
* @property {number} frame - The frame ID.
|
|
3537
|
+
* @property {number} calls - The number of draw calls per frame.
|
|
3538
|
+
* @property {number} triangles - The number of rendered triangles primitives per frame.
|
|
3539
|
+
* @property {number} points - The number of rendered points primitives per frame.
|
|
3540
|
+
* @property {number} lines - The number of rendered lines primitives per frame.
|
|
3541
|
+
**/
|
|
3542
|
+
|
|
3543
|
+
/**
|
|
3544
|
+
* WebGLRenderer Info
|
|
3545
|
+
*
|
|
3546
|
+
* @typedef {Object} WebGLRenderer~Info
|
|
3547
|
+
* @property {boolean} [autoReset=true] - Whether to automatically reset the info by the renderer or not.
|
|
3548
|
+
* @property {WebGLRenderer~InfoMemory} memory - Information about allocated objects.
|
|
3549
|
+
* @property {WebGLRenderer~InfoRender} render - Information about rendered objects.
|
|
3550
|
+
* @property {?Array<WebGLProgram>} programs - An array `WebGLProgram`s used for rendering.
|
|
3551
|
+
* @property {Function} reset - Resets the info object for the next frame.
|
|
3552
|
+
**/
|
|
3553
|
+
|
|
3554
|
+
/**
|
|
3555
|
+
* WebGLRenderer Shadow Map.
|
|
3556
|
+
*
|
|
3557
|
+
* @typedef {Object} WebGLRenderer~ShadowMap
|
|
3558
|
+
* @property {boolean} [enabled=false] - If set to `true`, use shadow maps in the scene.
|
|
3559
|
+
* @property {boolean} [autoUpdate=true] - Enables automatic updates to the shadows in the scene.
|
|
3560
|
+
* If you do not require dynamic lighting / shadows, you may set this to `false`.
|
|
3561
|
+
* @property {boolean} [needsUpdate=false] - When set to `true`, shadow maps in the scene
|
|
3562
|
+
* will be updated in the next `render` call.
|
|
3563
|
+
* @property {(BasicShadowMap|PCFShadowMap|PCFSoftShadowMap|VSMShadowMap)} [type=PCFShadowMap] - Defines the shadow map type.
|
|
3564
|
+
**/
|
|
3026
3565
|
|
|
3027
3566
|
export { WebGLRenderer };
|