@plastic-software/three 0.175.13 → 0.178.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/README.md +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +18 -4
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +49 -35
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +12 -10
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +2 -1
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +7 -0
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/Timer.js +2 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +1 -0
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +20 -17
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +5 -2
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +4 -1
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +4 -3
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +16 -4
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -13,8 +13,11 @@ import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
|
13
13
|
|
|
14
14
|
import { warnOnce } from '../../utils.js';
|
|
15
15
|
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
16
|
+
import { Vector2 } from '../../math/Vector2.js';
|
|
16
17
|
import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
17
18
|
|
|
19
|
+
const _drawingBufferSize = /*@__PURE__*/ new Vector2();
|
|
20
|
+
|
|
18
21
|
/**
|
|
19
22
|
* A backend implementation targeting WebGL 2.
|
|
20
23
|
*
|
|
@@ -264,6 +267,7 @@ class WebGLBackend extends Backend {
|
|
|
264
267
|
this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
265
268
|
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
266
269
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
270
|
+
this.extensions.get( 'OVR_multiview2' );
|
|
267
271
|
|
|
268
272
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
269
273
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
@@ -360,13 +364,13 @@ class WebGLBackend extends Backend {
|
|
|
360
364
|
|
|
361
365
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
362
366
|
// are midframe flushes and an external depth texture.
|
|
363
|
-
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.
|
|
367
|
+
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget._autoAllocateDepthBuffer === true && renderTarget.multiview === false ) {
|
|
364
368
|
|
|
365
369
|
console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
366
370
|
|
|
367
371
|
}
|
|
368
372
|
|
|
369
|
-
renderTarget.
|
|
373
|
+
renderTarget._autoAllocateDepthBuffer = false;
|
|
370
374
|
|
|
371
375
|
}
|
|
372
376
|
|
|
@@ -440,7 +444,7 @@ class WebGLBackend extends Backend {
|
|
|
440
444
|
*/
|
|
441
445
|
beginRender( renderContext ) {
|
|
442
446
|
|
|
443
|
-
const { state
|
|
447
|
+
const { state } = this;
|
|
444
448
|
const renderContextData = this.get( renderContext );
|
|
445
449
|
|
|
446
450
|
//
|
|
@@ -451,7 +455,8 @@ class WebGLBackend extends Backend {
|
|
|
451
455
|
|
|
452
456
|
} else {
|
|
453
457
|
|
|
454
|
-
|
|
458
|
+
const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
|
|
459
|
+
state.viewport( 0, 0, width, height );
|
|
455
460
|
|
|
456
461
|
}
|
|
457
462
|
|
|
@@ -471,10 +476,8 @@ class WebGLBackend extends Backend {
|
|
|
471
476
|
this._currentContext = renderContext;
|
|
472
477
|
|
|
473
478
|
this._setFramebuffer( renderContext );
|
|
474
|
-
|
|
475
479
|
this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
|
|
476
480
|
|
|
477
|
-
|
|
478
481
|
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
479
482
|
|
|
480
483
|
if ( occlusionQueryCount > 0 ) {
|
|
@@ -540,29 +543,60 @@ class WebGLBackend extends Backend {
|
|
|
540
543
|
}
|
|
541
544
|
|
|
542
545
|
this._currentContext = previousContext;
|
|
546
|
+
const renderTarget = renderContext.renderTarget;
|
|
543
547
|
|
|
544
|
-
if ( renderContext.textures !== null &&
|
|
548
|
+
if ( renderContext.textures !== null && renderTarget ) {
|
|
545
549
|
|
|
546
|
-
const renderTargetContextData = this.get(
|
|
547
|
-
|
|
548
|
-
const { samples } = renderContext.renderTarget;
|
|
550
|
+
const renderTargetContextData = this.get( renderTarget );
|
|
549
551
|
|
|
550
|
-
if ( samples > 0 && this.
|
|
552
|
+
if ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {
|
|
551
553
|
|
|
552
554
|
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
553
555
|
|
|
554
|
-
|
|
556
|
+
let mask = gl.COLOR_BUFFER_BIT;
|
|
557
|
+
|
|
558
|
+
if ( renderTarget.resolveDepthBuffer ) {
|
|
559
|
+
|
|
560
|
+
if ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;
|
|
561
|
+
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;
|
|
562
|
+
|
|
563
|
+
}
|
|
555
564
|
|
|
556
565
|
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
566
|
+
const msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;
|
|
557
567
|
|
|
558
568
|
const textures = renderContext.textures;
|
|
569
|
+
const isMRT = textures.length > 1;
|
|
559
570
|
|
|
560
571
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
|
|
561
572
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
562
573
|
|
|
574
|
+
if ( isMRT ) {
|
|
575
|
+
|
|
576
|
+
// blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,
|
|
577
|
+
// the engine temporarily removes all attachments and then configures each attachment for the resolve.
|
|
578
|
+
|
|
579
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
580
|
+
|
|
581
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );
|
|
582
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );
|
|
583
|
+
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
}
|
|
587
|
+
|
|
563
588
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
564
589
|
|
|
565
|
-
|
|
590
|
+
if ( isMRT ) {
|
|
591
|
+
|
|
592
|
+
// configure attachment for resolve
|
|
593
|
+
|
|
594
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
595
|
+
|
|
596
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
597
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );
|
|
598
|
+
|
|
599
|
+
}
|
|
566
600
|
|
|
567
601
|
if ( renderContext.scissor ) {
|
|
568
602
|
|
|
@@ -572,28 +606,42 @@ class WebGLBackend extends Backend {
|
|
|
572
606
|
|
|
573
607
|
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
574
608
|
|
|
575
|
-
|
|
609
|
+
} else {
|
|
576
610
|
|
|
577
|
-
|
|
611
|
+
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
578
612
|
|
|
579
|
-
|
|
613
|
+
}
|
|
580
614
|
|
|
581
|
-
|
|
615
|
+
}
|
|
582
616
|
|
|
583
|
-
|
|
617
|
+
if ( isMRT ) {
|
|
584
618
|
|
|
585
|
-
|
|
619
|
+
// restore attachments
|
|
586
620
|
|
|
587
|
-
|
|
621
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
588
622
|
|
|
589
|
-
}
|
|
623
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
624
|
+
|
|
625
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
626
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );
|
|
590
627
|
|
|
591
628
|
}
|
|
592
629
|
|
|
593
630
|
}
|
|
594
631
|
|
|
595
|
-
|
|
632
|
+
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
633
|
+
|
|
634
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
635
|
+
|
|
636
|
+
}
|
|
596
637
|
|
|
638
|
+
} else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {
|
|
639
|
+
|
|
640
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
641
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
642
|
+
gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );
|
|
643
|
+
|
|
644
|
+
}
|
|
597
645
|
|
|
598
646
|
}
|
|
599
647
|
|
|
@@ -607,7 +655,8 @@ class WebGLBackend extends Backend {
|
|
|
607
655
|
|
|
608
656
|
} else {
|
|
609
657
|
|
|
610
|
-
|
|
658
|
+
const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
|
|
659
|
+
state.viewport( 0, 0, width, height );
|
|
611
660
|
|
|
612
661
|
}
|
|
613
662
|
|
|
@@ -887,7 +936,7 @@ class WebGLBackend extends Backend {
|
|
|
887
936
|
|
|
888
937
|
if ( vaoGPU === undefined ) {
|
|
889
938
|
|
|
890
|
-
this._createVao( attributes );
|
|
939
|
+
this.vaoCache[ vaoKey ] = this._createVao( attributes );
|
|
891
940
|
|
|
892
941
|
} else {
|
|
893
942
|
|
|
@@ -923,7 +972,7 @@ class WebGLBackend extends Backend {
|
|
|
923
972
|
|
|
924
973
|
const dualAttributeData = transformBuffers[ i ];
|
|
925
974
|
|
|
926
|
-
if ( dualAttributeData.pbo ) {
|
|
975
|
+
if ( dualAttributeData.pbo && this.has( dualAttributeData.pbo ) ) {
|
|
927
976
|
|
|
928
977
|
this.textureUtils.copyBufferToTexture( dualAttributeData.transformBuffer, dualAttributeData.pbo );
|
|
929
978
|
|
|
@@ -960,6 +1009,20 @@ class WebGLBackend extends Backend {
|
|
|
960
1009
|
|
|
961
1010
|
}
|
|
962
1011
|
|
|
1012
|
+
/**
|
|
1013
|
+
* Internal to determine if the current render target is a render target array with depth 2D array texture.
|
|
1014
|
+
*
|
|
1015
|
+
* @param {RenderContext} renderContext - The render context.
|
|
1016
|
+
* @return {boolean} Whether the render target is a render target array with depth 2D array texture.
|
|
1017
|
+
*
|
|
1018
|
+
* @private
|
|
1019
|
+
*/
|
|
1020
|
+
_isRenderCameraDepthArray( renderContext ) {
|
|
1021
|
+
|
|
1022
|
+
return renderContext.depthTexture && renderContext.depthTexture.isArrayTexture && renderContext.camera.isArrayCamera;
|
|
1023
|
+
|
|
1024
|
+
}
|
|
1025
|
+
|
|
963
1026
|
/**
|
|
964
1027
|
* Executes a draw command for the given render object.
|
|
965
1028
|
*
|
|
@@ -991,28 +1054,23 @@ class WebGLBackend extends Backend {
|
|
|
991
1054
|
|
|
992
1055
|
// vertex state
|
|
993
1056
|
|
|
994
|
-
const
|
|
1057
|
+
const attributes = renderObject.getAttributes();
|
|
1058
|
+
const attributesData = this.get( attributes );
|
|
995
1059
|
|
|
996
|
-
let vaoGPU =
|
|
1060
|
+
let vaoGPU = attributesData.vaoGPU;
|
|
997
1061
|
|
|
998
|
-
if ( vaoGPU === undefined
|
|
1062
|
+
if ( vaoGPU === undefined ) {
|
|
999
1063
|
|
|
1000
|
-
const vaoKey = this._getVaoKey(
|
|
1064
|
+
const vaoKey = this._getVaoKey( attributes );
|
|
1001
1065
|
|
|
1002
1066
|
vaoGPU = this.vaoCache[ vaoKey ];
|
|
1003
1067
|
|
|
1004
1068
|
if ( vaoGPU === undefined ) {
|
|
1005
1069
|
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
( { vaoGPU, staticVao } = this._createVao( renderObject.getAttributes() ) );
|
|
1070
|
+
vaoGPU = this._createVao( attributes );
|
|
1009
1071
|
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
renderObjectData.staticVao = vaoGPU;
|
|
1013
|
-
renderObjectData.geometryId = renderObject.geometry.id;
|
|
1014
|
-
|
|
1015
|
-
}
|
|
1072
|
+
this.vaoCache[ vaoKey ] = vaoGPU;
|
|
1073
|
+
attributesData.vaoGPU = vaoGPU;
|
|
1016
1074
|
|
|
1017
1075
|
}
|
|
1018
1076
|
|
|
@@ -1128,7 +1186,7 @@ class WebGLBackend extends Backend {
|
|
|
1128
1186
|
|
|
1129
1187
|
};
|
|
1130
1188
|
|
|
1131
|
-
if ( renderObject.camera.isArrayCamera && renderObject.camera.cameras.length > 0 ) {
|
|
1189
|
+
if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
|
|
1132
1190
|
|
|
1133
1191
|
const cameraData = this.get( renderObject.camera );
|
|
1134
1192
|
const cameras = renderObject.camera.cameras;
|
|
@@ -1159,25 +1217,71 @@ class WebGLBackend extends Backend {
|
|
|
1159
1217
|
const cameraIndexData = this.get( cameraIndex );
|
|
1160
1218
|
const pixelRatio = this.renderer.getPixelRatio();
|
|
1161
1219
|
|
|
1220
|
+
const renderTarget = this._currentContext.renderTarget;
|
|
1221
|
+
const isRenderCameraDepthArray = this._isRenderCameraDepthArray( this._currentContext );
|
|
1222
|
+
const prevActiveCubeFace = this._currentContext.activeCubeFace;
|
|
1223
|
+
|
|
1224
|
+
if ( isRenderCameraDepthArray ) {
|
|
1225
|
+
|
|
1226
|
+
// Clear the depth texture
|
|
1227
|
+
const textureData = this.get( renderTarget.depthTexture );
|
|
1228
|
+
|
|
1229
|
+
if ( textureData.clearedRenderId !== this.renderer._nodes.nodeFrame.renderId ) {
|
|
1230
|
+
|
|
1231
|
+
textureData.clearedRenderId = this.renderer._nodes.nodeFrame.renderId;
|
|
1232
|
+
|
|
1233
|
+
const { stencilBuffer } = renderTarget;
|
|
1234
|
+
|
|
1235
|
+
for ( let i = 0, len = cameras.length; i < len; i ++ ) {
|
|
1236
|
+
|
|
1237
|
+
this.renderer._activeCubeFace = i;
|
|
1238
|
+
this._currentContext.activeCubeFace = i;
|
|
1239
|
+
|
|
1240
|
+
this._setFramebuffer( this._currentContext );
|
|
1241
|
+
this.clear( false, true, stencilBuffer, this._currentContext, false );
|
|
1242
|
+
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
this.renderer._activeCubeFace = prevActiveCubeFace;
|
|
1246
|
+
this._currentContext.activeCubeFace = prevActiveCubeFace;
|
|
1247
|
+
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1162
1252
|
for ( let i = 0, len = cameras.length; i < len; i ++ ) {
|
|
1163
1253
|
|
|
1164
1254
|
const subCamera = cameras[ i ];
|
|
1165
1255
|
|
|
1166
1256
|
if ( object.layers.test( subCamera.layers ) ) {
|
|
1167
1257
|
|
|
1258
|
+
if ( isRenderCameraDepthArray ) {
|
|
1259
|
+
|
|
1260
|
+
// Update the active layer
|
|
1261
|
+
this.renderer._activeCubeFace = i;
|
|
1262
|
+
this._currentContext.activeCubeFace = i;
|
|
1263
|
+
|
|
1264
|
+
this._setFramebuffer( this._currentContext );
|
|
1265
|
+
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1168
1268
|
const vp = subCamera.viewport;
|
|
1169
1269
|
|
|
1170
|
-
|
|
1171
|
-
const y = vp.y * pixelRatio;
|
|
1172
|
-
const width = vp.width * pixelRatio;
|
|
1173
|
-
const height = vp.height * pixelRatio;
|
|
1270
|
+
if ( vp !== undefined ) {
|
|
1174
1271
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1272
|
+
const x = vp.x * pixelRatio;
|
|
1273
|
+
const y = vp.y * pixelRatio;
|
|
1274
|
+
const width = vp.width * pixelRatio;
|
|
1275
|
+
const height = vp.height * pixelRatio;
|
|
1276
|
+
|
|
1277
|
+
state.viewport(
|
|
1278
|
+
Math.floor( x ),
|
|
1279
|
+
Math.floor( renderObject.context.height - height - y ),
|
|
1280
|
+
Math.floor( width ),
|
|
1281
|
+
Math.floor( height )
|
|
1282
|
+
);
|
|
1283
|
+
|
|
1284
|
+
}
|
|
1181
1285
|
|
|
1182
1286
|
state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexData.index, cameraData.indexesGPU[ i ] );
|
|
1183
1287
|
|
|
@@ -1185,6 +1289,9 @@ class WebGLBackend extends Backend {
|
|
|
1185
1289
|
|
|
1186
1290
|
}
|
|
1187
1291
|
|
|
1292
|
+
this._currentContext.activeCubeFace = prevActiveCubeFace;
|
|
1293
|
+
this.renderer._activeCubeFace = prevActiveCubeFace;
|
|
1294
|
+
|
|
1188
1295
|
}
|
|
1189
1296
|
|
|
1190
1297
|
} else {
|
|
@@ -1928,15 +2035,15 @@ class WebGLBackend extends Backend {
|
|
|
1928
2035
|
|
|
1929
2036
|
const isCube = renderTarget.isWebGLCubeRenderTarget === true;
|
|
1930
2037
|
const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
|
|
1931
|
-
const isRenderTargetArray = renderTarget.
|
|
2038
|
+
const isRenderTargetArray = renderTarget.depth > 1;
|
|
1932
2039
|
const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
|
|
1933
|
-
const
|
|
2040
|
+
const _hasExternalTextures = ( isXRRenderTarget === true && renderTarget._hasExternalTextures === true );
|
|
1934
2041
|
|
|
1935
2042
|
let msaaFb = renderTargetContextData.msaaFrameBuffer;
|
|
1936
2043
|
let depthRenderbuffer = renderTargetContextData.depthRenderbuffer;
|
|
1937
2044
|
const multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
1938
|
-
const
|
|
1939
|
-
|
|
2045
|
+
const multiviewExt = this.extensions.get( 'OVR_multiview2' );
|
|
2046
|
+
const useMultisampledRTT = this._useMultisampledExtension( renderTarget );
|
|
1940
2047
|
const cacheKey = getCacheKey( descriptor );
|
|
1941
2048
|
|
|
1942
2049
|
let fb;
|
|
@@ -1947,7 +2054,7 @@ class WebGLBackend extends Backend {
|
|
|
1947
2054
|
|
|
1948
2055
|
fb = renderTargetContextData.cubeFramebuffers[ cacheKey ];
|
|
1949
2056
|
|
|
1950
|
-
} else if ( isXRRenderTarget &&
|
|
2057
|
+
} else if ( isXRRenderTarget && _hasExternalTextures === false ) {
|
|
1951
2058
|
|
|
1952
2059
|
fb = this._xrFramebuffer;
|
|
1953
2060
|
|
|
@@ -1966,6 +2073,7 @@ class WebGLBackend extends Backend {
|
|
|
1966
2073
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
1967
2074
|
|
|
1968
2075
|
const textures = descriptor.textures;
|
|
2076
|
+
const depthInvalidationArray = [];
|
|
1969
2077
|
|
|
1970
2078
|
if ( isCube ) {
|
|
1971
2079
|
|
|
@@ -1990,7 +2098,11 @@ class WebGLBackend extends Backend {
|
|
|
1990
2098
|
|
|
1991
2099
|
const attachment = gl.COLOR_ATTACHMENT0 + i;
|
|
1992
2100
|
|
|
1993
|
-
if (
|
|
2101
|
+
if ( renderTarget.multiview ) {
|
|
2102
|
+
|
|
2103
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2104
|
+
|
|
2105
|
+
} else if ( isRenderTarget3D || isRenderTargetArray ) {
|
|
1994
2106
|
|
|
1995
2107
|
const layer = this.renderer._activeCubeFace;
|
|
1996
2108
|
|
|
@@ -1998,7 +2110,7 @@ class WebGLBackend extends Backend {
|
|
|
1998
2110
|
|
|
1999
2111
|
} else {
|
|
2000
2112
|
|
|
2001
|
-
if (
|
|
2113
|
+
if ( useMultisampledRTT ) {
|
|
2002
2114
|
|
|
2003
2115
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2004
2116
|
|
|
@@ -2012,32 +2124,52 @@ class WebGLBackend extends Backend {
|
|
|
2012
2124
|
|
|
2013
2125
|
}
|
|
2014
2126
|
|
|
2015
|
-
state.drawBuffers( descriptor, fb );
|
|
2016
|
-
|
|
2017
2127
|
}
|
|
2018
2128
|
|
|
2019
|
-
|
|
2129
|
+
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2130
|
+
|
|
2131
|
+
if ( renderTarget._autoAllocateDepthBuffer === true ) {
|
|
2020
2132
|
|
|
2021
2133
|
const renderbuffer = gl.createRenderbuffer();
|
|
2022
2134
|
this.textureUtils.setupRenderBufferStorage( renderbuffer, descriptor, 0, useMultisampledRTT );
|
|
2023
2135
|
renderTargetContextData.xrDepthRenderbuffer = renderbuffer;
|
|
2136
|
+
depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
|
|
2137
|
+
|
|
2138
|
+
gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
|
|
2139
|
+
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );
|
|
2140
|
+
|
|
2024
2141
|
|
|
2025
2142
|
} else {
|
|
2026
2143
|
|
|
2027
2144
|
if ( descriptor.depthTexture !== null ) {
|
|
2028
2145
|
|
|
2146
|
+
depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
|
|
2147
|
+
|
|
2029
2148
|
const textureData = this.get( descriptor.depthTexture );
|
|
2030
|
-
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2031
2149
|
textureData.renderTarget = descriptor.renderTarget;
|
|
2032
2150
|
textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
|
|
2033
2151
|
|
|
2034
|
-
if (
|
|
2152
|
+
if ( renderTarget.multiview ) {
|
|
2153
|
+
|
|
2154
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2155
|
+
|
|
2156
|
+
} else if ( _hasExternalTextures && useMultisampledRTT ) {
|
|
2035
2157
|
|
|
2036
2158
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2037
2159
|
|
|
2038
2160
|
} else {
|
|
2039
2161
|
|
|
2040
|
-
|
|
2162
|
+
if ( descriptor.depthTexture.isArrayTexture ) {
|
|
2163
|
+
|
|
2164
|
+
const layer = this.renderer._activeCubeFace;
|
|
2165
|
+
|
|
2166
|
+
gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
|
|
2167
|
+
|
|
2168
|
+
} else {
|
|
2169
|
+
|
|
2170
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
2171
|
+
|
|
2172
|
+
}
|
|
2041
2173
|
|
|
2042
2174
|
}
|
|
2043
2175
|
|
|
@@ -2045,11 +2177,34 @@ class WebGLBackend extends Backend {
|
|
|
2045
2177
|
|
|
2046
2178
|
}
|
|
2047
2179
|
|
|
2180
|
+
renderTargetContextData.depthInvalidationArray = depthInvalidationArray;
|
|
2181
|
+
|
|
2182
|
+
|
|
2048
2183
|
} else {
|
|
2049
2184
|
|
|
2185
|
+
const isRenderCameraDepthArray = this._isRenderCameraDepthArray( descriptor );
|
|
2186
|
+
|
|
2187
|
+
if ( isRenderCameraDepthArray ) {
|
|
2188
|
+
|
|
2189
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
2190
|
+
|
|
2191
|
+
const layer = this.renderer._activeCubeFace;
|
|
2192
|
+
|
|
2193
|
+
const depthData = this.get( descriptor.depthTexture );
|
|
2194
|
+
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2195
|
+
gl.framebufferTextureLayer(
|
|
2196
|
+
gl.FRAMEBUFFER,
|
|
2197
|
+
depthStyle,
|
|
2198
|
+
depthData.textureGPU,
|
|
2199
|
+
0,
|
|
2200
|
+
layer
|
|
2201
|
+
);
|
|
2202
|
+
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2050
2205
|
// rebind external XR textures
|
|
2051
2206
|
|
|
2052
|
-
if ( isXRRenderTarget &&
|
|
2207
|
+
if ( ( isXRRenderTarget || useMultisampledRTT || renderTarget.multiview ) && ( renderTarget._isOpaqueFramebuffer !== true ) ) {
|
|
2053
2208
|
|
|
2054
2209
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
2055
2210
|
|
|
@@ -2057,7 +2212,11 @@ class WebGLBackend extends Backend {
|
|
|
2057
2212
|
|
|
2058
2213
|
const textureData = this.get( descriptor.textures[ 0 ] );
|
|
2059
2214
|
|
|
2060
|
-
if (
|
|
2215
|
+
if ( renderTarget.multiview ) {
|
|
2216
|
+
|
|
2217
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2218
|
+
|
|
2219
|
+
} else if ( useMultisampledRTT ) {
|
|
2061
2220
|
|
|
2062
2221
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2063
2222
|
|
|
@@ -2071,7 +2230,7 @@ class WebGLBackend extends Backend {
|
|
|
2071
2230
|
|
|
2072
2231
|
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2073
2232
|
|
|
2074
|
-
if ( renderTarget.
|
|
2233
|
+
if ( renderTarget._autoAllocateDepthBuffer === true ) {
|
|
2075
2234
|
|
|
2076
2235
|
const renderbuffer = renderTargetContextData.xrDepthRenderbuffer;
|
|
2077
2236
|
gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
|
|
@@ -2081,7 +2240,11 @@ class WebGLBackend extends Backend {
|
|
|
2081
2240
|
|
|
2082
2241
|
const textureData = this.get( descriptor.depthTexture );
|
|
2083
2242
|
|
|
2084
|
-
if (
|
|
2243
|
+
if ( renderTarget.multiview ) {
|
|
2244
|
+
|
|
2245
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2246
|
+
|
|
2247
|
+
} else if ( useMultisampledRTT ) {
|
|
2085
2248
|
|
|
2086
2249
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2087
2250
|
|
|
@@ -2097,7 +2260,7 @@ class WebGLBackend extends Backend {
|
|
|
2097
2260
|
|
|
2098
2261
|
}
|
|
2099
2262
|
|
|
2100
|
-
if ( samples > 0 && useMultisampledRTT === false ) {
|
|
2263
|
+
if ( samples > 0 && useMultisampledRTT === false && ! renderTarget.multiview ) {
|
|
2101
2264
|
|
|
2102
2265
|
if ( msaaFb === undefined ) {
|
|
2103
2266
|
|
|
@@ -2119,13 +2282,6 @@ class WebGLBackend extends Backend {
|
|
|
2119
2282
|
|
|
2120
2283
|
invalidationArray.push( gl.COLOR_ATTACHMENT0 + i );
|
|
2121
2284
|
|
|
2122
|
-
if ( depthBuffer ) {
|
|
2123
|
-
|
|
2124
|
-
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2125
|
-
invalidationArray.push( depthStyle );
|
|
2126
|
-
|
|
2127
|
-
}
|
|
2128
|
-
|
|
2129
2285
|
const texture = descriptor.textures[ i ];
|
|
2130
2286
|
const textureData = this.get( texture );
|
|
2131
2287
|
|
|
@@ -2135,10 +2291,12 @@ class WebGLBackend extends Backend {
|
|
|
2135
2291
|
|
|
2136
2292
|
}
|
|
2137
2293
|
|
|
2294
|
+
gl.bindRenderbuffer( gl.RENDERBUFFER, null );
|
|
2295
|
+
|
|
2138
2296
|
renderTargetContextData.msaaFrameBuffer = msaaFb;
|
|
2139
2297
|
renderTargetContextData.msaaRenderbuffers = msaaRenderbuffers;
|
|
2140
2298
|
|
|
2141
|
-
if ( depthRenderbuffer === undefined ) {
|
|
2299
|
+
if ( depthBuffer && depthRenderbuffer === undefined ) {
|
|
2142
2300
|
|
|
2143
2301
|
depthRenderbuffer = gl.createRenderbuffer();
|
|
2144
2302
|
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor, samples );
|
|
@@ -2162,6 +2320,8 @@ class WebGLBackend extends Backend {
|
|
|
2162
2320
|
|
|
2163
2321
|
}
|
|
2164
2322
|
|
|
2323
|
+
state.drawBuffers( descriptor, fb );
|
|
2324
|
+
|
|
2165
2325
|
}
|
|
2166
2326
|
|
|
2167
2327
|
state.bindFramebuffer( gl.FRAMEBUFFER, currentFrameBuffer );
|
|
@@ -2203,9 +2363,6 @@ class WebGLBackend extends Backend {
|
|
|
2203
2363
|
const { gl } = this;
|
|
2204
2364
|
|
|
2205
2365
|
const vaoGPU = gl.createVertexArray();
|
|
2206
|
-
let key = '';
|
|
2207
|
-
|
|
2208
|
-
let staticVao = true;
|
|
2209
2366
|
|
|
2210
2367
|
gl.bindVertexArray( vaoGPU );
|
|
2211
2368
|
|
|
@@ -2214,13 +2371,9 @@ class WebGLBackend extends Backend {
|
|
|
2214
2371
|
const attribute = attributes[ i ];
|
|
2215
2372
|
const attributeData = this.get( attribute );
|
|
2216
2373
|
|
|
2217
|
-
key += ':' + attributeData.id;
|
|
2218
|
-
|
|
2219
2374
|
gl.bindBuffer( gl.ARRAY_BUFFER, attributeData.bufferGPU );
|
|
2220
2375
|
gl.enableVertexAttribArray( i );
|
|
2221
2376
|
|
|
2222
|
-
if ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) staticVao = false;
|
|
2223
|
-
|
|
2224
2377
|
let stride, offset;
|
|
2225
2378
|
|
|
2226
2379
|
if ( attribute.isInterleavedBufferAttribute === true ) {
|
|
@@ -2259,9 +2412,7 @@ class WebGLBackend extends Backend {
|
|
|
2259
2412
|
|
|
2260
2413
|
gl.bindBuffer( gl.ARRAY_BUFFER, null );
|
|
2261
2414
|
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
return { vaoGPU, staticVao };
|
|
2415
|
+
return vaoGPU;
|
|
2265
2416
|
|
|
2266
2417
|
}
|
|
2267
2418
|
|
|
@@ -2390,9 +2541,15 @@ class WebGLBackend extends Backend {
|
|
|
2390
2541
|
* @param {RenderTarget} renderTarget - The render target that should be multisampled.
|
|
2391
2542
|
* @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
|
|
2392
2543
|
*/
|
|
2393
|
-
|
|
2544
|
+
_useMultisampledExtension( renderTarget ) {
|
|
2545
|
+
|
|
2546
|
+
if ( renderTarget.multiview === true ) {
|
|
2547
|
+
|
|
2548
|
+
return true;
|
|
2549
|
+
|
|
2550
|
+
}
|
|
2394
2551
|
|
|
2395
|
-
return renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget.
|
|
2552
|
+
return renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget._autoAllocateDepthBuffer !== false;
|
|
2396
2553
|
|
|
2397
2554
|
}
|
|
2398
2555
|
|