@onerjs/core 8.55.8 → 8.56.1
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/Animations/animation.pure.js +2 -2
- package/Animations/animation.pure.js.map +1 -1
- package/Animations/runtimeAnimation.js +4 -0
- package/Animations/runtimeAnimation.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
- package/AudioV2/webAudio/webAudioEngine.js +6 -5
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -0
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -0
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.d.ts +15 -0
- package/Cameras/Inputs/followCameraPointersInput.js +18 -3
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.pure.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.pure.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.js +1 -1
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -0
- package/Collisions/gpuPicker.js +5 -4
- package/Collisions/gpuPicker.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.js +9 -5
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Culling/boundingSphere.js +7 -4
- package/Culling/boundingSphere.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +5 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +7 -3
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.d.ts +6 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js +16 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js.map +1 -0
- package/Engines/AbstractEngine/pure.d.ts +1 -0
- package/Engines/AbstractEngine/pure.js +1 -0
- package/Engines/AbstractEngine/pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/IDrawContext.d.ts +2 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +48 -6
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
- package/Engines/WebGPU/webgpuDrawContext.js +15 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/engine.d.ts +21 -4
- package/Engines/thinNativeEngine.pure.d.ts +6 -1
- package/Engines/thinNativeEngine.pure.js +29 -2
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +1 -0
- package/Engines/webgpuEngine.js +1 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +10 -0
- package/Engines/webgpuEngine.pure.js +15 -1
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.d.ts +3 -63
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js +5 -71
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.d.ts +71 -0
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.js +86 -0
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Data/pure.d.ts +1 -0
- package/FlowGraph/Blocks/Data/pure.js +1 -0
- package/FlowGraph/Blocks/Data/pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.d.ts +3 -37
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js +5 -39
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.d.ts +45 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.js +54 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.d.ts +3 -17
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js +5 -22
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.d.ts +25 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.js +37 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/pure.js +2 -0
- package/FlowGraph/Blocks/Event/pure.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.d.ts +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +198 -172
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +2 -5
- package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
- package/FrameGraph/frameGraph.js +10 -1
- package/FrameGraph/frameGraph.js.map +1 -1
- package/Gamepads/gamepadManager.d.ts +1 -0
- package/Gamepads/gamepadManager.js +5 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/scaleGizmo.js +1 -0
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Lights/IES/iesLoader.js +6 -8
- package/Lights/IES/iesLoader.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +4 -6
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +2 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -5
- package/Lights/light.js.map +1 -1
- package/Lights/spotLight.pure.js +1 -1
- package/Lights/spotLight.pure.js.map +1 -1
- package/Materials/Background/backgroundMaterial.pure.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.pure.js +3 -12
- package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +2 -0
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/powBlock.pure.js +2 -1
- package/Materials/Node/Blocks/powBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.pure.js +14 -12
- package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +1 -0
- package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -1
- package/Materials/PBR/openpbrMaterial.pure.js +3 -12
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js +3 -12
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/Textures/index.d.ts +1 -0
- package/Materials/Textures/index.js +1 -0
- package/Materials/Textures/index.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.pure.js +1 -1
- package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
- package/Materials/drawWrapper.js +3 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/imageProcessingConfiguration.defines.d.ts +3 -0
- package/Materials/imageProcessingConfiguration.defines.js +2 -0
- package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
- package/Materials/imageProcessingConfiguration.functions.js +3 -0
- package/Materials/imageProcessingConfiguration.functions.js.map +1 -1
- package/Materials/imageProcessingConfiguration.pure.d.ts +58 -0
- package/Materials/imageProcessingConfiguration.pure.js +123 -2
- package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
- package/Materials/material.pure.js +2 -2
- package/Materials/material.pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +2 -1
- package/Materials/standardMaterial.pure.js +4 -13
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +29 -0
- package/Materials/uniformBuffer.js +146 -0
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/colorTemperature.functions.d.ts +29 -0
- package/Maths/colorTemperature.functions.js +196 -0
- package/Maths/colorTemperature.functions.js.map +1 -0
- package/Maths/index.d.ts +1 -0
- package/Maths/index.js +1 -0
- package/Maths/index.js.map +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.polar.js +1 -1
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vector.pure.js +4 -3
- package/Maths/math.vector.pure.js.map +1 -1
- package/Maths/pure.d.ts +1 -0
- package/Maths/pure.js +1 -0
- package/Maths/pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +72 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +164 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +36 -18
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.d.ts +5 -4
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.js +25 -8
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
- package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +2 -2
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.pure.js +2 -2
- package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
- package/Meshes/csg.js +5 -5
- package/Meshes/csg.js.map +1 -1
- package/Meshes/groundMesh.pure.js +1 -1
- package/Meshes/groundMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +2 -2
- package/Meshes/mesh.pure.js.map +1 -1
- package/Misc/deepMerger.js +1 -1
- package/Misc/deepMerger.js.map +1 -1
- package/Misc/dumpTools.pure.js +1 -1
- package/Misc/dumpTools.pure.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/observable.pure.js +1 -3
- package/Misc/observable.pure.js.map +1 -1
- package/Misc/pure.d.ts +1 -0
- package/Misc/pure.js +1 -0
- package/Misc/pure.js.map +1 -1
- package/Misc/shaderImportLoader.d.ts +25 -0
- package/Misc/shaderImportLoader.js +54 -0
- package/Misc/shaderImportLoader.js.map +1 -0
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleClampBlock.pure.d.ts +0 -1
- package/Particles/Node/Blocks/particleClampBlock.pure.js +1 -6
- package/Particles/Node/Blocks/particleClampBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleMathBlock.pure.js +1 -1
- package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleNLerpBlock.pure.js +8 -3
- package/Particles/Node/Blocks/particleNLerpBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSmoothStepBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSmoothStepBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleStepBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleStepBlock.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +1 -1
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +41 -1
- package/PostProcesses/imageProcessingPostProcess.js +41 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.pure.js +1 -1
- package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +50 -0
- package/PostProcesses/thinImageProcessingPostProcess.js +65 -0
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js +22 -0
- package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +39 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +17 -5
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +14 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +122 -6
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +7 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +17 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/IBLShadows/pure.d.ts +1 -0
- package/Rendering/IBLShadows/pure.js +1 -0
- package/Rendering/IBLShadows/pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +3 -3
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +11 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +36 -14
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +5 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +16 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +5 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +12 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/iblCdfGenerator.js +10 -1
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +1 -0
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +1 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.d.ts +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.js +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +2 -2
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js +3 -0
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js +3 -0
- package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDirectLighting.js +34 -4
- package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -2
- package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +7 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplattingVoxel.fragment.js +4 -10
- package/Shaders/gaussianSplattingVoxel.fragment.js.map +1 -1
- package/Shaders/iblCombineVoxelGrids.fragment.js +1 -1
- package/Shaders/iblCombineVoxelGrids.fragment.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +24 -7
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.js +13 -0
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +3 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +35 -5
- package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +8 -2
- package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +16 -4
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +15 -3
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -3
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingVoxel.fragment.js +15 -9
- package/ShadersWGSL/gaussianSplattingVoxel.fragment.js.map +1 -1
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js +1 -1
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js.map +1 -1
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.d.ts +5 -0
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.js +14 -0
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.js.map +1 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +24 -7
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +26 -6
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
- package/SmartAssets/smartAssetManager.pure.js +1 -1
- package/SmartAssets/smartAssetManager.pure.js.map +1 -1
- package/Sprites/thinSprite.js +1 -1
- package/Sprites/thinSprite.js.map +1 -1
- package/XR/features/Layers/WebXRCompositionLayer.d.ts +182 -12
- package/XR/features/Layers/WebXRCompositionLayer.js +272 -3
- package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
- package/XR/features/Layers/WebXRFallbackLayer.d.ts +84 -0
- package/XR/features/Layers/WebXRFallbackLayer.js +137 -0
- package/XR/features/Layers/WebXRFallbackLayer.js.map +1 -0
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +4 -4
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.pure.d.ts +45 -0
- package/XR/features/WebXRAnchorSystem.pure.js +153 -13
- package/XR/features/WebXRAnchorSystem.pure.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.pure.js +2 -1
- package/XR/features/WebXRControllerPointerSelection.pure.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.pure.js +2 -1
- package/XR/features/WebXRControllerTeleportation.pure.js.map +1 -1
- package/XR/features/WebXRDepthSensing.pure.d.ts +21 -0
- package/XR/features/WebXRDepthSensing.pure.js +42 -0
- package/XR/features/WebXRDepthSensing.pure.js.map +1 -1
- package/XR/features/WebXRHandTracking.pure.js +2 -0
- package/XR/features/WebXRHandTracking.pure.js.map +1 -1
- package/XR/features/WebXRLayers.pure.d.ts +183 -8
- package/XR/features/WebXRLayers.pure.js +531 -99
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/XR/features/WebXRLayersFallback.d.ts +5 -0
- package/XR/features/WebXRLayersFallback.js +8 -0
- package/XR/features/WebXRLayersFallback.js.map +1 -0
- package/XR/features/WebXRLayersFallback.pure.d.ts +6 -0
- package/XR/features/WebXRLayersFallback.pure.js +44 -0
- package/XR/features/WebXRLayersFallback.pure.js.map +1 -0
- package/XR/features/WebXRLightEstimation.pure.d.ts +3 -4
- package/XR/features/WebXRLightEstimation.pure.js +22 -21
- package/XR/features/WebXRLightEstimation.pure.js.map +1 -1
- package/XR/features/WebXRMeshDetector.pure.d.ts +5 -0
- package/XR/features/WebXRMeshDetector.pure.js +1 -0
- package/XR/features/WebXRMeshDetector.pure.js.map +1 -1
- package/XR/features/WebXRNearInteraction.pure.js +3 -3
- package/XR/features/WebXRNearInteraction.pure.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.pure.d.ts +9 -5
- package/XR/features/WebXRPlaneDetector.pure.js +12 -8
- package/XR/features/WebXRPlaneDetector.pure.js.map +1 -1
- package/XR/features/WebXRTrackedSources.d.ts +5 -0
- package/XR/features/WebXRTrackedSources.js +8 -0
- package/XR/features/WebXRTrackedSources.js.map +1 -0
- package/XR/features/WebXRTrackedSources.pure.d.ts +70 -0
- package/XR/features/WebXRTrackedSources.pure.js +153 -0
- package/XR/features/WebXRTrackedSources.pure.js.map +1 -0
- package/XR/features/index.d.ts +1 -0
- package/XR/features/index.js +1 -0
- package/XR/features/index.js.map +1 -1
- package/XR/features/pure.d.ts +2 -0
- package/XR/features/pure.js +2 -0
- package/XR/features/pure.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +53 -1
- package/XR/motionController/webXRAbstractMotionController.js +61 -0
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/webXRCamera.d.ts +2 -0
- package/XR/webXRCamera.js +8 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +8 -4
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +86 -44
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +9 -0
- package/XR/webXRFeaturesManager.js +4 -0
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRGraphicsBinding.d.ts +29 -0
- package/XR/webXRGraphicsBinding.js +40 -0
- package/XR/webXRGraphicsBinding.js.map +1 -1
- package/XR/webXRInputSource.js +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +26 -10
- package/XR/webXRLayerWrapper.js +19 -7
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +4 -4
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +45 -0
- package/XR/webXRSessionManager.js +174 -29
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +2 -1
- package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +3 -3
- package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +5 -0
- package/scene.pure.js +25 -0
- package/scene.pure.js.map +1 -1
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
// Do not edit.
|
|
2
2
|
import { ShaderStore } from "../Engines/shaderStore.js";
|
|
3
|
+
import { iblVoxelOpacityAtomicMaxWGSL } from "./ShadersInclude/iblVoxelOpacityAtomicMax.js";
|
|
3
4
|
const name = "iblVoxelGridPixelShader";
|
|
4
|
-
const shader = `var voxel_storage: texture_storage_3d<r8unorm,write>;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
const shader = `var voxel_storage: texture_storage_3d<r8unorm,write>;
|
|
6
|
+
#ifdef IBL_VOXEL_OPACITY_BUFFER
|
|
7
|
+
var<storage,read_write> voxelOpacityBuffer: array<atomic<u32>>;
|
|
8
|
+
#include<iblVoxelOpacityAtomicMax>
|
|
9
|
+
#endif
|
|
10
|
+
varying vNormalizedPosition: vec3f;flat varying f_swizzle: i32;@fragment
|
|
11
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var size: vec3<u32>=textureDimensions(voxel_storage);var normPos: vec3f=input.vNormalizedPosition.xyz;switch (input.f_swizzle) {case 0: {normPos=normPos.zxy;break;}
|
|
12
|
+
case 1: {normPos=normPos.yzx;break;}
|
|
13
|
+
default: {normPos=normPos.xyz;break;}}
|
|
14
|
+
let coord: vec3<u32>=min(
|
|
15
|
+
vec3<u32>(u32(normPos.x*f32(size.x)),u32(normPos.y*f32(size.y)),u32(normPos.z*f32(size.z))),
|
|
16
|
+
size-vec3<u32>(1u));
|
|
17
|
+
#ifdef IBL_VOXEL_OPACITY_BUFFER
|
|
18
|
+
let vidx: u32=coord.x+coord.y*size.x+coord.z*size.x*size.y;voxelOpacityAtomicMax(vidx,255u);
|
|
19
|
+
#else
|
|
20
|
+
textureStore(voxel_storage,vec3<i32>(coord),vec4f(1.0,1.0,1.0,1.0));
|
|
21
|
+
#endif
|
|
22
|
+
fragmentOutputs.color=vec4<f32>(vec3<f32>(normPos),1.);}
|
|
23
|
+
`;
|
|
10
24
|
// Sideeffect
|
|
11
25
|
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
12
26
|
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
13
27
|
}
|
|
28
|
+
const includes = [iblVoxelOpacityAtomicMaxWGSL];
|
|
29
|
+
for (const inc of includes) {
|
|
30
|
+
if (!ShaderStore.IncludesShadersStoreWGSL[inc.name]) {
|
|
31
|
+
ShaderStore.IncludesShadersStoreWGSL[inc.name] = inc.shader;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
14
34
|
/** @internal */
|
|
15
35
|
export const iblVoxelGridPixelShaderWGSL = { name, shader };
|
|
16
36
|
//# sourceMappingURL=iblVoxelGrid.fragment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblVoxelGrid.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"iblVoxelGrid.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/ShadersWGSL/iblVoxelGrid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAEzF,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAChD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAChE,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport { iblVoxelOpacityAtomicMaxWGSL } from \"./ShadersInclude/iblVoxelOpacityAtomicMax\";\n\nconst name = \"iblVoxelGridPixelShader\";\nconst shader = `var voxel_storage: texture_storage_3d<r8unorm,write>;\n#ifdef IBL_VOXEL_OPACITY_BUFFER\nvar<storage,read_write> voxelOpacityBuffer: array<atomic<u32>>;\n#include<iblVoxelOpacityAtomicMax>\n#endif\nvarying vNormalizedPosition: vec3f;flat varying f_swizzle: i32;@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var size: vec3<u32>=textureDimensions(voxel_storage);var normPos: vec3f=input.vNormalizedPosition.xyz;switch (input.f_swizzle) {case 0: {normPos=normPos.zxy;break;}\ncase 1: {normPos=normPos.yzx;break;}\ndefault: {normPos=normPos.xyz;break;}}\nlet coord: vec3<u32>=min(\nvec3<u32>(u32(normPos.x*f32(size.x)),u32(normPos.y*f32(size.y)),u32(normPos.z*f32(size.z))),\nsize-vec3<u32>(1u));\n#ifdef IBL_VOXEL_OPACITY_BUFFER\nlet vidx: u32=coord.x+coord.y*size.x+coord.z*size.x*size.y;voxelOpacityAtomicMax(vidx,255u);\n#else\ntextureStore(voxel_storage,vec3<i32>(coord),vec4f(1.0,1.0,1.0,1.0));\n#endif\nfragmentOutputs.color=vec4<f32>(vec3<f32>(normPos),1.);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\nconst includes = [iblVoxelOpacityAtomicMaxWGSL];\nfor (const inc of includes) {\n if (!ShaderStore.IncludesShadersStoreWGSL[inc.name]) {\n ShaderStore.IncludesShadersStoreWGSL[inc.name] = inc.shader;\n }\n}\n\n/** @internal */\nexport const iblVoxelGridPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -375,7 +375,7 @@ export function SerializeSmartAssetManagerMap(scene, baseUrl) {
|
|
|
375
375
|
export async function LoadSmartAssetMapAsync(scene, source, rootUrl) {
|
|
376
376
|
let resolvedRootUrl = rootUrl ?? "";
|
|
377
377
|
if (typeof source === "string" && !rootUrl) {
|
|
378
|
-
const { Tools } = await import("../Misc/tools.js");
|
|
378
|
+
const { Tools } = await import("../Misc/tools.pure.js");
|
|
379
379
|
resolvedRootUrl = Tools.GetFolderPath(source);
|
|
380
380
|
}
|
|
381
381
|
const raw = await ReadJsonSourceAsync(source);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartAssetManager.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/SmartAssets/smartAssetManager.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Scene } from \"../scene\";\nimport { type AssetContainer } from \"../assetContainer\";\nimport { type Node } from \"../node\";\nimport { type Material } from \"../Materials/material\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture\";\nimport { Texture } from \"../Materials/Textures/texture.pure\";\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture.pure\";\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture.pure\";\nimport { type AnimationGroup } from \"../Animations/animationGroup\";\nimport { Observable, type Observer } from \"../Misc/observable\";\nimport { Logger } from \"../Misc/logger\";\nimport { LoadAssetContainerAsync } from \"../Loading/sceneLoader\";\nimport { GetExtensionFromUrl } from \"../Misc/urlTools\";\nimport {\n type ISerializedSmartAssetEntry,\n type ISerializedSmartAssetMap,\n DeserializeSmartAssetMap,\n IsAbsoluteOrSpecialUrl,\n MakeRelative,\n ResolveAssetUrl,\n ReadJsonSourceAsync,\n} from \"./smartAssetSerializer\";\n\n// Keep this a Symbol (not a string): scene.metadata is a publicly enumerable\n// object, and routing SAM through a symbol key keeps it out of Object.values /\n// JSON.stringify so the inspector's metadata viewer doesn't recurse into the\n// manager (which holds a back-reference to the scene, creating a cycle).\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst SMART_ASSET_MANAGER_KEY = /*#__PURE__*/ Symbol(\"babylonjs:smartAssetManager\");\n\n/**\n * Stateful handle for a scene's smart asset registry.\n *\n * Smart asset behavior is exposed through module-level functions rather than\n * class methods so callers can import only the operations they need.\n */\nexport type SmartAssetManager = {\n /**\n * The scene this manager is attached to.\n */\n readonly scene: Scene;\n\n /**\n * Fires when the smart asset registry or loaded asset state changes.\n */\n readonly onChangedObservable: Observable<void>;\n\n /**\n * Optional callback invoked when an asset cannot be found at its registered URL.\n * Return a new URL or File to retry loading, or null to skip the asset.\n */\n onAssetNotFound: ((key: string, expectedUrl: string) => Promise<string | File | null>) | null;\n};\n\n/**\n * Optional registration data that helps select the correct loader when the URL\n * does not contain a usable file extension, such as blob-backed local files.\n */\ntype SmartAssetRegistrationOptions = Pick<ISerializedSmartAssetEntry, \"type\" | \"extension\" | \"metadata\">;\n\n/**\n * Optional load-time configuration. Includes the persistable {@link SmartAssetRegistrationOptions}\n * fields (type, extension, metadata) plus a transient `reloadSource` callback used by\n * {@link ReloadSmartAssetAsync} to fetch fresh bytes from disk for blob-backed assets.\n */\nexport type SmartAssetLoadOptions = SmartAssetRegistrationOptions & {\n /**\n * Optional callback invoked by {@link ReloadSmartAssetAsync} to obtain a fresh File\n * for the asset. Use this when the registered URL is a `blob:` URL backed by a\n * `FileSystemFileHandle` so Reload can re-read the underlying file from disk.\n */\n readonly reloadSource?: () => Promise<File>;\n};\n\ntype SmartAssetManagerInternals = {\n urls: Map<string, string>;\n options: Map<string, SmartAssetRegistrationOptions>;\n containers: Map<string, AssetContainer>;\n objectToKeyMap: WeakMap<object, string>;\n textureKeys: Set<string>;\n reloadSources: Map<string, () => Promise<File>>;\n blobUrls: Map<string, string>;\n sceneDisposeObserver: ReturnType<Scene[\"onDisposeObservable\"][\"add\"]> | null;\n};\n\n// Lazy-initialised module state. Wrapped in accessors so the module has\n// no top-level side effects and is trivially tree-shakeable: nothing\n// allocates until a SmartAssetManager is actually created.\nlet _InternalsMap: WeakMap<SmartAssetManager, SmartAssetManagerInternals> | undefined;\nfunction GetInternalsMap(): WeakMap<SmartAssetManager, SmartAssetManagerInternals> {\n return (_InternalsMap ??= new WeakMap());\n}\n\nlet _OnCreatedObservable: Observable<SmartAssetManager> | undefined;\nfunction GetOnCreatedObservable(): Observable<SmartAssetManager> {\n return (_OnCreatedObservable ??= new Observable());\n}\n\n/**\n * Creates a new SmartAssetManager state object and attaches it to the scene.\n *\n * Internal: callers should use {@link GetSmartAssetManager} which returns the\n * existing manager when one is already attached.\n * @param scene - The scene this manager operates on.\n * @returns The created smart asset manager state.\n */\nfunction CreateSmartAssetManager(scene: Scene): SmartAssetManager {\n const manager: SmartAssetManager = {\n scene,\n onChangedObservable: new Observable<void>(),\n onAssetNotFound: null,\n };\n\n const internal: SmartAssetManagerInternals = {\n urls: new Map(),\n options: new Map(),\n containers: new Map(),\n objectToKeyMap: new WeakMap(),\n textureKeys: new Set(),\n reloadSources: new Map(),\n blobUrls: new Map(),\n sceneDisposeObserver: null,\n };\n GetInternalsMap().set(manager, internal);\n\n if (!scene.metadata) {\n scene.metadata = {};\n }\n scene.metadata[SMART_ASSET_MANAGER_KEY] = manager;\n\n // Auto-dispose when the scene is disposed so the manager doesn't outlive it.\n internal.sceneDisposeObserver = scene.onDisposeObservable.add(() => DisposeSmartAssetManager(manager));\n\n GetOnCreatedObservable().notifyObservers(manager);\n\n return manager;\n}\n\n/**\n * Returns the SmartAssetManager attached to the given scene, creating and\n * attaching one if none exists.\n * @param scene - The scene to look up or attach a manager to.\n * @returns The existing or newly created SmartAssetManager.\n */\nexport function GetSmartAssetManager(scene: Scene): SmartAssetManager {\n const existing = scene.metadata?.[SMART_ASSET_MANAGER_KEY] as SmartAssetManager | undefined;\n if (existing) {\n return existing;\n }\n return CreateSmartAssetManager(scene);\n}\n\n/**\n * Adds an observer that is notified whenever a SmartAssetManager is created.\n * @param callback - The callback to invoke with each newly created manager.\n * @returns The observer registration.\n */\nexport function AddSmartAssetManagerCreatedObserver(callback: (manager: SmartAssetManager) => void): Observer<SmartAssetManager> {\n // Wrap so the EventState second-arg from Observable.add isn't passed through to the caller.\n return GetOnCreatedObservable().add((manager) => callback(manager));\n}\n\n/**\n * Registers a smart asset entry mapping a key to a URL.\n * @param scene - The scene whose smart asset registry to update.\n * @param key - Unique string identifier for this asset.\n * @param url - URL or path to the asset file.\n * @param options - Optional loader hints and metadata for this asset.\n */\nexport function RegisterSmartAsset(scene: Scene, key: string, url: string, options?: SmartAssetRegistrationOptions): void {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n RevokeManagedBlobUrl(internal, key, url);\n internal.urls.set(key, url);\n TrackManagedBlobUrl(internal, key, url);\n if (options) {\n const existingOptions = internal.options.get(key);\n internal.options.set(key, { ...existingOptions, ...options });\n if (options.type === \"texture\") {\n internal.textureKeys.add(key);\n } else if (options.type !== undefined) {\n internal.textureKeys.delete(key);\n }\n }\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Removes a key from the registry. If the asset is loaded, it is unloaded first.\n * @param scene - The scene that owns the smart asset.\n * @param key - The key to remove.\n * @returns A promise that resolves when the asset has been unloaded and removed.\n */\nexport async function RemoveSmartAssetAsync(scene: Scene, key: string): Promise<void> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n if (internal.containers.has(key)) {\n await UnloadSmartAssetAsync(scene, key);\n }\n for (const tex of [...scene.textures]) {\n if (internal.objectToKeyMap.get(tex) === key) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n }\n internal.urls.delete(key);\n internal.options.delete(key);\n internal.textureKeys.delete(key);\n internal.reloadSources.delete(key);\n RevokeManagedBlobUrl(internal, key);\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Returns all registered key-to-URL mappings.\n * @param scene - The scene whose smart asset registry to read.\n * @returns A read-only map of keys to URLs.\n */\nexport function GetAllSmartAssets(scene: Scene): ReadonlyMap<string, string> {\n return GetSmartAssetInternals(GetSmartAssetManager(scene)).urls;\n}\n\n/**\n * Loads a scene-file asset by key.\n * @param scene - The scene to load the asset into.\n * @param key - The key to load.\n * @param url - Optional URL. If provided, the key is registered first.\n * @param options - Optional loader hints and metadata for this asset.\n * @returns A promise resolving to the loaded AssetContainer.\n */\nexport async function LoadSmartAssetAsync(scene: Scene, key: string, url?: string, options?: SmartAssetLoadOptions): Promise<AssetContainer> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const previousUrl = internal.urls.get(key);\n const { reloadSource, ...registrationOptions } = options ?? {};\n if (url) {\n RegisterSmartAsset(scene, key, url, registrationOptions);\n }\n if (reloadSource) {\n internal.reloadSources.set(key, reloadSource);\n }\n\n const resolvedUrl = internal.urls.get(key);\n if (!resolvedUrl) {\n throw new Error(`SmartAssetManager: Key \"${key}\" is not registered. Provide a URL to auto-register.`);\n }\n\n const existing = internal.containers.get(key);\n if (existing) {\n if (url && url !== previousUrl) {\n // URL changed — drop the stale container before fetching the new one\n // so callers don't get a surprise cached return for an updated URL.\n await UnloadSmartAssetAsync(scene, key);\n } else {\n return existing;\n }\n }\n\n return await LoadSmartAssetSceneFileAsync(manager, key, resolvedUrl, internal.options.get(key)?.extension);\n}\n\n/**\n * Loads all registered assets concurrently.\n * @param scene - The scene whose registered assets to load.\n * @returns A promise resolving to loaded scene-file containers.\n */\nexport async function LoadAllSmartAssetsAsync(scene: Scene): Promise<AssetContainer[]> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const scenePromises: Promise<AssetContainer | null>[] = [];\n const texturePromises: Promise<void>[] = [];\n\n for (const [key, url] of Array.from(internal.urls)) {\n if (internal.containers.has(key)) {\n continue;\n }\n const options = internal.options.get(key);\n if (internal.textureKeys.has(key) || options?.type === \"texture\" || IsTextureUrl(url) || IsTextureExtension(options?.extension)) {\n const textureLoadAsync = async () => {\n try {\n await LoadSmartAssetTextureAsync(scene, key);\n } catch {\n Logger.Warn(`SmartAssetManager: Texture \"${key}\" could not be loaded — skipping.`);\n }\n };\n texturePromises.push(textureLoadAsync());\n } else {\n const sceneLoadAsync = async () => {\n try {\n return await LoadSmartAssetAsync(scene, key);\n } catch {\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded — skipping.`);\n return null;\n }\n };\n scenePromises.push(sceneLoadAsync());\n }\n }\n\n await Promise.all(texturePromises);\n const results = await Promise.all(scenePromises);\n return results.filter((r): r is AssetContainer => r !== null);\n}\n\n/**\n * Loads a standalone texture by key.\n * @param scene - The scene to load the texture into.\n * @param key - The key to load.\n * @param url - Optional URL. If provided, the key is registered first.\n * @param options - Optional loader hints and metadata for this asset.\n * @returns A promise resolving to the loaded texture.\n */\nexport async function LoadSmartAssetTextureAsync(scene: Scene, key: string, url?: string, options?: SmartAssetLoadOptions): Promise<BaseTexture> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const previousUrl = internal.urls.get(key);\n const { reloadSource, ...registrationOptions } = options ?? {};\n if (url) {\n RegisterSmartAsset(scene, key, url, { ...registrationOptions, type: registrationOptions.type ?? \"texture\" });\n }\n if (reloadSource) {\n internal.reloadSources.set(key, reloadSource);\n }\n\n internal.textureKeys.add(key);\n\n // Mirror LoadSmartAssetAsync: if a tracked texture already exists for this key,\n // return it on a same-URL call (cache hit) or dispose it before reload on URL change.\n // Without this guard, calling LoadSmartAssetTextureAsync twice with the same URL\n // would create duplicate Texture objects in scene.textures.\n const existingTextures: BaseTexture[] = [];\n for (const tex of scene.textures) {\n if (internal.objectToKeyMap.get(tex) === key) {\n existingTextures.push(tex);\n }\n }\n if (existingTextures.length > 0) {\n if (url && previousUrl !== undefined && url !== previousUrl) {\n for (const tex of existingTextures) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n } else {\n return existingTextures[0];\n }\n }\n\n const resolvedUrl = internal.urls.get(key);\n if (!resolvedUrl) {\n throw new Error(`SmartAssetManager: Key \"${key}\" is not registered. Provide a URL to auto-register.`);\n }\n\n const extensionHint = internal.options.get(key)?.extension;\n let texture: BaseTexture;\n try {\n texture = await CreateAndLoadTextureAsync(manager, resolvedUrl, extensionHint);\n } catch (error) {\n const fallback = await ResolveNotFoundAsync(manager, key, resolvedUrl);\n if (!fallback) {\n throw error;\n }\n texture = await CreateAndLoadTextureAsync(manager, fallback.url, fallback.extensionHint ?? extensionHint);\n }\n\n internal.objectToKeyMap.set(texture, key);\n\n // Surface the registry key as the texture's display name when the texture\n // doesn't already have one. For blob/data-URL textures (e.g. user-uploaded\n // files) the underlying `texture.name` is an opaque blob URL, so without\n // this any UI that shows texture names (Scene Explorer, material slot\n // pickers, override summaries) would render the blob URL instead of the\n // user-chosen key. We never overwrite a display name the caller already set.\n if (!texture.displayName) {\n texture.displayName = key;\n }\n\n manager.onChangedObservable.notifyObservers();\n return texture;\n}\n\n/**\n * Unloads a loaded asset while keeping the key registered.\n * @param scene - The scene whose smart asset to unload.\n * @param key - The key to unload.\n * @returns A promise that resolves once the asset has been unloaded.\n */\nexport async function UnloadSmartAssetAsync(scene: Scene, key: string): Promise<void> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const container = internal.containers.get(key);\n if (container) {\n container.removeAllFromScene();\n container.dispose();\n internal.containers.delete(key);\n manager.onChangedObservable.notifyObservers();\n return;\n }\n\n for (const tex of [...scene.textures]) {\n if (internal.objectToKeyMap.get(tex) === key) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n }\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Unloads and re-loads an asset.\n * @param scene - The scene whose smart asset to reload.\n * @param key - The key to reload.\n * @returns A promise resolving to the newly loaded AssetContainer or BaseTexture.\n */\nexport async function ReloadSmartAssetAsync(scene: Scene, key: string): Promise<AssetContainer | BaseTexture> {\n const internal = GetSmartAssetInternals(GetSmartAssetManager(scene));\n const reloadSource = internal.reloadSources.get(key);\n if (reloadSource) {\n try {\n const freshFile = await reloadSource();\n const blobUrl = URL.createObjectURL(freshFile);\n RegisterSmartAsset(scene, key, blobUrl, { extension: GetExtensionFromUrl(freshFile.name) || internal.options.get(key)?.extension });\n } catch (e) {\n Logger.Warn(`SmartAssetManager: reloadSource callback failed for \"${key}\": ${e}`);\n }\n }\n\n await UnloadSmartAssetAsync(scene, key);\n\n if (internal.textureKeys.has(key)) {\n return await LoadSmartAssetTextureAsync(scene, key);\n }\n return await LoadSmartAssetAsync(scene, key);\n}\n\n/**\n * Finds which smart asset key owns a scene object.\n * @param scene - The scene whose registry to search.\n * @param object - A scene object.\n * @returns The key, or undefined if the object is not tracked.\n */\nexport function FindSmartAssetKeyForObject(scene: Scene, object: Node | Material | BaseTexture | AnimationGroup): string | undefined {\n return GetSmartAssetInternals(GetSmartAssetManager(scene)).objectToKeyMap.get(object);\n}\n\n/**\n * Serializes the registry to a JSON-compatible document.\n * If a baseUrl is provided, asset URLs are stored relative to it for portability.\n * @param scene - The scene whose registry to serialize.\n * @param baseUrl - Optional base URL for making asset paths relative.\n * @returns A serialized asset map document.\n */\nexport function SerializeSmartAssetManagerMap(scene: Scene, baseUrl?: string): ISerializedSmartAssetMap {\n const internal = GetSmartAssetInternals(GetSmartAssetManager(scene));\n const assets: Record<string, ISerializedSmartAssetEntry> = {};\n\n for (const [key, registeredUrl] of Array.from(internal.urls)) {\n let url = registeredUrl;\n if (baseUrl && !IsAbsoluteOrSpecialUrl(url)) {\n url = MakeRelative(url, baseUrl);\n }\n const options = internal.options.get(key);\n assets[key] = { url, ...options, ...(internal.textureKeys.has(key) ? { type: \"texture\" } : {}) };\n }\n\n return { version: 1, assets };\n}\n\n/**\n * Loads an asset map from a URL, File, or pre-parsed JSON object.\n * @param scene - The scene to load assets into.\n * @param source - A URL string, File object, or pre-parsed ISerializedSmartAssetMap.\n * @param rootUrl - Optional root URL for resolving relative asset paths.\n * @returns A promise that resolves after the map has been loaded and all registered assets have been attempted.\n */\nexport async function LoadSmartAssetMapAsync(scene: Scene, source: string | File | ISerializedSmartAssetMap, rootUrl?: string): Promise<void> {\n let resolvedRootUrl = rootUrl ?? \"\";\n\n if (typeof source === \"string\" && !rootUrl) {\n const { Tools } = await import(\"../Misc/tools\");\n resolvedRootUrl = Tools.GetFolderPath(source);\n }\n\n const raw = await ReadJsonSourceAsync(source);\n const doc = DeserializeSmartAssetMap(raw);\n\n for (const [key, entry] of Object.entries(doc.assets)) {\n const resolved = resolvedRootUrl ? ResolveAssetUrl(entry.url, resolvedRootUrl) : entry.url;\n RegisterSmartAsset(scene, key, resolved, { type: entry.type, extension: entry.extension, metadata: entry.metadata });\n }\n\n await LoadAllSmartAssetsAsync(scene);\n}\n\n/**\n * Registers an externally loaded AssetContainer under a key.\n * @param manager - The smart asset manager state.\n * @param key - The key to associate with the container.\n * @param container - The loaded AssetContainer.\n */\nfunction TrackLoadedSmartAssetContainer(manager: SmartAssetManager, key: string, container: AssetContainer): void {\n const internal = GetSmartAssetInternals(manager);\n internal.containers.set(key, container);\n TrackSmartAssetContainerObjects(manager, key, container);\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Disposes the manager, unloading all assets and detaching it from its scene.\n * Safe to call multiple times; subsequent calls are no-ops. Automatically invoked when the\n * owning scene is disposed.\n * @param manager - The smart asset manager state.\n */\nexport function DisposeSmartAssetManager(manager: SmartAssetManager): void {\n const internal = GetInternalsMap().get(manager);\n if (!internal) {\n return;\n }\n GetInternalsMap().delete(manager);\n\n if (internal.sceneDisposeObserver) {\n manager.scene.onDisposeObservable.remove(internal.sceneDisposeObserver);\n internal.sceneDisposeObserver = null;\n }\n\n for (const container of Array.from(internal.containers.values())) {\n container.removeAllFromScene();\n container.dispose();\n }\n for (const tex of [...manager.scene.textures]) {\n if (internal.objectToKeyMap.get(tex) !== undefined) {\n tex.dispose();\n }\n }\n\n internal.urls.clear();\n internal.options.clear();\n internal.textureKeys.clear();\n internal.reloadSources.clear();\n internal.containers.clear();\n for (const blobUrl of Array.from(internal.blobUrls.values())) {\n URL.revokeObjectURL(blobUrl);\n }\n internal.blobUrls.clear();\n\n manager.onChangedObservable.clear();\n\n if (manager.scene.metadata) {\n delete manager.scene.metadata[SMART_ASSET_MANAGER_KEY];\n }\n}\n\nfunction GetSmartAssetInternals(manager: SmartAssetManager): SmartAssetManagerInternals {\n const internal = GetInternalsMap().get(manager);\n if (!internal) {\n throw new Error(\"SmartAssetManager: Unknown manager state.\");\n }\n return internal;\n}\n\nfunction RevokeManagedBlobUrl(internal: SmartAssetManagerInternals, key: string, replacementUrl?: string): void {\n const blobUrl = internal.blobUrls.get(key);\n if (!blobUrl || blobUrl === replacementUrl) {\n return;\n }\n URL.revokeObjectURL(blobUrl);\n internal.blobUrls.delete(key);\n}\n\nfunction TrackManagedBlobUrl(internal: SmartAssetManagerInternals, key: string, url: string): void {\n if (url.startsWith(\"blob:\")) {\n internal.blobUrls.set(key, url);\n }\n}\n\nasync function CreateAndLoadTextureAsync(manager: SmartAssetManager, url: string, extensionHint?: string): Promise<BaseTexture> {\n return await new Promise<BaseTexture>((resolve, reject) => {\n const ext = (extensionHint || GetExtensionFromUrl(url)).toLowerCase();\n const onError = (message?: string, exception?: unknown) => {\n const err = exception instanceof Error ? exception : new Error(message ?? `SmartAssetManager: failed to load texture from \"${url}\".`);\n reject(err);\n };\n let texture: BaseTexture;\n const onLoad = () => resolve(texture);\n if (ext === \".hdr\") {\n // HDR equirectangular files require HDRCubeTexture — CubeTexture's .hdr\n // loader explicitly throws \".hdr not supported in Cube.\" so we can't\n // route HDRs through the generic CubeTexture path.\n texture = new HDRCubeTexture(url, manager.scene, 256, false, true, false, false, onLoad, onError);\n } else if (ext === \".env\" || ext === \".dds\") {\n texture = new CubeTexture(url, manager.scene, null, false, null, onLoad, onError, undefined, ext === \".env\");\n } else {\n texture = new Texture(url, manager.scene, undefined, undefined, undefined, onLoad, onError);\n }\n });\n}\n\nasync function ResolveNotFoundAsync(manager: SmartAssetManager, key: string, expectedUrl: string): Promise<{ url: string; extensionHint?: string } | null> {\n if (!manager.onAssetNotFound) {\n return null;\n }\n const resolution = await manager.onAssetNotFound(key, expectedUrl);\n if (resolution === null || resolution === undefined) {\n return null;\n }\n if (typeof resolution === \"string\") {\n RegisterSmartAsset(manager.scene, key, resolution);\n return { url: resolution, extensionHint: GetSmartAssetInternals(manager).options.get(key)?.extension };\n }\n const blobUrl = URL.createObjectURL(resolution);\n const extensionHint = GetExtensionFromUrl(resolution.name) || undefined;\n RegisterSmartAsset(manager.scene, key, blobUrl, { extension: extensionHint });\n return { url: blobUrl, extensionHint };\n}\n\nasync function LoadSmartAssetSceneFileAsync(manager: SmartAssetManager, key: string, url: string, extensionHint?: string): Promise<AssetContainer> {\n const loadAsync = async (loadUrl: string, extensionHint?: string) => {\n const container = await LoadAssetContainerAsync(loadUrl, manager.scene, { pluginExtension: extensionHint });\n container.addAllToScene();\n TrackLoadedSmartAssetContainer(manager, key, container);\n return container;\n };\n\n try {\n return await loadAsync(url, extensionHint);\n } catch (error) {\n const fallback = await ResolveNotFoundAsync(manager, key, url);\n if (fallback) {\n try {\n return await loadAsync(fallback.url, fallback.extensionHint);\n } catch (retryError) {\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded from fallback \"${fallback.url}\".`);\n throw retryError;\n }\n }\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded from \"${url}\".`);\n throw error;\n }\n}\n\nfunction TrackSmartAssetContainerObjects(manager: SmartAssetManager, key: string, container: AssetContainer): void {\n const internal = GetSmartAssetInternals(manager);\n\n for (const collection of [\n container.meshes,\n container.transformNodes,\n container.materials,\n container.textures,\n container.animationGroups,\n container.lights,\n container.cameras,\n ]) {\n for (const obj of collection) {\n internal.objectToKeyMap.set(obj, key);\n }\n }\n}\n\nlet _TextureExtensions: Set<string> | undefined;\n/**\n * Returns the set of file extensions (including the leading dot) that {@link LoadAllSmartAssetsAsync}\n * treats as standalone textures.\n * @returns A read-only set of texture file extensions.\n */\nexport function GetSmartAssetTextureExtensions(): ReadonlySet<string> {\n return (_TextureExtensions ??= new Set([\".png\", \".jpg\", \".jpeg\", \".bmp\", \".tga\", \".gif\", \".webp\", \".env\", \".hdr\", \".dds\", \".ktx\", \".ktx2\", \".basis\"]));\n}\n\n/**\n * Returns true if the URL points to a standalone texture file.\n * @param url - The URL to check.\n * @returns True if the URL has a texture file extension.\n */\nfunction IsTextureUrl(url: string): boolean {\n return GetSmartAssetTextureExtensions().has(GetExtensionFromUrl(url));\n}\n\nfunction IsTextureExtension(extension: string | undefined): boolean {\n return extension !== undefined && GetSmartAssetTextureExtensions().has(extension.toLowerCase());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"smartAssetManager.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/SmartAssets/smartAssetManager.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Scene } from \"../scene\";\nimport { type AssetContainer } from \"../assetContainer\";\nimport { type Node } from \"../node\";\nimport { type Material } from \"../Materials/material\";\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture\";\nimport { Texture } from \"../Materials/Textures/texture.pure\";\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture.pure\";\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture.pure\";\nimport { type AnimationGroup } from \"../Animations/animationGroup\";\nimport { Observable, type Observer } from \"../Misc/observable\";\nimport { Logger } from \"../Misc/logger\";\nimport { LoadAssetContainerAsync } from \"../Loading/sceneLoader\";\nimport { GetExtensionFromUrl } from \"../Misc/urlTools\";\nimport {\n type ISerializedSmartAssetEntry,\n type ISerializedSmartAssetMap,\n DeserializeSmartAssetMap,\n IsAbsoluteOrSpecialUrl,\n MakeRelative,\n ResolveAssetUrl,\n ReadJsonSourceAsync,\n} from \"./smartAssetSerializer\";\n\n// Keep this a Symbol (not a string): scene.metadata is a publicly enumerable\n// object, and routing SAM through a symbol key keeps it out of Object.values /\n// JSON.stringify so the inspector's metadata viewer doesn't recurse into the\n// manager (which holds a back-reference to the scene, creating a cycle).\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst SMART_ASSET_MANAGER_KEY = /*#__PURE__*/ Symbol(\"babylonjs:smartAssetManager\");\n\n/**\n * Stateful handle for a scene's smart asset registry.\n *\n * Smart asset behavior is exposed through module-level functions rather than\n * class methods so callers can import only the operations they need.\n */\nexport type SmartAssetManager = {\n /**\n * The scene this manager is attached to.\n */\n readonly scene: Scene;\n\n /**\n * Fires when the smart asset registry or loaded asset state changes.\n */\n readonly onChangedObservable: Observable<void>;\n\n /**\n * Optional callback invoked when an asset cannot be found at its registered URL.\n * Return a new URL or File to retry loading, or null to skip the asset.\n */\n onAssetNotFound: ((key: string, expectedUrl: string) => Promise<string | File | null>) | null;\n};\n\n/**\n * Optional registration data that helps select the correct loader when the URL\n * does not contain a usable file extension, such as blob-backed local files.\n */\ntype SmartAssetRegistrationOptions = Pick<ISerializedSmartAssetEntry, \"type\" | \"extension\" | \"metadata\">;\n\n/**\n * Optional load-time configuration. Includes the persistable {@link SmartAssetRegistrationOptions}\n * fields (type, extension, metadata) plus a transient `reloadSource` callback used by\n * {@link ReloadSmartAssetAsync} to fetch fresh bytes from disk for blob-backed assets.\n */\nexport type SmartAssetLoadOptions = SmartAssetRegistrationOptions & {\n /**\n * Optional callback invoked by {@link ReloadSmartAssetAsync} to obtain a fresh File\n * for the asset. Use this when the registered URL is a `blob:` URL backed by a\n * `FileSystemFileHandle` so Reload can re-read the underlying file from disk.\n */\n readonly reloadSource?: () => Promise<File>;\n};\n\ntype SmartAssetManagerInternals = {\n urls: Map<string, string>;\n options: Map<string, SmartAssetRegistrationOptions>;\n containers: Map<string, AssetContainer>;\n objectToKeyMap: WeakMap<object, string>;\n textureKeys: Set<string>;\n reloadSources: Map<string, () => Promise<File>>;\n blobUrls: Map<string, string>;\n sceneDisposeObserver: ReturnType<Scene[\"onDisposeObservable\"][\"add\"]> | null;\n};\n\n// Lazy-initialised module state. Wrapped in accessors so the module has\n// no top-level side effects and is trivially tree-shakeable: nothing\n// allocates until a SmartAssetManager is actually created.\nlet _InternalsMap: WeakMap<SmartAssetManager, SmartAssetManagerInternals> | undefined;\nfunction GetInternalsMap(): WeakMap<SmartAssetManager, SmartAssetManagerInternals> {\n return (_InternalsMap ??= new WeakMap());\n}\n\nlet _OnCreatedObservable: Observable<SmartAssetManager> | undefined;\nfunction GetOnCreatedObservable(): Observable<SmartAssetManager> {\n return (_OnCreatedObservable ??= new Observable());\n}\n\n/**\n * Creates a new SmartAssetManager state object and attaches it to the scene.\n *\n * Internal: callers should use {@link GetSmartAssetManager} which returns the\n * existing manager when one is already attached.\n * @param scene - The scene this manager operates on.\n * @returns The created smart asset manager state.\n */\nfunction CreateSmartAssetManager(scene: Scene): SmartAssetManager {\n const manager: SmartAssetManager = {\n scene,\n onChangedObservable: new Observable<void>(),\n onAssetNotFound: null,\n };\n\n const internal: SmartAssetManagerInternals = {\n urls: new Map(),\n options: new Map(),\n containers: new Map(),\n objectToKeyMap: new WeakMap(),\n textureKeys: new Set(),\n reloadSources: new Map(),\n blobUrls: new Map(),\n sceneDisposeObserver: null,\n };\n GetInternalsMap().set(manager, internal);\n\n if (!scene.metadata) {\n scene.metadata = {};\n }\n scene.metadata[SMART_ASSET_MANAGER_KEY] = manager;\n\n // Auto-dispose when the scene is disposed so the manager doesn't outlive it.\n internal.sceneDisposeObserver = scene.onDisposeObservable.add(() => DisposeSmartAssetManager(manager));\n\n GetOnCreatedObservable().notifyObservers(manager);\n\n return manager;\n}\n\n/**\n * Returns the SmartAssetManager attached to the given scene, creating and\n * attaching one if none exists.\n * @param scene - The scene to look up or attach a manager to.\n * @returns The existing or newly created SmartAssetManager.\n */\nexport function GetSmartAssetManager(scene: Scene): SmartAssetManager {\n const existing = scene.metadata?.[SMART_ASSET_MANAGER_KEY] as SmartAssetManager | undefined;\n if (existing) {\n return existing;\n }\n return CreateSmartAssetManager(scene);\n}\n\n/**\n * Adds an observer that is notified whenever a SmartAssetManager is created.\n * @param callback - The callback to invoke with each newly created manager.\n * @returns The observer registration.\n */\nexport function AddSmartAssetManagerCreatedObserver(callback: (manager: SmartAssetManager) => void): Observer<SmartAssetManager> {\n // Wrap so the EventState second-arg from Observable.add isn't passed through to the caller.\n return GetOnCreatedObservable().add((manager) => callback(manager));\n}\n\n/**\n * Registers a smart asset entry mapping a key to a URL.\n * @param scene - The scene whose smart asset registry to update.\n * @param key - Unique string identifier for this asset.\n * @param url - URL or path to the asset file.\n * @param options - Optional loader hints and metadata for this asset.\n */\nexport function RegisterSmartAsset(scene: Scene, key: string, url: string, options?: SmartAssetRegistrationOptions): void {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n RevokeManagedBlobUrl(internal, key, url);\n internal.urls.set(key, url);\n TrackManagedBlobUrl(internal, key, url);\n if (options) {\n const existingOptions = internal.options.get(key);\n internal.options.set(key, { ...existingOptions, ...options });\n if (options.type === \"texture\") {\n internal.textureKeys.add(key);\n } else if (options.type !== undefined) {\n internal.textureKeys.delete(key);\n }\n }\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Removes a key from the registry. If the asset is loaded, it is unloaded first.\n * @param scene - The scene that owns the smart asset.\n * @param key - The key to remove.\n * @returns A promise that resolves when the asset has been unloaded and removed.\n */\nexport async function RemoveSmartAssetAsync(scene: Scene, key: string): Promise<void> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n if (internal.containers.has(key)) {\n await UnloadSmartAssetAsync(scene, key);\n }\n for (const tex of [...scene.textures]) {\n if (internal.objectToKeyMap.get(tex) === key) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n }\n internal.urls.delete(key);\n internal.options.delete(key);\n internal.textureKeys.delete(key);\n internal.reloadSources.delete(key);\n RevokeManagedBlobUrl(internal, key);\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Returns all registered key-to-URL mappings.\n * @param scene - The scene whose smart asset registry to read.\n * @returns A read-only map of keys to URLs.\n */\nexport function GetAllSmartAssets(scene: Scene): ReadonlyMap<string, string> {\n return GetSmartAssetInternals(GetSmartAssetManager(scene)).urls;\n}\n\n/**\n * Loads a scene-file asset by key.\n * @param scene - The scene to load the asset into.\n * @param key - The key to load.\n * @param url - Optional URL. If provided, the key is registered first.\n * @param options - Optional loader hints and metadata for this asset.\n * @returns A promise resolving to the loaded AssetContainer.\n */\nexport async function LoadSmartAssetAsync(scene: Scene, key: string, url?: string, options?: SmartAssetLoadOptions): Promise<AssetContainer> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const previousUrl = internal.urls.get(key);\n const { reloadSource, ...registrationOptions } = options ?? {};\n if (url) {\n RegisterSmartAsset(scene, key, url, registrationOptions);\n }\n if (reloadSource) {\n internal.reloadSources.set(key, reloadSource);\n }\n\n const resolvedUrl = internal.urls.get(key);\n if (!resolvedUrl) {\n throw new Error(`SmartAssetManager: Key \"${key}\" is not registered. Provide a URL to auto-register.`);\n }\n\n const existing = internal.containers.get(key);\n if (existing) {\n if (url && url !== previousUrl) {\n // URL changed — drop the stale container before fetching the new one\n // so callers don't get a surprise cached return for an updated URL.\n await UnloadSmartAssetAsync(scene, key);\n } else {\n return existing;\n }\n }\n\n return await LoadSmartAssetSceneFileAsync(manager, key, resolvedUrl, internal.options.get(key)?.extension);\n}\n\n/**\n * Loads all registered assets concurrently.\n * @param scene - The scene whose registered assets to load.\n * @returns A promise resolving to loaded scene-file containers.\n */\nexport async function LoadAllSmartAssetsAsync(scene: Scene): Promise<AssetContainer[]> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const scenePromises: Promise<AssetContainer | null>[] = [];\n const texturePromises: Promise<void>[] = [];\n\n for (const [key, url] of Array.from(internal.urls)) {\n if (internal.containers.has(key)) {\n continue;\n }\n const options = internal.options.get(key);\n if (internal.textureKeys.has(key) || options?.type === \"texture\" || IsTextureUrl(url) || IsTextureExtension(options?.extension)) {\n const textureLoadAsync = async () => {\n try {\n await LoadSmartAssetTextureAsync(scene, key);\n } catch {\n Logger.Warn(`SmartAssetManager: Texture \"${key}\" could not be loaded — skipping.`);\n }\n };\n texturePromises.push(textureLoadAsync());\n } else {\n const sceneLoadAsync = async () => {\n try {\n return await LoadSmartAssetAsync(scene, key);\n } catch {\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded — skipping.`);\n return null;\n }\n };\n scenePromises.push(sceneLoadAsync());\n }\n }\n\n await Promise.all(texturePromises);\n const results = await Promise.all(scenePromises);\n return results.filter((r): r is AssetContainer => r !== null);\n}\n\n/**\n * Loads a standalone texture by key.\n * @param scene - The scene to load the texture into.\n * @param key - The key to load.\n * @param url - Optional URL. If provided, the key is registered first.\n * @param options - Optional loader hints and metadata for this asset.\n * @returns A promise resolving to the loaded texture.\n */\nexport async function LoadSmartAssetTextureAsync(scene: Scene, key: string, url?: string, options?: SmartAssetLoadOptions): Promise<BaseTexture> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const previousUrl = internal.urls.get(key);\n const { reloadSource, ...registrationOptions } = options ?? {};\n if (url) {\n RegisterSmartAsset(scene, key, url, { ...registrationOptions, type: registrationOptions.type ?? \"texture\" });\n }\n if (reloadSource) {\n internal.reloadSources.set(key, reloadSource);\n }\n\n internal.textureKeys.add(key);\n\n // Mirror LoadSmartAssetAsync: if a tracked texture already exists for this key,\n // return it on a same-URL call (cache hit) or dispose it before reload on URL change.\n // Without this guard, calling LoadSmartAssetTextureAsync twice with the same URL\n // would create duplicate Texture objects in scene.textures.\n const existingTextures: BaseTexture[] = [];\n for (const tex of scene.textures) {\n if (internal.objectToKeyMap.get(tex) === key) {\n existingTextures.push(tex);\n }\n }\n if (existingTextures.length > 0) {\n if (url && previousUrl !== undefined && url !== previousUrl) {\n for (const tex of existingTextures) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n } else {\n return existingTextures[0];\n }\n }\n\n const resolvedUrl = internal.urls.get(key);\n if (!resolvedUrl) {\n throw new Error(`SmartAssetManager: Key \"${key}\" is not registered. Provide a URL to auto-register.`);\n }\n\n const extensionHint = internal.options.get(key)?.extension;\n let texture: BaseTexture;\n try {\n texture = await CreateAndLoadTextureAsync(manager, resolvedUrl, extensionHint);\n } catch (error) {\n const fallback = await ResolveNotFoundAsync(manager, key, resolvedUrl);\n if (!fallback) {\n throw error;\n }\n texture = await CreateAndLoadTextureAsync(manager, fallback.url, fallback.extensionHint ?? extensionHint);\n }\n\n internal.objectToKeyMap.set(texture, key);\n\n // Surface the registry key as the texture's display name when the texture\n // doesn't already have one. For blob/data-URL textures (e.g. user-uploaded\n // files) the underlying `texture.name` is an opaque blob URL, so without\n // this any UI that shows texture names (Scene Explorer, material slot\n // pickers, override summaries) would render the blob URL instead of the\n // user-chosen key. We never overwrite a display name the caller already set.\n if (!texture.displayName) {\n texture.displayName = key;\n }\n\n manager.onChangedObservable.notifyObservers();\n return texture;\n}\n\n/**\n * Unloads a loaded asset while keeping the key registered.\n * @param scene - The scene whose smart asset to unload.\n * @param key - The key to unload.\n * @returns A promise that resolves once the asset has been unloaded.\n */\nexport async function UnloadSmartAssetAsync(scene: Scene, key: string): Promise<void> {\n const manager = GetSmartAssetManager(scene);\n const internal = GetSmartAssetInternals(manager);\n const container = internal.containers.get(key);\n if (container) {\n container.removeAllFromScene();\n container.dispose();\n internal.containers.delete(key);\n manager.onChangedObservable.notifyObservers();\n return;\n }\n\n for (const tex of [...scene.textures]) {\n if (internal.objectToKeyMap.get(tex) === key) {\n internal.objectToKeyMap.delete(tex);\n tex.dispose();\n }\n }\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Unloads and re-loads an asset.\n * @param scene - The scene whose smart asset to reload.\n * @param key - The key to reload.\n * @returns A promise resolving to the newly loaded AssetContainer or BaseTexture.\n */\nexport async function ReloadSmartAssetAsync(scene: Scene, key: string): Promise<AssetContainer | BaseTexture> {\n const internal = GetSmartAssetInternals(GetSmartAssetManager(scene));\n const reloadSource = internal.reloadSources.get(key);\n if (reloadSource) {\n try {\n const freshFile = await reloadSource();\n const blobUrl = URL.createObjectURL(freshFile);\n RegisterSmartAsset(scene, key, blobUrl, { extension: GetExtensionFromUrl(freshFile.name) || internal.options.get(key)?.extension });\n } catch (e) {\n Logger.Warn(`SmartAssetManager: reloadSource callback failed for \"${key}\": ${e}`);\n }\n }\n\n await UnloadSmartAssetAsync(scene, key);\n\n if (internal.textureKeys.has(key)) {\n return await LoadSmartAssetTextureAsync(scene, key);\n }\n return await LoadSmartAssetAsync(scene, key);\n}\n\n/**\n * Finds which smart asset key owns a scene object.\n * @param scene - The scene whose registry to search.\n * @param object - A scene object.\n * @returns The key, or undefined if the object is not tracked.\n */\nexport function FindSmartAssetKeyForObject(scene: Scene, object: Node | Material | BaseTexture | AnimationGroup): string | undefined {\n return GetSmartAssetInternals(GetSmartAssetManager(scene)).objectToKeyMap.get(object);\n}\n\n/**\n * Serializes the registry to a JSON-compatible document.\n * If a baseUrl is provided, asset URLs are stored relative to it for portability.\n * @param scene - The scene whose registry to serialize.\n * @param baseUrl - Optional base URL for making asset paths relative.\n * @returns A serialized asset map document.\n */\nexport function SerializeSmartAssetManagerMap(scene: Scene, baseUrl?: string): ISerializedSmartAssetMap {\n const internal = GetSmartAssetInternals(GetSmartAssetManager(scene));\n const assets: Record<string, ISerializedSmartAssetEntry> = {};\n\n for (const [key, registeredUrl] of Array.from(internal.urls)) {\n let url = registeredUrl;\n if (baseUrl && !IsAbsoluteOrSpecialUrl(url)) {\n url = MakeRelative(url, baseUrl);\n }\n const options = internal.options.get(key);\n assets[key] = { url, ...options, ...(internal.textureKeys.has(key) ? { type: \"texture\" } : {}) };\n }\n\n return { version: 1, assets };\n}\n\n/**\n * Loads an asset map from a URL, File, or pre-parsed JSON object.\n * @param scene - The scene to load assets into.\n * @param source - A URL string, File object, or pre-parsed ISerializedSmartAssetMap.\n * @param rootUrl - Optional root URL for resolving relative asset paths.\n * @returns A promise that resolves after the map has been loaded and all registered assets have been attempted.\n */\nexport async function LoadSmartAssetMapAsync(scene: Scene, source: string | File | ISerializedSmartAssetMap, rootUrl?: string): Promise<void> {\n let resolvedRootUrl = rootUrl ?? \"\";\n\n if (typeof source === \"string\" && !rootUrl) {\n const { Tools } = await import(\"../Misc/tools.pure\");\n resolvedRootUrl = Tools.GetFolderPath(source);\n }\n\n const raw = await ReadJsonSourceAsync(source);\n const doc = DeserializeSmartAssetMap(raw);\n\n for (const [key, entry] of Object.entries(doc.assets)) {\n const resolved = resolvedRootUrl ? ResolveAssetUrl(entry.url, resolvedRootUrl) : entry.url;\n RegisterSmartAsset(scene, key, resolved, { type: entry.type, extension: entry.extension, metadata: entry.metadata });\n }\n\n await LoadAllSmartAssetsAsync(scene);\n}\n\n/**\n * Registers an externally loaded AssetContainer under a key.\n * @param manager - The smart asset manager state.\n * @param key - The key to associate with the container.\n * @param container - The loaded AssetContainer.\n */\nfunction TrackLoadedSmartAssetContainer(manager: SmartAssetManager, key: string, container: AssetContainer): void {\n const internal = GetSmartAssetInternals(manager);\n internal.containers.set(key, container);\n TrackSmartAssetContainerObjects(manager, key, container);\n manager.onChangedObservable.notifyObservers();\n}\n\n/**\n * Disposes the manager, unloading all assets and detaching it from its scene.\n * Safe to call multiple times; subsequent calls are no-ops. Automatically invoked when the\n * owning scene is disposed.\n * @param manager - The smart asset manager state.\n */\nexport function DisposeSmartAssetManager(manager: SmartAssetManager): void {\n const internal = GetInternalsMap().get(manager);\n if (!internal) {\n return;\n }\n GetInternalsMap().delete(manager);\n\n if (internal.sceneDisposeObserver) {\n manager.scene.onDisposeObservable.remove(internal.sceneDisposeObserver);\n internal.sceneDisposeObserver = null;\n }\n\n for (const container of Array.from(internal.containers.values())) {\n container.removeAllFromScene();\n container.dispose();\n }\n for (const tex of [...manager.scene.textures]) {\n if (internal.objectToKeyMap.get(tex) !== undefined) {\n tex.dispose();\n }\n }\n\n internal.urls.clear();\n internal.options.clear();\n internal.textureKeys.clear();\n internal.reloadSources.clear();\n internal.containers.clear();\n for (const blobUrl of Array.from(internal.blobUrls.values())) {\n URL.revokeObjectURL(blobUrl);\n }\n internal.blobUrls.clear();\n\n manager.onChangedObservable.clear();\n\n if (manager.scene.metadata) {\n delete manager.scene.metadata[SMART_ASSET_MANAGER_KEY];\n }\n}\n\nfunction GetSmartAssetInternals(manager: SmartAssetManager): SmartAssetManagerInternals {\n const internal = GetInternalsMap().get(manager);\n if (!internal) {\n throw new Error(\"SmartAssetManager: Unknown manager state.\");\n }\n return internal;\n}\n\nfunction RevokeManagedBlobUrl(internal: SmartAssetManagerInternals, key: string, replacementUrl?: string): void {\n const blobUrl = internal.blobUrls.get(key);\n if (!blobUrl || blobUrl === replacementUrl) {\n return;\n }\n URL.revokeObjectURL(blobUrl);\n internal.blobUrls.delete(key);\n}\n\nfunction TrackManagedBlobUrl(internal: SmartAssetManagerInternals, key: string, url: string): void {\n if (url.startsWith(\"blob:\")) {\n internal.blobUrls.set(key, url);\n }\n}\n\nasync function CreateAndLoadTextureAsync(manager: SmartAssetManager, url: string, extensionHint?: string): Promise<BaseTexture> {\n return await new Promise<BaseTexture>((resolve, reject) => {\n const ext = (extensionHint || GetExtensionFromUrl(url)).toLowerCase();\n const onError = (message?: string, exception?: unknown) => {\n const err = exception instanceof Error ? exception : new Error(message ?? `SmartAssetManager: failed to load texture from \"${url}\".`);\n reject(err);\n };\n let texture: BaseTexture;\n const onLoad = () => resolve(texture);\n if (ext === \".hdr\") {\n // HDR equirectangular files require HDRCubeTexture — CubeTexture's .hdr\n // loader explicitly throws \".hdr not supported in Cube.\" so we can't\n // route HDRs through the generic CubeTexture path.\n texture = new HDRCubeTexture(url, manager.scene, 256, false, true, false, false, onLoad, onError);\n } else if (ext === \".env\" || ext === \".dds\") {\n texture = new CubeTexture(url, manager.scene, null, false, null, onLoad, onError, undefined, ext === \".env\");\n } else {\n texture = new Texture(url, manager.scene, undefined, undefined, undefined, onLoad, onError);\n }\n });\n}\n\nasync function ResolveNotFoundAsync(manager: SmartAssetManager, key: string, expectedUrl: string): Promise<{ url: string; extensionHint?: string } | null> {\n if (!manager.onAssetNotFound) {\n return null;\n }\n const resolution = await manager.onAssetNotFound(key, expectedUrl);\n if (resolution === null || resolution === undefined) {\n return null;\n }\n if (typeof resolution === \"string\") {\n RegisterSmartAsset(manager.scene, key, resolution);\n return { url: resolution, extensionHint: GetSmartAssetInternals(manager).options.get(key)?.extension };\n }\n const blobUrl = URL.createObjectURL(resolution);\n const extensionHint = GetExtensionFromUrl(resolution.name) || undefined;\n RegisterSmartAsset(manager.scene, key, blobUrl, { extension: extensionHint });\n return { url: blobUrl, extensionHint };\n}\n\nasync function LoadSmartAssetSceneFileAsync(manager: SmartAssetManager, key: string, url: string, extensionHint?: string): Promise<AssetContainer> {\n const loadAsync = async (loadUrl: string, extensionHint?: string) => {\n const container = await LoadAssetContainerAsync(loadUrl, manager.scene, { pluginExtension: extensionHint });\n container.addAllToScene();\n TrackLoadedSmartAssetContainer(manager, key, container);\n return container;\n };\n\n try {\n return await loadAsync(url, extensionHint);\n } catch (error) {\n const fallback = await ResolveNotFoundAsync(manager, key, url);\n if (fallback) {\n try {\n return await loadAsync(fallback.url, fallback.extensionHint);\n } catch (retryError) {\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded from fallback \"${fallback.url}\".`);\n throw retryError;\n }\n }\n Logger.Warn(`SmartAssetManager: Asset \"${key}\" could not be loaded from \"${url}\".`);\n throw error;\n }\n}\n\nfunction TrackSmartAssetContainerObjects(manager: SmartAssetManager, key: string, container: AssetContainer): void {\n const internal = GetSmartAssetInternals(manager);\n\n for (const collection of [\n container.meshes,\n container.transformNodes,\n container.materials,\n container.textures,\n container.animationGroups,\n container.lights,\n container.cameras,\n ]) {\n for (const obj of collection) {\n internal.objectToKeyMap.set(obj, key);\n }\n }\n}\n\nlet _TextureExtensions: Set<string> | undefined;\n/**\n * Returns the set of file extensions (including the leading dot) that {@link LoadAllSmartAssetsAsync}\n * treats as standalone textures.\n * @returns A read-only set of texture file extensions.\n */\nexport function GetSmartAssetTextureExtensions(): ReadonlySet<string> {\n return (_TextureExtensions ??= new Set([\".png\", \".jpg\", \".jpeg\", \".bmp\", \".tga\", \".gif\", \".webp\", \".env\", \".hdr\", \".dds\", \".ktx\", \".ktx2\", \".basis\"]));\n}\n\n/**\n * Returns true if the URL points to a standalone texture file.\n * @param url - The URL to check.\n * @returns True if the URL has a texture file extension.\n */\nfunction IsTextureUrl(url: string): boolean {\n return GetSmartAssetTextureExtensions().has(GetExtensionFromUrl(url));\n}\n\nfunction IsTextureExtension(extension: string | undefined): boolean {\n return extension !== undefined && GetSmartAssetTextureExtensions().has(extension.toLowerCase());\n}\n"]}
|
package/Sprites/thinSprite.js
CHANGED
|
@@ -99,7 +99,7 @@ export class ThinSprite {
|
|
|
99
99
|
this.cellIndex = this._direction > 0 ? this._fromIndex : this._toIndex;
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
-
this.cellIndex = this._toIndex;
|
|
102
|
+
this.cellIndex = this._direction > 0 ? this._toIndex : this._fromIndex;
|
|
103
103
|
this._animationStarted = false;
|
|
104
104
|
if (this._onBaseAnimationEnd) {
|
|
105
105
|
this._onBaseAnimationEnd();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinSprite.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/thinSprite.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,UAAU;IAsBnB;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,sFAAsF;IACtF,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,0FAA0F;IAC1F,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,6GAA6G;IAC7G,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,2FAA2F;IAC3F,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAoBD;;OAEG;IACH;QA7DA,6BAA6B;QACtB,UAAK,GAAG,GAAG,CAAC;QACnB,8BAA8B;QACvB,WAAM,GAAG,GAAG,CAAC;QACpB,kCAAkC;QAC3B,UAAK,GAAG,CAAC,CAAC;QACjB,uFAAuF;QAChF,YAAO,GAAG,KAAK,CAAC;QACvB,uFAAuF;QAChF,YAAO,GAAG,KAAK,CAAC;QACvB,+FAA+F;QACxF,cAAS,GAAG,IAAI,CAAC;QAsChB,sBAAiB,GAAG,KAAK,CAAC;QACxB,mBAAc,GAAG,KAAK,CAAC;QACvB,eAAU,GAAG,CAAC,CAAC;QACf,aAAQ,GAAG,CAAC,CAAC;QACb,WAAM,GAAG,CAAC,CAAC;QACb,eAAU,GAAG,CAAC,CAAC;QACf,UAAK,GAAG,CAAC,CAAC;QACV,wBAAmB,GAAyB,IAAI,CAAC;QAMrD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAAC,IAAY,EAAE,EAAU,EAAE,IAAa,EAAE,KAAa,EAAE,cAAoC;QAC7G,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC;QAE1C,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,uCAAuC;IAChC,aAAa;QAChB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,SAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"thinSprite.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/thinSprite.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IVector3Like, type IColor4Like } from \"../Maths/math.like\";\r\nimport { type Nullable } from \"../types\";\r\n\r\n/**\r\n * ThinSprite Class used to represent a thin sprite\r\n * This is the base class for sprites but can also directly be used with ThinEngine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/sprites\r\n */\r\nexport class ThinSprite {\r\n /** Gets or sets the cell index in the sprite sheet */\r\n public cellIndex: number;\r\n /** Gets or sets the cell reference in the sprite sheet, uses sprite's filename when added to sprite sheet */\r\n public cellRef: string;\r\n /** Gets or sets the current world position */\r\n public position: IVector3Like;\r\n /** Gets or sets the main color */\r\n public color: IColor4Like;\r\n /** Gets or sets the width */\r\n public width = 1.0;\r\n /** Gets or sets the height */\r\n public height = 1.0;\r\n /** Gets or sets rotation angle */\r\n public angle = 0;\r\n /** Gets or sets a boolean indicating if UV coordinates should be inverted in U axis */\r\n public invertU = false;\r\n /** Gets or sets a boolean indicating if UV coordinates should be inverted in B axis */\r\n public invertV = false;\r\n /** Gets or sets a boolean indicating if the sprite is visible (renderable). Default is true */\r\n public isVisible = true;\r\n\r\n /**\r\n * Returns a boolean indicating if the animation is started\r\n */\r\n public get animationStarted() {\r\n return this._animationStarted;\r\n }\r\n\r\n /** Gets the initial key for the animation (setting it will restart the animation) */\r\n public get fromIndex() {\r\n return this._fromIndex;\r\n }\r\n\r\n /** Gets or sets the end key for the animation (setting it will restart the animation) */\r\n public get toIndex() {\r\n return this._toIndex;\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the animation is looping (setting it will restart the animation) */\r\n public get loopAnimation() {\r\n return this._loopAnimation;\r\n }\r\n\r\n /** Gets or sets the delay between cell changes (setting it will restart the animation) */\r\n public get delay() {\r\n return Math.max(this._delay, 1);\r\n }\r\n\r\n /** @internal */\r\n public _xOffset: number;\r\n /** @internal */\r\n public _yOffset: number;\r\n /** @internal */\r\n public _xSize: number;\r\n /** @internal */\r\n public _ySize: number;\r\n\r\n private _animationStarted = false;\r\n protected _loopAnimation = false;\r\n protected _fromIndex = 0;\r\n protected _toIndex = 0;\r\n protected _delay = 0;\r\n private _direction = 1;\r\n private _time = 0;\r\n private _onBaseAnimationEnd: Nullable<() => void> = null;\r\n\r\n /**\r\n * Creates a new Thin Sprite\r\n */\r\n constructor() {\r\n this.position = { x: 1.0, y: 1.0, z: 1.0 };\r\n this.color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\r\n }\r\n\r\n /**\r\n * Starts an animation\r\n * @param from defines the initial key\r\n * @param to defines the end key\r\n * @param loop defines if the animation must loop\r\n * @param delay defines the start delay (in ms)\r\n * @param onAnimationEnd defines a callback for when the animation ends\r\n */\r\n public playAnimation(from: number, to: number, loop: boolean, delay: number, onAnimationEnd: Nullable<() => void>): void {\r\n this._fromIndex = from;\r\n this._toIndex = to;\r\n this._loopAnimation = loop;\r\n this._delay = delay || 1;\r\n this._animationStarted = true;\r\n this._onBaseAnimationEnd = onAnimationEnd;\r\n\r\n if (from < to) {\r\n this._direction = 1;\r\n } else {\r\n this._direction = -1;\r\n this._toIndex = from;\r\n this._fromIndex = to;\r\n }\r\n\r\n this.cellIndex = from;\r\n this._time = 0;\r\n }\r\n\r\n /** Stops current animation (if any) */\r\n public stopAnimation(): void {\r\n this._animationStarted = false;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _animate(deltaTime: number): void {\r\n if (!this._animationStarted) {\r\n return;\r\n }\r\n\r\n this._time += deltaTime;\r\n if (this._time > this._delay) {\r\n this._time = this._time % this._delay;\r\n this.cellIndex += this._direction;\r\n if ((this._direction > 0 && this.cellIndex > this._toIndex) || (this._direction < 0 && this.cellIndex < this._fromIndex)) {\r\n if (this._loopAnimation) {\r\n this.cellIndex = this._direction > 0 ? this._fromIndex : this._toIndex;\r\n } else {\r\n this.cellIndex = this._direction > 0 ? this._toIndex : this._fromIndex;\r\n this._animationStarted = false;\r\n if (this._onBaseAnimationEnd) {\r\n this._onBaseAnimationEnd();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -2,33 +2,203 @@ import { type InternalTexture } from "../../../Materials/Textures/internalTextur
|
|
|
2
2
|
import { type RenderTargetTexture } from "../../../Materials/Textures/renderTargetTexture.js";
|
|
3
3
|
import { type Viewport } from "../../../Maths/math.viewport.js";
|
|
4
4
|
import { Observable } from "../../../Misc/observable.js";
|
|
5
|
-
import { type WebXRLayerType, WebXRLayerWrapper } from "../../webXRLayerWrapper.js";
|
|
6
|
-
import {
|
|
5
|
+
import { type WebXRLayerType, WebXRLayerWrapper, type WebXRSpatialLayerType, type WebXRSupportedLayerType } from "../../webXRLayerWrapper.js";
|
|
6
|
+
import { WebXRLayerRenderTargetTextureProvider } from "../../webXRRenderTargetTextureProvider.js";
|
|
7
7
|
import { WebXRWebGLRenderTargetTextureProvider } from "../../webXRWebGLRenderTargetTextureProvider.js";
|
|
8
8
|
import { type WebXRSessionManager } from "../../webXRSessionManager.js";
|
|
9
9
|
import { type Nullable } from "../../../types.js";
|
|
10
|
+
import { type TransformNode } from "../../../Meshes/transformNode.pure.js";
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
-
|
|
12
|
+
* The non-projection composition layers that can be positioned in an XR space.
|
|
13
|
+
*/
|
|
14
|
+
export type WebXRSpatialLayer = XRQuadLayer | XRCylinderLayer | XREquirectLayer | XRCubeLayer;
|
|
15
|
+
export type { WebXRSpatialLayerType } from "../../webXRLayerWrapper.js";
|
|
16
|
+
/**
|
|
17
|
+
* Wraps an XR composition layer and creates its Babylon render target provider.
|
|
18
|
+
* @typeParam LayerT the concrete WebXR composition layer type
|
|
19
|
+
* @see https://playground.babylonjs.com/#TODARD#0
|
|
13
20
|
*/
|
|
14
|
-
export declare class WebXRCompositionLayerWrapper extends WebXRLayerWrapper {
|
|
21
|
+
export declare class WebXRCompositionLayerWrapper<LayerT extends XRCompositionLayer = XRCompositionLayer, LayerTypeT extends WebXRSupportedLayerType = WebXRLayerType> extends WebXRLayerWrapper<LayerTypeT> {
|
|
15
22
|
getWidth: () => number;
|
|
16
23
|
getHeight: () => number;
|
|
17
|
-
readonly layer:
|
|
18
|
-
readonly layerType:
|
|
24
|
+
readonly layer: LayerT;
|
|
25
|
+
readonly layerType: LayerTypeT;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the layer renders both views into a texture array.
|
|
28
|
+
*/
|
|
19
29
|
readonly isMultiview: boolean;
|
|
20
|
-
createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider
|
|
30
|
+
createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider<LayerTypeT>;
|
|
21
31
|
_originalInternalTexture: Nullable<InternalTexture>;
|
|
22
|
-
|
|
32
|
+
private readonly _destroyLayerOnDispose;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the layer can only be rendered when its native `needsRedraw` flag is set.
|
|
35
|
+
*/
|
|
36
|
+
readonly isStatic: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether this layer receives its content directly from an HTML media element.
|
|
39
|
+
*/
|
|
40
|
+
readonly isMediaLayer: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Whether Babylon should acquire subimages and expose render target textures for this layer.
|
|
43
|
+
*/
|
|
44
|
+
readonly usesRenderTargetProvider: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the native layer exposes compositor opacity control.
|
|
47
|
+
*/
|
|
48
|
+
get isOpacitySupported(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Gets the compositor opacity applied to this layer.
|
|
51
|
+
* @returns The native opacity in the range 0 to 1.
|
|
52
|
+
* @throws If opacity is not supported by the active XR runtime.
|
|
53
|
+
*/
|
|
54
|
+
get opacity(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Sets the compositor opacity applied to this layer.
|
|
57
|
+
* The native runtime clamps the value to the range 0 to 1.
|
|
58
|
+
* @param value The desired opacity.
|
|
59
|
+
* @throws If opacity is not supported by the active XR runtime.
|
|
60
|
+
*/
|
|
61
|
+
set opacity(value: number);
|
|
62
|
+
/**
|
|
63
|
+
* Whether the native layer exposes compositor quality hints.
|
|
64
|
+
*/
|
|
65
|
+
get isQualitySupported(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Gets the compositor quality hint applied to this layer.
|
|
68
|
+
* @returns The current native layer quality hint.
|
|
69
|
+
* @throws If quality hints are not supported by the active XR runtime.
|
|
70
|
+
*/
|
|
71
|
+
get quality(): XRLayerQuality;
|
|
72
|
+
/**
|
|
73
|
+
* Sets the compositor quality hint applied to this layer.
|
|
74
|
+
* @param value The desired quality hint.
|
|
75
|
+
* @throws If quality hints are not supported by the active XR runtime, or the native runtime rejects the value.
|
|
76
|
+
*/
|
|
77
|
+
set quality(value: XRLayerQuality);
|
|
78
|
+
/**
|
|
79
|
+
* Whether the native layer exposes mono-presentation control.
|
|
80
|
+
*/
|
|
81
|
+
get isForceMonoPresentationSupported(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Gets whether the compositor presents the left-eye layer configuration to both eyes.
|
|
84
|
+
* @returns Whether mono presentation is forced.
|
|
85
|
+
* @throws If mono presentation control is not supported by the active XR runtime.
|
|
86
|
+
*/
|
|
87
|
+
get forceMonoPresentation(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Sets whether the compositor presents the left-eye layer configuration to both eyes.
|
|
90
|
+
* Applications should continue rendering both eyes when this is enabled.
|
|
91
|
+
* @param value Whether to force mono presentation.
|
|
92
|
+
* @throws If mono presentation control is not supported by the active XR runtime.
|
|
93
|
+
*/
|
|
94
|
+
set forceMonoPresentation(value: boolean);
|
|
95
|
+
constructor(getWidth: () => number, getHeight: () => number, layer: LayerT, layerType: LayerTypeT,
|
|
96
|
+
/**
|
|
97
|
+
* Whether the layer renders both views into a texture array.
|
|
98
|
+
*/
|
|
99
|
+
isMultiview: boolean, createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider<LayerTypeT>, _originalInternalTexture?: Nullable<InternalTexture>, _destroyLayerOnDispose?: boolean,
|
|
100
|
+
/**
|
|
101
|
+
* Whether the layer can only be rendered when its native `needsRedraw` flag is set.
|
|
102
|
+
*/
|
|
103
|
+
isStatic?: boolean);
|
|
104
|
+
private _assertControlSupported;
|
|
105
|
+
/**
|
|
106
|
+
* Disposes the Babylon render-target resources and destroys the native layer when this wrapper owns it.
|
|
107
|
+
*/
|
|
108
|
+
dispose(): void;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Wraps a positionable XR composition layer and synchronizes it with a Babylon transform node.
|
|
112
|
+
* The node's scaling does not affect the physical dimensions of the layer.
|
|
113
|
+
* @typeParam LayerT the concrete positionable WebXR layer type
|
|
114
|
+
*/
|
|
115
|
+
export declare class WebXRSpatialLayerWrapper<LayerT extends WebXRSpatialLayer = WebXRSpatialLayer, LayerTypeT extends WebXRSpatialLayerType = WebXRSpatialLayerType> extends WebXRCompositionLayerWrapper<LayerT, LayerTypeT> {
|
|
116
|
+
/**
|
|
117
|
+
* Whether the layer should follow changes to the session manager's reference space.
|
|
118
|
+
*/
|
|
119
|
+
readonly usesSessionReferenceSpace: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* The Babylon node whose world position and rotation are applied to the native layer.
|
|
122
|
+
*/
|
|
123
|
+
readonly transformNode: TransformNode;
|
|
124
|
+
private readonly _ownsTransformNode;
|
|
125
|
+
private readonly _currentPosition;
|
|
126
|
+
private readonly _currentRotation;
|
|
127
|
+
private readonly _lastPosition;
|
|
128
|
+
private readonly _lastRotation;
|
|
129
|
+
constructor(getWidth: () => number, getHeight: () => number, layer: LayerT, layerType: LayerTypeT, isMultiview: boolean, isStatic: boolean,
|
|
130
|
+
/**
|
|
131
|
+
* Whether the layer should follow changes to the session manager's reference space.
|
|
132
|
+
*/
|
|
133
|
+
usesSessionReferenceSpace: boolean, createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider<LayerTypeT>,
|
|
134
|
+
/**
|
|
135
|
+
* The Babylon node whose world position and rotation are applied to the native layer.
|
|
136
|
+
*/
|
|
137
|
+
transformNode: TransformNode, _ownsTransformNode: boolean);
|
|
138
|
+
/**
|
|
139
|
+
* Synchronizes the native layer with the current world transform of the Babylon node.
|
|
140
|
+
* @param useRightHandedSystem whether the Babylon scene uses right-handed coordinates
|
|
141
|
+
* @param worldScalingFactor the number of Babylon scene units represented by one meter
|
|
142
|
+
*/
|
|
143
|
+
updateFromTransformNode(useRightHandedSystem: boolean, worldScalingFactor: number): void;
|
|
144
|
+
/**
|
|
145
|
+
* Disposes the native layer wrapper and its Babylon transform node when the node was created by Babylon.
|
|
146
|
+
*/
|
|
147
|
+
dispose(): void;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Wraps an XRMediaBinding layer.
|
|
151
|
+
* @typeParam LayerT the concrete media layer type
|
|
152
|
+
*/
|
|
153
|
+
export declare class WebXRMediaLayerWrapper<LayerT extends Exclude<WebXRSpatialLayer, XRCubeLayer> = Exclude<WebXRSpatialLayer, XRCubeLayer>, LayerTypeT extends Exclude<WebXRSpatialLayerType, "XRCubeLayer"> = Exclude<WebXRSpatialLayerType, "XRCubeLayer">> extends WebXRSpatialLayerWrapper<LayerT, LayerTypeT> {
|
|
154
|
+
/**
|
|
155
|
+
* Media layers receive their contents directly from the user agent.
|
|
156
|
+
*/
|
|
157
|
+
readonly isMediaLayer: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Media layers are populated directly by the user agent.
|
|
160
|
+
*/
|
|
161
|
+
readonly usesRenderTargetProvider: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Creates a wrapper for a media-backed spatial layer.
|
|
164
|
+
* @param getWidth returns the current video width
|
|
165
|
+
* @param getHeight returns the current video height
|
|
166
|
+
* @param layer the native media composition layer
|
|
167
|
+
* @param layerType the concrete spatial layer type
|
|
168
|
+
* @param transformNode the Babylon transform synchronized with the native layer
|
|
169
|
+
* @param ownsTransformNode whether the wrapper should dispose the transform node
|
|
170
|
+
* @param usesSessionReferenceSpace whether the layer should follow session reference-space changes
|
|
171
|
+
*/
|
|
172
|
+
constructor(getWidth: () => number, getHeight: () => number, layer: LayerT, layerType: LayerTypeT, transformNode: TransformNode, ownsTransformNode: boolean, usesSessionReferenceSpace: boolean);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Wraps a native cube layer and exposes its raw subimage.
|
|
176
|
+
* Cube layers require six face uploads or render passes and therefore do not use Babylon's 2D composition-layer render target provider.
|
|
177
|
+
*/
|
|
178
|
+
export declare class WebXRCubeLayerWrapper extends WebXRSpatialLayerWrapper<XRCubeLayer, "XRCubeLayer"> {
|
|
179
|
+
private readonly _binding;
|
|
180
|
+
/**
|
|
181
|
+
* Cube layers are populated through raw cubemap or array-layer access.
|
|
182
|
+
*/
|
|
183
|
+
readonly usesRenderTargetProvider: boolean;
|
|
184
|
+
constructor(getWidth: () => number, getHeight: () => number, layer: XRCubeLayer, isStatic: boolean, usesSessionReferenceSpace: boolean, _binding: XRWebGLBinding | XRGPUBinding, transformNode: TransformNode, ownsTransformNode: boolean);
|
|
185
|
+
/**
|
|
186
|
+
* Gets the compositor-owned cube subimage for the current frame.
|
|
187
|
+
* WebGL callers must populate all six cubemap faces. WebGPU callers must render to six consecutive array layers beginning at the descriptor's base array layer.
|
|
188
|
+
* @param frame the current XR frame
|
|
189
|
+
* @param eye the eye to retrieve for stereo cube layers
|
|
190
|
+
* @returns the raw WebGL or WebGPU cube subimage
|
|
191
|
+
*/
|
|
192
|
+
getSubImage(frame: XRFrame, eye?: XREye): XRWebGLSubImage | XRGPUSubImage;
|
|
23
193
|
}
|
|
24
194
|
/**
|
|
25
195
|
* Provides render target textures and other important rendering information for a given XRCompositionLayer.
|
|
26
196
|
* @internal
|
|
27
197
|
*/
|
|
28
|
-
export declare class WebXRCompositionLayerRenderTargetTextureProvider extends WebXRWebGLRenderTargetTextureProvider {
|
|
198
|
+
export declare class WebXRCompositionLayerRenderTargetTextureProvider<LayerTypeT extends WebXRSupportedLayerType = WebXRLayerType> extends WebXRWebGLRenderTargetTextureProvider<LayerTypeT> {
|
|
29
199
|
protected readonly _xrSessionManager: WebXRSessionManager;
|
|
30
200
|
protected readonly _xrWebGLBinding: XRWebGLBinding;
|
|
31
|
-
readonly layerWrapper: WebXRCompositionLayerWrapper
|
|
201
|
+
readonly layerWrapper: WebXRCompositionLayerWrapper<XRCompositionLayer, LayerTypeT>;
|
|
32
202
|
protected _lastSubImages: Map<XREye, XRWebGLSubImage>;
|
|
33
203
|
private _compositionLayer;
|
|
34
204
|
/**
|
|
@@ -38,7 +208,7 @@ export declare class WebXRCompositionLayerRenderTargetTextureProvider extends We
|
|
|
38
208
|
texture: RenderTargetTexture;
|
|
39
209
|
eye?: XREye;
|
|
40
210
|
}>;
|
|
41
|
-
constructor(_xrSessionManager: WebXRSessionManager, _xrWebGLBinding: XRWebGLBinding, layerWrapper: WebXRCompositionLayerWrapper);
|
|
211
|
+
constructor(_xrSessionManager: WebXRSessionManager, _xrWebGLBinding: XRWebGLBinding, layerWrapper: WebXRCompositionLayerWrapper<XRCompositionLayer, LayerTypeT>);
|
|
42
212
|
protected _getRenderTargetForSubImage(subImage: XRWebGLSubImage, eye?: XREye): RenderTargetTexture;
|
|
43
213
|
private _getSubImageForEye;
|
|
44
214
|
getRenderTargetTextureForEye(eye?: XREye): Nullable<RenderTargetTexture>;
|