@onerjs/core 8.56.4 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +7 -1
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +2 -0
- package/Engines/abstractEngine.pure.js +7 -3
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +14 -0
- package/Engines/thinEngine.pure.js +48 -12
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +1 -0
- package/Engines/thinNativeEngine.pure.js +7 -1
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +10 -1
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +5 -2
- package/Engines/webgpuEngine.pure.js +48 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +4 -0
- package/FlowGraph/flowGraph.js +38 -7
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +4 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/serialization.d.ts +2 -0
- package/FlowGraph/serialization.js +10 -22
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +8 -0
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/pure.js +1 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +1 -0
- package/FrameGraph/pure.js +1 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +1 -0
- package/Materials/pure.js +1 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +2 -0
- package/Materials/standardMaterial.pure.js +6 -3
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +4 -1
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +18 -0
- package/Meshes/abstractMesh.pure.js +22 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +1 -0
- package/Meshes/pure.js +1 -0
- package/Meshes/pure.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +2 -0
- package/Particles/gpuParticleSystem.pure.js +89 -28
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +2 -0
- package/Particles/thinParticleSystem.pure.js +84 -19
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.js +3 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +126 -17
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +23 -0
- package/scene.pure.js +35 -0
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubeTexture.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\nimport { TimingTools } from \"../../Misc/timingTools\";\nimport { type Nullable } from \"../../types\";\nimport { type Scene } from \"../../scene.pure\";\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector.pure\";\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture.pure\";\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\nimport { Constants } from \"../../Engines/constants\";\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\nimport { Observable } from \"../../Misc/observable.pure\";\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\nimport { RegisterAbstractEngineCubeTexture } from \"../../Engines/AbstractEngine/abstractEngine.cubeTexture.pure\";\n\n/**\n * Defines the available options when creating a cube texture\n */\nexport interface ICubeTextureCreationOptions {\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\n extensions?: string[];\n\n /** noMipmap defines if mipmaps should be created or not */\n noMipmap?: boolean;\n\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\n files?: string[];\n\n /** buffer to load instead of loading the data from the url */\n buffer?: ArrayBufferView;\n\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\n onLoad?: () => void;\n\n /** onError defines a callback triggered in case of error during load */\n onError?: (message?: string, exception?: any) => void;\n\n /** format defines the internal format to use for the texture once loaded */\n format?: number;\n\n /** prefiltered defines whether or not the texture is created from prefiltered data */\n prefiltered?: boolean;\n\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\n forcedExtension?: any;\n\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\n createPolynomials?: boolean;\n\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\n lodScale?: number;\n\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\n lodOffset?: number;\n\n /** loaderOptions options to be passed to the loader */\n loaderOptions?: any;\n\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\n useSRGBBuffer?: boolean;\n\n /** Target face size for spherical polynomial computation. 0 = full resolution (default). */\n sphericalPolynomialTargetSize?: number;\n}\n\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\nconst DefaultLodScale = 0.8;\n\n/**\n * Class for creating a cube texture\n */\nexport class CubeTexture extends BaseTexture {\n private _delayedOnLoad: Nullable<() => void>;\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\n private _lodScale: number;\n private _lodOffset: number;\n\n /**\n * Observable triggered once the texture has been loaded.\n */\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\n\n /**\n * The url of the texture\n */\n @serialize()\n public url: string;\n\n /**\n * Gets or sets the center of the bounding box associated with the cube texture.\n * It must define where the camera used to render the texture was set\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\n */\n @serializeAsVector3()\n public boundingBoxPosition = Vector3.Zero();\n\n private _boundingBoxSize: Vector3;\n\n /**\n * Gets or sets the size of the bounding box associated with the cube texture\n * When defined, the cubemap will switch to local mode\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\n * @example https://www.babylonjs-playground.com/#RNASML\n */\n public set boundingBoxSize(value: Vector3) {\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\n return;\n }\n this._boundingBoxSize = value;\n const scene = this.getScene();\n if (scene) {\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\n }\n }\n /**\n * Returns the bounding box size\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\n */\n @serializeAsVector3()\n public get boundingBoxSize(): Vector3 {\n return this._boundingBoxSize;\n }\n\n protected _rotationY: number = 0;\n\n /**\n * Sets texture matrix rotation angle around Y axis in radians.\n */\n @serialize(\"rotationY\")\n public set rotationY(value: number) {\n this._rotationY = value;\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\n }\n /**\n * Gets texture matrix rotation angle around Y axis radians.\n */\n public get rotationY(): number {\n return this._rotationY;\n }\n\n /**\n * Are mip maps generated for this texture or not.\n */\n public override get noMipmap(): boolean {\n return this._noMipmap;\n }\n\n private _noMipmap: boolean;\n\n /** @internal */\n @serialize(\"files\")\n public _files: Nullable<string[]> = null;\n\n @serialize(\"forcedExtension\")\n protected _forcedExtension: Nullable<string> = null;\n\n /**\n * Gets the forced extension (if any)\n */\n public get forcedExtension(): Nullable<string> {\n return this._forcedExtension;\n }\n\n @serialize(\"extensions\")\n private _extensions: Nullable<string[]> = null;\n\n @serializeAsMatrix(\"textureMatrix\")\n private _textureMatrix: Matrix;\n\n @serializeAsMatrix(\"textureMatrixRefraction\")\n private _textureMatrixRefraction: Matrix = new Matrix();\n\n private _format: number;\n private _createPolynomials: boolean;\n private _loaderOptions: any;\n private _useSRGBBuffer?: boolean;\n private _buffer: Nullable<ArrayBufferView> = null;\n\n /**\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\n * as prefiltered data.\n * @param rootUrl defines the url of the texture or the root name of the six images\n * @param sceneOrEngine defines the scene or engine the texture is attached to\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\n * @param noMipmap defines if mipmaps should be created or not\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\n * @param onError defines a callback triggered in case of error during load\n * @param format defines the internal format to use for the texture once loaded\n * @param prefiltered defines whether or not the texture is created from prefiltered data\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\n * @param loaderOptions options to be passed to the loader\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\n * @returns the cube texture\n */\n constructor(\n rootUrl: string,\n sceneOrEngine: Scene | AbstractEngine,\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\n noMipmap: boolean = false,\n files: Nullable<string[]> = null,\n onLoad: Nullable<() => void> = null,\n onError: Nullable<(message?: string, exception?: any) => void> = null,\n format: number = Constants.TEXTUREFORMAT_RGBA,\n prefiltered = false,\n forcedExtension: any = null,\n createPolynomials: boolean = false,\n lodScale: number = DefaultLodScale,\n lodOffset: number = 0,\n loaderOptions?: any,\n useSRGBBuffer?: boolean\n ) {\n super(sceneOrEngine);\n\n RegisterAbstractEngineCubeTexture();\n\n this.name = rootUrl;\n this.url = rootUrl;\n this._noMipmap = noMipmap;\n this.hasAlpha = false;\n this.isCube = true;\n this._textureMatrix = Matrix.Identity();\n this.coordinatesMode = Texture.CUBIC_MODE;\n\n let extensions: Nullable<string[]>;\n let buffer: Nullable<ArrayBufferView> = null;\n\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\n extensions = extensionsOrOptions.extensions ?? null;\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\n files = extensionsOrOptions.files ?? null;\n buffer = extensionsOrOptions.buffer ?? null;\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\n prefiltered = extensionsOrOptions.prefiltered ?? false;\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\n this._lodScale = extensionsOrOptions.lodScale ?? DefaultLodScale;\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\n this._loaderOptions = extensionsOrOptions.loaderOptions;\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\n this._sphericalPolynomialTargetSize = extensionsOrOptions.sphericalPolynomialTargetSize ?? 0;\n onLoad = extensionsOrOptions.onLoad ?? null;\n onError = extensionsOrOptions.onError ?? null;\n } else {\n this._noMipmap = noMipmap;\n this._format = format;\n this._createPolynomials = createPolynomials;\n extensions = extensionsOrOptions;\n this._loaderOptions = loaderOptions;\n this._useSRGBBuffer = useSRGBBuffer;\n this._lodScale = lodScale;\n this._lodOffset = lodOffset;\n }\n\n if (!rootUrl && !files) {\n return;\n }\n\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\n }\n\n /**\n * Get the current class name of the texture useful for serialization or dynamic coding.\n * @returns \"CubeTexture\"\n */\n public override getClassName(): string {\n return \"CubeTexture\";\n }\n\n /**\n * Update the url (and optional buffer) of this texture if url was null during construction.\n * @param url the url of the texture\n * @param forcedExtension defines the extension to use\n * @param onLoad callback called when the texture is loaded (defaults to null)\n * @param prefiltered Defines whether the updated texture is prefiltered or not\n * @param onError callback called if there was an error during the loading process (defaults to null)\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\n * @param delayLoad defines if the texture should be loaded now (false by default)\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\n * @param buffer the buffer to use instead of loading from the url\n */\n public updateURL(\n url: string,\n forcedExtension: Nullable<string> = null,\n onLoad: Nullable<() => void> = null,\n prefiltered: boolean = false,\n onError: Nullable<(message?: string, exception?: any) => void> = null,\n extensions: Nullable<string[]> = null,\n delayLoad = false,\n files: Nullable<string[]> = null,\n buffer: Nullable<ArrayBufferView> = null\n ): void {\n if (!this.name || this.name.startsWith(\"data:\")) {\n this.name = url;\n }\n this.url = url;\n\n if (forcedExtension) {\n this._forcedExtension = forcedExtension;\n }\n\n const lastDot = url.lastIndexOf(\".\");\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\n const isDDS = extension.indexOf(\".dds\") === 0;\n const isEnv = extension.indexOf(\".env\") === 0;\n const isBasis = extension.indexOf(\".basis\") === 0;\n\n if (isEnv) {\n this.gammaSpace = false;\n this._prefiltered = false;\n this.anisotropicFilteringLevel = 1;\n } else {\n this._prefiltered = prefiltered;\n\n if (prefiltered) {\n this.gammaSpace = false;\n this.anisotropicFilteringLevel = 1;\n }\n }\n\n if (files) {\n this._files = files;\n } else {\n if (!isBasis && !isEnv && !isDDS && !extensions) {\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\n }\n\n this._files = this._files || [];\n this._files.length = 0;\n\n if (extensions) {\n for (let index = 0; index < extensions.length; index++) {\n this._files.push(url + extensions[index]);\n }\n this._extensions = extensions;\n }\n }\n\n this._buffer = buffer;\n\n if (delayLoad) {\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\n this._delayedOnLoad = onLoad;\n this._delayedOnError = onError;\n } else {\n this._loadTexture(onLoad, onError);\n }\n }\n\n /**\n * Delays loading of the cube texture\n * @param forcedExtension defines the extension to use\n */\n public override delayLoad(forcedExtension?: string): void {\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\n return;\n }\n if (forcedExtension) {\n this._forcedExtension = forcedExtension;\n }\n\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\n }\n\n /**\n * Returns the reflection texture matrix\n * @returns the reflection texture matrix\n */\n public override getReflectionTextureMatrix(): Matrix {\n return this._textureMatrix;\n }\n\n /**\n * Sets the reflection texture matrix\n * @param value Reflection texture matrix\n */\n public setReflectionTextureMatrix(value: Matrix): void {\n if (value.updateFlag === this._textureMatrix.updateFlag) {\n return;\n }\n\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\n }\n\n this._textureMatrix = value;\n\n if (!this.getScene()?.useRightHandedSystem) {\n return;\n }\n\n const scale = TmpVectors.Vector3[0];\n const quat = TmpVectors.Quaternion[0];\n const trans = TmpVectors.Vector3[1];\n\n this._textureMatrix.decompose(scale, quat, trans);\n\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\n quat.w *= -1;\n\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\n }\n\n /**\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\n * @returns The refraction matrix\n */\n public override getRefractionTextureMatrix(): Matrix {\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\n }\n\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\n const scene = this.getScene();\n const oldTexture = this._texture;\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\n\n const onLoadProcessing = () => {\n this.onLoadObservable.notifyObservers(this);\n if (oldTexture) {\n oldTexture.dispose();\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\n }\n if (onLoad) {\n onLoad();\n }\n };\n\n const errorHandler = (message?: string, exception?: any) => {\n this._loadingError = true;\n this._errorObject = { message, exception };\n if (onError) {\n onError(message, exception);\n }\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\n };\n\n if (!this._texture) {\n if (this._prefiltered) {\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\n this.url,\n scene,\n this._lodScale,\n this._lodOffset,\n onLoad,\n errorHandler,\n this._format,\n this._forcedExtension,\n this._createPolynomials\n );\n } else {\n this._texture = this._getEngine()!.createCubeTexture(\n this.url,\n scene,\n this._files,\n this._noMipmap,\n onLoad,\n errorHandler,\n this._format,\n this._forcedExtension,\n false,\n this._lodScale,\n this._lodOffset,\n null,\n this._loaderOptions,\n !!this._useSRGBBuffer,\n this._buffer\n );\n }\n\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\n } else {\n if (this._texture.isReady) {\n TimingTools.SetImmediate(() => onLoadProcessing());\n } else {\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\n }\n }\n }\n\n /**\n * Makes a clone, or deep copy, of the cube texture\n * @returns a new cube texture\n */\n public override clone(): CubeTexture {\n let uniqueId = 0;\n\n // Save the irradianceTexture before cloning. The irradianceTexture is\n // stored on the InternalTexture (_texture._irradianceTexture), which may\n // be shared between the source and clone when loaded from cache.\n // BaseTexture.clone() returns null, so CopySource sets the shared\n // irradianceTexture to null, losing it on both the original and the clone.\n const savedIrradianceTexture = this.irradianceTexture;\n\n const newCubeTexture = SerializationHelper.Clone(() => {\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\n uniqueId = cubeTexture.uniqueId;\n\n return cubeTexture;\n }, this);\n\n newCubeTexture.uniqueId = uniqueId;\n\n // Restore the irradianceTexture if it was cleared during cloning.\n if (savedIrradianceTexture && !this.irradianceTexture) {\n this.irradianceTexture = savedIrradianceTexture;\n }\n\n return newCubeTexture;\n }\n}\n\nlet _Registered = false;\n\n/**\n * Creates a cube texture from an array of image urls\n * @param files defines an array of image urls\n * @param scene defines the hosting scene\n * @param noMipmap specifies if mip maps are not used\n * @returns a cube texture\n */\nexport function CubeTextureCreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\n let rootUrlKey = \"\";\n\n for (const url of files) {\n rootUrlKey += url;\n }\n\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\n}\n\n/**\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\n * @param url defines the url of the prefiltered texture\n * @param scene defines the scene the texture is attached to\n * @param forcedExtension defines the extension of the file if different from the url\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\n * @returns the prefiltered texture\n */\nexport function CubeTextureCreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true): CubeTexture {\n const oldValue = scene.useDelayedTextureLoading;\n scene.useDelayedTextureLoading = false;\n\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\n\n scene.useDelayedTextureLoading = oldValue;\n\n return result;\n}\n\n/**\n * Parses text to create a cube texture\n * @param parsedTexture define the serialized text to read from\n * @param scene defines the hosting scene\n * @param rootUrl defines the root url of the cube texture\n * @returns a cube texture\n */\nexport function CubeTextureParse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\n const texture = SerializationHelper.Parse(\n () => {\n let prefiltered: boolean = false;\n if (parsedTexture.prefiltered) {\n prefiltered = parsedTexture.prefiltered;\n }\n return new CubeTexture(\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\n scene,\n parsedTexture.extensions,\n false,\n parsedTexture.files || null,\n null,\n null,\n undefined,\n prefiltered,\n parsedTexture.forcedExtension\n );\n },\n parsedTexture,\n scene\n );\n\n // Local Cubemaps\n if (parsedTexture.boundingBoxPosition) {\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\n }\n if (parsedTexture.boundingBoxSize) {\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\n }\n\n // Animations\n if (parsedTexture.animations) {\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\n const parsedAnimation = parsedTexture.animations[animationIndex];\n const internalClass = GetClass(\"BABYLON.Animation\");\n if (internalClass) {\n texture.animations.push(internalClass.Parse(parsedAnimation));\n }\n }\n }\n\n return texture;\n}\n\n/**\n * Register side effects for cubeTexture.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterCubeTexture(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n CubeTexture.CreateFromImages = CubeTextureCreateFromImages;\n CubeTexture.CreateFromPrefilteredData = CubeTextureCreateFromPrefilteredData;\n CubeTexture.Parse = CubeTextureParse;\n\n Texture._CubeTextureParser = CubeTextureParse;\n\n // Some exporters relies on Tools.Instantiate\n RegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cubeTexture.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\nimport { TimingTools } from \"../../Misc/timingTools\";\nimport { type Nullable } from \"../../types\";\nimport { type Scene } from \"../../scene.pure\";\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector.pure\";\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture.pure\";\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\nimport { Constants } from \"../../Engines/constants\";\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\nimport { Observable } from \"../../Misc/observable.pure\";\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\nimport { RegisterAbstractEngineCubeTexture } from \"../../Engines/AbstractEngine/abstractEngine.cubeTexture.pure\";\n\n/**\n * Defines the available options when creating a cube texture\n */\nexport interface ICubeTextureCreationOptions {\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\n extensions?: string[];\n\n /** noMipmap defines if mipmaps should be created or not */\n noMipmap?: boolean;\n\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\n files?: string[];\n\n /** buffer to load instead of loading the data from the url */\n buffer?: ArrayBufferView;\n\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\n onLoad?: () => void;\n\n /** onError defines a callback triggered in case of error during load */\n onError?: (message?: string, exception?: any) => void;\n\n /** format defines the internal format to use for the texture once loaded */\n format?: number;\n\n /** prefiltered defines whether or not the texture is created from prefiltered data */\n prefiltered?: boolean;\n\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\n forcedExtension?: any;\n\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\n createPolynomials?: boolean;\n\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\n lodScale?: number;\n\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\n lodOffset?: number;\n\n /** loaderOptions options to be passed to the loader */\n loaderOptions?: any;\n\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\n useSRGBBuffer?: boolean;\n\n /** Target face size for spherical polynomial computation. 0 = full resolution (default). */\n sphericalPolynomialTargetSize?: number;\n}\n\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\nconst DefaultLodScale = 0.8;\n\n/**\n * Class for creating a cube texture\n */\nexport class CubeTexture extends BaseTexture {\n private _delayedOnLoad: Nullable<() => void>;\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\n private _lodScale: number;\n private _lodOffset: number;\n\n /**\n * Observable triggered once the texture has been loaded.\n */\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\n\n /**\n * The url of the texture\n */\n @serialize()\n public url: string;\n\n /**\n * Gets or sets the center of the bounding box associated with the cube texture.\n * It must define where the camera used to render the texture was set\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\n */\n @serializeAsVector3()\n public boundingBoxPosition = Vector3.Zero();\n\n private _boundingBoxSize: Vector3;\n\n /**\n * Gets or sets the size of the bounding box associated with the cube texture\n * When defined, the cubemap will switch to local mode\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\n * @example https://www.babylonjs-playground.com/#RNASML\n */\n public set boundingBoxSize(value: Vector3) {\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\n return;\n }\n this._boundingBoxSize = value;\n const scene = this.getScene();\n if (scene) {\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\n }\n }\n /**\n * Returns the bounding box size\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\n */\n @serializeAsVector3()\n public get boundingBoxSize(): Vector3 {\n return this._boundingBoxSize;\n }\n\n protected _rotationY: number = 0;\n\n /**\n * Sets texture matrix rotation angle around Y axis in radians.\n */\n @serialize(\"rotationY\")\n public set rotationY(value: number) {\n this._rotationY = value;\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\n }\n /**\n * Gets texture matrix rotation angle around Y axis radians.\n */\n public get rotationY(): number {\n return this._rotationY;\n }\n\n /**\n * Are mip maps generated for this texture or not.\n */\n public override get noMipmap(): boolean {\n return this._noMipmap;\n }\n\n private _noMipmap: boolean;\n\n /** @internal */\n @serialize(\"files\")\n public _files: Nullable<string[]> = null;\n\n @serialize(\"forcedExtension\")\n protected _forcedExtension: Nullable<string> = null;\n\n /**\n * Gets the forced extension (if any)\n */\n public get forcedExtension(): Nullable<string> {\n return this._forcedExtension;\n }\n\n @serialize(\"extensions\")\n private _extensions: Nullable<string[]> = null;\n\n @serializeAsMatrix(\"textureMatrix\")\n private _textureMatrix: Matrix;\n\n @serializeAsMatrix(\"textureMatrixRefraction\")\n private _textureMatrixRefraction: Matrix = new Matrix();\n\n private _format: number;\n private _createPolynomials: boolean;\n private _loaderOptions: any;\n private _useSRGBBuffer?: boolean;\n private _buffer: Nullable<ArrayBufferView> = null;\n\n /**\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\n * as prefiltered data.\n * @param rootUrl defines the url of the texture or the root name of the six images\n * @param sceneOrEngine defines the scene or engine the texture is attached to\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\n * @param noMipmap defines if mipmaps should be created or not\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\n * @param onError defines a callback triggered in case of error during load\n * @param format defines the internal format to use for the texture once loaded\n * @param prefiltered defines whether or not the texture is created from prefiltered data\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\n * @param loaderOptions options to be passed to the loader\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\n * @returns the cube texture\n */\n constructor(\n rootUrl: string,\n sceneOrEngine: Scene | AbstractEngine,\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\n noMipmap: boolean = false,\n files: Nullable<string[]> = null,\n onLoad: Nullable<() => void> = null,\n onError: Nullable<(message?: string, exception?: any) => void> = null,\n format: number = Constants.TEXTUREFORMAT_RGBA,\n prefiltered = false,\n forcedExtension: any = null,\n createPolynomials: boolean = false,\n lodScale: number = DefaultLodScale,\n lodOffset: number = 0,\n loaderOptions?: any,\n useSRGBBuffer?: boolean\n ) {\n super(sceneOrEngine);\n\n RegisterAbstractEngineCubeTexture();\n\n this.name = rootUrl;\n this.url = rootUrl;\n this._noMipmap = noMipmap;\n this.hasAlpha = false;\n this.isCube = true;\n this._textureMatrix = Matrix.Identity();\n this.coordinatesMode = Texture.CUBIC_MODE;\n\n let extensions: Nullable<string[]>;\n let buffer: Nullable<ArrayBufferView> = null;\n\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\n extensions = extensionsOrOptions.extensions ?? null;\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\n files = extensionsOrOptions.files ?? null;\n buffer = extensionsOrOptions.buffer ?? null;\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\n prefiltered = extensionsOrOptions.prefiltered ?? false;\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\n this._lodScale = extensionsOrOptions.lodScale ?? DefaultLodScale;\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\n this._loaderOptions = extensionsOrOptions.loaderOptions;\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\n this._sphericalPolynomialTargetSize = extensionsOrOptions.sphericalPolynomialTargetSize ?? 0;\n onLoad = extensionsOrOptions.onLoad ?? null;\n onError = extensionsOrOptions.onError ?? null;\n } else {\n this._noMipmap = noMipmap;\n this._format = format;\n this._createPolynomials = createPolynomials;\n extensions = extensionsOrOptions;\n this._loaderOptions = loaderOptions;\n this._useSRGBBuffer = useSRGBBuffer;\n this._lodScale = lodScale;\n this._lodOffset = lodOffset;\n }\n\n if (!rootUrl && !files) {\n return;\n }\n\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\n }\n\n /**\n * Get the current class name of the texture useful for serialization or dynamic coding.\n * @returns \"CubeTexture\"\n */\n public override getClassName(): string {\n return \"CubeTexture\";\n }\n\n /**\n * Update the url (and optional buffer) of this texture if url was null during construction.\n * @param url the url of the texture\n * @param forcedExtension defines the extension to use\n * @param onLoad callback called when the texture is loaded (defaults to null)\n * @param prefiltered Defines whether the updated texture is prefiltered or not\n * @param onError callback called if there was an error during the loading process (defaults to null)\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\n * @param delayLoad defines if the texture should be loaded now (false by default)\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\n * @param buffer the buffer to use instead of loading from the url\n */\n public updateURL(\n url: string,\n forcedExtension: Nullable<string> = null,\n onLoad: Nullable<() => void> = null,\n prefiltered: boolean = false,\n onError: Nullable<(message?: string, exception?: any) => void> = null,\n extensions: Nullable<string[]> = null,\n delayLoad = false,\n files: Nullable<string[]> = null,\n buffer: Nullable<ArrayBufferView> = null\n ): void {\n if (!this.name || this.name.startsWith(\"data:\")) {\n this.name = url;\n }\n this.url = url;\n\n if (forcedExtension) {\n this._forcedExtension = forcedExtension;\n }\n\n const lastDot = url.lastIndexOf(\".\");\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\n const isDDS = extension.indexOf(\".dds\") === 0;\n const isEnv = extension.indexOf(\".env\") === 0;\n const isBasis = extension.indexOf(\".basis\") === 0;\n\n if (isEnv) {\n this.gammaSpace = false;\n this._prefiltered = false;\n this.anisotropicFilteringLevel = 1;\n } else {\n this._prefiltered = prefiltered;\n\n if (prefiltered) {\n this.gammaSpace = false;\n this.anisotropicFilteringLevel = 1;\n }\n }\n\n if (files) {\n this._files = files;\n } else {\n if (!isBasis && !isEnv && !isDDS && !extensions) {\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\n }\n\n this._files = this._files || [];\n this._files.length = 0;\n\n if (extensions) {\n for (let index = 0; index < extensions.length; index++) {\n this._files.push(url + extensions[index]);\n }\n this._extensions = extensions;\n }\n }\n\n this._buffer = buffer;\n\n if (delayLoad) {\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\n this._delayedOnLoad = onLoad;\n this._delayedOnError = onError;\n } else {\n this._loadTexture(onLoad, onError);\n }\n }\n\n /**\n * Delays loading of the cube texture\n * @param forcedExtension defines the extension to use\n */\n public override delayLoad(forcedExtension?: string): void {\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\n return;\n }\n if (forcedExtension) {\n this._forcedExtension = forcedExtension;\n }\n\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\n }\n\n /**\n * Returns the reflection texture matrix\n * @returns the reflection texture matrix\n */\n public override getReflectionTextureMatrix(): Matrix {\n return this._textureMatrix;\n }\n\n /**\n * Sets the reflection texture matrix\n * @param value Reflection texture matrix\n */\n public setReflectionTextureMatrix(value: Matrix): void {\n if (value.updateFlag === this._textureMatrix.updateFlag) {\n return;\n }\n\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\n }\n\n this._textureMatrix = value;\n\n if (!this.getScene()?.useRightHandedSystem) {\n return;\n }\n\n const scale = TmpVectors.Vector3[0];\n const quat = TmpVectors.Quaternion[0];\n const trans = TmpVectors.Vector3[1];\n\n this._textureMatrix.decompose(scale, quat, trans);\n\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\n quat.w *= -1;\n\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\n }\n\n /**\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\n * @returns The refraction matrix\n */\n public override getRefractionTextureMatrix(): Matrix {\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\n }\n\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\n const scene = this.getScene();\n const oldTexture = this._texture;\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\n\n const onLoadProcessing = () => {\n this.onLoadObservable.notifyObservers(this);\n if (oldTexture) {\n oldTexture.dispose();\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\n }\n if (onLoad) {\n onLoad();\n }\n };\n\n const errorHandler = (message?: string, exception?: any) => {\n this._loadingError = true;\n this._errorObject = { message, exception };\n if (onError) {\n onError(message, exception);\n }\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\n };\n\n if (!this._texture) {\n if (this._prefiltered) {\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\n this.url,\n scene,\n this._lodScale,\n this._lodOffset,\n onLoad,\n errorHandler,\n this._format,\n this._forcedExtension,\n this._createPolynomials,\n this._buffer\n );\n } else {\n this._texture = this._getEngine()!.createCubeTexture(\n this.url,\n scene,\n this._files,\n this._noMipmap,\n onLoad,\n errorHandler,\n this._format,\n this._forcedExtension,\n false,\n this._lodScale,\n this._lodOffset,\n null,\n this._loaderOptions,\n !!this._useSRGBBuffer,\n this._buffer\n );\n }\n\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\n } else {\n if (this._texture.isReady) {\n TimingTools.SetImmediate(() => onLoadProcessing());\n } else {\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\n }\n }\n }\n\n /**\n * Makes a clone, or deep copy, of the cube texture\n * @returns a new cube texture\n */\n public override clone(): CubeTexture {\n let uniqueId = 0;\n\n // Save the irradianceTexture before cloning. The irradianceTexture is\n // stored on the InternalTexture (_texture._irradianceTexture), which may\n // be shared between the source and clone when loaded from cache.\n // BaseTexture.clone() returns null, so CopySource sets the shared\n // irradianceTexture to null, losing it on both the original and the clone.\n const savedIrradianceTexture = this.irradianceTexture;\n\n const newCubeTexture = SerializationHelper.Clone(() => {\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\n uniqueId = cubeTexture.uniqueId;\n\n return cubeTexture;\n }, this);\n\n newCubeTexture.uniqueId = uniqueId;\n\n // Restore the irradianceTexture if it was cleared during cloning.\n if (savedIrradianceTexture && !this.irradianceTexture) {\n this.irradianceTexture = savedIrradianceTexture;\n }\n\n return newCubeTexture;\n }\n}\n\nlet _Registered = false;\n\n/**\n * Creates a cube texture from an array of image urls\n * @param files defines an array of image urls\n * @param scene defines the hosting scene\n * @param noMipmap specifies if mip maps are not used\n * @returns a cube texture\n */\nexport function CubeTextureCreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\n let rootUrlKey = \"\";\n\n for (const url of files) {\n rootUrlKey += url;\n }\n\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\n}\n\n/**\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\n * @param url defines the url of the prefiltered texture\n * @param scene defines the scene the texture is attached to\n * @param forcedExtension defines the extension of the file if different from the url\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\n * @returns the prefiltered texture\n */\nexport function CubeTextureCreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true): CubeTexture {\n const oldValue = scene.useDelayedTextureLoading;\n scene.useDelayedTextureLoading = false;\n\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\n\n scene.useDelayedTextureLoading = oldValue;\n\n return result;\n}\n\n/**\n * Parses text to create a cube texture\n * @param parsedTexture define the serialized text to read from\n * @param scene defines the hosting scene\n * @param rootUrl defines the root url of the cube texture\n * @returns a cube texture\n */\nexport function CubeTextureParse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\n const texture = SerializationHelper.Parse(\n () => {\n let prefiltered: boolean = false;\n if (parsedTexture.prefiltered) {\n prefiltered = parsedTexture.prefiltered;\n }\n return new CubeTexture(\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\n scene,\n parsedTexture.extensions,\n false,\n parsedTexture.files || null,\n null,\n null,\n undefined,\n prefiltered,\n parsedTexture.forcedExtension\n );\n },\n parsedTexture,\n scene\n );\n\n // Local Cubemaps\n if (parsedTexture.boundingBoxPosition) {\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\n }\n if (parsedTexture.boundingBoxSize) {\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\n }\n\n // Animations\n if (parsedTexture.animations) {\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\n const parsedAnimation = parsedTexture.animations[animationIndex];\n const internalClass = GetClass(\"BABYLON.Animation\");\n if (internalClass) {\n texture.animations.push(internalClass.Parse(parsedAnimation));\n }\n }\n }\n\n return texture;\n}\n\n/**\n * Register side effects for cubeTexture.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterCubeTexture(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n CubeTexture.CreateFromImages = CubeTextureCreateFromImages;\n CubeTexture.CreateFromPrefilteredData = CubeTextureCreateFromPrefilteredData;\n CubeTexture.Parse = CubeTextureParse;\n\n Texture._CubeTextureParser = CubeTextureParse;\n\n // Some exporters relies on Tools.Instantiate\n RegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\n}\n"]}
|
|
@@ -127,7 +127,7 @@ export declare class InternalTexture extends TextureSampler {
|
|
|
127
127
|
/**
|
|
128
128
|
* Gets the number of mip levels for this texture.
|
|
129
129
|
* Note: This property has the correct value only if the texture was created through
|
|
130
|
-
* `createRawTexture` or `
|
|
130
|
+
* `createRawTexture`, `createRawTexture2DArray`, or (on WebGPU) `createRawTexture3D`.
|
|
131
131
|
*/
|
|
132
132
|
mipLevelCount: number;
|
|
133
133
|
/**
|
|
@@ -153,6 +153,11 @@ export declare class InternalTexture extends TextureSampler {
|
|
|
153
153
|
message: string;
|
|
154
154
|
exception: any;
|
|
155
155
|
}>>;
|
|
156
|
+
/** @internal */
|
|
157
|
+
_loadError: Nullable<Partial<{
|
|
158
|
+
message: string;
|
|
159
|
+
exception: any;
|
|
160
|
+
}>>;
|
|
156
161
|
/**
|
|
157
162
|
* If this callback is defined it will be called instead of the default _rebuild function
|
|
158
163
|
*/
|
|
@@ -289,6 +294,8 @@ export declare class InternalTexture extends TextureSampler {
|
|
|
289
294
|
* Increments the number of references (ie. the number of Texture that point to it)
|
|
290
295
|
*/
|
|
291
296
|
incrementReferences(): void;
|
|
297
|
+
/** @internal */
|
|
298
|
+
_setError(message?: string, exception?: any): void;
|
|
292
299
|
/**
|
|
293
300
|
* Change the size of the texture (not the size of the content)
|
|
294
301
|
* @param width defines the new width
|
|
@@ -153,7 +153,7 @@ export class InternalTexture extends TextureSampler {
|
|
|
153
153
|
/**
|
|
154
154
|
* Gets the number of mip levels for this texture.
|
|
155
155
|
* Note: This property has the correct value only if the texture was created through
|
|
156
|
-
* `createRawTexture` or `
|
|
156
|
+
* `createRawTexture`, `createRawTexture2DArray`, or (on WebGPU) `createRawTexture3D`.
|
|
157
157
|
*/
|
|
158
158
|
this.mipLevelCount = 1;
|
|
159
159
|
/**
|
|
@@ -176,6 +176,8 @@ export class InternalTexture extends TextureSampler {
|
|
|
176
176
|
* Observable called when the texture load is raising an error
|
|
177
177
|
*/
|
|
178
178
|
this.onErrorObservable = new Observable();
|
|
179
|
+
/** @internal */
|
|
180
|
+
this._loadError = null;
|
|
179
181
|
/**
|
|
180
182
|
* If this callback is defined it will be called instead of the default _rebuild function
|
|
181
183
|
*/
|
|
@@ -295,6 +297,11 @@ export class InternalTexture extends TextureSampler {
|
|
|
295
297
|
incrementReferences() {
|
|
296
298
|
this._references++;
|
|
297
299
|
}
|
|
300
|
+
/** @internal */
|
|
301
|
+
_setError(message, exception) {
|
|
302
|
+
this._loadError = { message, exception };
|
|
303
|
+
this.onErrorObservable.notifyObservers(this._loadError);
|
|
304
|
+
}
|
|
298
305
|
/**
|
|
299
306
|
* Change the size of the texture (not the size of the content)
|
|
300
307
|
* @param width defines the new width
|
|
@@ -407,7 +414,7 @@ export class InternalTexture extends TextureSampler {
|
|
|
407
414
|
proxy._swapAndDie(this, false);
|
|
408
415
|
}
|
|
409
416
|
this.isReady = true;
|
|
410
|
-
}, null, this.format, this._extension);
|
|
417
|
+
}, null, this.format, this._extension, undefined, ArrayBuffer.isView(this._buffer) ? this._buffer : null);
|
|
411
418
|
proxy._sphericalPolynomial = this._sphericalPolynomial;
|
|
412
419
|
return;
|
|
413
420
|
case 12 /* InternalTextureSource.DepthStencil */:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internalTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/internalTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport { type ImageSource, type Nullable, type int } from \"../../types\";\r\nimport { type ICanvas, type ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\nimport { type IHardwareTextureWrapper } from \"./hardwareTextureWrapper\";\r\nimport { TextureSampler } from \"./textureSampler\";\r\n\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { type BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { type SphericalPolynomial } from \"../../Maths/sphericalPolynomial\";\r\n\r\n/**\r\n * Defines the source of the internal texture\r\n */\r\nexport const enum InternalTextureSource {\r\n /**\r\n * The source of the texture data is unknown\r\n */\r\n Unknown,\r\n /**\r\n * Texture data comes from an URL\r\n */\r\n Url,\r\n /**\r\n * Texture data is only used for temporary storage\r\n */\r\n Temp,\r\n /**\r\n * Texture data comes from raw data (ArrayBuffer)\r\n */\r\n Raw,\r\n /**\r\n * Texture content is dynamic (video or dynamic texture)\r\n */\r\n Dynamic,\r\n /**\r\n * Texture content is generated by rendering to it\r\n */\r\n RenderTarget,\r\n /**\r\n * Texture content is part of a multi render target process\r\n */\r\n MultiRenderTarget,\r\n /**\r\n * Texture data comes from a cube data file\r\n */\r\n Cube,\r\n /**\r\n * Texture data comes from a raw cube data\r\n */\r\n CubeRaw,\r\n /**\r\n * Texture data come from a prefiltered cube data file\r\n */\r\n CubePrefiltered,\r\n /**\r\n * Texture content is raw 3D data\r\n */\r\n Raw3D,\r\n /**\r\n * Texture content is raw 2D array data\r\n */\r\n Raw2DArray,\r\n /**\r\n * Texture content is a depth/stencil texture\r\n */\r\n DepthStencil,\r\n /**\r\n * Texture data comes from a raw cube data encoded with RGBD\r\n */\r\n CubeRawRGBD,\r\n /**\r\n * Texture content is a depth texture\r\n */\r\n Depth,\r\n /**\r\n * Texture wraps an externally created graphics resource (WebGL handle, GPUTexture,\r\n * native handle, etc.) supplied via wrap{WebGL,Native,WebGPU}Texture. On dispose,\r\n * the wrapped resource is released along with the InternalTexture just like any\r\n * other source. Consumers can repoint the wrapper at a fresh external handle\r\n * (e.g., after context-loss / device-loss restore) via\r\n * updateWrapped{WebGL,Native,WebGPU}Texture without losing references held by\r\n * materials, render-target wrappers, particle systems, etc.\r\n */\r\n External,\r\n}\r\n\r\n/**\r\n * Class used to store data associated with WebGL texture data for the engine\r\n * This class should not be used directly\r\n */\r\nexport class InternalTexture extends TextureSampler {\r\n /**\r\n * Defines if the texture is ready\r\n */\r\n public isReady: boolean = false;\r\n /**\r\n * Defines if the texture is a cube texture\r\n */\r\n public isCube: boolean = false;\r\n /**\r\n * Defines if the texture contains 3D data\r\n */\r\n public is3D: boolean = false;\r\n /**\r\n * Defines if the texture contains 2D array data\r\n */\r\n public is2DArray: boolean = false;\r\n /**\r\n * Defines if the texture contains multiview data\r\n */\r\n public isMultiview: boolean = false;\r\n /**\r\n * Gets the URL used to load this texture\r\n */\r\n public url: string = \"\";\r\n /** @internal */\r\n public _originalUrl: string; // not empty only if different from url\r\n /**\r\n * Gets a boolean indicating if the texture needs mipmaps generation\r\n */\r\n public generateMipMaps: boolean = false;\r\n\r\n protected override _useMipMaps: Nullable<boolean> = null;\r\n /**\r\n * Indicates to use the mip maps (if available on the texture).\r\n * Thanks to this flag, you can instruct the sampler to not sample the mipmaps even if they exist (and if the sampling mode is set to a value that normally samples the mipmaps!)\r\n * If useMipMaps is null, the value of generateMipMaps is returned by the getter (for backward compatibility)\r\n */\r\n public override get useMipMaps() {\r\n return this._useMipMaps === null ? this.generateMipMaps : this._useMipMaps;\r\n }\r\n public override set useMipMaps(value: Nullable<boolean>) {\r\n this._useMipMaps = value;\r\n }\r\n /**\r\n * Gets the number of mip levels for this texture.\r\n * Note: This property has the correct value only if the texture was created through\r\n * `createRawTexture` or `createRawTexture2DArray`.\r\n */\r\n public mipLevelCount: number = 1;\r\n /**\r\n * Gets the number of samples used by the texture (WebGL2+ only)\r\n */\r\n public samples: number = 0;\r\n /**\r\n * Gets the type of the texture (int, float...)\r\n */\r\n public type: number = -1;\r\n /**\r\n * Gets the format of the texture (RGB, RGBA...)\r\n */\r\n public format: number = -1;\r\n /**\r\n * Observable called when the texture is loaded\r\n */\r\n public onLoadedObservable = new Observable<InternalTexture>();\r\n /**\r\n * Observable called when the texture load is raising an error\r\n */\r\n public onErrorObservable = new Observable<Partial<{ message: string; exception: any }>>();\r\n /**\r\n * If this callback is defined it will be called instead of the default _rebuild function\r\n */\r\n public onRebuildCallback: Nullable<\r\n (internalTexture: InternalTexture) => {\r\n proxy: Nullable<InternalTexture | Promise<InternalTexture>>;\r\n isReady: boolean;\r\n isAsync: boolean;\r\n }\r\n > = null;\r\n /**\r\n * Gets the width of the texture\r\n */\r\n public width: number = 0;\r\n /**\r\n * Gets the height of the texture\r\n */\r\n public height: number = 0;\r\n /**\r\n * Gets the depth of the texture\r\n */\r\n public depth: number = 0;\r\n /**\r\n * Gets the initial width of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseWidth: number = 0;\r\n /**\r\n * Gets the initial height of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseHeight: number = 0;\r\n /**\r\n * Gets the initial depth of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseDepth: number = 0;\r\n /**\r\n * Gets a boolean indicating if the texture is inverted on Y axis\r\n */\r\n public invertY: boolean = false;\r\n\r\n // Private\r\n /** @internal */\r\n public _invertVScale = false;\r\n /** @internal */\r\n public _associatedChannel = -1;\r\n /** @internal */\r\n public _source = InternalTextureSource.Unknown;\r\n /** @internal */\r\n public _buffer: Nullable<string | ArrayBuffer | ArrayBufferView | HTMLImageElement | Blob | ImageBitmap> = null;\r\n /** @internal */\r\n public _bufferView: Nullable<ArrayBufferView> = null;\r\n /** @internal */\r\n public _bufferViewArray: Nullable<ArrayBufferView[]> = null;\r\n /** @internal */\r\n public _bufferViewArrayArray: Nullable<ArrayBufferView[][]> = null;\r\n /** @internal */\r\n public _size: number = 0;\r\n /** @internal */\r\n public _extension: string = \"\";\r\n /** @internal */\r\n public _files: Nullable<string[]> = null;\r\n /** @internal */\r\n public _workingCanvas: Nullable<ICanvas> = null;\r\n /** @internal */\r\n public _workingContext: Nullable<ICanvasRenderingContext> = null;\r\n /** @internal */\r\n public _cachedCoordinatesMode: Nullable<number> = null;\r\n /** @internal */\r\n public _isDisabled: boolean = false;\r\n /** @internal */\r\n public _compression: Nullable<string> = null;\r\n /** @internal */\r\n public _sphericalPolynomial: Nullable<SphericalPolynomial> = null;\r\n /** @internal */\r\n public _sphericalPolynomialPromise: Nullable<Promise<SphericalPolynomial>> = null;\r\n /** @internal */\r\n public _sphericalPolynomialComputed = false;\r\n /** @internal */\r\n public _lodGenerationScale: number = 0;\r\n /** @internal */\r\n public _lodGenerationOffset: number = 0;\r\n /** @internal */\r\n public _useSRGBBuffer: boolean = false;\r\n /** @internal */\r\n public _creationFlags: number = 0;\r\n /** @internal */\r\n public _originalFormat?: number;\r\n\r\n // The following three fields helps sharing generated fixed LODs for texture filtering\r\n // In environment not supporting the textureLOD extension like EDGE. They are for internal use only.\r\n // They are at the level of the gl texture to benefit from the cache.\r\n /** @internal */\r\n public _lodTextureHigh: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _lodTextureMid: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _lodTextureLow: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _isRGBD: boolean = false;\r\n\r\n /** @internal */\r\n public _linearSpecularLOD: boolean = false;\r\n /** @internal */\r\n public _irradianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @internal */\r\n public _hardwareTexture: Nullable<IHardwareTextureWrapper> = null;\r\n\r\n /** @internal */\r\n public _maxLodLevel: Nullable<number> = null;\r\n\r\n /** @internal */\r\n public _references: number = 1;\r\n\r\n /** @internal */\r\n public _gammaSpace: Nullable<boolean> = null;\r\n\r\n /** @internal */\r\n public _premulAlpha = false;\r\n\r\n /** @internal */\r\n public _dynamicTextureSource: Nullable<ImageSource> = null;\r\n\r\n /** @internal */\r\n public _autoMSAAManagement = false;\r\n\r\n private _engine: AbstractEngine;\r\n private _uniqueId: number;\r\n\r\n /** @internal */\r\n public static _Counter = 0;\r\n\r\n /** Gets the unique id of the internal texture */\r\n public get uniqueId() {\r\n return this._uniqueId;\r\n }\r\n\r\n /** @internal */\r\n public _setUniqueId(id: number) {\r\n this._uniqueId = id;\r\n }\r\n\r\n /**\r\n * Gets the Engine the texture belongs to.\r\n * @returns The babylon engine\r\n */\r\n public getEngine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Gets the data source type of the texture\r\n */\r\n public get source(): InternalTextureSource {\r\n return this._source;\r\n }\r\n\r\n /**\r\n * Creates a new InternalTexture\r\n * @param engine defines the engine to use\r\n * @param source defines the type of data that will be used\r\n * @param delayAllocation if the texture allocation should be delayed (default: false)\r\n */\r\n constructor(engine: AbstractEngine, source: InternalTextureSource, delayAllocation = false) {\r\n super();\r\n\r\n this._engine = engine;\r\n this._source = source;\r\n this._uniqueId = InternalTexture._Counter++;\r\n\r\n if (!delayAllocation) {\r\n this._hardwareTexture = engine._createHardwareTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Increments the number of references (ie. the number of Texture that point to it)\r\n */\r\n public incrementReferences(): void {\r\n this._references++;\r\n }\r\n\r\n /**\r\n * Change the size of the texture (not the size of the content)\r\n * @param width defines the new width\r\n * @param height defines the new height\r\n * @param depth defines the new depth (1 by default)\r\n */\r\n public updateSize(width: int, height: int, depth: int = 1): void {\r\n this._engine.updateTextureDimensions(this, width, height, depth);\r\n\r\n this.width = width;\r\n this.height = height;\r\n this.depth = depth;\r\n\r\n this.baseWidth = width;\r\n this.baseHeight = height;\r\n this.baseDepth = depth;\r\n\r\n this._size = width * height * depth;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n this.isReady = false;\r\n this._cachedCoordinatesMode = null;\r\n this._cachedWrapU = null;\r\n this._cachedWrapV = null;\r\n this._cachedWrapR = null;\r\n this._cachedAnisotropicFilteringLevel = null;\r\n if (this.onRebuildCallback) {\r\n const data = this.onRebuildCallback(this);\r\n const swapAndSetIsReady = (proxyInternalTexture: InternalTexture) => {\r\n proxyInternalTexture._swapAndDie(this, false);\r\n this.isReady = data.isReady;\r\n };\r\n if (data.isAsync) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n (data.proxy as Promise<InternalTexture>).then(swapAndSetIsReady);\r\n } else {\r\n swapAndSetIsReady(data.proxy as InternalTexture);\r\n }\r\n return;\r\n }\r\n\r\n let proxy: InternalTexture;\r\n switch (this.source) {\r\n case InternalTextureSource.Temp:\r\n break;\r\n\r\n case InternalTextureSource.Url:\r\n proxy = this._engine.createTexture(\r\n this._originalUrl ?? this.url,\r\n !this.generateMipMaps,\r\n this.invertY,\r\n null,\r\n this.samplingMode,\r\n // Do not use Proxy here as it could be fully synchronous\r\n // and proxy would be undefined.\r\n (temp) => {\r\n temp._swapAndDie(this, false);\r\n this.isReady = true;\r\n },\r\n null,\r\n this._buffer,\r\n undefined,\r\n this.format,\r\n this._extension,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._useSRGBBuffer\r\n );\r\n return;\r\n\r\n case InternalTextureSource.Raw:\r\n proxy = this._engine.createRawTexture(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type,\r\n this._creationFlags,\r\n this._useSRGBBuffer,\r\n this.mipLevelCount\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n if (this._bufferViewArray) {\r\n for (let mipLevel = 0; mipLevel < this._bufferViewArray.length; mipLevel++) {\r\n const mipData = this._bufferViewArray[mipLevel];\r\n if (mipData) {\r\n this._engine.updateRawTexture(this, mipData, this.format, this.invertY, this._compression, this.type, this._useSRGBBuffer, mipLevel);\r\n }\r\n }\r\n }\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Raw3D:\r\n proxy = this._engine.createRawTexture3D(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.baseDepth,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Raw2DArray:\r\n proxy = this._engine.createRawTexture2DArray(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.baseDepth,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type,\r\n this._creationFlags,\r\n this.mipLevelCount\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n if (this._bufferViewArray) {\r\n for (let mipLevel = 0; mipLevel < this._bufferViewArray.length; mipLevel++) {\r\n const mipData = this._bufferViewArray[mipLevel];\r\n if (mipData) {\r\n this._engine.updateRawTexture2DArray(this, mipData, this.format, this.invertY, this._compression, this.type, mipLevel);\r\n }\r\n }\r\n }\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Dynamic:\r\n proxy = this._engine.createDynamicTexture(this.baseWidth, this.baseHeight, this.generateMipMaps, this.samplingMode);\r\n proxy._swapAndDie(this, false);\r\n if (this._dynamicTextureSource) {\r\n this._engine.updateDynamicTexture(this, this._dynamicTextureSource, this.invertY, this._premulAlpha, this.format, true);\r\n }\r\n\r\n // The engine will make sure to update content so no need to flag it as isReady = true\r\n break;\r\n\r\n case InternalTextureSource.Cube:\r\n proxy = this._engine.createCubeTexture(\r\n this.url,\r\n null,\r\n this._files,\r\n !this.generateMipMaps,\r\n () => {\r\n proxy._swapAndDie(this, false);\r\n this.isReady = true;\r\n },\r\n null,\r\n this.format,\r\n this._extension,\r\n false,\r\n 0,\r\n 0,\r\n null,\r\n undefined,\r\n this._useSRGBBuffer,\r\n ArrayBuffer.isView(this._buffer) ? this._buffer : null\r\n );\r\n return;\r\n\r\n case InternalTextureSource.CubeRaw:\r\n proxy = this._engine.createRawCubeTexture(\r\n this._bufferViewArray,\r\n this.width,\r\n this._originalFormat ?? this.format,\r\n this.type,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression\r\n );\r\n proxy._swapAndDie(this, false);\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.CubeRawRGBD:\r\n // This case is being handeled by the environment texture tools and is not a part of the rebuild process.\r\n // To use CubeRawRGBD use updateRGBDAsync on the cube texture.\r\n return;\r\n\r\n case InternalTextureSource.CubePrefiltered:\r\n proxy = this._engine.createPrefilteredCubeTexture(\r\n this.url,\r\n null,\r\n this._lodGenerationScale,\r\n this._lodGenerationOffset,\r\n (proxy) => {\r\n if (proxy) {\r\n proxy._swapAndDie(this, false);\r\n }\r\n this.isReady = true;\r\n },\r\n null,\r\n this.format,\r\n this._extension\r\n );\r\n proxy._sphericalPolynomial = this._sphericalPolynomial;\r\n return;\r\n\r\n case InternalTextureSource.DepthStencil:\r\n case InternalTextureSource.Depth: {\r\n // Will be handled at the RenderTargetWrapper level\r\n break;\r\n }\r\n\r\n case InternalTextureSource.External: {\r\n // The underlying resource is owned by the host application; Babylon cannot rebuild it.\r\n // The host re-supplies a fresh handle via updateWrappedWebGLTexture / updateWrappedNativeTexture /\r\n // updateWrappedWebGPUTexture from its onContextRestoredObservable handler.\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture, swapAll = true): void {\r\n // TODO what about refcount on target?\r\n\r\n this._hardwareTexture?.setUsage(target._source, this.generateMipMaps, this.is2DArray, this.isCube, this.is3D, this.width, this.height, this.depth);\r\n\r\n target._hardwareTexture = this._hardwareTexture;\r\n // Refresh the target's uniqueId so that caches keyed by uniqueId (e.g. the\r\n // WebGPU global bind-group cache) see the hardware texture as a new resource\r\n // and rebuild GPU bind groups referencing it. Without this, callers that swap\r\n // a raw GPU texture for a prefiltered one (e.g. HDR/PMREM prefiltering) would\r\n // continue to receive stale GPUBindGroups that hold views over the now-destroyed\r\n // source GPU texture, causing \"Destroyed texture used in a submit\" errors.\r\n target._setUniqueId(InternalTexture._Counter++);\r\n if (swapAll) {\r\n target._isRGBD = this._isRGBD;\r\n }\r\n\r\n if (this._lodTextureHigh) {\r\n if (target._lodTextureHigh) {\r\n target._lodTextureHigh.dispose();\r\n }\r\n target._lodTextureHigh = this._lodTextureHigh;\r\n }\r\n\r\n if (this._lodTextureMid) {\r\n if (target._lodTextureMid) {\r\n target._lodTextureMid.dispose();\r\n }\r\n target._lodTextureMid = this._lodTextureMid;\r\n }\r\n\r\n if (this._lodTextureLow) {\r\n if (target._lodTextureLow) {\r\n target._lodTextureLow.dispose();\r\n }\r\n target._lodTextureLow = this._lodTextureLow;\r\n }\r\n\r\n if (this._irradianceTexture) {\r\n if (target._irradianceTexture) {\r\n target._irradianceTexture.dispose();\r\n }\r\n target._irradianceTexture = this._irradianceTexture;\r\n }\r\n\r\n const cache = this._engine.getLoadedTexturesCache();\r\n let index = cache.indexOf(this);\r\n if (index !== -1) {\r\n cache.splice(index, 1);\r\n }\r\n\r\n index = cache.indexOf(target);\r\n if (index === -1) {\r\n cache.push(target);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the current allocated resources\r\n */\r\n public dispose(): void {\r\n this._references--;\r\n if (this._references === 0) {\r\n this.onLoadedObservable.clear();\r\n this.onErrorObservable.clear();\r\n this._engine._releaseTexture(this);\r\n this._hardwareTexture = null;\r\n this._dynamicTextureSource = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"internalTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/internalTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport { type ImageSource, type Nullable, type int } from \"../../types\";\r\nimport { type ICanvas, type ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\nimport { type IHardwareTextureWrapper } from \"./hardwareTextureWrapper\";\r\nimport { TextureSampler } from \"./textureSampler\";\r\n\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { type BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { type SphericalPolynomial } from \"../../Maths/sphericalPolynomial\";\r\n\r\n/**\r\n * Defines the source of the internal texture\r\n */\r\nexport const enum InternalTextureSource {\r\n /**\r\n * The source of the texture data is unknown\r\n */\r\n Unknown,\r\n /**\r\n * Texture data comes from an URL\r\n */\r\n Url,\r\n /**\r\n * Texture data is only used for temporary storage\r\n */\r\n Temp,\r\n /**\r\n * Texture data comes from raw data (ArrayBuffer)\r\n */\r\n Raw,\r\n /**\r\n * Texture content is dynamic (video or dynamic texture)\r\n */\r\n Dynamic,\r\n /**\r\n * Texture content is generated by rendering to it\r\n */\r\n RenderTarget,\r\n /**\r\n * Texture content is part of a multi render target process\r\n */\r\n MultiRenderTarget,\r\n /**\r\n * Texture data comes from a cube data file\r\n */\r\n Cube,\r\n /**\r\n * Texture data comes from a raw cube data\r\n */\r\n CubeRaw,\r\n /**\r\n * Texture data come from a prefiltered cube data file\r\n */\r\n CubePrefiltered,\r\n /**\r\n * Texture content is raw 3D data\r\n */\r\n Raw3D,\r\n /**\r\n * Texture content is raw 2D array data\r\n */\r\n Raw2DArray,\r\n /**\r\n * Texture content is a depth/stencil texture\r\n */\r\n DepthStencil,\r\n /**\r\n * Texture data comes from a raw cube data encoded with RGBD\r\n */\r\n CubeRawRGBD,\r\n /**\r\n * Texture content is a depth texture\r\n */\r\n Depth,\r\n /**\r\n * Texture wraps an externally created graphics resource (WebGL handle, GPUTexture,\r\n * native handle, etc.) supplied via wrap{WebGL,Native,WebGPU}Texture. On dispose,\r\n * the wrapped resource is released along with the InternalTexture just like any\r\n * other source. Consumers can repoint the wrapper at a fresh external handle\r\n * (e.g., after context-loss / device-loss restore) via\r\n * updateWrapped{WebGL,Native,WebGPU}Texture without losing references held by\r\n * materials, render-target wrappers, particle systems, etc.\r\n */\r\n External,\r\n}\r\n\r\n/**\r\n * Class used to store data associated with WebGL texture data for the engine\r\n * This class should not be used directly\r\n */\r\nexport class InternalTexture extends TextureSampler {\r\n /**\r\n * Defines if the texture is ready\r\n */\r\n public isReady: boolean = false;\r\n /**\r\n * Defines if the texture is a cube texture\r\n */\r\n public isCube: boolean = false;\r\n /**\r\n * Defines if the texture contains 3D data\r\n */\r\n public is3D: boolean = false;\r\n /**\r\n * Defines if the texture contains 2D array data\r\n */\r\n public is2DArray: boolean = false;\r\n /**\r\n * Defines if the texture contains multiview data\r\n */\r\n public isMultiview: boolean = false;\r\n /**\r\n * Gets the URL used to load this texture\r\n */\r\n public url: string = \"\";\r\n /** @internal */\r\n public _originalUrl: string; // not empty only if different from url\r\n /**\r\n * Gets a boolean indicating if the texture needs mipmaps generation\r\n */\r\n public generateMipMaps: boolean = false;\r\n\r\n protected override _useMipMaps: Nullable<boolean> = null;\r\n /**\r\n * Indicates to use the mip maps (if available on the texture).\r\n * Thanks to this flag, you can instruct the sampler to not sample the mipmaps even if they exist (and if the sampling mode is set to a value that normally samples the mipmaps!)\r\n * If useMipMaps is null, the value of generateMipMaps is returned by the getter (for backward compatibility)\r\n */\r\n public override get useMipMaps() {\r\n return this._useMipMaps === null ? this.generateMipMaps : this._useMipMaps;\r\n }\r\n public override set useMipMaps(value: Nullable<boolean>) {\r\n this._useMipMaps = value;\r\n }\r\n /**\r\n * Gets the number of mip levels for this texture.\r\n * Note: This property has the correct value only if the texture was created through\r\n * `createRawTexture`, `createRawTexture2DArray`, or (on WebGPU) `createRawTexture3D`.\r\n */\r\n public mipLevelCount: number = 1;\r\n /**\r\n * Gets the number of samples used by the texture (WebGL2+ only)\r\n */\r\n public samples: number = 0;\r\n /**\r\n * Gets the type of the texture (int, float...)\r\n */\r\n public type: number = -1;\r\n /**\r\n * Gets the format of the texture (RGB, RGBA...)\r\n */\r\n public format: number = -1;\r\n /**\r\n * Observable called when the texture is loaded\r\n */\r\n public onLoadedObservable = new Observable<InternalTexture>();\r\n /**\r\n * Observable called when the texture load is raising an error\r\n */\r\n public onErrorObservable = new Observable<Partial<{ message: string; exception: any }>>();\r\n /** @internal */\r\n public _loadError: Nullable<Partial<{ message: string; exception: any }>> = null;\r\n /**\r\n * If this callback is defined it will be called instead of the default _rebuild function\r\n */\r\n public onRebuildCallback: Nullable<\r\n (internalTexture: InternalTexture) => {\r\n proxy: Nullable<InternalTexture | Promise<InternalTexture>>;\r\n isReady: boolean;\r\n isAsync: boolean;\r\n }\r\n > = null;\r\n /**\r\n * Gets the width of the texture\r\n */\r\n public width: number = 0;\r\n /**\r\n * Gets the height of the texture\r\n */\r\n public height: number = 0;\r\n /**\r\n * Gets the depth of the texture\r\n */\r\n public depth: number = 0;\r\n /**\r\n * Gets the initial width of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseWidth: number = 0;\r\n /**\r\n * Gets the initial height of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseHeight: number = 0;\r\n /**\r\n * Gets the initial depth of the texture (It could be rescaled if the current system does not support non power of two textures)\r\n */\r\n public baseDepth: number = 0;\r\n /**\r\n * Gets a boolean indicating if the texture is inverted on Y axis\r\n */\r\n public invertY: boolean = false;\r\n\r\n // Private\r\n /** @internal */\r\n public _invertVScale = false;\r\n /** @internal */\r\n public _associatedChannel = -1;\r\n /** @internal */\r\n public _source = InternalTextureSource.Unknown;\r\n /** @internal */\r\n public _buffer: Nullable<string | ArrayBuffer | ArrayBufferView | HTMLImageElement | Blob | ImageBitmap> = null;\r\n /** @internal */\r\n public _bufferView: Nullable<ArrayBufferView> = null;\r\n /** @internal */\r\n public _bufferViewArray: Nullable<ArrayBufferView[]> = null;\r\n /** @internal */\r\n public _bufferViewArrayArray: Nullable<ArrayBufferView[][]> = null;\r\n /** @internal */\r\n public _size: number = 0;\r\n /** @internal */\r\n public _extension: string = \"\";\r\n /** @internal */\r\n public _files: Nullable<string[]> = null;\r\n /** @internal */\r\n public _workingCanvas: Nullable<ICanvas> = null;\r\n /** @internal */\r\n public _workingContext: Nullable<ICanvasRenderingContext> = null;\r\n /** @internal */\r\n public _cachedCoordinatesMode: Nullable<number> = null;\r\n /** @internal */\r\n public _isDisabled: boolean = false;\r\n /** @internal */\r\n public _compression: Nullable<string> = null;\r\n /** @internal */\r\n public _sphericalPolynomial: Nullable<SphericalPolynomial> = null;\r\n /** @internal */\r\n public _sphericalPolynomialPromise: Nullable<Promise<SphericalPolynomial>> = null;\r\n /** @internal */\r\n public _sphericalPolynomialComputed = false;\r\n /** @internal */\r\n public _lodGenerationScale: number = 0;\r\n /** @internal */\r\n public _lodGenerationOffset: number = 0;\r\n /** @internal */\r\n public _useSRGBBuffer: boolean = false;\r\n /** @internal */\r\n public _creationFlags: number = 0;\r\n /** @internal */\r\n public _originalFormat?: number;\r\n\r\n // The following three fields helps sharing generated fixed LODs for texture filtering\r\n // In environment not supporting the textureLOD extension like EDGE. They are for internal use only.\r\n // They are at the level of the gl texture to benefit from the cache.\r\n /** @internal */\r\n public _lodTextureHigh: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _lodTextureMid: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _lodTextureLow: Nullable<BaseTexture> = null;\r\n /** @internal */\r\n public _isRGBD: boolean = false;\r\n\r\n /** @internal */\r\n public _linearSpecularLOD: boolean = false;\r\n /** @internal */\r\n public _irradianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @internal */\r\n public _hardwareTexture: Nullable<IHardwareTextureWrapper> = null;\r\n\r\n /** @internal */\r\n public _maxLodLevel: Nullable<number> = null;\r\n\r\n /** @internal */\r\n public _references: number = 1;\r\n\r\n /** @internal */\r\n public _gammaSpace: Nullable<boolean> = null;\r\n\r\n /** @internal */\r\n public _premulAlpha = false;\r\n\r\n /** @internal */\r\n public _dynamicTextureSource: Nullable<ImageSource> = null;\r\n\r\n /** @internal */\r\n public _autoMSAAManagement = false;\r\n\r\n private _engine: AbstractEngine;\r\n private _uniqueId: number;\r\n\r\n /** @internal */\r\n public static _Counter = 0;\r\n\r\n /** Gets the unique id of the internal texture */\r\n public get uniqueId() {\r\n return this._uniqueId;\r\n }\r\n\r\n /** @internal */\r\n public _setUniqueId(id: number) {\r\n this._uniqueId = id;\r\n }\r\n\r\n /**\r\n * Gets the Engine the texture belongs to.\r\n * @returns The babylon engine\r\n */\r\n public getEngine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Gets the data source type of the texture\r\n */\r\n public get source(): InternalTextureSource {\r\n return this._source;\r\n }\r\n\r\n /**\r\n * Creates a new InternalTexture\r\n * @param engine defines the engine to use\r\n * @param source defines the type of data that will be used\r\n * @param delayAllocation if the texture allocation should be delayed (default: false)\r\n */\r\n constructor(engine: AbstractEngine, source: InternalTextureSource, delayAllocation = false) {\r\n super();\r\n\r\n this._engine = engine;\r\n this._source = source;\r\n this._uniqueId = InternalTexture._Counter++;\r\n\r\n if (!delayAllocation) {\r\n this._hardwareTexture = engine._createHardwareTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Increments the number of references (ie. the number of Texture that point to it)\r\n */\r\n public incrementReferences(): void {\r\n this._references++;\r\n }\r\n\r\n /** @internal */\r\n public _setError(message?: string, exception?: any): void {\r\n this._loadError = { message, exception };\r\n this.onErrorObservable.notifyObservers(this._loadError);\r\n }\r\n\r\n /**\r\n * Change the size of the texture (not the size of the content)\r\n * @param width defines the new width\r\n * @param height defines the new height\r\n * @param depth defines the new depth (1 by default)\r\n */\r\n public updateSize(width: int, height: int, depth: int = 1): void {\r\n this._engine.updateTextureDimensions(this, width, height, depth);\r\n\r\n this.width = width;\r\n this.height = height;\r\n this.depth = depth;\r\n\r\n this.baseWidth = width;\r\n this.baseHeight = height;\r\n this.baseDepth = depth;\r\n\r\n this._size = width * height * depth;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n this.isReady = false;\r\n this._cachedCoordinatesMode = null;\r\n this._cachedWrapU = null;\r\n this._cachedWrapV = null;\r\n this._cachedWrapR = null;\r\n this._cachedAnisotropicFilteringLevel = null;\r\n if (this.onRebuildCallback) {\r\n const data = this.onRebuildCallback(this);\r\n const swapAndSetIsReady = (proxyInternalTexture: InternalTexture) => {\r\n proxyInternalTexture._swapAndDie(this, false);\r\n this.isReady = data.isReady;\r\n };\r\n if (data.isAsync) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n (data.proxy as Promise<InternalTexture>).then(swapAndSetIsReady);\r\n } else {\r\n swapAndSetIsReady(data.proxy as InternalTexture);\r\n }\r\n return;\r\n }\r\n\r\n let proxy: InternalTexture;\r\n switch (this.source) {\r\n case InternalTextureSource.Temp:\r\n break;\r\n\r\n case InternalTextureSource.Url:\r\n proxy = this._engine.createTexture(\r\n this._originalUrl ?? this.url,\r\n !this.generateMipMaps,\r\n this.invertY,\r\n null,\r\n this.samplingMode,\r\n // Do not use Proxy here as it could be fully synchronous\r\n // and proxy would be undefined.\r\n (temp) => {\r\n temp._swapAndDie(this, false);\r\n this.isReady = true;\r\n },\r\n null,\r\n this._buffer,\r\n undefined,\r\n this.format,\r\n this._extension,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._useSRGBBuffer\r\n );\r\n return;\r\n\r\n case InternalTextureSource.Raw:\r\n proxy = this._engine.createRawTexture(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type,\r\n this._creationFlags,\r\n this._useSRGBBuffer,\r\n this.mipLevelCount\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n if (this._bufferViewArray) {\r\n for (let mipLevel = 0; mipLevel < this._bufferViewArray.length; mipLevel++) {\r\n const mipData = this._bufferViewArray[mipLevel];\r\n if (mipData) {\r\n this._engine.updateRawTexture(this, mipData, this.format, this.invertY, this._compression, this.type, this._useSRGBBuffer, mipLevel);\r\n }\r\n }\r\n }\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Raw3D:\r\n proxy = this._engine.createRawTexture3D(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.baseDepth,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Raw2DArray:\r\n proxy = this._engine.createRawTexture2DArray(\r\n this._bufferView,\r\n this.baseWidth,\r\n this.baseHeight,\r\n this.baseDepth,\r\n this.format,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression,\r\n this.type,\r\n this._creationFlags,\r\n this.mipLevelCount\r\n );\r\n proxy._swapAndDie(this, false);\r\n\r\n if (this._bufferViewArray) {\r\n for (let mipLevel = 0; mipLevel < this._bufferViewArray.length; mipLevel++) {\r\n const mipData = this._bufferViewArray[mipLevel];\r\n if (mipData) {\r\n this._engine.updateRawTexture2DArray(this, mipData, this.format, this.invertY, this._compression, this.type, mipLevel);\r\n }\r\n }\r\n }\r\n\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.Dynamic:\r\n proxy = this._engine.createDynamicTexture(this.baseWidth, this.baseHeight, this.generateMipMaps, this.samplingMode);\r\n proxy._swapAndDie(this, false);\r\n if (this._dynamicTextureSource) {\r\n this._engine.updateDynamicTexture(this, this._dynamicTextureSource, this.invertY, this._premulAlpha, this.format, true);\r\n }\r\n\r\n // The engine will make sure to update content so no need to flag it as isReady = true\r\n break;\r\n\r\n case InternalTextureSource.Cube:\r\n proxy = this._engine.createCubeTexture(\r\n this.url,\r\n null,\r\n this._files,\r\n !this.generateMipMaps,\r\n () => {\r\n proxy._swapAndDie(this, false);\r\n this.isReady = true;\r\n },\r\n null,\r\n this.format,\r\n this._extension,\r\n false,\r\n 0,\r\n 0,\r\n null,\r\n undefined,\r\n this._useSRGBBuffer,\r\n ArrayBuffer.isView(this._buffer) ? this._buffer : null\r\n );\r\n return;\r\n\r\n case InternalTextureSource.CubeRaw:\r\n proxy = this._engine.createRawCubeTexture(\r\n this._bufferViewArray,\r\n this.width,\r\n this._originalFormat ?? this.format,\r\n this.type,\r\n this.generateMipMaps,\r\n this.invertY,\r\n this.samplingMode,\r\n this._compression\r\n );\r\n proxy._swapAndDie(this, false);\r\n this.isReady = true;\r\n break;\r\n\r\n case InternalTextureSource.CubeRawRGBD:\r\n // This case is being handeled by the environment texture tools and is not a part of the rebuild process.\r\n // To use CubeRawRGBD use updateRGBDAsync on the cube texture.\r\n return;\r\n\r\n case InternalTextureSource.CubePrefiltered:\r\n proxy = this._engine.createPrefilteredCubeTexture(\r\n this.url,\r\n null,\r\n this._lodGenerationScale,\r\n this._lodGenerationOffset,\r\n (proxy) => {\r\n if (proxy) {\r\n proxy._swapAndDie(this, false);\r\n }\r\n this.isReady = true;\r\n },\r\n null,\r\n this.format,\r\n this._extension,\r\n undefined,\r\n ArrayBuffer.isView(this._buffer) ? this._buffer : null\r\n );\r\n proxy._sphericalPolynomial = this._sphericalPolynomial;\r\n return;\r\n\r\n case InternalTextureSource.DepthStencil:\r\n case InternalTextureSource.Depth: {\r\n // Will be handled at the RenderTargetWrapper level\r\n break;\r\n }\r\n\r\n case InternalTextureSource.External: {\r\n // The underlying resource is owned by the host application; Babylon cannot rebuild it.\r\n // The host re-supplies a fresh handle via updateWrappedWebGLTexture / updateWrappedNativeTexture /\r\n // updateWrappedWebGPUTexture from its onContextRestoredObservable handler.\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture, swapAll = true): void {\r\n // TODO what about refcount on target?\r\n\r\n this._hardwareTexture?.setUsage(target._source, this.generateMipMaps, this.is2DArray, this.isCube, this.is3D, this.width, this.height, this.depth);\r\n\r\n target._hardwareTexture = this._hardwareTexture;\r\n // Refresh the target's uniqueId so that caches keyed by uniqueId (e.g. the\r\n // WebGPU global bind-group cache) see the hardware texture as a new resource\r\n // and rebuild GPU bind groups referencing it. Without this, callers that swap\r\n // a raw GPU texture for a prefiltered one (e.g. HDR/PMREM prefiltering) would\r\n // continue to receive stale GPUBindGroups that hold views over the now-destroyed\r\n // source GPU texture, causing \"Destroyed texture used in a submit\" errors.\r\n target._setUniqueId(InternalTexture._Counter++);\r\n if (swapAll) {\r\n target._isRGBD = this._isRGBD;\r\n }\r\n\r\n if (this._lodTextureHigh) {\r\n if (target._lodTextureHigh) {\r\n target._lodTextureHigh.dispose();\r\n }\r\n target._lodTextureHigh = this._lodTextureHigh;\r\n }\r\n\r\n if (this._lodTextureMid) {\r\n if (target._lodTextureMid) {\r\n target._lodTextureMid.dispose();\r\n }\r\n target._lodTextureMid = this._lodTextureMid;\r\n }\r\n\r\n if (this._lodTextureLow) {\r\n if (target._lodTextureLow) {\r\n target._lodTextureLow.dispose();\r\n }\r\n target._lodTextureLow = this._lodTextureLow;\r\n }\r\n\r\n if (this._irradianceTexture) {\r\n if (target._irradianceTexture) {\r\n target._irradianceTexture.dispose();\r\n }\r\n target._irradianceTexture = this._irradianceTexture;\r\n }\r\n\r\n const cache = this._engine.getLoadedTexturesCache();\r\n let index = cache.indexOf(this);\r\n if (index !== -1) {\r\n cache.splice(index, 1);\r\n }\r\n\r\n index = cache.indexOf(target);\r\n if (index === -1) {\r\n cache.push(target);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the current allocated resources\r\n */\r\n public dispose(): void {\r\n this._references--;\r\n if (this._references === 0) {\r\n this.onLoadedObservable.clear();\r\n this.onErrorObservable.clear();\r\n this._engine._releaseTexture(this);\r\n this._hardwareTexture = null;\r\n this._dynamicTextureSource = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -3,11 +3,11 @@ import { type Scene } from "../../scene.js";
|
|
|
3
3
|
import { RawTexture2DArray } from "./rawTexture2DArray.js";
|
|
4
4
|
/**
|
|
5
5
|
* These helpers populate 2D array texture layers from decoded image sources.
|
|
6
|
-
* They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension
|
|
7
|
-
*
|
|
6
|
+
* They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension. The full
|
|
7
|
+
* Engine build registers it for both backends at load time. On the side-effect-free (pure /
|
|
8
|
+
* tree-shaken) path it is opt-in: import the matching module for your backend before use:
|
|
8
9
|
* - WebGL2: import "../../Engines/Extensions/engine.texture2DArrayImageSource.js";
|
|
9
10
|
* - WebGPU: import "../../Engines/WebGPU/Extensions/engine.texture2DArrayImageSource.js";
|
|
10
|
-
* (the full Engine build does not register it by default to keep it out of every engine bundle).
|
|
11
11
|
*
|
|
12
12
|
* Consuming the result: the built-in way to sample a chosen layer is Node Material's Texture block,
|
|
13
13
|
* which exposes a `layer` input (feed it a Float) and samples the array at that layer for you — no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawTexture2DArray.functions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/rawTexture2DArray.functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ImageSource } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { _IsSideEffectImplemented, _WarnImport } from \"../../Misc/devTools\";\r\nimport { RawTexture2DArray } from \"./rawTexture2DArray\";\r\n\r\n/**\r\n * These helpers populate 2D array texture layers from decoded image sources.\r\n * They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension, which is\r\n * an opt-in side effect. Register it before use by importing the matching module for your backend:\r\n * - WebGL2: import \"core/Engines/Extensions/engine.texture2DArrayImageSource\";\r\n * - WebGPU: import \"core/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource\";\r\n * (the full Engine build does not register it by default to keep it out of every engine bundle).\r\n *\r\n * Consuming the result: the built-in way to sample a chosen layer is Node Material's Texture block,\r\n * which exposes a `layer` input (feed it a Float) and samples the array at that layer for you — no\r\n * custom shader code required. If you instead write your own shader, declare a `sampler2DArray`\r\n * (GLSL) / `texture_2d_array<f32>` (WGSL) uniform and sample it with an explicit integer layer index;\r\n * the classic StandardMaterial / PBRMaterial texture slots are plain 2D and cannot read an array layer.\r\n */\r\n\r\n/**\r\n * Options controlling how an image source is uploaded into a 2D array texture layer.\r\n */\r\nexport interface IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if the source must be stored with the Y axis inverted (false by default) */\r\n invertY?: boolean;\r\n /** Defines if the source alpha must be premultiplied (false by default) */\r\n premultiplyAlpha?: boolean;\r\n}\r\n\r\n/**\r\n * Options controlling the creation of a 2D array texture from a list of image urls.\r\n */\r\nexport interface ICreateTexture2DArrayFromImageUrlsOptions extends IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if mip levels should be generated (true by default) */\r\n generateMipMaps?: boolean;\r\n /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */\r\n samplingMode?: number;\r\n /** Defines the texture type (Constants.TEXTURETYPE_UNSIGNED_BYTE by default) */\r\n textureType?: number;\r\n /** Options forwarded to createImageBitmap when decoding each url */\r\n imageBitmapOptions?: ImageBitmapOptions;\r\n}\r\n\r\n/**\r\n * Uploads a decoded image source (ImageBitmap, canvas, video, image element...) into a single layer of a 2D array texture.\r\n * This is the image-source counterpart to RawTexture2DArray.update, which only accepts raw bytes.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param source defines the image source to upload\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n */\r\nexport function UploadImageToTexture2DArrayLayer(texture: RawTexture2DArray, source: ImageSource, layer: number, options?: IUploadImageToTexture2DArrayLayerOptions): void {\r\n const internalTexture = texture.getInternalTexture();\r\n if (!internalTexture) {\r\n throw new Error(\"Cannot upload to a 2D array texture that has no internal texture.\");\r\n }\r\n\r\n if (!Number.isInteger(layer) || layer < 0 || layer >= texture.depth) {\r\n throw new Error(`Layer ${layer} is out of range for a 2D array texture with ${texture.depth} layers.`);\r\n }\r\n\r\n const scene = texture.getScene();\r\n if (!scene) {\r\n throw new Error(\"Cannot upload to a 2D array texture that is not attached to a scene.\");\r\n }\r\n\r\n const engine = scene.getEngine();\r\n // updateTextureArrayLayerFromImageSource is an opt-in engine extension. When the consumer never\r\n // imported it, the augmented method is missing, so fail early with the standard side-effect import\r\n // message (matching the engine.rawTexture family) instead of a generic \"is not a function\" error.\r\n if (!_IsSideEffectImplemented(engine.updateTextureArrayLayerFromImageSource)) {\r\n throw _WarnImport(\"engine.texture2DArrayImageSource\");\r\n }\r\n\r\n engine.updateTextureArrayLayerFromImageSource(internalTexture, source, layer, options?.invertY ?? false, options?.premultiplyAlpha ?? false);\r\n}\r\n\r\n/**\r\n * Fetches an image from a url, decodes it and uploads it into a single layer of a 2D array texture.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param url defines the url of the image to load\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n * @returns a promise resolved once the layer has been uploaded\r\n */\r\nexport async function LoadImageToTexture2DArrayLayerAsync(\r\n texture: RawTexture2DArray,\r\n url: string,\r\n layer: number,\r\n options?: IUploadImageToTexture2DArrayLayerOptions\r\n): Promise<void> {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n const blob = await response.blob();\r\n const bitmap = await createImageBitmap(blob);\r\n try {\r\n UploadImageToTexture2DArrayLayer(texture, bitmap, layer, options);\r\n } finally {\r\n bitmap.close();\r\n }\r\n}\r\n\r\n/**\r\n * Options controlling the creation of a 2D array texture from a KTX2 file.\r\n */\r\nexport interface ICreateTexture2DArrayFromKTX2Options {\r\n /** Defines if mip levels should be generated (true by default) */\r\n generateMipMaps?: boolean;\r\n /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */\r\n samplingMode?: number;\r\n /** Defines if the texture must be stored with the Y axis inverted (false by default) */\r\n invertY?: boolean;\r\n}\r\n\r\n/**\r\n * Creates a 2D array texture from a single KTX2 file holding several array layers (layerCount greater than 1).\r\n * This is the single-file counterpart to CreateTexture2DArrayFromImageUrlsAsync: rather than fetching one image\r\n * per layer, the whole array travels in one container.\r\n *\r\n * The data is transcoded to uncompressed RGBA. Keeping the texture in its transcoded compressed form would\r\n * require compressedTexImage3D support in the engine raw texture path, which does not exist yet, so the\r\n * GPU cost here matches a plain RGBA array texture.\r\n *\r\n * Only the base mip level stored in the file is uploaded; when generateMipMaps is on, the remaining levels are\r\n * regenerated by the engine. Uploading the file's own mip chain needs per-mip array uploads, which WebGL's\r\n * updateRawTexture2DArray does not support today.\r\n * @param scene defines the hosting scene\r\n * @param data defines the url of the KTX2 file, or its already fetched content\r\n * @param options defines optional creation settings\r\n * @returns a promise resolved with the created RawTexture2DArray\r\n */\r\nexport async function CreateTexture2DArrayFromKTX2Async(scene: Scene, data: string | ArrayBufferView, options?: ICreateTexture2DArrayFromKTX2Options): Promise<RawTexture2DArray> {\r\n let buffer: ArrayBufferView;\r\n if (typeof data === \"string\") {\r\n const response = await fetch(data);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch KTX2 file \"${data}\": ${response.status} ${response.statusText}`);\r\n }\r\n buffer = new Uint8Array(await response.arrayBuffer());\r\n } else {\r\n buffer = data;\r\n }\r\n\r\n const { KhronosTextureContainer2 } = await import(\"../../Misc/khronosTextureContainer2\");\r\n\r\n if (!KhronosTextureContainer2.IsValid(buffer)) {\r\n throw new Error(\"The provided data is not a valid KTX2 file.\");\r\n }\r\n\r\n const container = new KhronosTextureContainer2(scene.getEngine());\r\n\r\n // forceRGBA: the transcoded compressed formats cannot be uploaded to an array texture yet (see above).\r\n const decodedData = await container._decodeAsync(buffer, { forceRGBA: true });\r\n\r\n if (decodedData.errors) {\r\n throw new Error(\"Failed to decode the KTX2 file. \" + decodedData.errors);\r\n }\r\n\r\n const layerCount = Math.max(decodedData.layerCount ?? 1, 1);\r\n // mipmaps are ordered level by level, and within a level layer by layer, so the base level occupies\r\n // the first layerCount entries and its layers are already in ascending order.\r\n const baseLevel = decodedData.mipmaps.slice(0, layerCount);\r\n\r\n if (baseLevel.length !== layerCount) {\r\n throw new Error(`Failed to decode the KTX2 file: expected ${layerCount} layers for the base mip level but got ${baseLevel.length}.`);\r\n }\r\n\r\n // Every layer of a level shares the level's dimensions, and forceRGBA above means each one must be exactly\r\n // width * height * 4 bytes. RawTexture2DArray takes all the layers as one flat buffer and cannot detect a\r\n // short or mismatched layer, so validate here rather than uploading malformed data.\r\n const { width, height } = baseLevel[0];\r\n const expectedLayerByteLength = width * height * 4;\r\n\r\n for (const mipmap of baseLevel) {\r\n if (!mipmap.data) {\r\n throw new Error(`Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level is empty.`);\r\n }\r\n if (mipmap.width !== width || mipmap.height !== height) {\r\n throw new Error(\r\n `Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level is ${mipmap.width}x${mipmap.height} but layer 0 is ${width}x${height}.`\r\n );\r\n }\r\n if (mipmap.data.byteLength !== expectedLayerByteLength) {\r\n throw new Error(\r\n `Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level holds ${mipmap.data.byteLength} bytes but ${expectedLayerByteLength} were expected.`\r\n );\r\n }\r\n }\r\n\r\n // A 2D array texture is uploaded as a single buffer holding every layer back to back.\r\n const textureData = new Uint8Array(expectedLayerByteLength * layerCount);\r\n let byteOffset = 0;\r\n for (const mipmap of baseLevel) {\r\n textureData.set(mipmap.data!, byteOffset);\r\n byteOffset += mipmap.data!.byteLength;\r\n }\r\n\r\n return new RawTexture2DArray(\r\n textureData,\r\n width,\r\n height,\r\n layerCount,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n scene,\r\n options?.generateMipMaps ?? true,\r\n options?.invertY ?? false,\r\n options?.samplingMode,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n}\r\n\r\n/**\r\n * Creates a 2D array texture and fills each layer from a list of image urls.\r\n * All images must share the same dimensions.\r\n * @param scene defines the hosting scene\r\n * @param urls defines the url of the image for each layer (at least one)\r\n * @param options defines optional creation and upload settings\r\n * @returns a promise resolved with the created RawTexture2DArray\r\n */\r\nexport async function CreateTexture2DArrayFromImageUrlsAsync(\r\n scene: Scene,\r\n urls: readonly [string, ...string[]],\r\n options?: ICreateTexture2DArrayFromImageUrlsOptions\r\n): Promise<RawTexture2DArray> {\r\n // allSettled (not all): a rejected fetch/decode must not leak the layers that\r\n // already decoded. Promise.all rejects on the first failure and never enters the\r\n // try/finally below, orphaning every ImageBitmap that resolved. Close the\r\n // fulfilled ones here, then rethrow the original failure.\r\n const results = await Promise.allSettled(\r\n urls.map(async (url) => {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n return await createImageBitmap(await response.blob(), options?.imageBitmapOptions);\r\n })\r\n );\r\n\r\n const firstRejection = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\r\n if (firstRejection) {\r\n for (const result of results) {\r\n if (result.status === \"fulfilled\") {\r\n result.value.close();\r\n }\r\n }\r\n throw firstRejection.reason;\r\n }\r\n\r\n const bitmaps = results.filter((result): result is PromiseFulfilledResult<ImageBitmap> => result.status === \"fulfilled\").map((result) => result.value) as [\r\n ImageBitmap,\r\n ...ImageBitmap[],\r\n ];\r\n\r\n try {\r\n const width = bitmaps[0].width;\r\n const height = bitmaps[0].height;\r\n\r\n for (let index = 1; index < bitmaps.length; index++) {\r\n const bitmap = bitmaps[index];\r\n if (bitmap.width !== width || bitmap.height !== height) {\r\n throw new Error(`All images must share the same dimensions. Image at index ${index} is ${bitmap.width}x${bitmap.height}, expected ${width}x${height}.`);\r\n }\r\n }\r\n\r\n const texture = new RawTexture2DArray(\r\n null,\r\n width,\r\n height,\r\n bitmaps.length,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n scene,\r\n options?.generateMipMaps ?? true,\r\n options?.invertY ?? false,\r\n options?.samplingMode,\r\n options?.textureType\r\n );\r\n\r\n try {\r\n const uploadOptions: IUploadImageToTexture2DArrayLayerOptions = {\r\n invertY: options?.invertY ?? false,\r\n premultiplyAlpha: options?.premultiplyAlpha ?? false,\r\n };\r\n\r\n // updateTextureArrayLayerFromImageSource rebuilds the whole mip chain on each upload when mips\r\n // are enabled. Uploading N layers that way is O(N) redundant mip generation, so suppress it\r\n // per-layer and let only the final upload regenerate the mips once — a single generateMipmap\r\n // covers every layer of the array.\r\n const internalTexture = texture.getInternalTexture();\r\n const generateMipMaps = internalTexture?.generateMipMaps ?? false;\r\n if (internalTexture && generateMipMaps) {\r\n internalTexture.generateMipMaps = false;\r\n }\r\n\r\n for (let layer = 0; layer < bitmaps.length; layer++) {\r\n if (internalTexture && generateMipMaps && layer === bitmaps.length - 1) {\r\n internalTexture.generateMipMaps = true;\r\n }\r\n UploadImageToTexture2DArrayLayer(texture, bitmaps[layer], layer, uploadOptions);\r\n }\r\n\r\n return texture;\r\n } catch (error) {\r\n // A layer upload can throw (out-of-range layer, missing engine extension, backend upload\r\n // failure). Dispose the freshly allocated GPU texture so it does not leak, then rethrow.\r\n texture.dispose();\r\n throw error;\r\n }\r\n } finally {\r\n for (let index = 0; index < bitmaps.length; index++) {\r\n bitmaps[index].close();\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"rawTexture2DArray.functions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/rawTexture2DArray.functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ImageSource } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { _IsSideEffectImplemented, _WarnImport } from \"../../Misc/devTools\";\r\nimport { RawTexture2DArray } from \"./rawTexture2DArray\";\r\n\r\n/**\r\n * These helpers populate 2D array texture layers from decoded image sources.\r\n * They rely on the AbstractEngine.updateTextureArrayLayerFromImageSource engine extension. The full\r\n * Engine build registers it for both backends at load time. On the side-effect-free (pure /\r\n * tree-shaken) path it is opt-in: import the matching module for your backend before use:\r\n * - WebGL2: import \"core/Engines/Extensions/engine.texture2DArrayImageSource\";\r\n * - WebGPU: import \"core/Engines/WebGPU/Extensions/engine.texture2DArrayImageSource\";\r\n *\r\n * Consuming the result: the built-in way to sample a chosen layer is Node Material's Texture block,\r\n * which exposes a `layer` input (feed it a Float) and samples the array at that layer for you — no\r\n * custom shader code required. If you instead write your own shader, declare a `sampler2DArray`\r\n * (GLSL) / `texture_2d_array<f32>` (WGSL) uniform and sample it with an explicit integer layer index;\r\n * the classic StandardMaterial / PBRMaterial texture slots are plain 2D and cannot read an array layer.\r\n */\r\n\r\n/**\r\n * Options controlling how an image source is uploaded into a 2D array texture layer.\r\n */\r\nexport interface IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if the source must be stored with the Y axis inverted (false by default) */\r\n invertY?: boolean;\r\n /** Defines if the source alpha must be premultiplied (false by default) */\r\n premultiplyAlpha?: boolean;\r\n}\r\n\r\n/**\r\n * Options controlling the creation of a 2D array texture from a list of image urls.\r\n */\r\nexport interface ICreateTexture2DArrayFromImageUrlsOptions extends IUploadImageToTexture2DArrayLayerOptions {\r\n /** Defines if mip levels should be generated (true by default) */\r\n generateMipMaps?: boolean;\r\n /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */\r\n samplingMode?: number;\r\n /** Defines the texture type (Constants.TEXTURETYPE_UNSIGNED_BYTE by default) */\r\n textureType?: number;\r\n /** Options forwarded to createImageBitmap when decoding each url */\r\n imageBitmapOptions?: ImageBitmapOptions;\r\n}\r\n\r\n/**\r\n * Uploads a decoded image source (ImageBitmap, canvas, video, image element...) into a single layer of a 2D array texture.\r\n * This is the image-source counterpart to RawTexture2DArray.update, which only accepts raw bytes.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param source defines the image source to upload\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n */\r\nexport function UploadImageToTexture2DArrayLayer(texture: RawTexture2DArray, source: ImageSource, layer: number, options?: IUploadImageToTexture2DArrayLayerOptions): void {\r\n const internalTexture = texture.getInternalTexture();\r\n if (!internalTexture) {\r\n throw new Error(\"Cannot upload to a 2D array texture that has no internal texture.\");\r\n }\r\n\r\n if (!Number.isInteger(layer) || layer < 0 || layer >= texture.depth) {\r\n throw new Error(`Layer ${layer} is out of range for a 2D array texture with ${texture.depth} layers.`);\r\n }\r\n\r\n const scene = texture.getScene();\r\n if (!scene) {\r\n throw new Error(\"Cannot upload to a 2D array texture that is not attached to a scene.\");\r\n }\r\n\r\n const engine = scene.getEngine();\r\n // updateTextureArrayLayerFromImageSource is an opt-in engine extension. When the consumer never\r\n // imported it, the augmented method is missing, so fail early with the standard side-effect import\r\n // message (matching the engine.rawTexture family) instead of a generic \"is not a function\" error.\r\n if (!_IsSideEffectImplemented(engine.updateTextureArrayLayerFromImageSource)) {\r\n throw _WarnImport(\"engine.texture2DArrayImageSource\");\r\n }\r\n\r\n engine.updateTextureArrayLayerFromImageSource(internalTexture, source, layer, options?.invertY ?? false, options?.premultiplyAlpha ?? false);\r\n}\r\n\r\n/**\r\n * Fetches an image from a url, decodes it and uploads it into a single layer of a 2D array texture.\r\n * @param texture defines the 2D array texture to upload into\r\n * @param url defines the url of the image to load\r\n * @param layer defines the array layer to upload into\r\n * @param options defines optional upload settings (invertY, premultiplyAlpha)\r\n * @returns a promise resolved once the layer has been uploaded\r\n */\r\nexport async function LoadImageToTexture2DArrayLayerAsync(\r\n texture: RawTexture2DArray,\r\n url: string,\r\n layer: number,\r\n options?: IUploadImageToTexture2DArrayLayerOptions\r\n): Promise<void> {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n const blob = await response.blob();\r\n const bitmap = await createImageBitmap(blob);\r\n try {\r\n UploadImageToTexture2DArrayLayer(texture, bitmap, layer, options);\r\n } finally {\r\n bitmap.close();\r\n }\r\n}\r\n\r\n/**\r\n * Options controlling the creation of a 2D array texture from a KTX2 file.\r\n */\r\nexport interface ICreateTexture2DArrayFromKTX2Options {\r\n /** Defines if mip levels should be generated (true by default) */\r\n generateMipMaps?: boolean;\r\n /** Defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default) */\r\n samplingMode?: number;\r\n /** Defines if the texture must be stored with the Y axis inverted (false by default) */\r\n invertY?: boolean;\r\n}\r\n\r\n/**\r\n * Creates a 2D array texture from a single KTX2 file holding several array layers (layerCount greater than 1).\r\n * This is the single-file counterpart to CreateTexture2DArrayFromImageUrlsAsync: rather than fetching one image\r\n * per layer, the whole array travels in one container.\r\n *\r\n * The data is transcoded to uncompressed RGBA. Keeping the texture in its transcoded compressed form would\r\n * require compressedTexImage3D support in the engine raw texture path, which does not exist yet, so the\r\n * GPU cost here matches a plain RGBA array texture.\r\n *\r\n * Only the base mip level stored in the file is uploaded; when generateMipMaps is on, the remaining levels are\r\n * regenerated by the engine. Uploading the file's own mip chain needs per-mip array uploads, which WebGL's\r\n * updateRawTexture2DArray does not support today.\r\n * @param scene defines the hosting scene\r\n * @param data defines the url of the KTX2 file, or its already fetched content\r\n * @param options defines optional creation settings\r\n * @returns a promise resolved with the created RawTexture2DArray\r\n */\r\nexport async function CreateTexture2DArrayFromKTX2Async(scene: Scene, data: string | ArrayBufferView, options?: ICreateTexture2DArrayFromKTX2Options): Promise<RawTexture2DArray> {\r\n let buffer: ArrayBufferView;\r\n if (typeof data === \"string\") {\r\n const response = await fetch(data);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch KTX2 file \"${data}\": ${response.status} ${response.statusText}`);\r\n }\r\n buffer = new Uint8Array(await response.arrayBuffer());\r\n } else {\r\n buffer = data;\r\n }\r\n\r\n const { KhronosTextureContainer2 } = await import(\"../../Misc/khronosTextureContainer2\");\r\n\r\n if (!KhronosTextureContainer2.IsValid(buffer)) {\r\n throw new Error(\"The provided data is not a valid KTX2 file.\");\r\n }\r\n\r\n const container = new KhronosTextureContainer2(scene.getEngine());\r\n\r\n // forceRGBA: the transcoded compressed formats cannot be uploaded to an array texture yet (see above).\r\n const decodedData = await container._decodeAsync(buffer, { forceRGBA: true });\r\n\r\n if (decodedData.errors) {\r\n throw new Error(\"Failed to decode the KTX2 file. \" + decodedData.errors);\r\n }\r\n\r\n const layerCount = Math.max(decodedData.layerCount ?? 1, 1);\r\n // mipmaps are ordered level by level, and within a level layer by layer, so the base level occupies\r\n // the first layerCount entries and its layers are already in ascending order.\r\n const baseLevel = decodedData.mipmaps.slice(0, layerCount);\r\n\r\n if (baseLevel.length !== layerCount) {\r\n throw new Error(`Failed to decode the KTX2 file: expected ${layerCount} layers for the base mip level but got ${baseLevel.length}.`);\r\n }\r\n\r\n // Every layer of a level shares the level's dimensions, and forceRGBA above means each one must be exactly\r\n // width * height * 4 bytes. RawTexture2DArray takes all the layers as one flat buffer and cannot detect a\r\n // short or mismatched layer, so validate here rather than uploading malformed data.\r\n const { width, height } = baseLevel[0];\r\n const expectedLayerByteLength = width * height * 4;\r\n\r\n for (const mipmap of baseLevel) {\r\n if (!mipmap.data) {\r\n throw new Error(`Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level is empty.`);\r\n }\r\n if (mipmap.width !== width || mipmap.height !== height) {\r\n throw new Error(\r\n `Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level is ${mipmap.width}x${mipmap.height} but layer 0 is ${width}x${height}.`\r\n );\r\n }\r\n if (mipmap.data.byteLength !== expectedLayerByteLength) {\r\n throw new Error(\r\n `Failed to decode the KTX2 file: layer ${mipmap.layerIndex} of the base mip level holds ${mipmap.data.byteLength} bytes but ${expectedLayerByteLength} were expected.`\r\n );\r\n }\r\n }\r\n\r\n // A 2D array texture is uploaded as a single buffer holding every layer back to back.\r\n const textureData = new Uint8Array(expectedLayerByteLength * layerCount);\r\n let byteOffset = 0;\r\n for (const mipmap of baseLevel) {\r\n textureData.set(mipmap.data!, byteOffset);\r\n byteOffset += mipmap.data!.byteLength;\r\n }\r\n\r\n return new RawTexture2DArray(\r\n textureData,\r\n width,\r\n height,\r\n layerCount,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n scene,\r\n options?.generateMipMaps ?? true,\r\n options?.invertY ?? false,\r\n options?.samplingMode,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n}\r\n\r\n/**\r\n * Creates a 2D array texture and fills each layer from a list of image urls.\r\n * All images must share the same dimensions.\r\n * @param scene defines the hosting scene\r\n * @param urls defines the url of the image for each layer (at least one)\r\n * @param options defines optional creation and upload settings\r\n * @returns a promise resolved with the created RawTexture2DArray\r\n */\r\nexport async function CreateTexture2DArrayFromImageUrlsAsync(\r\n scene: Scene,\r\n urls: readonly [string, ...string[]],\r\n options?: ICreateTexture2DArrayFromImageUrlsOptions\r\n): Promise<RawTexture2DArray> {\r\n // allSettled (not all): a rejected fetch/decode must not leak the layers that\r\n // already decoded. Promise.all rejects on the first failure and never enters the\r\n // try/finally below, orphaning every ImageBitmap that resolved. Close the\r\n // fulfilled ones here, then rethrow the original failure.\r\n const results = await Promise.allSettled(\r\n urls.map(async (url) => {\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch image \"${url}\": ${response.status} ${response.statusText}`);\r\n }\r\n return await createImageBitmap(await response.blob(), options?.imageBitmapOptions);\r\n })\r\n );\r\n\r\n const firstRejection = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\r\n if (firstRejection) {\r\n for (const result of results) {\r\n if (result.status === \"fulfilled\") {\r\n result.value.close();\r\n }\r\n }\r\n throw firstRejection.reason;\r\n }\r\n\r\n const bitmaps = results.filter((result): result is PromiseFulfilledResult<ImageBitmap> => result.status === \"fulfilled\").map((result) => result.value) as [\r\n ImageBitmap,\r\n ...ImageBitmap[],\r\n ];\r\n\r\n try {\r\n const width = bitmaps[0].width;\r\n const height = bitmaps[0].height;\r\n\r\n for (let index = 1; index < bitmaps.length; index++) {\r\n const bitmap = bitmaps[index];\r\n if (bitmap.width !== width || bitmap.height !== height) {\r\n throw new Error(`All images must share the same dimensions. Image at index ${index} is ${bitmap.width}x${bitmap.height}, expected ${width}x${height}.`);\r\n }\r\n }\r\n\r\n const texture = new RawTexture2DArray(\r\n null,\r\n width,\r\n height,\r\n bitmaps.length,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n scene,\r\n options?.generateMipMaps ?? true,\r\n options?.invertY ?? false,\r\n options?.samplingMode,\r\n options?.textureType\r\n );\r\n\r\n try {\r\n const uploadOptions: IUploadImageToTexture2DArrayLayerOptions = {\r\n invertY: options?.invertY ?? false,\r\n premultiplyAlpha: options?.premultiplyAlpha ?? false,\r\n };\r\n\r\n // updateTextureArrayLayerFromImageSource rebuilds the whole mip chain on each upload when mips\r\n // are enabled. Uploading N layers that way is O(N) redundant mip generation, so suppress it\r\n // per-layer and let only the final upload regenerate the mips once — a single generateMipmap\r\n // covers every layer of the array.\r\n const internalTexture = texture.getInternalTexture();\r\n const generateMipMaps = internalTexture?.generateMipMaps ?? false;\r\n if (internalTexture && generateMipMaps) {\r\n internalTexture.generateMipMaps = false;\r\n }\r\n\r\n for (let layer = 0; layer < bitmaps.length; layer++) {\r\n if (internalTexture && generateMipMaps && layer === bitmaps.length - 1) {\r\n internalTexture.generateMipMaps = true;\r\n }\r\n UploadImageToTexture2DArrayLayer(texture, bitmaps[layer], layer, uploadOptions);\r\n }\r\n\r\n return texture;\r\n } catch (error) {\r\n // A layer upload can throw (out-of-range layer, missing engine extension, backend upload\r\n // failure). Dispose the freshly allocated GPU texture so it does not leak, then rethrow.\r\n texture.dispose();\r\n throw error;\r\n }\r\n } finally {\r\n for (let index = 0; index < bitmaps.length; index++) {\r\n bitmaps[index].close();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -27,7 +27,7 @@ export declare class RawTexture3D extends Texture {
|
|
|
27
27
|
* @param depth defines the depth of the texture
|
|
28
28
|
* @param format defines the texture format to use
|
|
29
29
|
* @param scene defines the hosting scene
|
|
30
|
-
* @param generateMipMaps defines
|
|
30
|
+
* @param generateMipMaps defines whether mip levels should be generated across width, height, and depth (true by default)
|
|
31
31
|
* @param invertY defines if texture must be stored with Y axis inverted
|
|
32
32
|
* @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)
|
|
33
33
|
* @param textureType defines the texture Type (Engine.TEXTURETYPE_UNSIGNED_BYTE, Engine.TEXTURETYPE_FLOAT...)
|
|
@@ -30,7 +30,7 @@ export class RawTexture3D extends Texture {
|
|
|
30
30
|
* @param depth defines the depth of the texture
|
|
31
31
|
* @param format defines the texture format to use
|
|
32
32
|
* @param scene defines the hosting scene
|
|
33
|
-
* @param generateMipMaps defines
|
|
33
|
+
* @param generateMipMaps defines whether mip levels should be generated across width, height, and depth (true by default)
|
|
34
34
|
* @param invertY defines if texture must be stored with Y axis inverted
|
|
35
35
|
* @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)
|
|
36
36
|
* @param textureType defines the texture Type (Engine.TEXTURETYPE_UNSIGNED_BYTE, Engine.TEXTURETYPE_FLOAT...)
|