@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRWebGPURenderTargetTextureProvider.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRWebGPURenderTargetTextureProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine\";\nimport { type WebGPURenderTargetWrapper } from \"../Engines/WebGPU/webgpuRenderTargetWrapper\";\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\nimport { type RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.pure\";\nimport { Color4 } from \"../Maths/math.color.pure\";\nimport { type Nullable } from \"../types\";\nimport { WebXRLayerRenderTargetTexture } from \"./webXRLayerRenderTargetTexture\";\nimport { type WebXRLayerWrapper } from \"./webXRLayerWrapper\";\nimport { WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\nimport { type WebXRSessionManager } from \"./webXRSessionManager\";\n\n/**\n * Maps a WebGPU depth/stencil {@link GPUTextureFormat} to the matching Babylon `TEXTUREFORMAT_*` constant.\n *\n * The engine reads `InternalTexture.format` (a Babylon constant) when it builds the render pass depth\n * attachment for a render target, so a depth texture wrapped from an external `GPUTexture` must carry the\n * correct Babylon format or the depth attachment pipeline format will not match the sub-image's texture.\n * @param format the WebGPU depth/stencil format requested when the layer was created\n * @returns the matching Babylon texture format constant\n */\nfunction GetBabylonDepthFormat(format: GPUTextureFormat): number {\n switch (format) {\n case \"depth16unorm\":\n return Constants.TEXTUREFORMAT_DEPTH16;\n case \"depth24plus\":\n return Constants.TEXTUREFORMAT_DEPTH24;\n case \"depth24plus-stencil8\":\n return Constants.TEXTUREFORMAT_DEPTH24_STENCIL8;\n case \"depth32float\":\n return Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\n case \"depth32float-stencil8\":\n return Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8;\n case \"stencil8\":\n return Constants.TEXTUREFORMAT_STENCIL8;\n default:\n // Fall back to a combined depth/stencil format, which is the projection layer default.\n return Constants.TEXTUREFORMAT_DEPTH24_STENCIL8;\n }\n}\n\n/**\n * Provides render target textures for WebGPU-backed XR layers. Owns all WebGPU-specific texture wrapping\n * (via {@link WebGPUEngine.wrapWebGPUTexture} / {@link WebGPUEngine.updateWrappedWebGPUTexture}) so the base\n * provider can stay graphics-API-agnostic. Mirrors {@link WebXRWebGLRenderTargetTextureProvider} for the\n * WebGPU (XRGPUBinding) backend.\n * @internal\n */\nexport abstract class WebXRWebGPURenderTargetTextureProvider extends WebXRLayerRenderTargetTextureProvider {\n private readonly _transparentClearColor = new Color4(0, 0, 0, 0);\n\n constructor(\n protected readonly _xrSessionManager: WebXRSessionManager,\n layerWrapper: WebXRLayerWrapper\n ) {\n super(_xrSessionManager.scene, layerWrapper);\n }\n\n private get _webgpuEngine(): WebGPUEngine {\n return this._engine as WebGPUEngine;\n }\n\n private _wrapColorTexture(texture: GPUTexture): InternalTexture {\n return this._webgpuEngine.wrapWebGPUTexture(texture);\n }\n\n private _wrapDepthTexture(texture: GPUTexture, depthStencilFormat: GPUTextureFormat): InternalTexture {\n const internalTexture = this._webgpuEngine.wrapWebGPUTexture(texture);\n // The engine derives the color attachment format automatically from the wrapped hardware texture,\n // but the depth attachment format is read from the Babylon InternalTexture.format, which\n // wrapWebGPUTexture does not set. Assign it here from the format the layer was created with.\n internalTexture.format = GetBabylonDepthFormat(depthStencilFormat);\n return internalTexture;\n }\n\n /**\n * Builds the render target shell as a {@link WebXRLayerRenderTargetTexture} for the single-view path so\n * each eye can bind its own array layer of a layered projection-layer texture. Multiview is not yet\n * supported on this WebGPU path and is delegated to the base implementation.\n * @param width the width of the render target\n * @param height the height of the render target\n * @param multiview whether the render target should be a multiview render target\n * @returns the created (but not yet registered) render target texture\n */\n protected override _createRenderTargetTextureShell(width: number, height: number, multiview: boolean): RenderTargetTexture {\n if (multiview) {\n return super._createRenderTargetTextureShell(width, height, multiview);\n }\n const renderTargetTexture = new WebXRLayerRenderTargetTexture(\"XR renderTargetTexture\", { width, height }, this._scene);\n renderTargetTexture.renderTarget!._samples = renderTargetTexture.samples;\n // The projection-layer texture is presented directly by the XR compositor (top-left origin, never\n // re-sampled by Babylon), so opt this target out of the engine's render-target Y-flip / winding\n // compensation and render it upright, matching the WebXR/WebGPU spec's plain render pass.\n (renderTargetTexture.renderTarget as WebGPURenderTargetWrapper)._disableEngineYFlip = true;\n return renderTargetTexture;\n }\n\n /**\n * Wraps the sub-image's color (and optional depth/stencil) GPUTextures and builds a new render target\n * texture around them. Use this on first creation and whenever the sub-image texture size changes.\n * @param width the width of the render target\n * @param height the height of the render target\n * @param colorTexture the sub-image color GPUTexture\n * @param depthStencilTexture the sub-image depth/stencil GPUTexture, if any\n * @param depthStencilFormat the WebGPU depth/stencil format the layer was created with, if depth is provided\n * @param multiview whether the render target should be a multiview render target\n * @returns the created render target texture\n */\n protected _createRenderTargetTextureFromGPUTextures(\n width: number,\n height: number,\n colorTexture: GPUTexture,\n depthStencilTexture: Nullable<GPUTexture>,\n depthStencilFormat: GPUTextureFormat | undefined,\n multiview: boolean\n ): WebXRLayerRenderTargetTexture {\n const color = this._wrapColorTexture(colorTexture);\n const depth = depthStencilTexture && depthStencilFormat ? this._wrapDepthTexture(depthStencilTexture, depthStencilFormat) : null;\n // Single-view (the only path here) always builds a WebXRLayerRenderTargetTexture via the shell override above.\n const renderTargetTexture = this._createRenderTargetTextureInternal(width, height, color, depth, multiview) as WebXRLayerRenderTargetTexture;\n this._attachPerEyeClearObserver(renderTargetTexture);\n return renderTargetTexture;\n }\n\n /**\n * Ensures this render target is cleared every frame, including for the right eye.\n *\n * `Scene._clearFrameBuffer` skips clearing the right rig camera's framebuffer (`!camera.isRightCamera`).\n * That is a valid optimization for WebGL2 stereo, where both eyes render into a single side-by-side\n * texture and the left eye's full clear already covers the whole texture. WebGPU projection layers give\n * each eye its OWN render target (a distinct array layer rendered in a separate render pass), so the\n * right eye's color and — critically — depth would never be cleared, leaving its depth test to reject\n * every fragment (a black right eye). The scene notifies `onClearObservable` regardless of\n * `camera.isRightCamera`, so this observer clears both eyes' targets. WebGL providers never attach it,\n * so the WebGL path is unchanged.\n *\n * Color is cleared at most once per ENGINE FRAME, not once per `Scene.render`. The distinction matters:\n * more than one scene can render the same XR camera within a single XR frame. `UtilityLayerRenderer`\n * (used by controller pointer selection and near interaction) renders a second scene through the same\n * rig cameras, and every `Scene.render` resets `RenderTargetTexture._cleared` for those cameras' targets\n * (`Scene._checkCameraRenderTarget`), so a `_cleared`-based guard is defeated and each eye is re-cleared\n * after it was drawn — presenting a clear-colored frame with the geometry gone. `AbstractEngine.frameId`\n * only advances in `endFrame`, once per XR frame, so unlike `_cleared` it cannot be reset by another\n * scene rendering the same camera.\n *\n * In immersive AR, color is cleared to transparent when `WebXRExperienceHelper` disables\n * `Scene.autoClear`. WebGL XR framebuffers are cleared to transparent by the user agent, but WebGPU render\n * passes require the application to request that clear explicitly. Skipping it leaves pixels from prior\n * frames in passthrough regions, producing trails behind moving objects.\n *\n * Depth and stencil are still cleared on every notification, matching the previous behavior and the\n * expectations of overlay scenes that draw on top of the main scene.\n * @param renderTargetTexture the per-eye render target to clear each frame\n */\n private _attachPerEyeClearObserver(renderTargetTexture: RenderTargetTexture): void {\n let lastColorClearedFrameId = -1;\n renderTargetTexture.onClearObservable.add((engine) => {\n // Honor skipInitialClear so this observer preserves the default clear semantics it replaces.\n if (renderTargetTexture.skipInitialClear) {\n return;\n }\n const scene = renderTargetTexture.getScene();\n const isImmersiveAR = this._xrSessionManager.sessionMode === \"immersive-ar\";\n // When autoClear is disabled the scene does not clear render targets; match that so this observer\n // does not force a clear the user opted out of. Immersive AR is the exception: the experience\n // helper disables autoClear because WebGL XR is cleared by the user agent, while WebGPU is not.\n if (scene && !scene.autoClear && !isImmersiveAR) {\n return;\n }\n const clearColor = engine.frameId !== lastColorClearedFrameId;\n const color = isImmersiveAR && scene && !scene.autoClear ? this._transparentClearColor : (renderTargetTexture.clearColor ?? scene?.clearColor ?? null);\n engine.clear(color, clearColor, true, true);\n if (clearColor) {\n lastColorClearedFrameId = engine.frameId;\n }\n // Kept in sync so anything else reading the flag still sees this target as cleared this frame.\n renderTargetTexture._cleared = true;\n });\n }\n\n /**\n * Repoints the wrapped color/depth textures of an existing render target at the current frame's\n * GPUTextures, preserving the RenderTargetTexture / InternalTexture identity held by the XR camera's\n * `outputRenderTarget`. The sub-image textures are only valid for the current frame and may rotate from\n * a compositor pool, so this must run every frame. The new GPUTextures must have the same dimensions as\n * the wrapped ones (guaranteed by the caller's size-change branch, which rebuilds instead).\n * @param renderTargetTexture the render target whose wrapped textures should be repointed\n * @param colorTexture the current frame's color GPUTexture\n * @param depthStencilTexture the current frame's depth/stencil GPUTexture, if any\n */\n protected _updateRenderTargetTextureFromGPUTextures(renderTargetTexture: RenderTargetTexture, colorTexture: GPUTexture, depthStencilTexture: Nullable<GPUTexture>): void {\n const color = renderTargetTexture._texture;\n if (color) {\n this._webgpuEngine.updateWrappedWebGPUTexture(color, colorTexture);\n }\n const depth = renderTargetTexture.renderTarget?._depthStencilTexture;\n if (depth && depthStencilTexture) {\n this._webgpuEngine.updateWrappedWebGPUTexture(depth, depthStencilTexture);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webXRWebGPURenderTargetTextureProvider.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRWebGPURenderTargetTextureProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine\";\nimport { type WebGPURenderTargetWrapper } from \"../Engines/WebGPU/webgpuRenderTargetWrapper\";\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\nimport { type RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.pure\";\nimport { Color4 } from \"../Maths/math.color.pure\";\nimport { type Nullable } from \"../types\";\nimport { WebXRLayerRenderTargetTexture } from \"./webXRLayerRenderTargetTexture\";\nimport { type WebXRLayerType, type WebXRLayerWrapper, type WebXRSupportedLayerType } from \"./webXRLayerWrapper\";\nimport { WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\nimport { type WebXRSessionManager } from \"./webXRSessionManager\";\n\n/**\n * Maps a WebGPU depth/stencil {@link GPUTextureFormat} to the matching Babylon `TEXTUREFORMAT_*` constant.\n *\n * The engine reads `InternalTexture.format` (a Babylon constant) when it builds the render pass depth\n * attachment for a render target, so a depth texture wrapped from an external `GPUTexture` must carry the\n * correct Babylon format or the depth attachment pipeline format will not match the sub-image's texture.\n * @param format the WebGPU depth/stencil format requested when the layer was created\n * @returns the matching Babylon texture format constant\n */\nfunction GetBabylonDepthFormat(format: GPUTextureFormat): number {\n switch (format) {\n case \"depth16unorm\":\n return Constants.TEXTUREFORMAT_DEPTH16;\n case \"depth24plus\":\n return Constants.TEXTUREFORMAT_DEPTH24;\n case \"depth24plus-stencil8\":\n return Constants.TEXTUREFORMAT_DEPTH24_STENCIL8;\n case \"depth32float\":\n return Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\n case \"depth32float-stencil8\":\n return Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8;\n case \"stencil8\":\n return Constants.TEXTUREFORMAT_STENCIL8;\n default:\n // Fall back to a combined depth/stencil format, which is the projection layer default.\n return Constants.TEXTUREFORMAT_DEPTH24_STENCIL8;\n }\n}\n\n/**\n * Provides render target textures for WebGPU-backed XR layers. Owns all WebGPU-specific texture wrapping\n * (via {@link WebGPUEngine.wrapWebGPUTexture} / {@link WebGPUEngine.updateWrappedWebGPUTexture}) so the base\n * provider can stay graphics-API-agnostic. Mirrors {@link WebXRWebGLRenderTargetTextureProvider} for the\n * WebGPU (XRGPUBinding) backend.\n * @internal\n */\nexport abstract class WebXRWebGPURenderTargetTextureProvider<\n LayerTypeT extends WebXRSupportedLayerType = WebXRLayerType,\n> extends WebXRLayerRenderTargetTextureProvider<LayerTypeT> {\n private readonly _transparentClearColor = new Color4(0, 0, 0, 0);\n\n constructor(\n protected readonly _xrSessionManager: WebXRSessionManager,\n layerWrapper: WebXRLayerWrapper<LayerTypeT>\n ) {\n super(_xrSessionManager.scene, layerWrapper);\n }\n\n private get _webgpuEngine(): WebGPUEngine {\n return this._engine as WebGPUEngine;\n }\n\n private _wrapColorTexture(texture: GPUTexture): InternalTexture {\n return this._webgpuEngine.wrapWebGPUTexture(texture);\n }\n\n private _wrapDepthTexture(texture: GPUTexture, depthStencilFormat: GPUTextureFormat): InternalTexture {\n const internalTexture = this._webgpuEngine.wrapWebGPUTexture(texture);\n // The engine derives the color attachment format automatically from the wrapped hardware texture,\n // but the depth attachment format is read from the Babylon InternalTexture.format, which\n // wrapWebGPUTexture does not set. Assign it here from the format the layer was created with.\n internalTexture.format = GetBabylonDepthFormat(depthStencilFormat);\n return internalTexture;\n }\n\n /**\n * Builds the render target shell as a {@link WebXRLayerRenderTargetTexture} for the single-view path so\n * each eye can bind its own array layer of a layered projection-layer texture. Multiview is not yet\n * supported on this WebGPU path and is delegated to the base implementation.\n * @param width the width of the render target\n * @param height the height of the render target\n * @param multiview whether the render target should be a multiview render target\n * @returns the created (but not yet registered) render target texture\n */\n protected override _createRenderTargetTextureShell(width: number, height: number, multiview: boolean): RenderTargetTexture {\n if (multiview) {\n return super._createRenderTargetTextureShell(width, height, multiview);\n }\n const renderTargetTexture = new WebXRLayerRenderTargetTexture(\"XR renderTargetTexture\", { width, height }, this._scene);\n renderTargetTexture.renderTarget!._samples = renderTargetTexture.samples;\n // The projection-layer texture is presented directly by the XR compositor (top-left origin, never\n // re-sampled by Babylon), so opt this target out of the engine's render-target Y-flip / winding\n // compensation and render it upright, matching the WebXR/WebGPU spec's plain render pass.\n (renderTargetTexture.renderTarget as WebGPURenderTargetWrapper)._disableEngineYFlip = true;\n return renderTargetTexture;\n }\n\n /**\n * Wraps the sub-image's color (and optional depth/stencil) GPUTextures and builds a new render target\n * texture around them. Use this on first creation and whenever the sub-image texture size changes.\n * @param width the width of the render target\n * @param height the height of the render target\n * @param colorTexture the sub-image color GPUTexture\n * @param depthStencilTexture the sub-image depth/stencil GPUTexture, if any\n * @param depthStencilFormat the WebGPU depth/stencil format the layer was created with, if depth is provided\n * @param multiview whether the render target should be a multiview render target\n * @returns the created render target texture\n */\n protected _createRenderTargetTextureFromGPUTextures(\n width: number,\n height: number,\n colorTexture: GPUTexture,\n depthStencilTexture: Nullable<GPUTexture>,\n depthStencilFormat: GPUTextureFormat | undefined,\n multiview: boolean\n ): WebXRLayerRenderTargetTexture {\n const color = this._wrapColorTexture(colorTexture);\n const depth = depthStencilTexture && depthStencilFormat ? this._wrapDepthTexture(depthStencilTexture, depthStencilFormat) : null;\n // Single-view (the only path here) always builds a WebXRLayerRenderTargetTexture via the shell override above.\n const renderTargetTexture = this._createRenderTargetTextureInternal(width, height, color, depth, multiview) as WebXRLayerRenderTargetTexture;\n this._attachPerEyeClearObserver(renderTargetTexture);\n return renderTargetTexture;\n }\n\n /**\n * Ensures this render target is cleared every frame, including for the right eye.\n *\n * `Scene._clearFrameBuffer` skips clearing the right rig camera's framebuffer (`!camera.isRightCamera`).\n * That is a valid optimization for WebGL2 stereo, where both eyes render into a single side-by-side\n * texture and the left eye's full clear already covers the whole texture. WebGPU projection layers give\n * each eye its OWN render target (a distinct array layer rendered in a separate render pass), so the\n * right eye's color and — critically — depth would never be cleared, leaving its depth test to reject\n * every fragment (a black right eye). The scene notifies `onClearObservable` regardless of\n * `camera.isRightCamera`, so this observer clears both eyes' targets. WebGL providers never attach it,\n * so the WebGL path is unchanged.\n *\n * Color is cleared at most once per ENGINE FRAME, not once per `Scene.render`. The distinction matters:\n * more than one scene can render the same XR camera within a single XR frame. `UtilityLayerRenderer`\n * (used by controller pointer selection and near interaction) renders a second scene through the same\n * rig cameras, and every `Scene.render` resets `RenderTargetTexture._cleared` for those cameras' targets\n * (`Scene._checkCameraRenderTarget`), so a `_cleared`-based guard is defeated and each eye is re-cleared\n * after it was drawn — presenting a clear-colored frame with the geometry gone. `AbstractEngine.frameId`\n * only advances in `endFrame`, once per XR frame, so unlike `_cleared` it cannot be reset by another\n * scene rendering the same camera.\n *\n * In immersive AR, color is cleared to transparent when `WebXRExperienceHelper` disables\n * `Scene.autoClear`. WebGL XR framebuffers are cleared to transparent by the user agent, but WebGPU render\n * passes require the application to request that clear explicitly. Skipping it leaves pixels from prior\n * frames in passthrough regions, producing trails behind moving objects.\n *\n * Depth and stencil are still cleared on every notification, matching the previous behavior and the\n * expectations of overlay scenes that draw on top of the main scene.\n * @param renderTargetTexture the per-eye render target to clear each frame\n */\n private _attachPerEyeClearObserver(renderTargetTexture: RenderTargetTexture): void {\n let lastColorClearedFrameId = -1;\n renderTargetTexture.onClearObservable.add((engine) => {\n // Honor skipInitialClear so this observer preserves the default clear semantics it replaces.\n if (renderTargetTexture.skipInitialClear) {\n return;\n }\n const scene = renderTargetTexture.getScene();\n const isImmersiveAR = this._xrSessionManager.sessionMode === \"immersive-ar\";\n // When autoClear is disabled the scene does not clear render targets; match that so this observer\n // does not force a clear the user opted out of. Immersive AR is the exception: the experience\n // helper disables autoClear because WebGL XR is cleared by the user agent, while WebGPU is not.\n if (scene && !scene.autoClear && !isImmersiveAR) {\n return;\n }\n const clearColor = engine.frameId !== lastColorClearedFrameId;\n const color = isImmersiveAR && scene && !scene.autoClear ? this._transparentClearColor : (renderTargetTexture.clearColor ?? scene?.clearColor ?? null);\n engine.clear(color, clearColor, true, true);\n if (clearColor) {\n lastColorClearedFrameId = engine.frameId;\n }\n // Kept in sync so anything else reading the flag still sees this target as cleared this frame.\n renderTargetTexture._cleared = true;\n });\n }\n\n /**\n * Repoints the wrapped color/depth textures of an existing render target at the current frame's\n * GPUTextures, preserving the RenderTargetTexture / InternalTexture identity held by the XR camera's\n * `outputRenderTarget`. The sub-image textures are only valid for the current frame and may rotate from\n * a compositor pool, so this must run every frame. The new GPUTextures must have the same dimensions as\n * the wrapped ones (guaranteed by the caller's size-change branch, which rebuilds instead).\n * @param renderTargetTexture the render target whose wrapped textures should be repointed\n * @param colorTexture the current frame's color GPUTexture\n * @param depthStencilTexture the current frame's depth/stencil GPUTexture, if any\n */\n protected _updateRenderTargetTextureFromGPUTextures(renderTargetTexture: RenderTargetTexture, colorTexture: GPUTexture, depthStencilTexture: Nullable<GPUTexture>): void {\n const color = renderTargetTexture._texture;\n if (color) {\n this._webgpuEngine.updateWrappedWebGPUTexture(color, colorTexture);\n }\n const depth = renderTargetTexture.renderTarget?._depthStencilTexture;\n if (depth && depthStencilTexture) {\n this._webgpuEngine.updateWrappedWebGPUTexture(depth, depthStencilTexture);\n }\n }\n}\n"]}
|
package/package.json
CHANGED
package/scene.pure.d.ts
CHANGED
|
@@ -1105,6 +1105,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
1105
1105
|
_cachedVisibility: Nullable<number>;
|
|
1106
1106
|
private _renderId;
|
|
1107
1107
|
private _frameId;
|
|
1108
|
+
private _renderingMeshEvaluationDepth;
|
|
1108
1109
|
private _executeWhenReadyTimeoutId;
|
|
1109
1110
|
/** @internal */
|
|
1110
1111
|
_intermediateRendering: boolean;
|
|
@@ -2245,6 +2246,8 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
2245
2246
|
freeRenderingGroups(): void;
|
|
2246
2247
|
/** @internal */
|
|
2247
2248
|
_isInIntermediateRendering(): boolean;
|
|
2249
|
+
/** @internal */
|
|
2250
|
+
_isInRenderingMeshEvaluation(): boolean;
|
|
2248
2251
|
/**
|
|
2249
2252
|
* Lambda returning the list of potentially active meshes.
|
|
2250
2253
|
*/
|
|
@@ -2329,6 +2332,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
2329
2332
|
*/
|
|
2330
2333
|
customRenderFunction?: (updateCameras: boolean, ignoreAnimations: boolean) => void;
|
|
2331
2334
|
private _renderWithFrameGraph;
|
|
2335
|
+
private _renderWithFrameGraphAfterBeforeRender;
|
|
2332
2336
|
/**
|
|
2333
2337
|
* @internal
|
|
2334
2338
|
*/
|
|
@@ -2340,6 +2344,7 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
2340
2344
|
* @param ignoreAnimations defines a boolean indicating if animations should not be executed (false by default)
|
|
2341
2345
|
*/
|
|
2342
2346
|
render(updateCameras?: boolean, ignoreAnimations?: boolean): void;
|
|
2347
|
+
private _renderFrame;
|
|
2343
2348
|
/**
|
|
2344
2349
|
* Freeze all materials
|
|
2345
2350
|
* A frozen material will not be updatable but should be faster to render
|
package/scene.pure.js
CHANGED
|
@@ -1308,6 +1308,7 @@ export class Scene {
|
|
|
1308
1308
|
this.animationTimeScale = 1;
|
|
1309
1309
|
this._renderId = 0;
|
|
1310
1310
|
this._frameId = 0;
|
|
1311
|
+
this._renderingMeshEvaluationDepth = 0;
|
|
1311
1312
|
this._executeWhenReadyTimeoutId = null;
|
|
1312
1313
|
/** @internal */
|
|
1313
1314
|
this._intermediateRendering = false;
|
|
@@ -3697,6 +3698,10 @@ export class Scene {
|
|
|
3697
3698
|
_isInIntermediateRendering() {
|
|
3698
3699
|
return this._intermediateRendering;
|
|
3699
3700
|
}
|
|
3701
|
+
/** @internal */
|
|
3702
|
+
_isInRenderingMeshEvaluation() {
|
|
3703
|
+
return this._renderingMeshEvaluationDepth > 0;
|
|
3704
|
+
}
|
|
3700
3705
|
/**
|
|
3701
3706
|
* Use this function to stop evaluating active meshes. The current list will be keep alive between frames
|
|
3702
3707
|
* @param skipEvaluateActiveMeshes defines an optional boolean indicating that the evaluate active meshes step must be completely skipped
|
|
@@ -4362,6 +4367,15 @@ export class Scene {
|
|
|
4362
4367
|
}
|
|
4363
4368
|
}
|
|
4364
4369
|
this.onBeforeRenderObservable.notifyObservers(this);
|
|
4370
|
+
this._renderingMeshEvaluationDepth++;
|
|
4371
|
+
try {
|
|
4372
|
+
this._renderWithFrameGraphAfterBeforeRender(forceUpdateWorldMatrix);
|
|
4373
|
+
}
|
|
4374
|
+
finally {
|
|
4375
|
+
this._renderingMeshEvaluationDepth--;
|
|
4376
|
+
}
|
|
4377
|
+
}
|
|
4378
|
+
_renderWithFrameGraphAfterBeforeRender(forceUpdateWorldMatrix) {
|
|
4365
4379
|
// Customs render targets
|
|
4366
4380
|
this.onBeforeRenderTargetsRenderObservable.notifyObservers(this);
|
|
4367
4381
|
this._renderTargets.reset();
|
|
@@ -4478,6 +4492,15 @@ export class Scene {
|
|
|
4478
4492
|
if (this.isDisposed) {
|
|
4479
4493
|
return;
|
|
4480
4494
|
}
|
|
4495
|
+
const renderingMeshEvaluationDepth = this._renderingMeshEvaluationDepth;
|
|
4496
|
+
try {
|
|
4497
|
+
this._renderFrame(updateCameras, ignoreAnimations);
|
|
4498
|
+
}
|
|
4499
|
+
finally {
|
|
4500
|
+
this._renderingMeshEvaluationDepth = renderingMeshEvaluationDepth;
|
|
4501
|
+
}
|
|
4502
|
+
}
|
|
4503
|
+
_renderFrame(updateCameras, ignoreAnimations) {
|
|
4481
4504
|
if (this.onReadyObservable.hasObservers() && this._executeWhenReadyTimeoutId === null) {
|
|
4482
4505
|
this._checkIsReady();
|
|
4483
4506
|
}
|
|
@@ -4540,11 +4563,13 @@ export class Scene {
|
|
|
4540
4563
|
if (this.customRenderFunction) {
|
|
4541
4564
|
this._renderId++;
|
|
4542
4565
|
this._engine.currentRenderPassId = 0;
|
|
4566
|
+
this._renderingMeshEvaluationDepth++;
|
|
4543
4567
|
this.customRenderFunction(updateCameras, ignoreAnimations);
|
|
4544
4568
|
}
|
|
4545
4569
|
else {
|
|
4546
4570
|
// Before render
|
|
4547
4571
|
this.onBeforeRenderObservable.notifyObservers(this);
|
|
4572
|
+
this._renderingMeshEvaluationDepth++;
|
|
4548
4573
|
// Customs render targets
|
|
4549
4574
|
this.onBeforeRenderTargetsRenderObservable.notifyObservers(this);
|
|
4550
4575
|
const currentActiveCamera = this.activeCameras?.length ? this.activeCameras[0] : this.activeCamera;
|