@plastic-software/three 0.174.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +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/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/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 +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { ArrayCamera } from '../../cameras/ArrayCamera.js';
|
|
2
2
|
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
3
3
|
import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
|
|
4
|
+
import { Quaternion } from '../../math/Quaternion.js';
|
|
4
5
|
import { RAD2DEG } from '../../math/MathUtils.js';
|
|
5
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
7
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
8
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
9
|
import { WebXRController } from '../webxr/WebXRController.js';
|
|
9
|
-
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType } from '../../constants.js';
|
|
10
|
+
import { AddEquation, BackSide, CustomBlending, DepthFormat, DepthStencilFormat, FrontSide, RGBAFormat, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, ZeroFactor } from '../../constants.js';
|
|
10
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
11
12
|
import { XRRenderTarget } from './XRRenderTarget.js';
|
|
13
|
+
import { CylinderGeometry } from '../../geometries/CylinderGeometry.js';
|
|
14
|
+
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
15
|
+
import { MeshBasicMaterial } from '../../materials/MeshBasicMaterial.js';
|
|
16
|
+
import { Mesh } from '../../objects/Mesh.js';
|
|
12
17
|
|
|
13
18
|
const _cameraLPos = /*@__PURE__*/ new Vector3();
|
|
14
19
|
const _cameraRPos = /*@__PURE__*/ new Vector3();
|
|
@@ -146,6 +151,40 @@ class XRManager extends EventDispatcher {
|
|
|
146
151
|
*/
|
|
147
152
|
this._xrRenderTarget = null;
|
|
148
153
|
|
|
154
|
+
/**
|
|
155
|
+
* An array holding all the non-projection layers
|
|
156
|
+
*
|
|
157
|
+
* @private
|
|
158
|
+
* @type {Array<Object>}
|
|
159
|
+
* @default []
|
|
160
|
+
*/
|
|
161
|
+
this._layers = [];
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Whether the device has support for all layer types.
|
|
165
|
+
*
|
|
166
|
+
* @type {boolean}
|
|
167
|
+
* @default false
|
|
168
|
+
*/
|
|
169
|
+
this._supportsLayers = false;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Helper function to create native WebXR Layer.
|
|
173
|
+
*
|
|
174
|
+
* @private
|
|
175
|
+
* @type {Function}
|
|
176
|
+
*/
|
|
177
|
+
this._createXRLayer = createXRLayer.bind( this );
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* The current WebGL context.
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
* @type {?WebGL2RenderingContext}
|
|
184
|
+
* @default null
|
|
185
|
+
*/
|
|
186
|
+
this._gl = null;
|
|
187
|
+
|
|
149
188
|
/**
|
|
150
189
|
* The current animation context.
|
|
151
190
|
*
|
|
@@ -229,7 +268,7 @@ class XRManager extends EventDispatcher {
|
|
|
229
268
|
* The current XR reference space type.
|
|
230
269
|
*
|
|
231
270
|
* @private
|
|
232
|
-
* @type {
|
|
271
|
+
* @type {XRReferenceSpaceType}
|
|
233
272
|
* @default 'local-floor'
|
|
234
273
|
*/
|
|
235
274
|
this._referenceSpaceType = 'local-floor';
|
|
@@ -439,7 +478,7 @@ class XRManager extends EventDispatcher {
|
|
|
439
478
|
/**
|
|
440
479
|
* Returns the reference space type.
|
|
441
480
|
*
|
|
442
|
-
* @return {
|
|
481
|
+
* @return {XRReferenceSpaceType} The reference space type.
|
|
443
482
|
*/
|
|
444
483
|
getReferenceSpaceType() {
|
|
445
484
|
|
|
@@ -452,7 +491,7 @@ class XRManager extends EventDispatcher {
|
|
|
452
491
|
*
|
|
453
492
|
* This method can not be used during a XR session.
|
|
454
493
|
*
|
|
455
|
-
* @param {
|
|
494
|
+
* @param {XRReferenceSpaceType} type - The reference space type.
|
|
456
495
|
*/
|
|
457
496
|
setReferenceSpaceType( type ) {
|
|
458
497
|
|
|
@@ -502,7 +541,7 @@ class XRManager extends EventDispatcher {
|
|
|
502
541
|
/**
|
|
503
542
|
* Returns the environment blend mode from the current XR session.
|
|
504
543
|
*
|
|
505
|
-
* @return {
|
|
544
|
+
* @return {'opaque'|'additive'|'alpha-blend'|undefined} The environment blend mode. Returns `undefined` when used outside of a XR session.
|
|
506
545
|
*/
|
|
507
546
|
getEnvironmentBlendMode() {
|
|
508
547
|
|
|
@@ -525,6 +564,190 @@ class XRManager extends EventDispatcher {
|
|
|
525
564
|
|
|
526
565
|
}
|
|
527
566
|
|
|
567
|
+
createQuadLayer( width, height, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
|
|
568
|
+
|
|
569
|
+
const geometry = new PlaneGeometry( width, height );
|
|
570
|
+
const renderTarget = new XRRenderTarget(
|
|
571
|
+
pixelwidth,
|
|
572
|
+
pixelheight,
|
|
573
|
+
{
|
|
574
|
+
format: RGBAFormat,
|
|
575
|
+
type: UnsignedByteType,
|
|
576
|
+
depthTexture: new DepthTexture(
|
|
577
|
+
pixelwidth,
|
|
578
|
+
pixelheight,
|
|
579
|
+
attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
|
|
580
|
+
undefined,
|
|
581
|
+
undefined,
|
|
582
|
+
undefined,
|
|
583
|
+
undefined,
|
|
584
|
+
undefined,
|
|
585
|
+
undefined,
|
|
586
|
+
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
587
|
+
),
|
|
588
|
+
stencilBuffer: attributes.stencil,
|
|
589
|
+
resolveDepthBuffer: false,
|
|
590
|
+
resolveStencilBuffer: false
|
|
591
|
+
} );
|
|
592
|
+
|
|
593
|
+
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
594
|
+
material.map = renderTarget.texture;
|
|
595
|
+
material.map.offset.y = 1;
|
|
596
|
+
material.map.repeat.y = - 1;
|
|
597
|
+
const plane = new Mesh( geometry, material );
|
|
598
|
+
plane.position.copy( translation );
|
|
599
|
+
plane.quaternion.copy( quaternion );
|
|
600
|
+
|
|
601
|
+
const layer = {
|
|
602
|
+
type: 'quad',
|
|
603
|
+
width: width,
|
|
604
|
+
height: height,
|
|
605
|
+
translation: translation,
|
|
606
|
+
quaternion: quaternion,
|
|
607
|
+
pixelwidth: pixelwidth,
|
|
608
|
+
pixelheight: pixelheight,
|
|
609
|
+
plane: plane,
|
|
610
|
+
material: material,
|
|
611
|
+
rendercall: rendercall,
|
|
612
|
+
renderTarget: renderTarget };
|
|
613
|
+
|
|
614
|
+
this._layers.push( layer );
|
|
615
|
+
|
|
616
|
+
if ( this._session !== null ) {
|
|
617
|
+
|
|
618
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
619
|
+
layer.plane.material.blending = CustomBlending;
|
|
620
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
621
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
622
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
623
|
+
|
|
624
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
625
|
+
|
|
626
|
+
const xrlayers = this._session.renderState.layers;
|
|
627
|
+
xrlayers.unshift( layer.xrlayer );
|
|
628
|
+
this._session.updateRenderState( { layers: xrlayers } );
|
|
629
|
+
|
|
630
|
+
} else {
|
|
631
|
+
|
|
632
|
+
renderTarget.isXRRenderTarget = false;
|
|
633
|
+
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
return plane;
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
createCylinderLayer( radius, centralAngle, aspectratio, translation, quaternion, pixelwidth, pixelheight, rendercall, attributes = [] ) {
|
|
641
|
+
|
|
642
|
+
const geometry = new CylinderGeometry( radius, radius, radius * centralAngle / aspectratio, 64, 64, true, Math.PI - centralAngle / 2, centralAngle );
|
|
643
|
+
const renderTarget = new XRRenderTarget(
|
|
644
|
+
pixelwidth,
|
|
645
|
+
pixelheight,
|
|
646
|
+
{
|
|
647
|
+
format: RGBAFormat,
|
|
648
|
+
type: UnsignedByteType,
|
|
649
|
+
depthTexture: new DepthTexture(
|
|
650
|
+
pixelwidth,
|
|
651
|
+
pixelheight,
|
|
652
|
+
attributes.stencil ? UnsignedInt248Type : UnsignedIntType,
|
|
653
|
+
undefined,
|
|
654
|
+
undefined,
|
|
655
|
+
undefined,
|
|
656
|
+
undefined,
|
|
657
|
+
undefined,
|
|
658
|
+
undefined,
|
|
659
|
+
attributes.stencil ? DepthStencilFormat : DepthFormat
|
|
660
|
+
),
|
|
661
|
+
stencilBuffer: attributes.stencil,
|
|
662
|
+
resolveDepthBuffer: false,
|
|
663
|
+
resolveStencilBuffer: false
|
|
664
|
+
} );
|
|
665
|
+
|
|
666
|
+
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
667
|
+
material.map = renderTarget.texture;
|
|
668
|
+
material.map.offset.y = 1;
|
|
669
|
+
material.map.repeat.y = - 1;
|
|
670
|
+
const plane = new Mesh( geometry, material );
|
|
671
|
+
plane.position.copy( translation );
|
|
672
|
+
plane.quaternion.copy( quaternion );
|
|
673
|
+
|
|
674
|
+
const layer = {
|
|
675
|
+
type: 'cylinder',
|
|
676
|
+
radius: radius,
|
|
677
|
+
centralAngle: centralAngle,
|
|
678
|
+
aspectratio: aspectratio,
|
|
679
|
+
translation: translation,
|
|
680
|
+
quaternion: quaternion,
|
|
681
|
+
pixelwidth: pixelwidth,
|
|
682
|
+
pixelheight: pixelheight,
|
|
683
|
+
plane: plane,
|
|
684
|
+
material: material,
|
|
685
|
+
rendercall: rendercall,
|
|
686
|
+
renderTarget: renderTarget };
|
|
687
|
+
|
|
688
|
+
this._layers.push( layer );
|
|
689
|
+
|
|
690
|
+
if ( this._session !== null ) {
|
|
691
|
+
|
|
692
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
693
|
+
layer.plane.material.blending = CustomBlending;
|
|
694
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
695
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
696
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
697
|
+
|
|
698
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
699
|
+
|
|
700
|
+
const xrlayers = this._session.renderState.layers;
|
|
701
|
+
xrlayers.unshift( layer.xrlayer );
|
|
702
|
+
this._session.updateRenderState( { layers: xrlayers } );
|
|
703
|
+
|
|
704
|
+
} else {
|
|
705
|
+
|
|
706
|
+
renderTarget.isXRRenderTarget = false;
|
|
707
|
+
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return plane;
|
|
711
|
+
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
renderLayers( ) {
|
|
715
|
+
|
|
716
|
+
const translationObject = new Vector3();
|
|
717
|
+
const quaternionObject = new Quaternion();
|
|
718
|
+
|
|
719
|
+
const wasPresenting = this.isPresenting;
|
|
720
|
+
this.isPresenting = false;
|
|
721
|
+
|
|
722
|
+
for ( const layer of this._layers ) {
|
|
723
|
+
|
|
724
|
+
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
725
|
+
layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
726
|
+
layer.renderTarget.autoAllocateDepthBuffer = ! layer.renderTarget.isXRRenderTarget;
|
|
727
|
+
|
|
728
|
+
if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
|
|
729
|
+
|
|
730
|
+
layer.xrlayer.transform = new XRRigidTransform( layer.plane.getWorldPosition( translationObject ), layer.plane.getWorldQuaternion( quaternionObject ) );
|
|
731
|
+
|
|
732
|
+
const glSubImage = this._glBinding.getSubImage( layer.xrlayer, this._xrFrame );
|
|
733
|
+
this._renderer.backend.setXRRenderTargetTextures(
|
|
734
|
+
layer.renderTarget,
|
|
735
|
+
glSubImage.colorTexture,
|
|
736
|
+
glSubImage.depthStencilTexture );
|
|
737
|
+
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
this._renderer.setRenderTarget( layer.renderTarget );
|
|
741
|
+
layer.rendercall();
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
this.isPresenting = wasPresenting;
|
|
746
|
+
this._renderer.setRenderTarget( null );
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
|
|
528
751
|
/**
|
|
529
752
|
* Returns the current XR session.
|
|
530
753
|
*
|
|
@@ -550,7 +773,9 @@ class XRManager extends EventDispatcher {
|
|
|
550
773
|
const renderer = this._renderer;
|
|
551
774
|
const backend = renderer.backend;
|
|
552
775
|
|
|
553
|
-
|
|
776
|
+
this._gl = renderer.getContext();
|
|
777
|
+
const gl = this._gl;
|
|
778
|
+
const attributes = gl.getContextAttributes();
|
|
554
779
|
|
|
555
780
|
this._session = session;
|
|
556
781
|
|
|
@@ -602,12 +827,11 @@ class XRManager extends EventDispatcher {
|
|
|
602
827
|
|
|
603
828
|
const glBinding = new XRWebGLBinding( session, gl );
|
|
604
829
|
const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
830
|
+
const layersArray = [ glProjLayer ];
|
|
605
831
|
|
|
606
832
|
this._glBinding = glBinding;
|
|
607
833
|
this._glProjLayer = glProjLayer;
|
|
608
834
|
|
|
609
|
-
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
610
|
-
|
|
611
835
|
renderer.setPixelRatio( 1 );
|
|
612
836
|
renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
|
|
613
837
|
|
|
@@ -620,12 +844,39 @@ class XRManager extends EventDispatcher {
|
|
|
620
844
|
colorSpace: renderer.outputColorSpace,
|
|
621
845
|
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
622
846
|
stencilBuffer: renderer.stencil,
|
|
847
|
+
samples: attributes.antialias ? 4 : 0,
|
|
623
848
|
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
624
849
|
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
625
850
|
} );
|
|
626
851
|
|
|
627
852
|
this._xrRenderTarget.hasExternalTextures = true;
|
|
628
853
|
|
|
854
|
+
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
855
|
+
|
|
856
|
+
this._supportsLayers = session.enabledFeatures.includes( 'layers' );
|
|
857
|
+
|
|
858
|
+
if ( this._supportsLayers ) {
|
|
859
|
+
|
|
860
|
+
// switch layers to native
|
|
861
|
+
for ( const layer of this._layers ) {
|
|
862
|
+
|
|
863
|
+
// change material so it "punches" out a hole to show the XR Layer.
|
|
864
|
+
layer.plane.material = new MeshBasicMaterial( { color: 0xffffff, side: layer.type === 'cylinder' ? BackSide : FrontSide } );
|
|
865
|
+
layer.plane.material.blending = CustomBlending;
|
|
866
|
+
layer.plane.material.blendEquation = AddEquation;
|
|
867
|
+
layer.plane.material.blendSrc = ZeroFactor;
|
|
868
|
+
layer.plane.material.blendDst = ZeroFactor;
|
|
869
|
+
|
|
870
|
+
layer.xrlayer = this._createXRLayer( layer );
|
|
871
|
+
|
|
872
|
+
layersArray.unshift( layer.xrlayer );
|
|
873
|
+
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
session.updateRenderState( { layers: layersArray } );
|
|
879
|
+
|
|
629
880
|
} else {
|
|
630
881
|
|
|
631
882
|
// fallback to XRWebGLLayer
|
|
@@ -665,8 +916,6 @@ class XRManager extends EventDispatcher {
|
|
|
665
916
|
|
|
666
917
|
this.setFoveation( this.getFoveation() );
|
|
667
918
|
|
|
668
|
-
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
669
|
-
|
|
670
919
|
renderer._animation.setAnimationLoop( this._onAnimationFrame );
|
|
671
920
|
renderer._animation.setContext( session );
|
|
672
921
|
renderer._animation.start();
|
|
@@ -965,10 +1214,50 @@ function onSessionEnd() {
|
|
|
965
1214
|
|
|
966
1215
|
renderer.backend.setXRTarget( null );
|
|
967
1216
|
renderer.setOutputRenderTarget( null );
|
|
1217
|
+
renderer.setRenderTarget( null );
|
|
968
1218
|
|
|
969
1219
|
this._session = null;
|
|
970
1220
|
this._xrRenderTarget = null;
|
|
971
1221
|
|
|
1222
|
+
// switch layers back to emulated
|
|
1223
|
+
if ( this._supportsLayers === true ) {
|
|
1224
|
+
|
|
1225
|
+
for ( const layer of this._layers ) {
|
|
1226
|
+
|
|
1227
|
+
// Recreate layer render target to reset state
|
|
1228
|
+
layer.renderTarget = new XRRenderTarget(
|
|
1229
|
+
layer.pixelwidth,
|
|
1230
|
+
layer.pixelheight,
|
|
1231
|
+
{
|
|
1232
|
+
format: RGBAFormat,
|
|
1233
|
+
type: UnsignedByteType,
|
|
1234
|
+
depthTexture: new DepthTexture(
|
|
1235
|
+
layer.pixelwidth,
|
|
1236
|
+
layer.pixelheight,
|
|
1237
|
+
layer.stencilBuffer ? UnsignedInt248Type : UnsignedIntType,
|
|
1238
|
+
undefined,
|
|
1239
|
+
undefined,
|
|
1240
|
+
undefined,
|
|
1241
|
+
undefined,
|
|
1242
|
+
undefined,
|
|
1243
|
+
undefined,
|
|
1244
|
+
layer.stencilBuffer ? DepthStencilFormat : DepthFormat
|
|
1245
|
+
),
|
|
1246
|
+
stencilBuffer: layer.stencilBuffer,
|
|
1247
|
+
resolveDepthBuffer: false,
|
|
1248
|
+
resolveStencilBuffer: false
|
|
1249
|
+
} );
|
|
1250
|
+
|
|
1251
|
+
layer.renderTarget.isXRRenderTarget = false;
|
|
1252
|
+
|
|
1253
|
+
layer.plane.material = layer.material;
|
|
1254
|
+
layer.material.map = layer.renderTarget.texture;
|
|
1255
|
+
delete layer.xrlayer;
|
|
1256
|
+
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
}
|
|
1260
|
+
|
|
972
1261
|
//
|
|
973
1262
|
|
|
974
1263
|
this.isPresenting = false;
|
|
@@ -1055,6 +1344,40 @@ function onInputSourcesChange( event ) {
|
|
|
1055
1344
|
|
|
1056
1345
|
}
|
|
1057
1346
|
|
|
1347
|
+
// Creation method for native WebXR layers
|
|
1348
|
+
function createXRLayer( layer ) {
|
|
1349
|
+
|
|
1350
|
+
if ( layer.type === 'quad' ) {
|
|
1351
|
+
|
|
1352
|
+
return this._glBinding.createQuadLayer( {
|
|
1353
|
+
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1354
|
+
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1355
|
+
width: layer.width / 2,
|
|
1356
|
+
height: layer.height / 2,
|
|
1357
|
+
space: this._referenceSpace,
|
|
1358
|
+
viewPixelWidth: layer.pixelwidth,
|
|
1359
|
+
viewPixelHeight: layer.pixelheight
|
|
1360
|
+
} );
|
|
1361
|
+
|
|
1362
|
+
} else {
|
|
1363
|
+
|
|
1364
|
+
return this._glBinding.createCylinderLayer( {
|
|
1365
|
+
transform: new XRRigidTransform( layer.translation, layer.quaternion ),
|
|
1366
|
+
depthFormat: this._gl.DEPTH_COMPONENT,
|
|
1367
|
+
radius: layer.radius,
|
|
1368
|
+
centralAngle: layer.centralAngle,
|
|
1369
|
+
aspectRatio: layer.aspectRatio,
|
|
1370
|
+
space: this._referenceSpace,
|
|
1371
|
+
viewPixelWidth: layer.pixelwidth,
|
|
1372
|
+
viewPixelHeight: layer.pixelheight
|
|
1373
|
+
} );
|
|
1374
|
+
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
// Animation Loop
|
|
1380
|
+
|
|
1058
1381
|
function onAnimationFrame( time, frame ) {
|
|
1059
1382
|
|
|
1060
1383
|
if ( frame === undefined ) return;
|
|
@@ -100,6 +100,11 @@ const _outputDirection = /*@__PURE__*/ vec3( _direction.x, _direction.y, _direct
|
|
|
100
100
|
*/
|
|
101
101
|
class PMREMGenerator {
|
|
102
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Constructs a new PMREM generator.
|
|
105
|
+
*
|
|
106
|
+
* @param {Renderer} renderer - The renderer.
|
|
107
|
+
*/
|
|
103
108
|
constructor( renderer ) {
|
|
104
109
|
|
|
105
110
|
this._renderer = renderer;
|
|
@@ -641,6 +646,7 @@ class PMREMGenerator {
|
|
|
641
646
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
642
647
|
* accurate at the poles, but still does a decent job.
|
|
643
648
|
*
|
|
649
|
+
* @private
|
|
644
650
|
* @param {RenderTarget} cubeUVRenderTarget - The cubemap render target.
|
|
645
651
|
* @param {number} lodIn - The input level-of-detail.
|
|
646
652
|
* @param {number} lodOut - The output level-of-detail.
|
|
@@ -14,9 +14,9 @@ class NodeBuilderState {
|
|
|
14
14
|
/**
|
|
15
15
|
* Constructs a new node builder state.
|
|
16
16
|
*
|
|
17
|
-
* @param {
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {
|
|
17
|
+
* @param {string} vertexShader - The native vertex shader code.
|
|
18
|
+
* @param {string} fragmentShader - The native fragment shader code.
|
|
19
|
+
* @param {string} computeShader - The native compute shader code.
|
|
20
20
|
* @param {Array<NodeAttribute>} nodeAttributes - An array of node attributes.
|
|
21
21
|
* @param {Array<BindGroup>} bindings - An array of bind groups.
|
|
22
22
|
* @param {Array<Node>} updateNodes - An array of nodes that implement their `update()` method.
|
|
@@ -2,10 +2,7 @@ import { Color } from '../../math/Color.js';
|
|
|
2
2
|
import { Vector2 } from '../../math/Vector2.js';
|
|
3
3
|
import { Matrix3 } from '../../math/Matrix3.js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
* Uniforms library for shared webgl shaders
|
|
7
|
-
*/
|
|
8
|
-
|
|
5
|
+
// Uniforms library for shared webgl shaders
|
|
9
6
|
const UniformsLib = {
|
|
10
7
|
|
|
11
8
|
common: {
|
|
@@ -101,7 +101,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
101
101
|
side: BackSide,
|
|
102
102
|
depthTest: false,
|
|
103
103
|
depthWrite: false,
|
|
104
|
-
fog: false
|
|
104
|
+
fog: false,
|
|
105
|
+
allowOverride: false
|
|
105
106
|
} )
|
|
106
107
|
);
|
|
107
108
|
|
|
@@ -180,7 +181,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
180
181
|
side: FrontSide,
|
|
181
182
|
depthTest: false,
|
|
182
183
|
depthWrite: false,
|
|
183
|
-
fog: false
|
|
184
|
+
fog: false,
|
|
185
|
+
allowOverride: false
|
|
184
186
|
} )
|
|
185
187
|
);
|
|
186
188
|
|
|
@@ -78,17 +78,17 @@ function WebGLState( gl, extensions ) {
|
|
|
78
78
|
function DepthBuffer() {
|
|
79
79
|
|
|
80
80
|
let locked = false;
|
|
81
|
-
let reversed = false;
|
|
82
81
|
|
|
82
|
+
let currentReversed = false;
|
|
83
83
|
let currentDepthMask = null;
|
|
84
84
|
let currentDepthFunc = null;
|
|
85
85
|
let currentDepthClear = null;
|
|
86
86
|
|
|
87
87
|
return {
|
|
88
88
|
|
|
89
|
-
setReversed: function (
|
|
89
|
+
setReversed: function ( reversed ) {
|
|
90
90
|
|
|
91
|
-
if (
|
|
91
|
+
if ( currentReversed !== reversed ) {
|
|
92
92
|
|
|
93
93
|
const ext = extensions.get( 'EXT_clip_control' );
|
|
94
94
|
|
|
@@ -102,19 +102,19 @@ function WebGLState( gl, extensions ) {
|
|
|
102
102
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
currentReversed = reversed;
|
|
106
|
+
|
|
105
107
|
const oldDepth = currentDepthClear;
|
|
106
108
|
currentDepthClear = null;
|
|
107
109
|
this.setClear( oldDepth );
|
|
108
110
|
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
reversed = value;
|
|
112
|
-
|
|
113
113
|
},
|
|
114
114
|
|
|
115
115
|
getReversed: function () {
|
|
116
116
|
|
|
117
|
-
return
|
|
117
|
+
return currentReversed;
|
|
118
118
|
|
|
119
119
|
},
|
|
120
120
|
|
|
@@ -145,7 +145,7 @@ function WebGLState( gl, extensions ) {
|
|
|
145
145
|
|
|
146
146
|
setFunc: function ( depthFunc ) {
|
|
147
147
|
|
|
148
|
-
if (
|
|
148
|
+
if ( currentReversed ) depthFunc = reversedFuncs[ depthFunc ];
|
|
149
149
|
|
|
150
150
|
if ( currentDepthFunc !== depthFunc ) {
|
|
151
151
|
|
|
@@ -213,7 +213,7 @@ function WebGLState( gl, extensions ) {
|
|
|
213
213
|
|
|
214
214
|
if ( currentDepthClear !== depth ) {
|
|
215
215
|
|
|
216
|
-
if (
|
|
216
|
+
if ( currentReversed ) {
|
|
217
217
|
|
|
218
218
|
depth = 1 - depth;
|
|
219
219
|
|
|
@@ -233,7 +233,7 @@ function WebGLState( gl, extensions ) {
|
|
|
233
233
|
currentDepthMask = null;
|
|
234
234
|
currentDepthFunc = null;
|
|
235
235
|
currentDepthClear = null;
|
|
236
|
-
|
|
236
|
+
currentReversed = false;
|
|
237
237
|
|
|
238
238
|
}
|
|
239
239
|
|
|
@@ -23,18 +23,24 @@ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
|
23
23
|
*/
|
|
24
24
|
class WebGLBackend extends Backend {
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* WebGLBackend options.
|
|
28
|
+
*
|
|
29
|
+
* @typedef {Object} WebGLBackend~Options
|
|
30
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
36
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
+
* @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
|
|
38
|
+
*/
|
|
39
|
+
|
|
26
40
|
/**
|
|
27
41
|
* Constructs a new WebGPU backend.
|
|
28
42
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
34
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
35
|
-
* @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
36
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
37
|
-
* @param {WebGL2RenderingContext} [parameters.context=undefined] - A WebGL 2 rendering context.
|
|
43
|
+
* @param {WebGLBackend~Options} [parameters] - The configuration parameter.
|
|
38
44
|
*/
|
|
39
45
|
constructor( parameters = {} ) {
|
|
40
46
|
|
|
@@ -161,14 +167,6 @@ class WebGLBackend extends Backend {
|
|
|
161
167
|
*/
|
|
162
168
|
this.parallel = null;
|
|
163
169
|
|
|
164
|
-
/**
|
|
165
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
166
|
-
*
|
|
167
|
-
* @type {boolean}
|
|
168
|
-
* @default false
|
|
169
|
-
*/
|
|
170
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
171
|
-
|
|
172
170
|
/**
|
|
173
171
|
* A reference to the current render context.
|
|
174
172
|
*
|
|
@@ -360,16 +358,16 @@ class WebGLBackend extends Backend {
|
|
|
360
358
|
|
|
361
359
|
this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
|
|
362
360
|
|
|
363
|
-
renderTarget.autoAllocateDepthBuffer = false;
|
|
364
|
-
|
|
365
361
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
366
362
|
// are midframe flushes and an external depth texture.
|
|
367
|
-
if ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
|
|
363
|
+
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.autoAllocateDepthBuffer ) {
|
|
368
364
|
|
|
369
365
|
console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
370
366
|
|
|
371
367
|
}
|
|
372
368
|
|
|
369
|
+
renderTarget.autoAllocateDepthBuffer = false;
|
|
370
|
+
|
|
373
371
|
}
|
|
374
372
|
|
|
375
373
|
}
|
|
@@ -1886,13 +1884,14 @@ class WebGLBackend extends Backend {
|
|
|
1886
1884
|
*
|
|
1887
1885
|
* @param {Texture} srcTexture - The source texture.
|
|
1888
1886
|
* @param {Texture} dstTexture - The destination texture.
|
|
1889
|
-
* @param {?
|
|
1887
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1890
1888
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1891
|
-
* @param {number} [
|
|
1889
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
1890
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1892
1891
|
*/
|
|
1893
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1892
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1894
1893
|
|
|
1895
|
-
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition,
|
|
1894
|
+
this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
|
|
1896
1895
|
|
|
1897
1896
|
}
|
|
1898
1897
|
|
|
@@ -1999,7 +1998,7 @@ class WebGLBackend extends Backend {
|
|
|
1999
1998
|
|
|
2000
1999
|
} else {
|
|
2001
2000
|
|
|
2002
|
-
if ( useMultisampledRTT ) {
|
|
2001
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
2003
2002
|
|
|
2004
2003
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2005
2004
|
|
|
@@ -2032,7 +2031,7 @@ class WebGLBackend extends Backend {
|
|
|
2032
2031
|
textureData.renderTarget = descriptor.renderTarget;
|
|
2033
2032
|
textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
|
|
2034
2033
|
|
|
2035
|
-
if ( useMultisampledRTT ) {
|
|
2034
|
+
if ( hasExternalTextures && useMultisampledRTT ) {
|
|
2036
2035
|
|
|
2037
2036
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2038
2037
|
|