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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warnOnce } from '../../../utils.js';
|
|
1
|
+
import { error, warnOnce } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -46,10 +46,10 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
46
46
|
/**
|
|
47
47
|
* Allocates a pair of queries for a given render context.
|
|
48
48
|
*
|
|
49
|
-
* @param {
|
|
49
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
50
50
|
* @returns {?number} The base offset for the allocated queries, or null if allocation failed.
|
|
51
51
|
*/
|
|
52
|
-
allocateQueriesForContext(
|
|
52
|
+
allocateQueriesForContext( uid ) {
|
|
53
53
|
|
|
54
54
|
if ( ! this.trackTimestamp || this.isDisposed ) return null;
|
|
55
55
|
|
|
@@ -63,7 +63,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
63
63
|
const baseOffset = this.currentQueryIndex;
|
|
64
64
|
this.currentQueryIndex += 2;
|
|
65
65
|
|
|
66
|
-
this.queryOffsets.set(
|
|
66
|
+
this.queryOffsets.set( uid, baseOffset );
|
|
67
|
+
|
|
67
68
|
return baseOffset;
|
|
68
69
|
|
|
69
70
|
}
|
|
@@ -177,26 +178,48 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
177
178
|
|
|
178
179
|
}
|
|
179
180
|
|
|
181
|
+
//
|
|
182
|
+
|
|
180
183
|
const times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );
|
|
181
|
-
|
|
184
|
+
const framesDuration = {};
|
|
185
|
+
|
|
186
|
+
const frames = [];
|
|
187
|
+
|
|
188
|
+
for ( const [ uid, baseOffset ] of currentOffsets ) {
|
|
189
|
+
|
|
190
|
+
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
191
|
+
const frame = parseInt( match[ 2 ] );
|
|
192
|
+
|
|
193
|
+
if ( frames.includes( frame ) === false ) {
|
|
182
194
|
|
|
183
|
-
|
|
195
|
+
frames.push( frame );
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
|
|
184
200
|
|
|
185
201
|
const startTime = times[ baseOffset ];
|
|
186
202
|
const endTime = times[ baseOffset + 1 ];
|
|
187
203
|
const duration = Number( endTime - startTime ) / 1e6;
|
|
188
|
-
|
|
204
|
+
|
|
205
|
+
this.timestamps.set( uid, duration );
|
|
206
|
+
|
|
207
|
+
framesDuration[ frame ] += duration;
|
|
189
208
|
|
|
190
209
|
}
|
|
191
210
|
|
|
211
|
+
// Return the total duration of the last frame
|
|
212
|
+
const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
|
|
213
|
+
|
|
192
214
|
this.resultBuffer.unmap();
|
|
193
215
|
this.lastValue = totalDuration;
|
|
216
|
+
this.frames = frames;
|
|
194
217
|
|
|
195
218
|
return totalDuration;
|
|
196
219
|
|
|
197
|
-
} catch (
|
|
220
|
+
} catch ( e ) {
|
|
198
221
|
|
|
199
|
-
|
|
222
|
+
error( 'Error resolving queries:', e );
|
|
200
223
|
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
201
224
|
|
|
202
225
|
this.resultBuffer.unmap();
|
|
@@ -232,9 +255,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
232
255
|
|
|
233
256
|
await this.pendingResolve;
|
|
234
257
|
|
|
235
|
-
} catch (
|
|
258
|
+
} catch ( e ) {
|
|
236
259
|
|
|
237
|
-
|
|
260
|
+
error( 'Error waiting for pending resolve:', e );
|
|
238
261
|
|
|
239
262
|
}
|
|
240
263
|
|
|
@@ -247,9 +270,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
247
270
|
|
|
248
271
|
this.resultBuffer.unmap();
|
|
249
272
|
|
|
250
|
-
} catch (
|
|
273
|
+
} catch ( e ) {
|
|
251
274
|
|
|
252
|
-
|
|
275
|
+
error( 'Error unmapping buffer:', e );
|
|
253
276
|
|
|
254
277
|
}
|
|
255
278
|
|
|
@@ -34,17 +34,37 @@ class WebGPUUtils {
|
|
|
34
34
|
|
|
35
35
|
let format;
|
|
36
36
|
|
|
37
|
-
if ( renderContext.
|
|
37
|
+
if ( renderContext.depth ) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
if ( renderContext.depthTexture !== null ) {
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
format = this.getTextureFormatGPU( renderContext.depthTexture );
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
} else if ( renderContext.stencil ) {
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
if ( this.backend.renderer.reversedDepthBuffer === true ) {
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
format = GPUTextureFormat.Depth32FloatStencil8;
|
|
48
|
+
|
|
49
|
+
} else {
|
|
50
|
+
|
|
51
|
+
format = GPUTextureFormat.Depth24PlusStencil8;
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} else {
|
|
56
|
+
|
|
57
|
+
if ( this.backend.renderer.reversedDepthBuffer === true ) {
|
|
58
|
+
|
|
59
|
+
format = GPUTextureFormat.Depth32Float;
|
|
60
|
+
|
|
61
|
+
} else {
|
|
62
|
+
|
|
63
|
+
format = GPUTextureFormat.Depth24Plus;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
48
68
|
|
|
49
69
|
}
|
|
50
70
|
|
|
@@ -83,7 +103,7 @@ class WebGPUUtils {
|
|
|
83
103
|
const renderer = this.backend.renderer;
|
|
84
104
|
const renderTarget = renderer.getRenderTarget();
|
|
85
105
|
|
|
86
|
-
samples = renderTarget ? renderTarget.samples : renderer.
|
|
106
|
+
samples = renderTarget ? renderTarget.samples : renderer.currentSamples;
|
|
87
107
|
|
|
88
108
|
} else if ( texture.renderTarget ) {
|
|
89
109
|
|
|
@@ -124,6 +144,26 @@ class WebGPUUtils {
|
|
|
124
144
|
|
|
125
145
|
}
|
|
126
146
|
|
|
147
|
+
/**
|
|
148
|
+
* Returns the GPU formats of all color attachments of the current render context.
|
|
149
|
+
*
|
|
150
|
+
* @param {RenderContext} renderContext - The render context.
|
|
151
|
+
* @return {Array<string>} The GPU texture formats of all color attachments.
|
|
152
|
+
*/
|
|
153
|
+
getCurrentColorFormats( renderContext ) {
|
|
154
|
+
|
|
155
|
+
if ( renderContext.textures !== null ) {
|
|
156
|
+
|
|
157
|
+
return renderContext.textures.map( t => this.getTextureFormatGPU( t ) );
|
|
158
|
+
|
|
159
|
+
} else {
|
|
160
|
+
|
|
161
|
+
return [ this.getPreferredCanvasFormat() ]; // default context format
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
127
167
|
/**
|
|
128
168
|
* Returns the output color space of the current render context.
|
|
129
169
|
*
|
|
@@ -186,7 +226,7 @@ class WebGPUUtils {
|
|
|
186
226
|
|
|
187
227
|
}
|
|
188
228
|
|
|
189
|
-
return this.getSampleCount( this.backend.renderer.
|
|
229
|
+
return this.getSampleCount( this.backend.renderer.currentSamples );
|
|
190
230
|
|
|
191
231
|
}
|
|
192
232
|
|
|
@@ -200,23 +240,25 @@ class WebGPUUtils {
|
|
|
200
240
|
*/
|
|
201
241
|
getPreferredCanvasFormat() {
|
|
202
242
|
|
|
203
|
-
const
|
|
243
|
+
const parameters = this.backend.parameters;
|
|
244
|
+
|
|
245
|
+
const bufferType = parameters.outputType;
|
|
204
246
|
|
|
205
|
-
if (
|
|
247
|
+
if ( bufferType === undefined ) {
|
|
206
248
|
|
|
207
249
|
return navigator.gpu.getPreferredCanvasFormat();
|
|
208
250
|
|
|
209
|
-
} else if (
|
|
251
|
+
} else if ( bufferType === UnsignedByteType ) {
|
|
210
252
|
|
|
211
253
|
return GPUTextureFormat.BGRA8Unorm;
|
|
212
254
|
|
|
213
|
-
} else if (
|
|
255
|
+
} else if ( bufferType === HalfFloatType ) {
|
|
214
256
|
|
|
215
257
|
return GPUTextureFormat.RGBA16Float;
|
|
216
258
|
|
|
217
259
|
} else {
|
|
218
260
|
|
|
219
|
-
throw new Error( 'Unsupported
|
|
261
|
+
throw new Error( 'Unsupported output buffer type.' );
|
|
220
262
|
|
|
221
263
|
}
|
|
222
264
|
|
|
@@ -109,6 +109,7 @@ class WebXRController {
|
|
|
109
109
|
this._grip.linearVelocity = new Vector3();
|
|
110
110
|
this._grip.hasAngularVelocity = false;
|
|
111
111
|
this._grip.angularVelocity = new Vector3();
|
|
112
|
+
this._grip.eventsEnabled = false;
|
|
112
113
|
|
|
113
114
|
}
|
|
114
115
|
|
|
@@ -321,6 +322,17 @@ class WebXRController {
|
|
|
321
322
|
|
|
322
323
|
}
|
|
323
324
|
|
|
325
|
+
// grip update event if enabled
|
|
326
|
+
if ( grip.eventsEnabled ) {
|
|
327
|
+
|
|
328
|
+
grip.dispatchEvent( {
|
|
329
|
+
type: 'gripUpdated',
|
|
330
|
+
data: inputSource,
|
|
331
|
+
target: this
|
|
332
|
+
} );
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
324
336
|
}
|
|
325
337
|
|
|
326
338
|
}
|
|
@@ -13,6 +13,7 @@ import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
|
13
13
|
import { ExternalTexture } from '../../textures/ExternalTexture.js';
|
|
14
14
|
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
|
|
15
15
|
import { WebXRDepthSensing } from './WebXRDepthSensing.js';
|
|
16
|
+
import { warn } from '../../utils.js';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* This class represents an abstraction of the WebXR Device API and is
|
|
@@ -30,6 +31,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
30
31
|
*
|
|
31
32
|
* @param {WebGLRenderer} renderer - The renderer.
|
|
32
33
|
* @param {WebGL2RenderingContext} gl - The rendering context.
|
|
34
|
+
* @param {WebGLExtensions} extensions - The WebGL extensions helper.
|
|
35
|
+
* @param {boolean} useMultiview - Whether to enable OCULUS_multiview when available.
|
|
33
36
|
*/
|
|
34
37
|
constructor( renderer, gl, extensions, useMultiview ) {
|
|
35
38
|
|
|
@@ -56,6 +59,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
56
59
|
let glBaseLayer = null;
|
|
57
60
|
let xrFrame = null;
|
|
58
61
|
|
|
62
|
+
const supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
|
|
63
|
+
|
|
59
64
|
const depthSensing = new WebXRDepthSensing();
|
|
60
65
|
const cameraAccessTextures = {};
|
|
61
66
|
const attributes = gl.getContextAttributes();
|
|
@@ -287,7 +292,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
287
292
|
|
|
288
293
|
if ( scope.isPresenting === true ) {
|
|
289
294
|
|
|
290
|
-
|
|
295
|
+
warn( 'WebXRManager: Cannot change framebuffer scale while presenting.' );
|
|
291
296
|
|
|
292
297
|
}
|
|
293
298
|
|
|
@@ -309,7 +314,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
309
314
|
|
|
310
315
|
if ( scope.isPresenting === true ) {
|
|
311
316
|
|
|
312
|
-
|
|
317
|
+
warn( 'WebXRManager: Cannot change reference space type while presenting.' );
|
|
313
318
|
|
|
314
319
|
}
|
|
315
320
|
|
|
@@ -340,6 +345,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
340
345
|
/**
|
|
341
346
|
* Returns the current base layer.
|
|
342
347
|
*
|
|
348
|
+
* This is an `XRProjectionLayer` when the targeted XR device supports the
|
|
349
|
+
* WebXR Layers API, or an `XRWebGLLayer` otherwise.
|
|
350
|
+
*
|
|
343
351
|
* @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.
|
|
344
352
|
*/
|
|
345
353
|
this.getBaseLayer = function () {
|
|
@@ -351,10 +359,19 @@ class WebXRManager extends EventDispatcher {
|
|
|
351
359
|
/**
|
|
352
360
|
* Returns the current XR binding.
|
|
353
361
|
*
|
|
354
|
-
*
|
|
362
|
+
* Creates a new binding if needed and the browser is
|
|
363
|
+
* capable of doing so.
|
|
364
|
+
*
|
|
365
|
+
* @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.
|
|
355
366
|
*/
|
|
356
367
|
this.getBinding = function () {
|
|
357
368
|
|
|
369
|
+
if ( glBinding === null && supportsGlBinding ) {
|
|
370
|
+
|
|
371
|
+
glBinding = new XRWebGLBinding( session, gl );
|
|
372
|
+
|
|
373
|
+
}
|
|
374
|
+
|
|
358
375
|
return glBinding;
|
|
359
376
|
|
|
360
377
|
};
|
|
@@ -422,17 +439,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
422
439
|
currentPixelRatio = renderer.getPixelRatio();
|
|
423
440
|
renderer.getSize( currentSize );
|
|
424
441
|
|
|
425
|
-
if ( typeof XRWebGLBinding !== 'undefined' ) {
|
|
426
|
-
|
|
427
|
-
glBinding = new XRWebGLBinding( session, gl );
|
|
428
|
-
|
|
429
|
-
}
|
|
430
442
|
|
|
431
443
|
// Check that the browser implements the necessary APIs to use an
|
|
432
444
|
// XRProjectionLayer rather than an XRWebGLLayer
|
|
433
|
-
const
|
|
445
|
+
const supportsLayers = supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype;
|
|
434
446
|
|
|
435
|
-
if ( !
|
|
447
|
+
if ( ! supportsLayers ) {
|
|
436
448
|
|
|
437
449
|
const layerInit = {
|
|
438
450
|
antialias: attributes.antialias,
|
|
@@ -491,7 +503,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
491
503
|
|
|
492
504
|
}
|
|
493
505
|
|
|
494
|
-
glBinding =
|
|
506
|
+
glBinding = this.getBinding();
|
|
495
507
|
|
|
496
508
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
497
509
|
|
|
@@ -587,6 +599,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
587
599
|
/**
|
|
588
600
|
* Returns the current depth texture computed via depth sensing.
|
|
589
601
|
*
|
|
602
|
+
* See {@link WebXRDepthSensing#getDepthTexture}.
|
|
603
|
+
*
|
|
590
604
|
* @return {?Texture} The depth texture.
|
|
591
605
|
*/
|
|
592
606
|
this.getDepthTexture = function () {
|
|
@@ -763,7 +777,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
763
777
|
|
|
764
778
|
/**
|
|
765
779
|
* Updates the state of the XR camera. Use this method on app level if you
|
|
766
|
-
* set cameraAutoUpdate` to `false`. The method requires the non-XR
|
|
780
|
+
* set `cameraAutoUpdate` to `false`. The method requires the non-XR
|
|
767
781
|
* camera of the scene as a parameter. The passed in camera's transformation
|
|
768
782
|
* is automatically adjusted to the position of the XR camera when calling
|
|
769
783
|
* this method.
|
|
@@ -803,8 +817,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
803
817
|
|
|
804
818
|
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
805
819
|
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
806
|
-
cameraL.layers.mask = cameraXR.layers.mask &
|
|
807
|
-
cameraR.layers.mask = cameraXR.layers.mask &
|
|
820
|
+
cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
|
|
821
|
+
cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
|
|
808
822
|
|
|
809
823
|
const cameras = cameraXR.cameras;
|
|
810
824
|
var object = poseTarget || camera;
|
|
@@ -941,6 +955,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
941
955
|
/**
|
|
942
956
|
* Returns the depth sensing mesh.
|
|
943
957
|
*
|
|
958
|
+
* See {@link WebXRDepthSensing#getMesh}.
|
|
959
|
+
*
|
|
944
960
|
* @return {Mesh} The depth sensing mesh.
|
|
945
961
|
*/
|
|
946
962
|
this.getDepthSensingMesh = function () {
|
|
@@ -1061,7 +1077,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
1061
1077
|
enabledFeatures.includes( 'depth-sensing' ) &&
|
|
1062
1078
|
session.depthUsage == 'gpu-optimized';
|
|
1063
1079
|
|
|
1064
|
-
if ( gpuDepthSensingEnabled &&
|
|
1080
|
+
if ( gpuDepthSensingEnabled && supportsGlBinding ) {
|
|
1081
|
+
|
|
1082
|
+
glBinding = scope.getBinding();
|
|
1065
1083
|
|
|
1066
1084
|
const depthData = glBinding.getDepthInformation( views[ 0 ] );
|
|
1067
1085
|
|
|
@@ -1076,32 +1094,30 @@ class WebXRManager extends EventDispatcher {
|
|
|
1076
1094
|
const cameraAccessEnabled = enabledFeatures &&
|
|
1077
1095
|
enabledFeatures.includes( 'camera-access' );
|
|
1078
1096
|
|
|
1079
|
-
if ( cameraAccessEnabled ) {
|
|
1097
|
+
if ( cameraAccessEnabled && supportsGlBinding ) {
|
|
1080
1098
|
|
|
1081
1099
|
renderer.state.unbindTexture();
|
|
1082
1100
|
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
for ( let i = 0; i < views.length; i ++ ) {
|
|
1101
|
+
glBinding = scope.getBinding();
|
|
1086
1102
|
|
|
1087
|
-
|
|
1103
|
+
for ( let i = 0; i < views.length; i ++ ) {
|
|
1088
1104
|
|
|
1089
|
-
|
|
1105
|
+
const camera = views[ i ].camera;
|
|
1090
1106
|
|
|
1091
|
-
|
|
1107
|
+
if ( camera ) {
|
|
1092
1108
|
|
|
1093
|
-
|
|
1109
|
+
let cameraTex = cameraAccessTextures[ camera ];
|
|
1094
1110
|
|
|
1095
|
-
|
|
1096
|
-
cameraAccessTextures[ camera ] = cameraTex;
|
|
1111
|
+
if ( ! cameraTex ) {
|
|
1097
1112
|
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
const glTexture = glBinding.getCameraImage( camera );
|
|
1101
|
-
cameraTex.sourceTexture = glTexture;
|
|
1113
|
+
cameraTex = new ExternalTexture();
|
|
1114
|
+
cameraAccessTextures[ camera ] = cameraTex;
|
|
1102
1115
|
|
|
1103
1116
|
}
|
|
1104
1117
|
|
|
1118
|
+
const glTexture = glBinding.getCameraImage( camera );
|
|
1119
|
+
cameraTex.sourceTexture = glTexture;
|
|
1120
|
+
|
|
1105
1121
|
}
|
|
1106
1122
|
|
|
1107
1123
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { DepthTexture } from './DepthTexture.js';
|
|
2
|
+
import { CubeReflectionMapping, NearestFilter, UnsignedIntType, DepthFormat } from '../constants.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This class can be used to automatically save the depth information of a
|
|
6
|
+
* cube rendering into a cube texture with depth format. Used for PointLight shadows.
|
|
7
|
+
*
|
|
8
|
+
* @augments DepthTexture
|
|
9
|
+
*/
|
|
10
|
+
class CubeDepthTexture extends DepthTexture {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new cube depth texture.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} size - The size (width and height) of each cube face.
|
|
16
|
+
* @param {number} [type=UnsignedIntType] - The texture type.
|
|
17
|
+
* @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=NearestFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=NearestFilter] - The min filter value.
|
|
22
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
23
|
+
* @param {number} [format=DepthFormat] - The texture format.
|
|
24
|
+
*/
|
|
25
|
+
constructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
|
|
26
|
+
|
|
27
|
+
// Create 6 identical image descriptors for the cube faces
|
|
28
|
+
const image = { width: size, height: size, depth: 1 };
|
|
29
|
+
const images = [ image, image, image, image, image, image ];
|
|
30
|
+
|
|
31
|
+
// Call DepthTexture constructor with width, height
|
|
32
|
+
super( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );
|
|
33
|
+
|
|
34
|
+
// Replace the single image with the array of 6 images
|
|
35
|
+
this.image = images;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
44
|
+
this.isCubeDepthTexture = true;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Set to true for cube texture handling in WebGLTextures.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
this.isCubeTexture = true;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Alias for {@link CubeDepthTexture#image}.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<Image>}
|
|
61
|
+
*/
|
|
62
|
+
get images() {
|
|
63
|
+
|
|
64
|
+
return this.image;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
set images( value ) {
|
|
69
|
+
|
|
70
|
+
this.image = value;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { CubeDepthTexture };
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Texture } from './Texture.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Represents a texture created externally
|
|
4
|
+
* Represents a texture created externally with the same renderer context.
|
|
5
5
|
*
|
|
6
6
|
* This may be a texture from a protected media stream, device camera feed,
|
|
7
7
|
* or other data feeds like a depth sensor.
|
|
8
8
|
*
|
|
9
|
-
* Note that this class is only supported in {@link WebGLRenderer}
|
|
9
|
+
* Note that this class is only supported in {@link WebGLRenderer}, and in
|
|
10
|
+
* the {@link WebGPURenderer} WebGPU backend.
|
|
10
11
|
*
|
|
11
12
|
* @augments Texture
|
|
12
13
|
*/
|
|
@@ -15,7 +16,7 @@ class ExternalTexture extends Texture {
|
|
|
15
16
|
/**
|
|
16
17
|
* Creates a new raw texture.
|
|
17
18
|
*
|
|
18
|
-
* @param {?WebGLTexture} [sourceTexture=null] - The external texture.
|
|
19
|
+
* @param {?(WebGLTexture|GPUTexture)} [sourceTexture=null] - The external texture.
|
|
19
20
|
*/
|
|
20
21
|
constructor( sourceTexture = null ) {
|
|
21
22
|
|
|
@@ -24,7 +25,7 @@ class ExternalTexture extends Texture {
|
|
|
24
25
|
/**
|
|
25
26
|
* The external source texture.
|
|
26
27
|
*
|
|
27
|
-
* @type {?WebGLTexture}
|
|
28
|
+
* @type {?(WebGLTexture|GPUTexture)}
|
|
28
29
|
* @default null
|
|
29
30
|
*/
|
|
30
31
|
this.sourceTexture = sourceTexture;
|
|
@@ -40,6 +41,16 @@ class ExternalTexture extends Texture {
|
|
|
40
41
|
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
copy( source ) {
|
|
45
|
+
|
|
46
|
+
super.copy( source );
|
|
47
|
+
|
|
48
|
+
this.sourceTexture = source.sourceTexture;
|
|
49
|
+
|
|
50
|
+
return this;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
export { ExternalTexture };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Texture } from './Texture.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Creates a texture from an HTML element.
|
|
5
|
+
*
|
|
6
|
+
* This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}
|
|
7
|
+
* to `true` immediately and listens for the parent canvas's paint events to trigger updates.
|
|
8
|
+
*
|
|
9
|
+
* @augments Texture
|
|
10
|
+
*/
|
|
11
|
+
class HTMLTexture extends Texture {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {HTMLElement} [element] - The HTML element.
|
|
17
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
22
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
23
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
24
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
|
+
*/
|
|
26
|
+
constructor( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
|
|
27
|
+
|
|
28
|
+
super( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
this.isHTMLTexture = true;
|
|
38
|
+
this.generateMipmaps = false;
|
|
39
|
+
|
|
40
|
+
this.needsUpdate = true;
|
|
41
|
+
|
|
42
|
+
const parent = element ? element.parentNode : null;
|
|
43
|
+
|
|
44
|
+
if ( parent !== null && 'requestPaint' in parent ) {
|
|
45
|
+
|
|
46
|
+
parent.onpaint = () => {
|
|
47
|
+
|
|
48
|
+
this.needsUpdate = true;
|
|
49
|
+
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
parent.requestPaint();
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
dispose() {
|
|
59
|
+
|
|
60
|
+
const parent = this.image ? this.image.parentNode : null;
|
|
61
|
+
|
|
62
|
+
if ( parent !== null && 'onpaint' in parent ) {
|
|
63
|
+
|
|
64
|
+
parent.onpaint = null;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
super.dispose();
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { HTMLTexture };
|
package/src/textures/Source.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ImageUtils } from '../extras/ImageUtils.js';
|
|
2
2
|
import { generateUUID } from '../math/MathUtils.js';
|
|
3
|
+
import { warn } from '../utils.js';
|
|
3
4
|
|
|
4
5
|
let _sourceId = 0;
|
|
5
6
|
|
|
@@ -83,13 +84,13 @@ class Source {
|
|
|
83
84
|
|
|
84
85
|
const data = this.data;
|
|
85
86
|
|
|
86
|
-
if ( data instanceof HTMLVideoElement ) {
|
|
87
|
+
if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( data instanceof HTMLVideoElement ) ) {
|
|
87
88
|
|
|
88
89
|
target.set( data.videoWidth, data.videoHeight, 0 );
|
|
89
90
|
|
|
90
|
-
} else if ( data instanceof VideoFrame ) {
|
|
91
|
+
} else if ( ( typeof VideoFrame !== 'undefined' ) && ( data instanceof VideoFrame ) ) {
|
|
91
92
|
|
|
92
|
-
target.set( data.
|
|
93
|
+
target.set( data.displayWidth, data.displayHeight, 0 );
|
|
93
94
|
|
|
94
95
|
} else if ( data !== null ) {
|
|
95
96
|
|
|
@@ -217,7 +218,7 @@ function serializeImage( image ) {
|
|
|
217
218
|
|
|
218
219
|
} else {
|
|
219
220
|
|
|
220
|
-
|
|
221
|
+
warn( 'Texture: Unable to serialize Texture.' );
|
|
221
222
|
return {};
|
|
222
223
|
|
|
223
224
|
}
|