@plastic-software/three 0.175.14 → 0.179.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 +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- 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 +2 -1
- 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 +22 -8
- 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 +57 -38
- 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 +679 -300
- 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 +48 -8
- 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 +11 -2
- 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/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- 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 +211 -22
- 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 +213 -30
- 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 +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- 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/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/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 +4 -3
- 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 +22 -19
- 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 +149 -13
- 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 +14 -12
- 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 +22 -19
- 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 +12 -10
- 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 +15 -3
- 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 +227 -88
- 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 +9 -7
- 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 +9 -36
- 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 → TRAANode.js} +184 -174
- 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 +5 -4
- 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 +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -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/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -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/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- 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 +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- 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/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- 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 +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- 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 +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- 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 +110 -24
- 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 +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- 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 +71 -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/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- 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 +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- 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 +16 -16
- 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 +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- 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 +91 -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/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -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 +20 -6
- 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 +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- 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 +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- 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 +505 -143
- 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 +129 -96
- 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 +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- 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
|
@@ -180,7 +180,7 @@ class WebGLBackend extends Backend {
|
|
|
180
180
|
* A unique collection of bindings.
|
|
181
181
|
*
|
|
182
182
|
* @private
|
|
183
|
-
* @type {WeakSet}
|
|
183
|
+
* @type {WeakSet<Array<BindGroup>>}
|
|
184
184
|
*/
|
|
185
185
|
this._knownBindings = new WeakSet();
|
|
186
186
|
|
|
@@ -264,6 +264,7 @@ class WebGLBackend extends Backend {
|
|
|
264
264
|
this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
265
265
|
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
266
266
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
267
|
+
this.extensions.get( 'OVR_multiview2' );
|
|
267
268
|
|
|
268
269
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
269
270
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
@@ -360,13 +361,13 @@ class WebGLBackend extends Backend {
|
|
|
360
361
|
|
|
361
362
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
362
363
|
// are midframe flushes and an external depth texture.
|
|
363
|
-
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget.
|
|
364
|
+
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget._autoAllocateDepthBuffer === true && renderTarget.multiview === false ) {
|
|
364
365
|
|
|
365
366
|
console.warn( 'THREE.WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
366
367
|
|
|
367
368
|
}
|
|
368
369
|
|
|
369
|
-
renderTarget.
|
|
370
|
+
renderTarget._autoAllocateDepthBuffer = false;
|
|
370
371
|
|
|
371
372
|
}
|
|
372
373
|
|
|
@@ -440,7 +441,7 @@ class WebGLBackend extends Backend {
|
|
|
440
441
|
*/
|
|
441
442
|
beginRender( renderContext ) {
|
|
442
443
|
|
|
443
|
-
const { state
|
|
444
|
+
const { state } = this;
|
|
444
445
|
const renderContextData = this.get( renderContext );
|
|
445
446
|
|
|
446
447
|
//
|
|
@@ -451,7 +452,8 @@ class WebGLBackend extends Backend {
|
|
|
451
452
|
|
|
452
453
|
} else {
|
|
453
454
|
|
|
454
|
-
|
|
455
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
456
|
+
state.viewport( 0, 0, width, height );
|
|
455
457
|
|
|
456
458
|
}
|
|
457
459
|
|
|
@@ -471,10 +473,8 @@ class WebGLBackend extends Backend {
|
|
|
471
473
|
this._currentContext = renderContext;
|
|
472
474
|
|
|
473
475
|
this._setFramebuffer( renderContext );
|
|
474
|
-
|
|
475
476
|
this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
|
|
476
477
|
|
|
477
|
-
|
|
478
478
|
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
479
479
|
|
|
480
480
|
if ( occlusionQueryCount > 0 ) {
|
|
@@ -540,29 +540,60 @@ class WebGLBackend extends Backend {
|
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
this._currentContext = previousContext;
|
|
543
|
+
const renderTarget = renderContext.renderTarget;
|
|
543
544
|
|
|
544
|
-
if ( renderContext.textures !== null &&
|
|
545
|
-
|
|
546
|
-
const renderTargetContextData = this.get( renderContext.renderTarget );
|
|
545
|
+
if ( renderContext.textures !== null && renderTarget ) {
|
|
547
546
|
|
|
548
|
-
const
|
|
547
|
+
const renderTargetContextData = this.get( renderTarget );
|
|
549
548
|
|
|
550
|
-
if ( samples > 0 && this.
|
|
549
|
+
if ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {
|
|
551
550
|
|
|
552
551
|
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
553
552
|
|
|
554
|
-
|
|
553
|
+
let mask = gl.COLOR_BUFFER_BIT;
|
|
554
|
+
|
|
555
|
+
if ( renderTarget.resolveDepthBuffer ) {
|
|
556
|
+
|
|
557
|
+
if ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;
|
|
558
|
+
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;
|
|
559
|
+
|
|
560
|
+
}
|
|
555
561
|
|
|
556
562
|
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
563
|
+
const msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;
|
|
557
564
|
|
|
558
565
|
const textures = renderContext.textures;
|
|
566
|
+
const isMRT = textures.length > 1;
|
|
559
567
|
|
|
560
568
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
|
|
561
569
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
562
570
|
|
|
571
|
+
if ( isMRT ) {
|
|
572
|
+
|
|
573
|
+
// blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,
|
|
574
|
+
// the engine temporarily removes all attachments and then configures each attachment for the resolve.
|
|
575
|
+
|
|
576
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
577
|
+
|
|
578
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );
|
|
579
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );
|
|
580
|
+
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
}
|
|
584
|
+
|
|
563
585
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
564
586
|
|
|
565
|
-
|
|
587
|
+
if ( isMRT ) {
|
|
588
|
+
|
|
589
|
+
// configure attachment for resolve
|
|
590
|
+
|
|
591
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
592
|
+
|
|
593
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
594
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );
|
|
595
|
+
|
|
596
|
+
}
|
|
566
597
|
|
|
567
598
|
if ( renderContext.scissor ) {
|
|
568
599
|
|
|
@@ -572,28 +603,42 @@ class WebGLBackend extends Backend {
|
|
|
572
603
|
|
|
573
604
|
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
574
605
|
|
|
575
|
-
|
|
606
|
+
} else {
|
|
576
607
|
|
|
577
|
-
|
|
608
|
+
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
578
609
|
|
|
579
|
-
|
|
610
|
+
}
|
|
580
611
|
|
|
581
|
-
|
|
612
|
+
}
|
|
582
613
|
|
|
583
|
-
|
|
614
|
+
if ( isMRT ) {
|
|
584
615
|
|
|
585
|
-
|
|
616
|
+
// restore attachments
|
|
586
617
|
|
|
587
|
-
|
|
618
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
588
619
|
|
|
589
|
-
}
|
|
620
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
621
|
+
|
|
622
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
623
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );
|
|
590
624
|
|
|
591
625
|
}
|
|
592
626
|
|
|
593
627
|
}
|
|
594
628
|
|
|
595
|
-
|
|
629
|
+
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
630
|
+
|
|
631
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
596
632
|
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
} else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {
|
|
636
|
+
|
|
637
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
638
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
639
|
+
gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );
|
|
640
|
+
|
|
641
|
+
}
|
|
597
642
|
|
|
598
643
|
}
|
|
599
644
|
|
|
@@ -607,7 +652,8 @@ class WebGLBackend extends Backend {
|
|
|
607
652
|
|
|
608
653
|
} else {
|
|
609
654
|
|
|
610
|
-
|
|
655
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
656
|
+
state.viewport( 0, 0, width, height );
|
|
611
657
|
|
|
612
658
|
}
|
|
613
659
|
|
|
@@ -866,8 +912,9 @@ class WebGLBackend extends Backend {
|
|
|
866
912
|
* @param {Node} computeNode - The compute node.
|
|
867
913
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
868
914
|
* @param {ComputePipeline} pipeline - The compute pipeline.
|
|
915
|
+
* @param {number|null} [count=null] - The count of compute invocations. If `null`, the count is determined by the compute node.
|
|
869
916
|
*/
|
|
870
|
-
compute( computeGroup, computeNode, bindings, pipeline ) {
|
|
917
|
+
compute( computeGroup, computeNode, bindings, pipeline, count = null ) {
|
|
871
918
|
|
|
872
919
|
const { state, gl } = this;
|
|
873
920
|
|
|
@@ -887,7 +934,7 @@ class WebGLBackend extends Backend {
|
|
|
887
934
|
|
|
888
935
|
if ( vaoGPU === undefined ) {
|
|
889
936
|
|
|
890
|
-
this._createVao( attributes );
|
|
937
|
+
this.vaoCache[ vaoKey ] = this._createVao( attributes );
|
|
891
938
|
|
|
892
939
|
} else {
|
|
893
940
|
|
|
@@ -904,13 +951,23 @@ class WebGLBackend extends Backend {
|
|
|
904
951
|
gl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, transformFeedbackGPU );
|
|
905
952
|
gl.beginTransformFeedback( gl.POINTS );
|
|
906
953
|
|
|
954
|
+
count = ( count !== null ) ? count : computeNode.count;
|
|
955
|
+
|
|
956
|
+
if ( Array.isArray( count ) ) {
|
|
957
|
+
|
|
958
|
+
warnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not an array.' );
|
|
959
|
+
|
|
960
|
+
count = count[ 0 ];
|
|
961
|
+
|
|
962
|
+
}
|
|
963
|
+
|
|
907
964
|
if ( attributes[ 0 ].isStorageInstancedBufferAttribute ) {
|
|
908
965
|
|
|
909
|
-
gl.drawArraysInstanced( gl.POINTS, 0, 1,
|
|
966
|
+
gl.drawArraysInstanced( gl.POINTS, 0, 1, count );
|
|
910
967
|
|
|
911
968
|
} else {
|
|
912
969
|
|
|
913
|
-
gl.drawArrays( gl.POINTS, 0,
|
|
970
|
+
gl.drawArrays( gl.POINTS, 0, count );
|
|
914
971
|
|
|
915
972
|
}
|
|
916
973
|
|
|
@@ -923,7 +980,7 @@ class WebGLBackend extends Backend {
|
|
|
923
980
|
|
|
924
981
|
const dualAttributeData = transformBuffers[ i ];
|
|
925
982
|
|
|
926
|
-
if ( dualAttributeData.pbo ) {
|
|
983
|
+
if ( dualAttributeData.pbo && this.has( dualAttributeData.pbo ) ) {
|
|
927
984
|
|
|
928
985
|
this.textureUtils.copyBufferToTexture( dualAttributeData.transformBuffer, dualAttributeData.pbo );
|
|
929
986
|
|
|
@@ -960,6 +1017,20 @@ class WebGLBackend extends Backend {
|
|
|
960
1017
|
|
|
961
1018
|
}
|
|
962
1019
|
|
|
1020
|
+
/**
|
|
1021
|
+
* Internal to determine if the current render target is a render target array with depth 2D array texture.
|
|
1022
|
+
*
|
|
1023
|
+
* @param {RenderContext} renderContext - The render context.
|
|
1024
|
+
* @return {boolean} Whether the render target is a render target array with depth 2D array texture.
|
|
1025
|
+
*
|
|
1026
|
+
* @private
|
|
1027
|
+
*/
|
|
1028
|
+
_isRenderCameraDepthArray( renderContext ) {
|
|
1029
|
+
|
|
1030
|
+
return renderContext.depthTexture && renderContext.depthTexture.isArrayTexture && renderContext.camera.isArrayCamera;
|
|
1031
|
+
|
|
1032
|
+
}
|
|
1033
|
+
|
|
963
1034
|
/**
|
|
964
1035
|
* Executes a draw command for the given render object.
|
|
965
1036
|
*
|
|
@@ -991,28 +1062,23 @@ class WebGLBackend extends Backend {
|
|
|
991
1062
|
|
|
992
1063
|
// vertex state
|
|
993
1064
|
|
|
994
|
-
const
|
|
1065
|
+
const attributes = renderObject.getAttributes();
|
|
1066
|
+
const attributesData = this.get( attributes );
|
|
995
1067
|
|
|
996
|
-
let vaoGPU =
|
|
1068
|
+
let vaoGPU = attributesData.vaoGPU;
|
|
997
1069
|
|
|
998
|
-
if ( vaoGPU === undefined
|
|
1070
|
+
if ( vaoGPU === undefined ) {
|
|
999
1071
|
|
|
1000
|
-
const vaoKey = this._getVaoKey(
|
|
1072
|
+
const vaoKey = this._getVaoKey( attributes );
|
|
1001
1073
|
|
|
1002
1074
|
vaoGPU = this.vaoCache[ vaoKey ];
|
|
1003
1075
|
|
|
1004
1076
|
if ( vaoGPU === undefined ) {
|
|
1005
1077
|
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
( { vaoGPU, staticVao } = this._createVao( renderObject.getAttributes() ) );
|
|
1009
|
-
|
|
1010
|
-
if ( staticVao ) {
|
|
1011
|
-
|
|
1012
|
-
renderObjectData.staticVao = vaoGPU;
|
|
1013
|
-
renderObjectData.geometryId = renderObject.geometry.id;
|
|
1078
|
+
vaoGPU = this._createVao( attributes );
|
|
1014
1079
|
|
|
1015
|
-
|
|
1080
|
+
this.vaoCache[ vaoKey ] = vaoGPU;
|
|
1081
|
+
attributesData.vaoGPU = vaoGPU;
|
|
1016
1082
|
|
|
1017
1083
|
}
|
|
1018
1084
|
|
|
@@ -1128,7 +1194,7 @@ class WebGLBackend extends Backend {
|
|
|
1128
1194
|
|
|
1129
1195
|
};
|
|
1130
1196
|
|
|
1131
|
-
if ( renderObject.camera.isArrayCamera && renderObject.camera.cameras.length > 0 ) {
|
|
1197
|
+
if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
|
|
1132
1198
|
|
|
1133
1199
|
const cameraData = this.get( renderObject.camera );
|
|
1134
1200
|
const cameras = renderObject.camera.cameras;
|
|
@@ -1159,25 +1225,71 @@ class WebGLBackend extends Backend {
|
|
|
1159
1225
|
const cameraIndexData = this.get( cameraIndex );
|
|
1160
1226
|
const pixelRatio = this.renderer.getPixelRatio();
|
|
1161
1227
|
|
|
1228
|
+
const renderTarget = this._currentContext.renderTarget;
|
|
1229
|
+
const isRenderCameraDepthArray = this._isRenderCameraDepthArray( this._currentContext );
|
|
1230
|
+
const prevActiveCubeFace = this._currentContext.activeCubeFace;
|
|
1231
|
+
|
|
1232
|
+
if ( isRenderCameraDepthArray ) {
|
|
1233
|
+
|
|
1234
|
+
// Clear the depth texture
|
|
1235
|
+
const textureData = this.get( renderTarget.depthTexture );
|
|
1236
|
+
|
|
1237
|
+
if ( textureData.clearedRenderId !== this.renderer._nodes.nodeFrame.renderId ) {
|
|
1238
|
+
|
|
1239
|
+
textureData.clearedRenderId = this.renderer._nodes.nodeFrame.renderId;
|
|
1240
|
+
|
|
1241
|
+
const { stencilBuffer } = renderTarget;
|
|
1242
|
+
|
|
1243
|
+
for ( let i = 0, len = cameras.length; i < len; i ++ ) {
|
|
1244
|
+
|
|
1245
|
+
this.renderer._activeCubeFace = i;
|
|
1246
|
+
this._currentContext.activeCubeFace = i;
|
|
1247
|
+
|
|
1248
|
+
this._setFramebuffer( this._currentContext );
|
|
1249
|
+
this.clear( false, true, stencilBuffer, this._currentContext, false );
|
|
1250
|
+
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
this.renderer._activeCubeFace = prevActiveCubeFace;
|
|
1254
|
+
this._currentContext.activeCubeFace = prevActiveCubeFace;
|
|
1255
|
+
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1162
1260
|
for ( let i = 0, len = cameras.length; i < len; i ++ ) {
|
|
1163
1261
|
|
|
1164
1262
|
const subCamera = cameras[ i ];
|
|
1165
1263
|
|
|
1166
1264
|
if ( object.layers.test( subCamera.layers ) ) {
|
|
1167
1265
|
|
|
1266
|
+
if ( isRenderCameraDepthArray ) {
|
|
1267
|
+
|
|
1268
|
+
// Update the active layer
|
|
1269
|
+
this.renderer._activeCubeFace = i;
|
|
1270
|
+
this._currentContext.activeCubeFace = i;
|
|
1271
|
+
|
|
1272
|
+
this._setFramebuffer( this._currentContext );
|
|
1273
|
+
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1168
1276
|
const vp = subCamera.viewport;
|
|
1169
1277
|
|
|
1170
|
-
|
|
1171
|
-
const y = vp.y * pixelRatio;
|
|
1172
|
-
const width = vp.width * pixelRatio;
|
|
1173
|
-
const height = vp.height * pixelRatio;
|
|
1278
|
+
if ( vp !== undefined ) {
|
|
1174
1279
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1280
|
+
const x = vp.x * pixelRatio;
|
|
1281
|
+
const y = vp.y * pixelRatio;
|
|
1282
|
+
const width = vp.width * pixelRatio;
|
|
1283
|
+
const height = vp.height * pixelRatio;
|
|
1284
|
+
|
|
1285
|
+
state.viewport(
|
|
1286
|
+
Math.floor( x ),
|
|
1287
|
+
Math.floor( renderObject.context.height - height - y ),
|
|
1288
|
+
Math.floor( width ),
|
|
1289
|
+
Math.floor( height )
|
|
1290
|
+
);
|
|
1291
|
+
|
|
1292
|
+
}
|
|
1181
1293
|
|
|
1182
1294
|
state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexData.index, cameraData.indexesGPU[ i ] );
|
|
1183
1295
|
|
|
@@ -1185,6 +1297,9 @@ class WebGLBackend extends Backend {
|
|
|
1185
1297
|
|
|
1186
1298
|
}
|
|
1187
1299
|
|
|
1300
|
+
this._currentContext.activeCubeFace = prevActiveCubeFace;
|
|
1301
|
+
this.renderer._activeCubeFace = prevActiveCubeFace;
|
|
1302
|
+
|
|
1188
1303
|
}
|
|
1189
1304
|
|
|
1190
1305
|
} else {
|
|
@@ -1467,7 +1582,9 @@ class WebGLBackend extends Backend {
|
|
|
1467
1582
|
_getShaderErrors( gl, shader, type ) {
|
|
1468
1583
|
|
|
1469
1584
|
const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
|
|
1470
|
-
|
|
1585
|
+
|
|
1586
|
+
const shaderInfoLog = gl.getShaderInfoLog( shader ) || '';
|
|
1587
|
+
const errors = shaderInfoLog.trim();
|
|
1471
1588
|
|
|
1472
1589
|
if ( status && errors === '' ) return '';
|
|
1473
1590
|
|
|
@@ -1499,11 +1616,11 @@ class WebGLBackend extends Backend {
|
|
|
1499
1616
|
|
|
1500
1617
|
const gl = this.gl;
|
|
1501
1618
|
|
|
1502
|
-
const
|
|
1619
|
+
const programInfoLog = gl.getProgramInfoLog( programGPU ) || '';
|
|
1620
|
+
const programLog = programInfoLog.trim();
|
|
1503
1621
|
|
|
1504
1622
|
if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
|
|
1505
1623
|
|
|
1506
|
-
|
|
1507
1624
|
if ( typeof this.renderer.debug.onShaderError === 'function' ) {
|
|
1508
1625
|
|
|
1509
1626
|
this.renderer.debug.onShaderError( gl, programGPU, glVertexShader, glFragmentShader );
|
|
@@ -1928,15 +2045,15 @@ class WebGLBackend extends Backend {
|
|
|
1928
2045
|
|
|
1929
2046
|
const isCube = renderTarget.isWebGLCubeRenderTarget === true;
|
|
1930
2047
|
const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
|
|
1931
|
-
const isRenderTargetArray = renderTarget.
|
|
2048
|
+
const isRenderTargetArray = renderTarget.depth > 1;
|
|
1932
2049
|
const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
|
|
1933
|
-
const
|
|
2050
|
+
const _hasExternalTextures = ( isXRRenderTarget === true && renderTarget._hasExternalTextures === true );
|
|
1934
2051
|
|
|
1935
2052
|
let msaaFb = renderTargetContextData.msaaFrameBuffer;
|
|
1936
2053
|
let depthRenderbuffer = renderTargetContextData.depthRenderbuffer;
|
|
1937
2054
|
const multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
1938
|
-
const
|
|
1939
|
-
|
|
2055
|
+
const multiviewExt = this.extensions.get( 'OVR_multiview2' );
|
|
2056
|
+
const useMultisampledRTT = this._useMultisampledExtension( renderTarget );
|
|
1940
2057
|
const cacheKey = getCacheKey( descriptor );
|
|
1941
2058
|
|
|
1942
2059
|
let fb;
|
|
@@ -1947,7 +2064,7 @@ class WebGLBackend extends Backend {
|
|
|
1947
2064
|
|
|
1948
2065
|
fb = renderTargetContextData.cubeFramebuffers[ cacheKey ];
|
|
1949
2066
|
|
|
1950
|
-
} else if ( isXRRenderTarget &&
|
|
2067
|
+
} else if ( isXRRenderTarget && _hasExternalTextures === false ) {
|
|
1951
2068
|
|
|
1952
2069
|
fb = this._xrFramebuffer;
|
|
1953
2070
|
|
|
@@ -1966,6 +2083,7 @@ class WebGLBackend extends Backend {
|
|
|
1966
2083
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
1967
2084
|
|
|
1968
2085
|
const textures = descriptor.textures;
|
|
2086
|
+
const depthInvalidationArray = [];
|
|
1969
2087
|
|
|
1970
2088
|
if ( isCube ) {
|
|
1971
2089
|
|
|
@@ -1990,7 +2108,11 @@ class WebGLBackend extends Backend {
|
|
|
1990
2108
|
|
|
1991
2109
|
const attachment = gl.COLOR_ATTACHMENT0 + i;
|
|
1992
2110
|
|
|
1993
|
-
if (
|
|
2111
|
+
if ( renderTarget.multiview ) {
|
|
2112
|
+
|
|
2113
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2114
|
+
|
|
2115
|
+
} else if ( isRenderTarget3D || isRenderTargetArray ) {
|
|
1994
2116
|
|
|
1995
2117
|
const layer = this.renderer._activeCubeFace;
|
|
1996
2118
|
|
|
@@ -1998,7 +2120,7 @@ class WebGLBackend extends Backend {
|
|
|
1998
2120
|
|
|
1999
2121
|
} else {
|
|
2000
2122
|
|
|
2001
|
-
if (
|
|
2123
|
+
if ( useMultisampledRTT ) {
|
|
2002
2124
|
|
|
2003
2125
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2004
2126
|
|
|
@@ -2012,32 +2134,52 @@ class WebGLBackend extends Backend {
|
|
|
2012
2134
|
|
|
2013
2135
|
}
|
|
2014
2136
|
|
|
2015
|
-
state.drawBuffers( descriptor, fb );
|
|
2016
|
-
|
|
2017
2137
|
}
|
|
2018
2138
|
|
|
2019
|
-
|
|
2139
|
+
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2140
|
+
|
|
2141
|
+
if ( renderTarget._autoAllocateDepthBuffer === true ) {
|
|
2020
2142
|
|
|
2021
2143
|
const renderbuffer = gl.createRenderbuffer();
|
|
2022
2144
|
this.textureUtils.setupRenderBufferStorage( renderbuffer, descriptor, 0, useMultisampledRTT );
|
|
2023
2145
|
renderTargetContextData.xrDepthRenderbuffer = renderbuffer;
|
|
2146
|
+
depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
|
|
2147
|
+
|
|
2148
|
+
gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
|
|
2149
|
+
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );
|
|
2150
|
+
|
|
2024
2151
|
|
|
2025
2152
|
} else {
|
|
2026
2153
|
|
|
2027
2154
|
if ( descriptor.depthTexture !== null ) {
|
|
2028
2155
|
|
|
2156
|
+
depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
|
|
2157
|
+
|
|
2029
2158
|
const textureData = this.get( descriptor.depthTexture );
|
|
2030
|
-
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2031
2159
|
textureData.renderTarget = descriptor.renderTarget;
|
|
2032
2160
|
textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
|
|
2033
2161
|
|
|
2034
|
-
if (
|
|
2162
|
+
if ( renderTarget.multiview ) {
|
|
2163
|
+
|
|
2164
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2165
|
+
|
|
2166
|
+
} else if ( _hasExternalTextures && useMultisampledRTT ) {
|
|
2035
2167
|
|
|
2036
2168
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2037
2169
|
|
|
2038
2170
|
} else {
|
|
2039
2171
|
|
|
2040
|
-
|
|
2172
|
+
if ( descriptor.depthTexture.isArrayTexture ) {
|
|
2173
|
+
|
|
2174
|
+
const layer = this.renderer._activeCubeFace;
|
|
2175
|
+
|
|
2176
|
+
gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
|
|
2177
|
+
|
|
2178
|
+
} else {
|
|
2179
|
+
|
|
2180
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
2181
|
+
|
|
2182
|
+
}
|
|
2041
2183
|
|
|
2042
2184
|
}
|
|
2043
2185
|
|
|
@@ -2045,11 +2187,34 @@ class WebGLBackend extends Backend {
|
|
|
2045
2187
|
|
|
2046
2188
|
}
|
|
2047
2189
|
|
|
2190
|
+
renderTargetContextData.depthInvalidationArray = depthInvalidationArray;
|
|
2191
|
+
|
|
2192
|
+
|
|
2048
2193
|
} else {
|
|
2049
2194
|
|
|
2195
|
+
const isRenderCameraDepthArray = this._isRenderCameraDepthArray( descriptor );
|
|
2196
|
+
|
|
2197
|
+
if ( isRenderCameraDepthArray ) {
|
|
2198
|
+
|
|
2199
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
2200
|
+
|
|
2201
|
+
const layer = this.renderer._activeCubeFace;
|
|
2202
|
+
|
|
2203
|
+
const depthData = this.get( descriptor.depthTexture );
|
|
2204
|
+
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2205
|
+
gl.framebufferTextureLayer(
|
|
2206
|
+
gl.FRAMEBUFFER,
|
|
2207
|
+
depthStyle,
|
|
2208
|
+
depthData.textureGPU,
|
|
2209
|
+
0,
|
|
2210
|
+
layer
|
|
2211
|
+
);
|
|
2212
|
+
|
|
2213
|
+
}
|
|
2214
|
+
|
|
2050
2215
|
// rebind external XR textures
|
|
2051
2216
|
|
|
2052
|
-
if ( isXRRenderTarget &&
|
|
2217
|
+
if ( ( isXRRenderTarget || useMultisampledRTT || renderTarget.multiview ) && ( renderTarget._isOpaqueFramebuffer !== true ) ) {
|
|
2053
2218
|
|
|
2054
2219
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
2055
2220
|
|
|
@@ -2057,7 +2222,11 @@ class WebGLBackend extends Backend {
|
|
|
2057
2222
|
|
|
2058
2223
|
const textureData = this.get( descriptor.textures[ 0 ] );
|
|
2059
2224
|
|
|
2060
|
-
if (
|
|
2225
|
+
if ( renderTarget.multiview ) {
|
|
2226
|
+
|
|
2227
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2228
|
+
|
|
2229
|
+
} else if ( useMultisampledRTT ) {
|
|
2061
2230
|
|
|
2062
2231
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2063
2232
|
|
|
@@ -2071,7 +2240,7 @@ class WebGLBackend extends Backend {
|
|
|
2071
2240
|
|
|
2072
2241
|
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2073
2242
|
|
|
2074
|
-
if ( renderTarget.
|
|
2243
|
+
if ( renderTarget._autoAllocateDepthBuffer === true ) {
|
|
2075
2244
|
|
|
2076
2245
|
const renderbuffer = renderTargetContextData.xrDepthRenderbuffer;
|
|
2077
2246
|
gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
|
|
@@ -2081,7 +2250,11 @@ class WebGLBackend extends Backend {
|
|
|
2081
2250
|
|
|
2082
2251
|
const textureData = this.get( descriptor.depthTexture );
|
|
2083
2252
|
|
|
2084
|
-
if (
|
|
2253
|
+
if ( renderTarget.multiview ) {
|
|
2254
|
+
|
|
2255
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
|
|
2256
|
+
|
|
2257
|
+
} else if ( useMultisampledRTT ) {
|
|
2085
2258
|
|
|
2086
2259
|
multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
|
|
2087
2260
|
|
|
@@ -2097,7 +2270,7 @@ class WebGLBackend extends Backend {
|
|
|
2097
2270
|
|
|
2098
2271
|
}
|
|
2099
2272
|
|
|
2100
|
-
if ( samples > 0 && useMultisampledRTT === false ) {
|
|
2273
|
+
if ( samples > 0 && useMultisampledRTT === false && ! renderTarget.multiview ) {
|
|
2101
2274
|
|
|
2102
2275
|
if ( msaaFb === undefined ) {
|
|
2103
2276
|
|
|
@@ -2119,13 +2292,6 @@ class WebGLBackend extends Backend {
|
|
|
2119
2292
|
|
|
2120
2293
|
invalidationArray.push( gl.COLOR_ATTACHMENT0 + i );
|
|
2121
2294
|
|
|
2122
|
-
if ( depthBuffer ) {
|
|
2123
|
-
|
|
2124
|
-
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
2125
|
-
invalidationArray.push( depthStyle );
|
|
2126
|
-
|
|
2127
|
-
}
|
|
2128
|
-
|
|
2129
2295
|
const texture = descriptor.textures[ i ];
|
|
2130
2296
|
const textureData = this.get( texture );
|
|
2131
2297
|
|
|
@@ -2135,10 +2301,12 @@ class WebGLBackend extends Backend {
|
|
|
2135
2301
|
|
|
2136
2302
|
}
|
|
2137
2303
|
|
|
2304
|
+
gl.bindRenderbuffer( gl.RENDERBUFFER, null );
|
|
2305
|
+
|
|
2138
2306
|
renderTargetContextData.msaaFrameBuffer = msaaFb;
|
|
2139
2307
|
renderTargetContextData.msaaRenderbuffers = msaaRenderbuffers;
|
|
2140
2308
|
|
|
2141
|
-
if ( depthRenderbuffer === undefined ) {
|
|
2309
|
+
if ( depthBuffer && depthRenderbuffer === undefined ) {
|
|
2142
2310
|
|
|
2143
2311
|
depthRenderbuffer = gl.createRenderbuffer();
|
|
2144
2312
|
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor, samples );
|
|
@@ -2162,6 +2330,8 @@ class WebGLBackend extends Backend {
|
|
|
2162
2330
|
|
|
2163
2331
|
}
|
|
2164
2332
|
|
|
2333
|
+
state.drawBuffers( descriptor, fb );
|
|
2334
|
+
|
|
2165
2335
|
}
|
|
2166
2336
|
|
|
2167
2337
|
state.bindFramebuffer( gl.FRAMEBUFFER, currentFrameBuffer );
|
|
@@ -2203,9 +2373,6 @@ class WebGLBackend extends Backend {
|
|
|
2203
2373
|
const { gl } = this;
|
|
2204
2374
|
|
|
2205
2375
|
const vaoGPU = gl.createVertexArray();
|
|
2206
|
-
let key = '';
|
|
2207
|
-
|
|
2208
|
-
let staticVao = true;
|
|
2209
2376
|
|
|
2210
2377
|
gl.bindVertexArray( vaoGPU );
|
|
2211
2378
|
|
|
@@ -2214,13 +2381,9 @@ class WebGLBackend extends Backend {
|
|
|
2214
2381
|
const attribute = attributes[ i ];
|
|
2215
2382
|
const attributeData = this.get( attribute );
|
|
2216
2383
|
|
|
2217
|
-
key += ':' + attributeData.id;
|
|
2218
|
-
|
|
2219
2384
|
gl.bindBuffer( gl.ARRAY_BUFFER, attributeData.bufferGPU );
|
|
2220
2385
|
gl.enableVertexAttribArray( i );
|
|
2221
2386
|
|
|
2222
|
-
if ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) staticVao = false;
|
|
2223
|
-
|
|
2224
2387
|
let stride, offset;
|
|
2225
2388
|
|
|
2226
2389
|
if ( attribute.isInterleavedBufferAttribute === true ) {
|
|
@@ -2259,9 +2422,7 @@ class WebGLBackend extends Backend {
|
|
|
2259
2422
|
|
|
2260
2423
|
gl.bindBuffer( gl.ARRAY_BUFFER, null );
|
|
2261
2424
|
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
return { vaoGPU, staticVao };
|
|
2425
|
+
return vaoGPU;
|
|
2265
2426
|
|
|
2266
2427
|
}
|
|
2267
2428
|
|
|
@@ -2390,9 +2551,15 @@ class WebGLBackend extends Backend {
|
|
|
2390
2551
|
* @param {RenderTarget} renderTarget - The render target that should be multisampled.
|
|
2391
2552
|
* @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
|
|
2392
2553
|
*/
|
|
2393
|
-
|
|
2554
|
+
_useMultisampledExtension( renderTarget ) {
|
|
2555
|
+
|
|
2556
|
+
if ( renderTarget.multiview === true ) {
|
|
2557
|
+
|
|
2558
|
+
return true;
|
|
2559
|
+
|
|
2560
|
+
}
|
|
2394
2561
|
|
|
2395
|
-
return renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget.
|
|
2562
|
+
return renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget._autoAllocateDepthBuffer !== false;
|
|
2396
2563
|
|
|
2397
2564
|
}
|
|
2398
2565
|
|