super-three 0.179.0 → 0.184.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -5,6 +5,7 @@ import { Color } from '../../math/Color.js';
|
|
|
5
5
|
*
|
|
6
6
|
* If not state object is provided, the function creates one.
|
|
7
7
|
*
|
|
8
|
+
* @private
|
|
8
9
|
* @function
|
|
9
10
|
* @param {Renderer} renderer - The renderer.
|
|
10
11
|
* @param {Object} [state={}] - The state.
|
|
@@ -36,6 +37,7 @@ export function saveRendererState( renderer, state = {} ) {
|
|
|
36
37
|
*
|
|
37
38
|
* If not state object is provided, the function creates one.
|
|
38
39
|
*
|
|
40
|
+
* @private
|
|
39
41
|
* @function
|
|
40
42
|
* @param {Renderer} renderer - The renderer.
|
|
41
43
|
* @param {Object} [state={}] - The state.
|
|
@@ -57,6 +59,7 @@ export function resetRendererState( renderer, state ) {
|
|
|
57
59
|
/**
|
|
58
60
|
* Restores the state of the given renderer from the given state object.
|
|
59
61
|
*
|
|
62
|
+
* @private
|
|
60
63
|
* @function
|
|
61
64
|
* @param {Renderer} renderer - The renderer.
|
|
62
65
|
* @param {Object} state - The state to restore.
|
|
@@ -81,6 +84,7 @@ export function restoreRendererState( renderer, state ) {
|
|
|
81
84
|
*
|
|
82
85
|
* If not state object is provided, the function creates one.
|
|
83
86
|
*
|
|
87
|
+
* @private
|
|
84
88
|
* @function
|
|
85
89
|
* @param {Scene} scene - The scene.
|
|
86
90
|
* @param {Object} [state={}] - The state.
|
|
@@ -102,6 +106,7 @@ export function saveSceneState( scene, state = {} ) {
|
|
|
102
106
|
*
|
|
103
107
|
* If not state object is provided, the function creates one.
|
|
104
108
|
*
|
|
109
|
+
* @private
|
|
105
110
|
* @function
|
|
106
111
|
* @param {Scene} scene - The scene.
|
|
107
112
|
* @param {Object} [state={}] - The state.
|
|
@@ -122,6 +127,7 @@ export function resetSceneState( scene, state ) {
|
|
|
122
127
|
/**
|
|
123
128
|
* Restores the state of the given scene from the given state object.
|
|
124
129
|
*
|
|
130
|
+
* @private
|
|
125
131
|
* @function
|
|
126
132
|
* @param {Scene} scene - The scene.
|
|
127
133
|
* @param {Object} state - The state to restore.
|
|
@@ -139,6 +145,7 @@ export function restoreSceneState( scene, state ) {
|
|
|
139
145
|
*
|
|
140
146
|
* If not state object is provided, the function creates one.
|
|
141
147
|
*
|
|
148
|
+
* @private
|
|
142
149
|
* @function
|
|
143
150
|
* @param {Renderer} renderer - The renderer.
|
|
144
151
|
* @param {Scene} scene - The scene.
|
|
@@ -160,6 +167,7 @@ export function saveRendererAndSceneState( renderer, scene, state = {} ) {
|
|
|
160
167
|
*
|
|
161
168
|
* If not state object is provided, the function creates one.
|
|
162
169
|
*
|
|
170
|
+
* @private
|
|
163
171
|
* @function
|
|
164
172
|
* @param {Renderer} renderer - The renderer.
|
|
165
173
|
* @param {Scene} scene - The scene.
|
|
@@ -178,6 +186,7 @@ export function resetRendererAndSceneState( renderer, scene, state ) {
|
|
|
178
186
|
/**
|
|
179
187
|
* Restores the state of the given renderer and scene from the given state object.
|
|
180
188
|
*
|
|
189
|
+
* @private
|
|
181
190
|
* @function
|
|
182
191
|
* @param {Renderer} renderer - The renderer.
|
|
183
192
|
* @param {Scene} scene - The scene.
|
|
@@ -6,7 +6,7 @@ let _id = 0;
|
|
|
6
6
|
* Represents a sampled texture binding type.
|
|
7
7
|
*
|
|
8
8
|
* @private
|
|
9
|
-
* @augments
|
|
9
|
+
* @augments Sampler
|
|
10
10
|
*/
|
|
11
11
|
class SampledTexture extends Sampler {
|
|
12
12
|
|
|
@@ -35,6 +35,14 @@ class SampledTexture extends Sampler {
|
|
|
35
35
|
*/
|
|
36
36
|
this.store = false;
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* The mip level to bind for storage textures.
|
|
40
|
+
*
|
|
41
|
+
* @type {number}
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
44
|
+
this.mipLevel = 0;
|
|
45
|
+
|
|
38
46
|
/**
|
|
39
47
|
* This flag can be used for type testing.
|
|
40
48
|
*
|
|
@@ -19,21 +19,27 @@ class Sampler extends Binding {
|
|
|
19
19
|
super( name );
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* The texture the sampler is referring to.
|
|
23
|
+
*
|
|
24
24
|
* @private
|
|
25
|
+
* @type {?Texture}
|
|
25
26
|
*/
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
this.texture = null;
|
|
29
|
-
|
|
30
|
-
};
|
|
27
|
+
this._texture = null;
|
|
31
28
|
|
|
32
29
|
/**
|
|
33
|
-
*
|
|
30
|
+
* An event listener which is added to {@link texture}'s dispose event.
|
|
34
31
|
*
|
|
35
|
-
* @
|
|
32
|
+
* @private
|
|
33
|
+
* @type {Function}
|
|
36
34
|
*/
|
|
35
|
+
this._onTextureDispose = () => {
|
|
36
|
+
|
|
37
|
+
this.generation = null;
|
|
38
|
+
this.version = - 1;
|
|
39
|
+
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Assignment to the texture via a setter must occur after "_onTextureDispose" is initialized.
|
|
37
43
|
this.texture = texture;
|
|
38
44
|
|
|
39
45
|
/**
|
|
@@ -41,7 +47,7 @@ class Sampler extends Binding {
|
|
|
41
47
|
*
|
|
42
48
|
* @type {number}
|
|
43
49
|
*/
|
|
44
|
-
this.version = texture ? texture.version :
|
|
50
|
+
this.version = texture ? texture.version : - 1;
|
|
45
51
|
|
|
46
52
|
/**
|
|
47
53
|
* The binding's generation which is an additional version
|
|
@@ -52,6 +58,14 @@ class Sampler extends Binding {
|
|
|
52
58
|
*/
|
|
53
59
|
this.generation = null;
|
|
54
60
|
|
|
61
|
+
/**
|
|
62
|
+
* The binding's sampler key.
|
|
63
|
+
*
|
|
64
|
+
* @type {string}
|
|
65
|
+
* @default ''
|
|
66
|
+
*/
|
|
67
|
+
this.samplerKey = '';
|
|
68
|
+
|
|
55
69
|
/**
|
|
56
70
|
* This flag can be used for type testing.
|
|
57
71
|
*
|
|
@@ -65,7 +79,8 @@ class Sampler extends Binding {
|
|
|
65
79
|
|
|
66
80
|
/**
|
|
67
81
|
* Sets the texture of this sampler.
|
|
68
|
-
*
|
|
82
|
+
*
|
|
83
|
+
* @param {Texture} value - The texture to set.
|
|
69
84
|
*/
|
|
70
85
|
set texture( value ) {
|
|
71
86
|
|
|
@@ -73,18 +88,18 @@ class Sampler extends Binding {
|
|
|
73
88
|
|
|
74
89
|
if ( this._texture ) {
|
|
75
90
|
|
|
76
|
-
this._texture.removeEventListener( 'dispose', this.
|
|
91
|
+
this._texture.removeEventListener( 'dispose', this._onTextureDispose );
|
|
77
92
|
|
|
78
93
|
}
|
|
79
94
|
|
|
80
95
|
this._texture = value;
|
|
81
96
|
|
|
82
97
|
this.generation = null;
|
|
83
|
-
this.version =
|
|
98
|
+
this.version = - 1;
|
|
84
99
|
|
|
85
100
|
if ( this._texture ) {
|
|
86
101
|
|
|
87
|
-
this._texture.addEventListener( 'dispose', this.
|
|
102
|
+
this._texture.addEventListener( 'dispose', this._onTextureDispose );
|
|
88
103
|
|
|
89
104
|
}
|
|
90
105
|
|
|
@@ -122,6 +137,29 @@ class Sampler extends Binding {
|
|
|
122
137
|
|
|
123
138
|
}
|
|
124
139
|
|
|
140
|
+
|
|
141
|
+
clone() {
|
|
142
|
+
|
|
143
|
+
const clonedSampler = super.clone();
|
|
144
|
+
|
|
145
|
+
// fix dispose handler for cloned instances
|
|
146
|
+
// TODO: Find better solution, see #31747
|
|
147
|
+
|
|
148
|
+
clonedSampler._texture = null;
|
|
149
|
+
|
|
150
|
+
clonedSampler._onTextureDispose = () => {
|
|
151
|
+
|
|
152
|
+
clonedSampler.generation = null;
|
|
153
|
+
clonedSampler.version = - 1;
|
|
154
|
+
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
clonedSampler.texture = this.texture;
|
|
158
|
+
|
|
159
|
+
return clonedSampler;
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
125
163
|
}
|
|
126
164
|
|
|
127
165
|
export default Sampler;
|
|
@@ -21,9 +21,10 @@ class StorageBuffer extends Buffer {
|
|
|
21
21
|
/**
|
|
22
22
|
* This flag can be used for type testing.
|
|
23
23
|
*
|
|
24
|
+
* @private
|
|
24
25
|
* @type {BufferAttribute}
|
|
25
26
|
*/
|
|
26
|
-
this.
|
|
27
|
+
this._attribute = attribute;
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* This flag can be used for type testing.
|
|
@@ -36,6 +37,17 @@ class StorageBuffer extends Buffer {
|
|
|
36
37
|
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
/**
|
|
41
|
+
* The storage buffer attribute.
|
|
42
|
+
*
|
|
43
|
+
* @type {BufferAttribute}
|
|
44
|
+
*/
|
|
45
|
+
get attribute() {
|
|
46
|
+
|
|
47
|
+
return this._attribute;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
39
51
|
}
|
|
40
52
|
|
|
41
53
|
export default StorageBuffer;
|
|
@@ -52,8 +52,16 @@ class StorageTexture extends Texture {
|
|
|
52
52
|
*/
|
|
53
53
|
this.isStorageTexture = true;
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
/**
|
|
56
|
+
* When `true`, mipmaps will be auto-generated after compute writes.
|
|
57
|
+
* When `false`, mipmaps must be written manually via compute shaders.
|
|
58
|
+
*
|
|
59
|
+
* @type {boolean}
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
this.mipmapsAutoUpdate = true;
|
|
56
63
|
|
|
64
|
+
}
|
|
57
65
|
/**
|
|
58
66
|
* Sets the size of the storage texture.
|
|
59
67
|
*
|
|
@@ -2,7 +2,9 @@ import DataMap from './DataMap.js';
|
|
|
2
2
|
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
4
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
5
|
-
import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType } from '../../constants.js';
|
|
5
|
+
import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType, SRGBTransfer } from '../../constants.js';
|
|
6
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
6
8
|
|
|
7
9
|
const _size = /*@__PURE__*/ new Vector3();
|
|
8
10
|
|
|
@@ -46,6 +48,13 @@ class Textures extends DataMap {
|
|
|
46
48
|
*/
|
|
47
49
|
this.info = info;
|
|
48
50
|
|
|
51
|
+
/**
|
|
52
|
+
* A set of HTMLTextures that need paint updates.
|
|
53
|
+
*
|
|
54
|
+
* @type {Set<HTMLTexture>}
|
|
55
|
+
*/
|
|
56
|
+
this._htmlTextures = new Set();
|
|
57
|
+
|
|
49
58
|
}
|
|
50
59
|
|
|
51
60
|
/**
|
|
@@ -83,6 +92,7 @@ class Textures extends DataMap {
|
|
|
83
92
|
depthTexture.image.width = mipWidth;
|
|
84
93
|
depthTexture.image.height = mipHeight;
|
|
85
94
|
depthTexture.image.depth = size.depth;
|
|
95
|
+
depthTexture.renderTarget = renderTarget;
|
|
86
96
|
depthTexture.isArrayTexture = renderTarget.multiview === true && size.depth > 1;
|
|
87
97
|
|
|
88
98
|
depthTextureMips[ activeMipmapLevel ] = depthTexture;
|
|
@@ -159,29 +169,17 @@ class Textures extends DataMap {
|
|
|
159
169
|
|
|
160
170
|
renderTargetData.initialized = true;
|
|
161
171
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const onDispose = () => {
|
|
165
|
-
|
|
166
|
-
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
167
|
-
|
|
168
|
-
for ( let i = 0; i < textures.length; i ++ ) {
|
|
172
|
+
this.info.memory.renderTargets ++;
|
|
169
173
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if ( depthTexture ) {
|
|
175
|
-
|
|
176
|
-
this._destroyTexture( depthTexture );
|
|
174
|
+
// dispose
|
|
177
175
|
|
|
178
|
-
|
|
176
|
+
renderTargetData.onDispose = () => {
|
|
179
177
|
|
|
180
|
-
this.
|
|
178
|
+
this._destroyRenderTarget( renderTarget );
|
|
181
179
|
|
|
182
180
|
};
|
|
183
181
|
|
|
184
|
-
renderTarget.addEventListener( 'dispose', onDispose );
|
|
182
|
+
renderTarget.addEventListener( 'dispose', renderTargetData.onDispose );
|
|
185
183
|
|
|
186
184
|
}
|
|
187
185
|
|
|
@@ -207,7 +205,6 @@ class Textures extends DataMap {
|
|
|
207
205
|
|
|
208
206
|
// it's an update
|
|
209
207
|
|
|
210
|
-
backend.destroySampler( texture );
|
|
211
208
|
backend.destroyTexture( texture );
|
|
212
209
|
|
|
213
210
|
}
|
|
@@ -230,6 +227,56 @@ class Textures extends DataMap {
|
|
|
230
227
|
|
|
231
228
|
}
|
|
232
229
|
|
|
230
|
+
// Ensure HTMLTexture elements are in the canvas before measuring size.
|
|
231
|
+
|
|
232
|
+
if ( texture.isHTMLTexture && texture.image ) {
|
|
233
|
+
|
|
234
|
+
const canvas = this.renderer.domElement;
|
|
235
|
+
|
|
236
|
+
if ( 'requestPaint' in canvas ) {
|
|
237
|
+
|
|
238
|
+
if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
|
|
239
|
+
|
|
240
|
+
canvas.setAttribute( 'layoutsubtree', 'true' );
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if ( texture.image.parentNode !== canvas ) {
|
|
245
|
+
|
|
246
|
+
canvas.appendChild( texture.image );
|
|
247
|
+
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Set up shared paint callback for all HTMLTextures.
|
|
251
|
+
|
|
252
|
+
if ( this._htmlTextures.size === 0 ) {
|
|
253
|
+
|
|
254
|
+
const htmlTextures = this._htmlTextures;
|
|
255
|
+
|
|
256
|
+
canvas.onpaint = ( event ) => {
|
|
257
|
+
|
|
258
|
+
const changed = event && event.changedElements;
|
|
259
|
+
|
|
260
|
+
for ( const t of htmlTextures ) {
|
|
261
|
+
|
|
262
|
+
if ( ! changed || changed.includes( t.image ) ) {
|
|
263
|
+
|
|
264
|
+
t.needsUpdate = true;
|
|
265
|
+
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
this._htmlTextures.add( texture );
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
233
280
|
//
|
|
234
281
|
|
|
235
282
|
const { width, height, depth } = this.getSize( texture );
|
|
@@ -240,32 +287,33 @@ class Textures extends DataMap {
|
|
|
240
287
|
options.needsMipmaps = this.needsMipmaps( texture );
|
|
241
288
|
options.levels = options.needsMipmaps ? this.getMipLevels( texture, width, height ) : 1;
|
|
242
289
|
|
|
290
|
+
// TODO: Uniformly handle mipmap definitions
|
|
291
|
+
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
292
|
+
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
293
|
+
|
|
294
|
+
if ( texture.isCubeTexture && texture.mipmaps.length > 0 ) options.levels ++;
|
|
295
|
+
|
|
243
296
|
//
|
|
244
297
|
|
|
245
|
-
if ( isRenderTarget || texture.isStorageTexture === true ) {
|
|
298
|
+
if ( isRenderTarget || texture.isStorageTexture === true || texture.isExternalTexture === true ) {
|
|
246
299
|
|
|
247
|
-
backend.createSampler( texture );
|
|
248
300
|
backend.createTexture( texture, options );
|
|
249
301
|
|
|
250
302
|
textureData.generation = texture.version;
|
|
251
303
|
|
|
252
304
|
} else {
|
|
253
305
|
|
|
254
|
-
const needsCreate = textureData.initialized !== true;
|
|
255
|
-
|
|
256
|
-
if ( needsCreate ) backend.createSampler( texture );
|
|
257
|
-
|
|
258
306
|
if ( texture.version > 0 ) {
|
|
259
307
|
|
|
260
308
|
const image = texture.image;
|
|
261
309
|
|
|
262
310
|
if ( image === undefined ) {
|
|
263
311
|
|
|
264
|
-
|
|
312
|
+
warn( 'Renderer: Texture marked for update but image is undefined.' );
|
|
265
313
|
|
|
266
314
|
} else if ( image.complete === false ) {
|
|
267
315
|
|
|
268
|
-
|
|
316
|
+
warn( 'Renderer: Texture marked for update but image is incomplete.' );
|
|
269
317
|
|
|
270
318
|
} else {
|
|
271
319
|
|
|
@@ -298,7 +346,15 @@ class Textures extends DataMap {
|
|
|
298
346
|
|
|
299
347
|
if ( texture.source.dataReady === true ) backend.updateTexture( texture, options );
|
|
300
348
|
|
|
301
|
-
|
|
349
|
+
const skipAutoGeneration = texture.isStorageTexture === true && texture.mipmapsAutoUpdate === false;
|
|
350
|
+
|
|
351
|
+
if ( options.needsMipmaps && texture.mipmaps.length === 0 && ! skipAutoGeneration ) {
|
|
352
|
+
|
|
353
|
+
backend.generateMipmaps( texture );
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
302
358
|
|
|
303
359
|
}
|
|
304
360
|
|
|
@@ -321,22 +377,29 @@ class Textures extends DataMap {
|
|
|
321
377
|
|
|
322
378
|
textureData.initialized = true;
|
|
323
379
|
textureData.generation = texture.version;
|
|
380
|
+
textureData.bindGroups = new Set();
|
|
324
381
|
|
|
325
382
|
//
|
|
326
383
|
|
|
327
|
-
this.info.
|
|
384
|
+
this.info.createTexture( texture );
|
|
328
385
|
|
|
329
|
-
//
|
|
386
|
+
//
|
|
387
|
+
|
|
388
|
+
if ( texture.isVideoTexture && ColorManagement.enabled === true && ColorManagement.getTransfer( texture.colorSpace ) !== SRGBTransfer ) {
|
|
330
389
|
|
|
331
|
-
|
|
390
|
+
warn( 'WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace.' );
|
|
332
391
|
|
|
333
|
-
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// dispose
|
|
395
|
+
|
|
396
|
+
textureData.onDispose = () => {
|
|
334
397
|
|
|
335
398
|
this._destroyTexture( texture );
|
|
336
399
|
|
|
337
400
|
};
|
|
338
401
|
|
|
339
|
-
texture.addEventListener( 'dispose', onDispose );
|
|
402
|
+
texture.addEventListener( 'dispose', textureData.onDispose );
|
|
340
403
|
|
|
341
404
|
}
|
|
342
405
|
|
|
@@ -346,6 +409,24 @@ class Textures extends DataMap {
|
|
|
346
409
|
|
|
347
410
|
}
|
|
348
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Updates the sampler for the given texture. This method has no effect
|
|
414
|
+
* for the WebGL backend since it has no concept of samplers. Texture
|
|
415
|
+
* parameters are configured with the `texParameter()` command for each
|
|
416
|
+
* texture.
|
|
417
|
+
*
|
|
418
|
+
* In WebGPU, samplers are objects like textures and it's possible to share
|
|
419
|
+
* them when the texture parameters match.
|
|
420
|
+
*
|
|
421
|
+
* @param {Texture} texture - The texture to update the sampler for.
|
|
422
|
+
* @return {string} The current sampler key.
|
|
423
|
+
*/
|
|
424
|
+
updateSampler( texture ) {
|
|
425
|
+
|
|
426
|
+
return this.backend.updateSampler( texture );
|
|
427
|
+
|
|
428
|
+
}
|
|
429
|
+
|
|
349
430
|
/**
|
|
350
431
|
* Computes the size of the given texture and writes the result
|
|
351
432
|
* into the target vector. This vector is also returned by the
|
|
@@ -366,13 +447,19 @@ class Textures extends DataMap {
|
|
|
366
447
|
|
|
367
448
|
if ( image.image !== undefined ) image = image.image;
|
|
368
449
|
|
|
369
|
-
if (
|
|
450
|
+
if ( texture.isHTMLTexture ) {
|
|
451
|
+
|
|
452
|
+
target.width = image.offsetWidth || 1;
|
|
453
|
+
target.height = image.offsetHeight || 1;
|
|
454
|
+
target.depth = 1;
|
|
455
|
+
|
|
456
|
+
} else if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( image instanceof HTMLVideoElement ) ) {
|
|
370
457
|
|
|
371
458
|
target.width = image.videoWidth || 1;
|
|
372
459
|
target.height = image.videoHeight || 1;
|
|
373
460
|
target.depth = 1;
|
|
374
461
|
|
|
375
|
-
} else if ( image instanceof VideoFrame ) {
|
|
462
|
+
} else if ( ( typeof VideoFrame !== 'undefined' ) && ( image instanceof VideoFrame ) ) {
|
|
376
463
|
|
|
377
464
|
target.width = image.displayWidth || 1;
|
|
378
465
|
target.height = image.displayHeight || 1;
|
|
@@ -408,21 +495,25 @@ class Textures extends DataMap {
|
|
|
408
495
|
|
|
409
496
|
let mipLevelCount;
|
|
410
497
|
|
|
411
|
-
if ( texture.
|
|
498
|
+
if ( texture.mipmaps.length > 0 ) {
|
|
412
499
|
|
|
413
|
-
|
|
500
|
+
mipLevelCount = texture.mipmaps.length;
|
|
414
501
|
|
|
415
|
-
|
|
502
|
+
} else {
|
|
416
503
|
|
|
417
|
-
|
|
504
|
+
if ( texture.isCompressedTexture === true ) {
|
|
505
|
+
|
|
506
|
+
// it is not possible to compute mipmaps for compressed textures. So
|
|
507
|
+
// when no mipmaps are defined in "texture.mipmaps", force a texture
|
|
508
|
+
// level of 1
|
|
418
509
|
|
|
419
510
|
mipLevelCount = 1;
|
|
420
511
|
|
|
421
|
-
}
|
|
512
|
+
} else {
|
|
422
513
|
|
|
423
|
-
|
|
514
|
+
mipLevelCount = Math.floor( Math.log2( Math.max( width, height ) ) ) + 1;
|
|
424
515
|
|
|
425
|
-
|
|
516
|
+
}
|
|
426
517
|
|
|
427
518
|
}
|
|
428
519
|
|
|
@@ -431,14 +522,56 @@ class Textures extends DataMap {
|
|
|
431
522
|
}
|
|
432
523
|
|
|
433
524
|
/**
|
|
434
|
-
* Returns `true` if the given texture
|
|
525
|
+
* Returns `true` if the given texture makes use of mipmapping.
|
|
435
526
|
*
|
|
436
527
|
* @param {Texture} texture - The texture.
|
|
437
528
|
* @return {boolean} Whether mipmaps are required or not.
|
|
438
529
|
*/
|
|
439
530
|
needsMipmaps( texture ) {
|
|
440
531
|
|
|
441
|
-
return texture.
|
|
532
|
+
return texture.generateMipmaps === true || texture.mipmaps.length > 0;
|
|
533
|
+
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Frees internal resources when the given render target isn't
|
|
538
|
+
* required anymore.
|
|
539
|
+
*
|
|
540
|
+
* @param {RenderTarget} renderTarget - The render target to destroy.
|
|
541
|
+
*/
|
|
542
|
+
_destroyRenderTarget( renderTarget ) {
|
|
543
|
+
|
|
544
|
+
if ( this.has( renderTarget ) === true ) {
|
|
545
|
+
|
|
546
|
+
const renderTargetData = this.get( renderTarget );
|
|
547
|
+
|
|
548
|
+
const textures = renderTargetData.textures;
|
|
549
|
+
const depthTexture = renderTargetData.depthTexture;
|
|
550
|
+
|
|
551
|
+
//
|
|
552
|
+
|
|
553
|
+
renderTarget.removeEventListener( 'dispose', renderTargetData.onDispose );
|
|
554
|
+
|
|
555
|
+
//
|
|
556
|
+
|
|
557
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
558
|
+
|
|
559
|
+
this._destroyTexture( textures[ i ] );
|
|
560
|
+
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
if ( depthTexture ) {
|
|
564
|
+
|
|
565
|
+
this._destroyTexture( depthTexture );
|
|
566
|
+
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
this.delete( renderTarget );
|
|
570
|
+
this.backend.delete( renderTarget );
|
|
571
|
+
|
|
572
|
+
this.info.memory.renderTargets --;
|
|
573
|
+
|
|
574
|
+
}
|
|
442
575
|
|
|
443
576
|
}
|
|
444
577
|
|
|
@@ -452,12 +585,40 @@ class Textures extends DataMap {
|
|
|
452
585
|
|
|
453
586
|
if ( this.has( texture ) === true ) {
|
|
454
587
|
|
|
455
|
-
this.
|
|
456
|
-
|
|
588
|
+
const textureData = this.get( texture );
|
|
589
|
+
|
|
590
|
+
//
|
|
591
|
+
|
|
592
|
+
texture.removeEventListener( 'dispose', textureData.onDispose );
|
|
593
|
+
|
|
594
|
+
// if a texture is not ready for use, it falls back to a default texture so it's possible
|
|
595
|
+
// to use it for rendering. If a texture in this state is disposed, it's important to
|
|
596
|
+
// not destroy/delete the underlying GPU texture object since it is cached and shared with
|
|
597
|
+
// other textures.
|
|
598
|
+
|
|
599
|
+
const isDefaultTexture = textureData.isDefaultTexture;
|
|
600
|
+
this.backend.destroyTexture( texture, isDefaultTexture );
|
|
601
|
+
|
|
602
|
+
// delete cached bind groups so they don't point to destroyed textures
|
|
603
|
+
|
|
604
|
+
if ( textureData.bindGroups ) {
|
|
605
|
+
|
|
606
|
+
for ( const bindGroup of textureData.bindGroups ) {
|
|
607
|
+
|
|
608
|
+
const bindingsData = this.backend.get( bindGroup );
|
|
609
|
+
|
|
610
|
+
bindingsData.groups = undefined;
|
|
611
|
+
bindingsData.versions = undefined;
|
|
612
|
+
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
this._htmlTextures.delete( texture );
|
|
457
618
|
|
|
458
619
|
this.delete( texture );
|
|
459
620
|
|
|
460
|
-
this.info.
|
|
621
|
+
this.info.destroyTexture( texture );
|
|
461
622
|
|
|
462
623
|
}
|
|
463
624
|
|