@onerjs/core 9.0.1 → 9.0.3
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/animationGroup.pure.js.map +1 -1
- package/Buffers/buffer.pure.js +4 -0
- package/Buffers/buffer.pure.js.map +1 -1
- package/Cameras/camera.pure.d.ts +14 -0
- package/Cameras/camera.pure.js +15 -0
- package/Cameras/camera.pure.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +2 -1
- package/Compute/computeShader.pure.js +29 -10
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/ray.core.js +22 -9
- package/Culling/ray.core.js.map +1 -1
- package/Engines/IDrawContext.d.ts +2 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +55 -4
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +1 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +5 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.d.ts +2 -0
- package/Engines/Processors/shaderCodeInliner.js +251 -6
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +10 -1
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js +12 -0
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +0 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +5 -0
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +7 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.js +20 -8
- package/Engines/WebGPU/webgpuCacheTextureView.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +2 -0
- package/Engines/WebGPU/webgpuDrawContext.js +6 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js +23 -9
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassCommandStream.d.ts +156 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js +323 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js.map +1 -0
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +4 -3
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +3 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +9 -6
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +2 -0
- package/Engines/abstractEngine.pure.js +14 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +6 -0
- package/Engines/constants.js +6 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +198 -24
- package/Engines/pure.d.ts +1 -0
- package/Engines/pure.js +1 -0
- package/Engines/pure.js.map +1 -1
- package/Engines/renderCommandBatcher.pure.d.ts +16 -0
- package/Engines/renderCommandBatcher.pure.js +24 -0
- package/Engines/renderCommandBatcher.pure.js.map +1 -0
- package/Engines/thinEngine.functions.js +3 -2
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.pure.js +18 -2
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +10 -7
- package/Engines/thinNativeEngine.pure.js +117 -46
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +8 -0
- package/Engines/thinWebGPUEngine.js +11 -0
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +60 -1
- package/Engines/webgpuEngine.pure.js +238 -42
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.d.ts +5 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js +8 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.d.ts +77 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js +141 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.d.ts +5 -3
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js +38 -7
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/index.d.ts +1 -0
- package/FlowGraph/Blocks/Event/index.js +1 -0
- package/FlowGraph/Blocks/Event/index.js.map +1 -1
- package/FlowGraph/Blocks/Event/pure.d.ts +1 -0
- package/FlowGraph/Blocks/Event/pure.js +1 -0
- package/FlowGraph/Blocks/Event/pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/allBlocks.pure.js +2 -0
- package/FlowGraph/Blocks/allBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +12 -1
- package/FlowGraph/flowGraph.js +38 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +44 -0
- package/FlowGraph/flowGraphCoordinator.js +141 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.pure.js +41 -14
- package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +105 -5
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphSoundAssets.d.ts +40 -0
- package/FlowGraph/flowGraphSoundAssets.js +33 -0
- package/FlowGraph/flowGraphSoundAssets.js.map +1 -0
- package/FlowGraph/index.d.ts +1 -0
- package/FlowGraph/index.js +1 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +1 -0
- package/FlowGraph/pure.js +1 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +8 -0
- package/FlowGraph/serialization.js +31 -12
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +25 -0
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/taaTask.js +2 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +1 -0
- package/Instrumentation/engineInstrumentation.js +25 -6
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.js +2 -0
- package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +36 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +202 -27
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Lights/directionalLight.pure.d.ts +24 -10
- package/Lights/directionalLight.pure.js +29 -11
- package/Lights/directionalLight.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +4 -4
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.pure.js +4 -0
- package/Materials/Node/Blocks/Input/inputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.d.ts +9 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +23 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +9 -0
- package/Materials/PBR/pbrBaseMaterial.pure.js +60 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +11 -0
- package/Materials/PBR/pbrBaseSimpleMaterial.js +21 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +12 -0
- package/Materials/PBR/pbrMaterial.pure.js +23 -3
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +10 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +5 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +7 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -1
- package/Materials/Textures/HTML/htmlInteractionManager.d.ts +9 -3
- package/Materials/Textures/HTML/htmlInteractionManager.js +64 -5
- package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -1
- package/Materials/Textures/HTML/htmlTexture.d.ts +11 -11
- package/Materials/Textures/HTML/htmlTexture.js +106 -65
- package/Materials/Textures/HTML/htmlTexture.js.map +1 -1
- package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +4 -50
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +10 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/dynamicTexture.pure.js +6 -0
- package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
- package/Materials/Textures/ktx2encoderTypes.d.ts +51 -0
- package/Materials/Textures/ktx2encoderTypes.js +2 -0
- package/Materials/Textures/ktx2encoderTypes.js.map +1 -0
- package/Materials/Textures/renderTargetTexture.pure.js +10 -2
- package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
- package/Materials/Textures/texture.pure.js +7 -1
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +11 -0
- package/Materials/Textures/textureMerger.js +34 -19
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +145 -0
- package/Materials/Textures/textureProcessor.js +445 -45
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/textureSampling.functions.d.ts +41 -0
- package/Materials/Textures/textureSampling.functions.js +82 -0
- package/Materials/Textures/textureSampling.functions.js.map +1 -0
- package/Materials/drawWrapper.d.ts +8 -0
- package/Materials/drawWrapper.js +19 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.pure.d.ts +6 -0
- package/Materials/effect.pure.js +28 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effect.webgl.functions.pure.js +1 -1
- package/Materials/effect.webgl.functions.pure.js.map +1 -1
- package/Materials/material.pure.d.ts +5 -0
- package/Materials/material.pure.js +9 -2
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialFlags.d.ts +6 -0
- package/Materials/materialFlags.js +14 -0
- package/Materials/materialFlags.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +36 -2
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.js +19 -16
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginManager.pure.js +12 -8
- package/Materials/materialPluginManager.pure.js.map +1 -1
- package/Materials/prePassConfiguration.js +19 -16
- package/Materials/prePassConfiguration.js.map +1 -1
- package/Materials/shaderMaterial.pure.js +19 -6
- package/Materials/shaderMaterial.pure.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +6 -0
- package/Materials/shadowDepthWrapper.js +17 -0
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Meshes/Compression/dracoCodec.d.ts +14 -0
- package/Meshes/Compression/dracoCodec.js +22 -0
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.d.ts +1 -0
- package/Meshes/Compression/dracoDecoder.js +27 -0
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -0
- package/Meshes/Compression/dracoEncoder.js +8 -0
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.d.ts +1 -0
- package/Meshes/Compression/meshoptCompression.js +9 -0
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.d.ts +415 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js +912 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +40 -9
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +112 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +696 -74
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +12 -4
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/geometry.d.ts +5 -0
- package/Meshes/geometry.js +25 -0
- package/Meshes/geometry.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/mesh.pure.d.ts +7 -0
- package/Meshes/mesh.pure.js +18 -13
- package/Meshes/mesh.pure.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/Meshes/subMesh.pure.d.ts +3 -0
- package/Meshes/subMesh.pure.js +26 -0
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +5 -3
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +3 -2
- package/Misc/khronosTextureContainer2.js +24 -6
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/khronosTextureContainer2Encoder.d.ts +166 -0
- package/Misc/khronosTextureContainer2Encoder.js +556 -0
- package/Misc/khronosTextureContainer2Encoder.js.map +1 -0
- package/Misc/khronosTextureContainer2EncoderWorker.d.ts +61 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js +55 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js.map +1 -0
- package/Misc/pure.d.ts +1 -0
- package/Misc/pure.js +1 -0
- package/Misc/pure.js.map +1 -1
- package/Misc/textureFormat.functions.d.ts +6 -0
- package/Misc/textureFormat.functions.js +54 -0
- package/Misc/textureFormat.functions.js.map +1 -0
- package/Misc/textureTools.d.ts +6 -2
- package/Misc/textureTools.js +100 -42
- package/Misc/textureTools.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.d.ts +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.js +6 -3
- package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -0
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +2 -0
- package/Particles/gpuParticleSystem.pure.js +25 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/solidParticle.d.ts +5 -0
- package/Particles/solidParticle.js +5 -0
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +10 -0
- package/Particles/solidParticleSystem.js +72 -13
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.pure.js +4 -0
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.d.ts +27 -6
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js +60 -5
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +1 -0
- package/PostProcesses/thinTAAPostProcess.js +17 -1
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +2 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +6 -5
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -3
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.js +8 -2
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +1 -0
- package/Rendering/objectRenderer.js +14 -0
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +5 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +2 -2
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +7 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js +12 -0
- package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/geometry.vertex.js +6 -6
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/lod.fragment.js +15 -2
- package/Shaders/lod.fragment.js.map +1 -1
- package/Shaders/lod3D.fragment.js +15 -2
- package/Shaders/lod3D.fragment.js.map +1 -1
- package/Shaders/lodCube.fragment.js +15 -2
- package/Shaders/lodCube.fragment.js.map +1 -1
- package/Shaders/openpbr.vertex.js +2 -0
- package/Shaders/openpbr.vertex.js.map +1 -1
- package/Shaders/pbr.fragment.js +12 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.js +2 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/textureMerger.fragment.js +28 -0
- package/Shaders/textureMerger.fragment.js.map +1 -1
- package/Shaders/textureProcessor.fragment.js +26 -4
- package/Shaders/textureProcessor.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +44 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +17 -3
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +12 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +8 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertex.js +2 -2
- package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +3 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js +16 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +4 -4
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +1 -1
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/gsSortCount.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortCount.compute.js +19 -0
- package/ShadersWGSL/gsSortCount.compute.js.map +1 -0
- package/ShadersWGSL/gsSortKeys.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortKeys.compute.js +49 -0
- package/ShadersWGSL/gsSortKeys.compute.js.map +1 -0
- package/ShadersWGSL/gsSortOutput.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortOutput.compute.js +28 -0
- package/ShadersWGSL/gsSortOutput.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanLocal.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js +23 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanSums.compute.js +19 -0
- package/ShadersWGSL/gsSortScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScatter.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScatter.compute.js +33 -0
- package/ShadersWGSL/gsSortScatter.compute.js.map +1 -0
- package/ShadersWGSL/lod.fragment.js +14 -2
- package/ShadersWGSL/lod.fragment.js.map +1 -1
- package/ShadersWGSL/lod3D.fragment.js +14 -2
- package/ShadersWGSL/lod3D.fragment.js.map +1 -1
- package/ShadersWGSL/lodCube.fragment.js +14 -2
- package/ShadersWGSL/lodCube.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.vertex.js +3 -1
- package/ShadersWGSL/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +11 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +3 -1
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/textureMerger.fragment.js +40 -4
- package/ShadersWGSL/textureMerger.fragment.js.map +1 -1
- package/ShadersWGSL/textureProcessor.fragment.js +26 -4
- package/ShadersWGSL/textureProcessor.fragment.js.map +1 -1
- package/Sprites/spriteRenderer.js +15 -5
- package/Sprites/spriteRenderer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +23 -1
- package/scene.pure.js +83 -1
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type IMatrixLike } from \"../Maths/math.like\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { type ThinSprite } from \"./thinSprite\";\r\nimport { type ISize } from \"../Maths/math.size\";\r\n\r\nimport { type ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector.pure\";\r\nimport { MaterialHelperGeometryRendering, type GeometryRenderingConfiguration } from \"../Materials/materialHelper.geometryrendering\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect\";\r\nimport { Observable, type Observer } from \"../Misc/observable.pure\";\r\n\r\ntype SpriteRendererSpriteHistory = {\r\n previousX: number;\r\n previousY: number;\r\n previousZ: number;\r\n previousAngle: number;\r\n previousWidth: number;\r\n previousHeight: number;\r\n currentX: number;\r\n currentY: number;\r\n currentZ: number;\r\n currentAngle: number;\r\n currentWidth: number;\r\n currentHeight: number;\r\n frameId: number;\r\n};\r\n\r\ntype SpriteRendererCameraHistory = {\r\n previousView: Matrix;\r\n previousProjection: Matrix;\r\n currentView: Matrix;\r\n currentProjection: Matrix;\r\n sprites: WeakMap<ThinSprite, SpriteRendererSpriteHistory>;\r\n frameId: number;\r\n};\r\n\r\ntype SpriteRendererDrawCache = {\r\n drawWrapperBase: DrawWrapper;\r\n drawWrapperDepth: DrawWrapper;\r\n defines: string;\r\n geometryDefines?: string;\r\n geometryConfiguration?: GeometryRenderingConfiguration;\r\n variantKey: number;\r\n vertexBuffers: { [key: string]: VertexBuffer };\r\n vertexArrayObject?: WebGLVertexArrayObject;\r\n usesGeometryRendering: boolean;\r\n usesVelocity: boolean;\r\n usesObjectId: boolean;\r\n usesMeshBlendTag: boolean;\r\n usesInverseView: boolean;\r\n usesNormals: boolean;\r\n usesNormalizedDepth: boolean;\r\n cameraHistories?: WeakMap<object, SpriteRendererCameraHistory>;\r\n};\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _previousVertexData: Nullable<Float32Array> = null;\r\n private _previousBuffer: Nullable<Buffer> = null;\r\n private _vertexBuffersWithPrevious: Nullable<{ [key: string]: VertexBuffer }> = null;\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _drawCaches: Array<SpriteRendererDrawCache | undefined> = [];\r\n private _inverseViewMatrix: Nullable<Matrix> = null;\r\n private _isDisposed = false;\r\n private _renderPassObserver: Nullable<Observer<number>> = null;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Checks whether the texture and shader variant for the current render pass are ready.\r\n * This prepares the effect without updating or drawing any sprites.\r\n * @returns true when the renderer can draw sprites\r\n * @see https://playground.babylonjs.com/#PVK3RV#2\r\n */\r\n public isReady(): boolean {\r\n if (this._isDisposed || !this._shadersLoaded || !this.texture?.isReady()) {\r\n return false;\r\n }\r\n const renderPassId = this._engine._features.supportRenderPasses ? this._engine.currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n return !!this._getDrawCache(renderPassId).drawWrapperBase.effect?.isReady();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._disposeDrawCaches();\r\n\r\n const mainCache = this._getDrawCache(Constants.RENDERPASS_MAIN);\r\n this._drawWrapperBase = mainCache.drawWrapperBase;\r\n this._drawWrapperDepth = mainCache.drawWrapperDepth;\r\n }\r\n\r\n private _getDrawCache(renderPassId: number): SpriteRendererDrawCache {\r\n const fogEnabled = !!(this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled);\r\n const variantKey = (this._pixelPerfect ? 1 : 0) | (fogEnabled ? 2 : 0) | (this._useLogarithmicDepth ? 4 : 0);\r\n const geometryConfiguration = MaterialHelperGeometryRendering.GetConfiguration(renderPassId);\r\n const geometryDefines = geometryConfiguration?._defines;\r\n let cache = this._drawCaches[renderPassId];\r\n\r\n if (cache?.variantKey === variantKey && cache.geometryDefines === geometryDefines && cache.geometryConfiguration === geometryConfiguration) {\r\n return cache;\r\n }\r\n\r\n const defines: string[] = [];\r\n\r\n if (this._pixelPerfect) {\r\n defines.push(\"#define PIXEL_PERFECT\");\r\n }\r\n if (fogEnabled) {\r\n defines.push(\"#define FOG\");\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n }\r\n\r\n const usesGeometryRendering = MaterialHelperGeometryRendering._PrepareStringDefines(renderPassId, defines);\r\n const mrtCount = usesGeometryRendering ? (MaterialHelperGeometryRendering.GetConfiguration(renderPassId)._mrtCount ?? 0) : 0;\r\n if (!usesGeometryRendering) {\r\n defines.push(\"#define SCENE_MRT_COUNT 0\");\r\n }\r\n const joinedDefines = defines.join(\"\\n\");\r\n\r\n if (cache) {\r\n this._disposeDrawCache(cache);\r\n this._drawCaches[renderPassId] = undefined;\r\n }\r\n\r\n const usesVelocity = joinedDefines.indexOf(\"#define PREPASS_VELOCITY\\n\") !== -1 || joinedDefines.indexOf(\"#define PREPASS_VELOCITY_LINEAR\\n\") !== -1;\r\n const usesObjectId = joinedDefines.indexOf(\"#define PREPASS_OBJECT_ID\\n\") !== -1;\r\n const usesMeshBlendTag = joinedDefines.indexOf(\"#define PREPASS_MESH_BLEND_TAG\\n\") !== -1;\r\n const attributes = [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind];\r\n let vertexBuffers = this._vertexBuffers;\r\n\r\n if (usesVelocity) {\r\n vertexBuffers = this._ensurePreviousVertexBuffer();\r\n attributes.push(\"previousPosition\", \"previousOptions\");\r\n }\r\n\r\n const uniforms = [\r\n \"view\",\r\n \"projection\",\r\n \"textureInfos\",\r\n \"alphaTest\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"logarithmicDepthConstant\",\r\n \"invView\",\r\n \"cameraInfo\",\r\n \"spriteNormalSign\",\r\n \"previousView\",\r\n \"previousProjection\",\r\n \"objectId\",\r\n \"meshBlendTag\",\r\n \"geometryZeroAlphaDiscard\",\r\n ];\r\n const drawWrapperBase = new DrawWrapper(this._engine);\r\n const drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (drawWrapperBase.drawContext) {\r\n drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (drawWrapperDepth.drawContext) {\r\n drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n const effectOptions: IEffectCreationOptions = {\r\n attributes,\r\n uniformsNames: uniforms,\r\n samplers: [\"diffuseSampler\"],\r\n defines: joinedDefines,\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { SCENE_MRT_COUNT: mrtCount },\r\n multiTarget: usesGeometryRendering,\r\n shaderLanguage: this._shaderLanguage,\r\n };\r\n const effect = this._engine.createEffect(\"sprites\", effectOptions, this._engine);\r\n\r\n drawWrapperBase.effect = effect;\r\n drawWrapperBase.defines = joinedDefines;\r\n drawWrapperDepth.effect = effect;\r\n effect._refCount++;\r\n drawWrapperDepth.defines = joinedDefines;\r\n drawWrapperDepth.materialContext = drawWrapperBase.materialContext;\r\n\r\n cache = {\r\n drawWrapperBase,\r\n drawWrapperDepth,\r\n defines: joinedDefines,\r\n geometryDefines,\r\n geometryConfiguration,\r\n variantKey,\r\n vertexBuffers,\r\n usesGeometryRendering,\r\n usesVelocity,\r\n usesObjectId,\r\n usesMeshBlendTag,\r\n usesInverseView: geometryConfiguration?.defines.PREPASS_POSITION_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,\r\n usesNormals: geometryConfiguration?.defines.PREPASS_NORMAL_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,\r\n usesNormalizedDepth: geometryConfiguration?.defines.PREPASS_NORMALIZED_VIEW_DEPTH_INDEX !== undefined,\r\n cameraHistories: usesVelocity ? new WeakMap<object, SpriteRendererCameraHistory>() : undefined,\r\n };\r\n this._drawCaches[renderPassId] = cache;\r\n if (renderPassId !== Constants.RENDERPASS_MAIN && !this._renderPassObserver) {\r\n this._renderPassObserver = (this._engine._onReleaseRenderPassObservable ??= new Observable<number>()).add((id) => {\r\n const releasedCache = this._drawCaches[id];\r\n if (releasedCache) {\r\n this._disposeDrawCache(releasedCache);\r\n delete this._drawCaches[id];\r\n this._disposePreviousVertexBufferIfUnused();\r\n }\r\n });\r\n }\r\n this._disposePreviousVertexBufferIfUnused();\r\n\r\n return cache;\r\n }\r\n\r\n private _ensurePreviousVertexBuffer(): { [key: string]: VertexBuffer } {\r\n if (this._vertexBuffersWithPrevious) {\r\n return this._vertexBuffersWithPrevious;\r\n }\r\n\r\n const previousVertexBufferSize = 6;\r\n this._previousVertexData = new Float32Array(this._capacity * previousVertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._previousBuffer = new Buffer(this._engine, this._previousVertexData, true, previousVertexBufferSize);\r\n this._vertexBuffersWithPrevious = { ...this._vertexBuffers };\r\n this._vertexBuffersWithPrevious[\"previousPosition\"] = this._previousBuffer.createVertexBuffer(\"previousPosition\", 0, 4, previousVertexBufferSize, this._useInstancing);\r\n this._vertexBuffersWithPrevious[\"previousOptions\"] = this._previousBuffer.createVertexBuffer(\"previousOptions\", 4, 2, previousVertexBufferSize, this._useInstancing);\r\n\r\n return this._vertexBuffersWithPrevious;\r\n }\r\n\r\n private _disposeDrawCache(cache: SpriteRendererDrawCache): void {\r\n if (cache.vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(cache.vertexArrayObject);\r\n }\r\n cache.drawWrapperBase.dispose();\r\n cache.drawWrapperDepth.dispose();\r\n }\r\n\r\n private _disposeDrawCaches(): void {\r\n for (const cache of this._drawCaches) {\r\n if (cache) {\r\n this._disposeDrawCache(cache);\r\n }\r\n }\r\n this._drawCaches = [];\r\n this._disposePreviousVertexBuffer();\r\n }\r\n\r\n private _disposePreviousVertexBufferIfUnused(): void {\r\n for (const cache of this._drawCaches) {\r\n if (cache?.usesVelocity) {\r\n return;\r\n }\r\n }\r\n this._disposePreviousVertexBuffer();\r\n }\r\n\r\n private _disposePreviousVertexBuffer(): void {\r\n if (this._previousBuffer) {\r\n this._previousBuffer.dispose();\r\n this._previousBuffer = null;\r\n this._previousVertexData = null;\r\n this._vertexBuffersWithPrevious = null;\r\n }\r\n }\r\n\r\n private _bindVertexBuffers(cache: SpriteRendererDrawCache, effect: Effect): void {\r\n if (this._useVAO) {\r\n if (!cache.vertexArrayObject) {\r\n cache.vertexArrayObject = (this._engine as ThinEngine).recordVertexArrayObject(cache.vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (this._engine as ThinEngine).bindVertexArrayObject(cache.vertexArrayObject, this._indexBuffer);\r\n } else {\r\n this._engine.bindBuffers(cache.vertexBuffers, this._indexBuffer, effect);\r\n }\r\n }\r\n\r\n private _getCameraHistory(cache: SpriteRendererDrawCache, viewMatrix: IMatrixLike, projectionMatrix: IMatrixLike, frameId: number): SpriteRendererCameraHistory {\r\n const cameraKey = (this._scene?.activeCamera ?? viewMatrix) as object;\r\n let history = cache.cameraHistories!.get(cameraKey);\r\n\r\n if (!history) {\r\n const currentView = Matrix.FromArray(viewMatrix.asArray());\r\n const currentProjection = Matrix.FromArray(projectionMatrix.asArray());\r\n history = {\r\n previousView: currentView.clone(),\r\n previousProjection: currentProjection.clone(),\r\n currentView,\r\n currentProjection,\r\n sprites: new WeakMap<ThinSprite, SpriteRendererSpriteHistory>(),\r\n frameId,\r\n };\r\n cache.cameraHistories!.set(cameraKey, history);\r\n } else {\r\n if (history.frameId !== frameId) {\r\n if (history.frameId === frameId - 1) {\r\n history.previousView.copyFrom(history.currentView);\r\n history.previousProjection.copyFrom(history.currentProjection);\r\n } else {\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.previousView);\r\n Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.previousProjection);\r\n history.sprites = new WeakMap<ThinSprite, SpriteRendererSpriteHistory>();\r\n }\r\n history.frameId = frameId;\r\n }\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.currentView);\r\n Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.currentProjection);\r\n }\r\n\r\n return history;\r\n }\r\n\r\n private _prepareSpriteHistory(history: SpriteRendererCameraHistory, sprite: ThinSprite, frameId: number): Nullable<SpriteRendererSpriteHistory> {\r\n const spriteHistory = history.sprites.get(sprite);\r\n if (spriteHistory && spriteHistory.frameId !== frameId) {\r\n if (spriteHistory.frameId !== frameId - 1) {\r\n history.sprites.delete(sprite);\r\n return null;\r\n }\r\n spriteHistory.previousX = spriteHistory.currentX;\r\n spriteHistory.previousY = spriteHistory.currentY;\r\n spriteHistory.previousZ = spriteHistory.currentZ;\r\n spriteHistory.previousAngle = spriteHistory.currentAngle;\r\n spriteHistory.previousWidth = spriteHistory.currentWidth;\r\n spriteHistory.previousHeight = spriteHistory.currentHeight;\r\n spriteHistory.frameId = frameId;\r\n }\r\n return spriteHistory ?? null;\r\n }\r\n\r\n private _updateSpriteHistory(\r\n history: SpriteRendererCameraHistory,\r\n sprite: ThinSprite,\r\n spriteHistory: Nullable<SpriteRendererSpriteHistory>,\r\n floatingOriginOffset: Vector3,\r\n frameId: number\r\n ): void {\r\n const x = sprite.position.x - floatingOriginOffset.x;\r\n const y = sprite.position.y - floatingOriginOffset.y;\r\n const z = sprite.position.z - floatingOriginOffset.z;\r\n\r\n if (!spriteHistory) {\r\n history.sprites.set(sprite, {\r\n previousX: x,\r\n previousY: y,\r\n previousZ: z,\r\n previousAngle: sprite.angle,\r\n previousWidth: sprite.width,\r\n previousHeight: sprite.height,\r\n currentX: x,\r\n currentY: y,\r\n currentZ: z,\r\n currentAngle: sprite.angle,\r\n currentWidth: sprite.width,\r\n currentHeight: sprite.height,\r\n frameId,\r\n });\r\n return;\r\n }\r\n\r\n if (spriteHistory.frameId === frameId) {\r\n spriteHistory.currentX = x;\r\n spriteHistory.currentY = y;\r\n spriteHistory.currentZ = z;\r\n spriteHistory.currentAngle = sprite.angle;\r\n spriteHistory.currentWidth = sprite.width;\r\n spriteHistory.currentHeight = sprite.height;\r\n }\r\n }\r\n\r\n private _animateSprite(sprite: ThinSprite, deltaTime: number): void {\r\n if (!this._scene) {\r\n sprite._animate(deltaTime);\r\n return;\r\n }\r\n\r\n const frameId = this._scene.getFrameId();\r\n const frameGraphRendering = !!this._scene.frameGraph || !!MaterialHelperGeometryRendering.GetConfiguration(this._engine.currentRenderPassId);\r\n if (!frameGraphRendering || sprite._animationFrameId !== frameId || sprite._animationSceneId !== this._scene.uniqueId) {\r\n sprite._animationFrameId = frameId;\r\n sprite._animationSceneId = this._scene.uniqueId;\r\n sprite._animate(deltaTime);\r\n }\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const renderPassId = engine._features.supportRenderPasses ? engine.currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n const drawCache = this._getDrawCache(renderPassId);\r\n const drawWrapper = drawCache.drawWrapperBase;\r\n const drawWrapperDepth = drawCache.drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n const frameId = this._scene?.getFrameId() ?? engine.frameId;\r\n const usesVelocity = drawCache.usesVelocity;\r\n const cameraHistory = usesVelocity ? this._getCameraHistory(drawCache, viewMatrix, projectionMatrix, frameId) : null;\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n const floatingOriginOffset = this._scene?.floatingOriginOffset || Vector3.ZeroReadOnly;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n this._animateSprite(sprite, deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n const spriteHistory = cameraHistory ? this._prepareSpriteHistory(cameraHistory, sprite, frameId) : null;\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n }\r\n\r\n if (cameraHistory) {\r\n this._updateSpriteHistory(cameraHistory, sprite, spriteHistory, floatingOriginOffset, frameId);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n if (usesVelocity) {\r\n this._previousBuffer!.update(this._previousVertexData!);\r\n }\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n if (drawCache.usesGeometryRendering) {\r\n if (drawCache.usesInverseView) {\r\n this._inverseViewMatrix ??= Matrix.Identity();\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, this._inverseViewMatrix).invertToRef(this._inverseViewMatrix);\r\n effect.setMatrix(\"invView\", this._inverseViewMatrix);\r\n }\r\n if (drawCache.usesNormals) {\r\n effect.setFloat(\"spriteNormalSign\", useRightHandedSystem ? 1 : -1);\r\n }\r\n if (drawCache.usesNormalizedDepth) {\r\n const camera = this._scene?.activeCamera;\r\n effect.setFloat2(\"cameraInfo\", camera?.minZ ?? 0, camera?.maxZ ?? 1);\r\n }\r\n\r\n if (drawCache.usesObjectId) {\r\n effect.setFloat(\"objectId\", 0);\r\n }\r\n if (drawCache.usesMeshBlendTag) {\r\n effect.setInt(\"meshBlendTag\", 0);\r\n }\r\n if (cameraHistory) {\r\n effect.setMatrix(\"previousView\", cameraHistory.previousView);\r\n effect.setMatrix(\"previousProjection\", cameraHistory.previousProjection);\r\n }\r\n }\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n this._bindVertexBuffers(drawCache, effect);\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (drawCache.usesGeometryRendering) {\r\n MaterialHelperGeometryRendering._BindZeroAlphaDiscard(engine, effect);\r\n }\r\n try {\r\n if (MaterialHelperGeometryRendering._BindAttachmentsForEffect(engine, effect)) {\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n }\r\n } finally {\r\n MaterialHelperGeometryRendering._RestoreAttachments(engine);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>,\r\n floatingOriginOffset: Vector3,\r\n spriteHistory: Nullable<SpriteRendererSpriteHistory>,\r\n writeHistory: boolean\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x - floatingOriginOffset.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y - floatingOriginOffset.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z - floatingOriginOffset.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n\r\n if (writeHistory && this._previousVertexData) {\r\n const previousArrayOffset = index * 6;\r\n this._previousVertexData[previousArrayOffset] = spriteHistory?.previousX ?? sprite.position.x - floatingOriginOffset.x;\r\n this._previousVertexData[previousArrayOffset + 1] = spriteHistory?.previousY ?? sprite.position.y - floatingOriginOffset.y;\r\n this._previousVertexData[previousArrayOffset + 2] = spriteHistory?.previousZ ?? sprite.position.z - floatingOriginOffset.z;\r\n this._previousVertexData[previousArrayOffset + 3] = spriteHistory?.previousAngle ?? sprite.angle;\r\n this._previousVertexData[previousArrayOffset + 4] = spriteHistory?.previousWidth ?? sprite.width;\r\n this._previousVertexData[previousArrayOffset + 5] = spriteHistory?.previousHeight ?? sprite.height;\r\n }\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n for (const cache of this._drawCaches) {\r\n if (cache) {\r\n cache.vertexArrayObject = undefined;\r\n }\r\n }\r\n }\r\n\r\n for (const cache of this._drawCaches) {\r\n if (cache?.usesVelocity) {\r\n cache.cameraHistories = new WeakMap<object, SpriteRendererCameraHistory>();\r\n }\r\n }\r\n\r\n this._buffer._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n\r\n this._spriteBuffer?._rebuild();\r\n this._previousBuffer?._rebuild();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._engine._onReleaseRenderPassObservable?.remove(this._renderPassObserver);\r\n this._renderPassObserver = null;\r\n this._disposeDrawCaches();\r\n\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAOvD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,+BAA+B,EAAuC,MAAM,+CAA+C,CAAC;AAErI,OAAO,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AA4DpE;;;;GAIG;AACH,MAAM,OAAO,cAAc;IA2CvB;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAID;;;;OAIG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC;QAE3F,IAAI,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;QACnH,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,sBAAsB,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAID;;;OAGG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY,CAAC,KAAc;QAClC,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAKD;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IA4BD;;;;;;;OAOG;IACH,YAAY,MAAsB,EAAE,QAAgB,EAAE,UAAkB,IAAI,EAAE,QAAyB,IAAI,EAAE,eAAuC;QAlIpJ;;;;WAIG;QACI,cAAS,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C;;;WAGG;QACI,mBAAc,GAAG,IAAI,CAAC;QAE7B;;;;WAIG;QACI,sBAAiB,GAAY,KAAK,CAAC;QAElC,gBAAW,GAAG,IAAI,CAAC;QA+CnB,kBAAa,GAAG,KAAK,CAAC;QAmB9B,2CAA2C;QACjC,oBAAe,+BAAuB;QAU/B,YAAO,GAAY,KAAK,CAAC;QACzB,mBAAc,GAAY,KAAK,CAAC;QASzC,mBAAc,GAAoC,EAAE,CAAC;QACrD,wBAAmB,GAA2B,IAAI,CAAC;QACnD,oBAAe,GAAqB,IAAI,CAAC;QACzC,+BAA0B,GAA8C,IAAI,CAAC;QAO7E,gBAAW,GAA+C,EAAE,CAAC;QAC7D,uBAAkB,GAAqB,IAAI,CAAC;QAC5C,gBAAW,GAAG,KAAK,CAAC;QACpB,wBAAmB,GAA+B,IAAI,CAAC;QAsEvD,mBAAc,GAAG,KAAK,CAAC;QA3D3B,IAAI,CAAC,aAAa,GAAG,eAAe,EAAE,YAAY,IAAI,KAAK,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC;QACvF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM;QACN,wKAAwK;QACxK,0BAA0B;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9G,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAqB,CAAC;QAE1B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC;gBAChC,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ;gBACb,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ;gBACb,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,CAAC,GAAG,IAAI,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7G,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACnH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACzH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEnI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QAC3D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAErD,mEAAmE;QACnE,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAIO,KAAK,CAAC,sBAAsB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,8BAAsB,CAAC;YAE3C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;QAC5G,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC;QAC/H,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAChF,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,eAAe,CAAC;QAClD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,gBAAgB,CAAC;IACxD,CAAC;IAEO,aAAa,CAAC,YAAoB;;QACtC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7G,MAAM,qBAAqB,GAAG,+BAA+B,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7F,MAAM,eAAe,GAAG,qBAAqB,EAAE,QAAQ,CAAC;QACxD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAE3C,IAAI,KAAK,EAAE,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,eAAe,IAAI,KAAK,CAAC,qBAAqB,KAAK,qBAAqB,EAAE,CAAC;YACzI,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,qBAAqB,GAAG,+BAA+B,CAAC,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3G,MAAM,QAAQ,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7H,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QAC/C,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrJ,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,MAAM,UAAU,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACpH,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAExC,IAAI,YAAY,EAAE,CAAC;YACf,aAAa,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnD,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,QAAQ,GAAG;YACb,MAAM;YACN,YAAY;YACZ,cAAc;YACd,WAAW;YACX,WAAW;YACX,WAAW;YACX,0BAA0B;YAC1B,SAAS;YACT,YAAY;YACZ,kBAAkB;YAClB,cAAc;YACd,oBAAoB;YACpB,UAAU;YACV,cAAc;YACd,0BAA0B;SAC7B,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE9D,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;YAC9B,eAAe,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACpE,CAAC;QACD,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC;YAC/B,gBAAgB,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACrE,CAAC;QAED,MAAM,aAAa,GAA2B;YAC1C,UAAU;YACV,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE;YAC9C,WAAW,EAAE,qBAAqB;YAClC,cAAc,EAAE,IAAI,CAAC,eAAe;SACvC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjF,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,eAAe,CAAC,OAAO,GAAG,aAAa,CAAC;QACxC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;QACzC,gBAAgB,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;QAEnE,KAAK,GAAG;YACJ,eAAe;YACf,gBAAgB;YAChB,OAAO,EAAE,aAAa;YACtB,eAAe;YACf,qBAAqB;YACrB,UAAU;YACV,aAAa;YACb,qBAAqB;YACrB,YAAY;YACZ,YAAY;YACZ,gBAAgB;YAChB,eAAe,EAAE,qBAAqB,EAAE,OAAO,CAAC,sBAAsB,KAAK,SAAS,IAAI,qBAAqB,EAAE,OAAO,CAAC,0BAA0B,KAAK,SAAS;YAC/J,WAAW,EAAE,qBAAqB,EAAE,OAAO,CAAC,oBAAoB,KAAK,SAAS,IAAI,qBAAqB,EAAE,OAAO,CAAC,0BAA0B,KAAK,SAAS;YACzJ,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,CAAC,mCAAmC,KAAK,SAAS;YACrG,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,EAAuC,CAAC,CAAC,CAAC,SAAS;SACjG,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;QACvC,IAAI,YAAY,KAAK,SAAS,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1E,IAAI,CAAC,mBAAmB,GAAG,OAAC,IAAI,CAAC,OAAO,EAAC,8BAA8B,QAA9B,8BAA8B,GAAK,IAAI,UAAU,EAAU,EAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC7G,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,aAAa,EAAE,CAAC;oBAChB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,oCAAoC,EAAE,CAAC;gBAChD,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,oCAAoC,EAAE,CAAC;QAE5C,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,2BAA2B;QAC/B,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,0BAA0B,CAAC;QAC3C,CAAC;QAED,MAAM,wBAAwB,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,GAAG,wBAAwB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvH,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAC1G,IAAI,CAAC,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7D,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACvK,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAErK,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAEO,iBAAiB,CAAC,KAA8B;QACpD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,OAAsB,CAAC,wBAAwB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAChC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAEO,kBAAkB;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACxC,CAAC;IAEO,oCAAoC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;gBACtB,OAAO;YACX,CAAC;QACL,CAAC;QACD,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACxC,CAAC;IAEO,4BAA4B;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QAC3C,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,KAA8B,EAAE,MAAc;QACrE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,KAAK,CAAC,iBAAiB,GAAI,IAAI,CAAC,OAAsB,CAAC,uBAAuB,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACnI,CAAC;YACA,IAAI,CAAC,OAAsB,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,KAA8B,EAAE,UAAuB,EAAE,gBAA6B,EAAE,OAAe;QAC7H,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,UAAU,CAAW,CAAC;QACtE,IAAI,OAAO,GAAG,KAAK,CAAC,eAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,GAAG;gBACN,YAAY,EAAE,WAAW,CAAC,KAAK,EAAE;gBACjC,kBAAkB,EAAE,iBAAiB,CAAC,KAAK,EAAE;gBAC7C,WAAW;gBACX,iBAAiB;gBACjB,OAAO,EAAE,IAAI,OAAO,EAA2C;gBAC/D,OAAO;aACV,CAAC;YACF,KAAK,CAAC,eAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACnD,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;oBACrE,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBACjF,OAAO,CAAC,OAAO,GAAG,IAAI,OAAO,EAA2C,CAAC;gBAC7E,CAAC;gBACD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACpE,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,OAAoC,EAAE,MAAkB,EAAE,OAAe;QACnG,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACrD,IAAI,aAAa,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC;YACjD,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC;YACjD,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC;YACjD,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;YACzD,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC;YACzD,aAAa,CAAC,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC;YAC3D,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,CAAC;QACD,OAAO,aAAa,IAAI,IAAI,CAAC;IACjC,CAAC;IAEO,oBAAoB,CACxB,OAAoC,EACpC,MAAkB,EAClB,aAAoD,EACpD,oBAA6B,EAC7B,OAAe;QAEf,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;gBACxB,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,aAAa,EAAE,MAAM,CAAC,KAAK;gBAC3B,aAAa,EAAE,MAAM,CAAC,KAAK;gBAC3B,cAAc,EAAE,MAAM,CAAC,MAAM;gBAC7B,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;gBACX,YAAY,EAAE,MAAM,CAAC,KAAK;gBAC1B,YAAY,EAAE,MAAM,CAAC,KAAK;gBAC1B,aAAa,EAAE,MAAM,CAAC,MAAM;gBAC5B,OAAO;aACV,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,IAAI,aAAa,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACpC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;YAC1C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;YAC1C,aAAa,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;QAChD,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,MAAkB,EAAE,SAAiB;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC7I,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC,iBAAiB,KAAK,OAAO,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpH,MAAM,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACnC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CACT,OAAqB,EACrB,SAAiB,EACjB,UAAuB,EACvB,gBAA6B,EAC7B,qBAA8E,IAAI;QAElF,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtF,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC;QACnH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC;QAC9C,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;QAE9G,MAAM,MAAM,GAAG,WAAW,CAAC,MAAO,CAAC;QAEnC,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;QAC5D,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAC5C,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAErH,UAAU;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,IAAI,OAAO,CAAC,YAAY,CAAC;QACvF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC/B,SAAS;YACb,CAAC;YAED,QAAQ,GAAG,KAAK,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,qFAAqF;YAClI,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;YACxJ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;gBACxJ,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;gBACxJ,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;YAC5J,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;YACnG,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,eAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAE3D,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpF,SAAS;QACT,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAEjD,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAClC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,KAAvB,IAAI,CAAC,kBAAkB,GAAK,MAAM,CAAC,QAAQ,EAAE,EAAC;gBAC9C,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC7G,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;gBACzC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC7D,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QAED,aAAa;QACb,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAE1B,MAAM;YACN,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7F,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,aAAa;QACb,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE3C,aAAa;QACb,MAAM,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAClC,+BAA+B,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC;YACD,IAAI,+BAA+B,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC5E,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClF,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtF,CAAC;YACL,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,+BAA+B,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QAED,uBAAuB;QACvB,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACxG,CAAC;QAED,MAAM,CAAC,wBAAwB,EAAE,CAAC;IACtC,CAAC;IAEO,mBAAmB,CACvB,KAAa,EACb,MAAkB,EAClB,OAAe,EACf,OAAe,EACf,QAAe,EACf,oBAA6B,EAC7B,kBAA2E,EAC3E,oBAA6B,EAC7B,aAAoD,EACpD,YAAqB;QAErB,IAAI,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEjD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACrB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAChD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5F,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACjD,UAAU;QACV,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,WAAW,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,oCAAoC;QACpC,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAErE,QAAQ;QACR,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAEpD,IAAI,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3C,MAAM,mBAAmB,GAAG,KAAK,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,aAAa,EAAE,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;YACvH,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;YAC3H,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;YAC3H,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC;YACjG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC;YACjG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC;QACvG,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,KAAK,EAAE,CAAC;oBACR,KAAK,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACxC,CAAC;YACL,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;gBACtB,KAAK,CAAC,eAAe,GAAG,IAAI,OAAO,EAAuC,CAAC;YAC/E,CAAC;YACD,mIAAmI;YACnI,KAAK,EAAE,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1D,KAAK,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED,uJAAuJ;QACvJ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,aAAc,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,YAAa,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;;AAn4BD;;;GAGG;AACW,wBAAS,GAAG,KAAK,AAAR,CAAS","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type IMatrixLike } from \"../Maths/math.like\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { type ThinSprite } from \"./thinSprite\";\r\nimport { type ISize } from \"../Maths/math.size\";\r\n\r\nimport { type ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector.pure\";\r\nimport { MaterialHelperGeometryRendering, type GeometryRenderingConfiguration } from \"../Materials/materialHelper.geometryrendering\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect\";\r\nimport { Observable, type Observer } from \"../Misc/observable.pure\";\r\n\r\ntype SpriteRendererSpriteHistory = {\r\n previousX: number;\r\n previousY: number;\r\n previousZ: number;\r\n previousAngle: number;\r\n previousWidth: number;\r\n previousHeight: number;\r\n currentX: number;\r\n currentY: number;\r\n currentZ: number;\r\n currentAngle: number;\r\n currentWidth: number;\r\n currentHeight: number;\r\n frameId: number;\r\n};\r\n\r\ntype SpriteRendererCameraHistory = {\r\n previousView: Matrix;\r\n previousProjection: Matrix;\r\n currentView: Matrix;\r\n currentProjection: Matrix;\r\n sprites: WeakMap<ThinSprite, SpriteRendererSpriteHistory>;\r\n frameId: number;\r\n};\r\n\r\ntype SpriteRendererDrawCache = {\r\n drawWrapperBase: DrawWrapper;\r\n drawWrapperDepth: DrawWrapper;\r\n defines: string;\r\n geometryDefines?: string;\r\n geometryConfiguration?: GeometryRenderingConfiguration;\r\n variantKey: number;\r\n vertexBuffers: { [key: string]: VertexBuffer };\r\n vertexArrayObject?: WebGLVertexArrayObject;\r\n usesGeometryRendering: boolean;\r\n usesVelocity: boolean;\r\n usesObjectId: boolean;\r\n usesMeshBlendTag: boolean;\r\n usesInverseView: boolean;\r\n usesNormals: boolean;\r\n usesNormalizedDepth: boolean;\r\n cameraHistories?: WeakMap<object, SpriteRendererCameraHistory>;\r\n};\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _previousVertexData: Nullable<Float32Array> = null;\r\n private _previousBuffer: Nullable<Buffer> = null;\r\n private _vertexBuffersWithPrevious: Nullable<{ [key: string]: VertexBuffer }> = null;\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _drawCaches: Array<SpriteRendererDrawCache | undefined> = [];\r\n private _inverseViewMatrix: Nullable<Matrix> = null;\r\n private _isDisposed = false;\r\n private _renderPassObserver: Nullable<Observer<number>> = null;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Checks whether the texture and shader variant for the current render pass are ready.\r\n * This prepares the effect without updating or drawing any sprites.\r\n * @returns true when the renderer can draw sprites\r\n * @see https://playground.babylonjs.com/#PVK3RV#2\r\n */\r\n public isReady(): boolean {\r\n if (this._isDisposed || !this._shadersLoaded || !this.texture?.isReady()) {\r\n return false;\r\n }\r\n const renderPassId = this._engine._features.supportRenderPasses ? this._engine.currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n return !!this._getDrawCache(renderPassId).drawWrapperBase.effect?.isReady();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._disposeDrawCaches();\r\n\r\n const mainCache = this._getDrawCache(Constants.RENDERPASS_MAIN);\r\n this._drawWrapperBase = mainCache.drawWrapperBase;\r\n this._drawWrapperDepth = mainCache.drawWrapperDepth;\r\n }\r\n\r\n private _getDrawCache(renderPassId: number): SpriteRendererDrawCache {\r\n const fogEnabled = !!(this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled);\r\n const variantKey = (this._pixelPerfect ? 1 : 0) | (fogEnabled ? 2 : 0) | (this._useLogarithmicDepth ? 4 : 0);\r\n const geometryConfiguration = MaterialHelperGeometryRendering.GetConfiguration(renderPassId);\r\n const geometryDefines = geometryConfiguration?._defines;\r\n let cache = this._drawCaches[renderPassId];\r\n\r\n if (cache?.variantKey === variantKey && cache.geometryDefines === geometryDefines && cache.geometryConfiguration === geometryConfiguration) {\r\n return cache;\r\n }\r\n\r\n const defines: string[] = [];\r\n\r\n if (this._pixelPerfect) {\r\n defines.push(\"#define PIXEL_PERFECT\");\r\n }\r\n if (fogEnabled) {\r\n defines.push(\"#define FOG\");\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines.push(\"#define LOGARITHMICDEPTH\");\r\n }\r\n\r\n const usesGeometryRendering = MaterialHelperGeometryRendering._PrepareStringDefines(renderPassId, defines);\r\n const mrtCount = usesGeometryRendering ? (MaterialHelperGeometryRendering.GetConfiguration(renderPassId)._mrtCount ?? 0) : 0;\r\n if (!usesGeometryRendering) {\r\n defines.push(\"#define SCENE_MRT_COUNT 0\");\r\n }\r\n const joinedDefines = defines.join(\"\\n\");\r\n\r\n if (cache) {\r\n this._disposeDrawCache(cache);\r\n this._drawCaches[renderPassId] = undefined;\r\n }\r\n\r\n const usesVelocity = joinedDefines.indexOf(\"#define PREPASS_VELOCITY\\n\") !== -1 || joinedDefines.indexOf(\"#define PREPASS_VELOCITY_LINEAR\\n\") !== -1;\r\n const usesObjectId = joinedDefines.indexOf(\"#define PREPASS_OBJECT_ID\\n\") !== -1;\r\n const usesMeshBlendTag = joinedDefines.indexOf(\"#define PREPASS_MESH_BLEND_TAG\\n\") !== -1;\r\n const attributes = [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind];\r\n let vertexBuffers = this._vertexBuffers;\r\n\r\n if (usesVelocity) {\r\n vertexBuffers = this._ensurePreviousVertexBuffer();\r\n attributes.push(\"previousPosition\", \"previousOptions\");\r\n }\r\n\r\n const uniforms = [\r\n \"view\",\r\n \"projection\",\r\n \"textureInfos\",\r\n \"alphaTest\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"logarithmicDepthConstant\",\r\n \"invView\",\r\n \"cameraInfo\",\r\n \"spriteNormalSign\",\r\n \"previousView\",\r\n \"previousProjection\",\r\n \"objectId\",\r\n \"meshBlendTag\",\r\n \"geometryZeroAlphaDiscard\",\r\n ];\r\n const drawWrapperBase = new DrawWrapper(this._engine);\r\n const drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (drawWrapperBase.drawContext) {\r\n drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (drawWrapperDepth.drawContext) {\r\n drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n const effectOptions: IEffectCreationOptions = {\r\n attributes,\r\n uniformsNames: uniforms,\r\n samplers: [\"diffuseSampler\"],\r\n defines: joinedDefines,\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { SCENE_MRT_COUNT: mrtCount },\r\n multiTarget: usesGeometryRendering,\r\n shaderLanguage: this._shaderLanguage,\r\n };\r\n const effect = this._engine.createEffect(\"sprites\", effectOptions, this._engine);\r\n\r\n drawWrapperBase.effect = effect;\r\n drawWrapperBase.defines = joinedDefines;\r\n drawWrapperDepth.effect = effect;\r\n effect._refCount++;\r\n drawWrapperDepth.defines = joinedDefines;\r\n drawWrapperDepth.materialContext = drawWrapperBase.materialContext;\r\n\r\n cache = {\r\n drawWrapperBase,\r\n drawWrapperDepth,\r\n defines: joinedDefines,\r\n geometryDefines,\r\n geometryConfiguration,\r\n variantKey,\r\n vertexBuffers,\r\n usesGeometryRendering,\r\n usesVelocity,\r\n usesObjectId,\r\n usesMeshBlendTag,\r\n usesInverseView: geometryConfiguration?.defines.PREPASS_POSITION_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,\r\n usesNormals: geometryConfiguration?.defines.PREPASS_NORMAL_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,\r\n usesNormalizedDepth: geometryConfiguration?.defines.PREPASS_NORMALIZED_VIEW_DEPTH_INDEX !== undefined,\r\n cameraHistories: usesVelocity ? new WeakMap<object, SpriteRendererCameraHistory>() : undefined,\r\n };\r\n this._drawCaches[renderPassId] = cache;\r\n if (renderPassId !== Constants.RENDERPASS_MAIN && !this._renderPassObserver) {\r\n this._renderPassObserver = (this._engine._onReleaseRenderPassObservable ??= new Observable<number>()).add((id) => {\r\n const releasedCache = this._drawCaches[id];\r\n if (releasedCache) {\r\n this._disposeDrawCache(releasedCache);\r\n delete this._drawCaches[id];\r\n this._disposePreviousVertexBufferIfUnused();\r\n }\r\n });\r\n }\r\n this._disposePreviousVertexBufferIfUnused();\r\n\r\n return cache;\r\n }\r\n\r\n private _ensurePreviousVertexBuffer(): { [key: string]: VertexBuffer } {\r\n if (this._vertexBuffersWithPrevious) {\r\n return this._vertexBuffersWithPrevious;\r\n }\r\n\r\n const previousVertexBufferSize = 6;\r\n this._previousVertexData = new Float32Array(this._capacity * previousVertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._previousBuffer = new Buffer(this._engine, this._previousVertexData, true, previousVertexBufferSize);\r\n this._vertexBuffersWithPrevious = { ...this._vertexBuffers };\r\n this._vertexBuffersWithPrevious[\"previousPosition\"] = this._previousBuffer.createVertexBuffer(\"previousPosition\", 0, 4, previousVertexBufferSize, this._useInstancing);\r\n this._vertexBuffersWithPrevious[\"previousOptions\"] = this._previousBuffer.createVertexBuffer(\"previousOptions\", 4, 2, previousVertexBufferSize, this._useInstancing);\r\n\r\n return this._vertexBuffersWithPrevious;\r\n }\r\n\r\n private _disposeDrawCache(cache: SpriteRendererDrawCache): void {\r\n if (cache.vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(cache.vertexArrayObject);\r\n }\r\n cache.drawWrapperBase.dispose();\r\n cache.drawWrapperDepth.dispose();\r\n }\r\n\r\n private _disposeDrawCaches(): void {\r\n for (const cache of this._drawCaches) {\r\n if (cache) {\r\n this._disposeDrawCache(cache);\r\n }\r\n }\r\n this._drawCaches = [];\r\n this._disposePreviousVertexBuffer();\r\n }\r\n\r\n private _disposePreviousVertexBufferIfUnused(): void {\r\n for (const cache of this._drawCaches) {\r\n if (cache?.usesVelocity) {\r\n return;\r\n }\r\n }\r\n this._disposePreviousVertexBuffer();\r\n }\r\n\r\n private _disposePreviousVertexBuffer(): void {\r\n if (this._previousBuffer) {\r\n this._previousBuffer.dispose();\r\n this._previousBuffer = null;\r\n this._previousVertexData = null;\r\n this._vertexBuffersWithPrevious = null;\r\n }\r\n }\r\n\r\n private _bindVertexBuffers(cache: SpriteRendererDrawCache, effect: Effect): void {\r\n if (this._useVAO) {\r\n if (!cache.vertexArrayObject) {\r\n cache.vertexArrayObject = (this._engine as ThinEngine).recordVertexArrayObject(cache.vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (this._engine as ThinEngine).bindVertexArrayObject(cache.vertexArrayObject, this._indexBuffer);\r\n } else {\r\n this._engine.bindBuffers(cache.vertexBuffers, this._indexBuffer, effect);\r\n }\r\n }\r\n\r\n private _getCameraHistory(cache: SpriteRendererDrawCache, viewMatrix: IMatrixLike, projectionMatrix: IMatrixLike, frameId: number): SpriteRendererCameraHistory {\r\n const cameraKey = (this._scene?.activeCamera ?? viewMatrix) as object;\r\n let history = cache.cameraHistories!.get(cameraKey);\r\n\r\n if (!history) {\r\n const currentView = Matrix.FromArray(viewMatrix.asArray());\r\n const currentProjection = Matrix.FromArray(projectionMatrix.asArray());\r\n history = {\r\n previousView: currentView.clone(),\r\n previousProjection: currentProjection.clone(),\r\n currentView,\r\n currentProjection,\r\n sprites: new WeakMap<ThinSprite, SpriteRendererSpriteHistory>(),\r\n frameId,\r\n };\r\n cache.cameraHistories!.set(cameraKey, history);\r\n } else {\r\n if (history.frameId !== frameId) {\r\n if (history.frameId === frameId - 1) {\r\n history.previousView.copyFrom(history.currentView);\r\n history.previousProjection.copyFrom(history.currentProjection);\r\n } else {\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.previousView);\r\n Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.previousProjection);\r\n history.sprites = new WeakMap<ThinSprite, SpriteRendererSpriteHistory>();\r\n }\r\n history.frameId = frameId;\r\n }\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.currentView);\r\n Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.currentProjection);\r\n }\r\n\r\n return history;\r\n }\r\n\r\n private _prepareSpriteHistory(history: SpriteRendererCameraHistory, sprite: ThinSprite, frameId: number): Nullable<SpriteRendererSpriteHistory> {\r\n const spriteHistory = history.sprites.get(sprite);\r\n if (spriteHistory && spriteHistory.frameId !== frameId) {\r\n if (spriteHistory.frameId !== frameId - 1) {\r\n history.sprites.delete(sprite);\r\n return null;\r\n }\r\n spriteHistory.previousX = spriteHistory.currentX;\r\n spriteHistory.previousY = spriteHistory.currentY;\r\n spriteHistory.previousZ = spriteHistory.currentZ;\r\n spriteHistory.previousAngle = spriteHistory.currentAngle;\r\n spriteHistory.previousWidth = spriteHistory.currentWidth;\r\n spriteHistory.previousHeight = spriteHistory.currentHeight;\r\n spriteHistory.frameId = frameId;\r\n }\r\n return spriteHistory ?? null;\r\n }\r\n\r\n private _updateSpriteHistory(\r\n history: SpriteRendererCameraHistory,\r\n sprite: ThinSprite,\r\n spriteHistory: Nullable<SpriteRendererSpriteHistory>,\r\n floatingOriginOffset: Vector3,\r\n frameId: number\r\n ): void {\r\n const x = sprite.position.x - floatingOriginOffset.x;\r\n const y = sprite.position.y - floatingOriginOffset.y;\r\n const z = sprite.position.z - floatingOriginOffset.z;\r\n\r\n if (!spriteHistory) {\r\n history.sprites.set(sprite, {\r\n previousX: x,\r\n previousY: y,\r\n previousZ: z,\r\n previousAngle: sprite.angle,\r\n previousWidth: sprite.width,\r\n previousHeight: sprite.height,\r\n currentX: x,\r\n currentY: y,\r\n currentZ: z,\r\n currentAngle: sprite.angle,\r\n currentWidth: sprite.width,\r\n currentHeight: sprite.height,\r\n frameId,\r\n });\r\n return;\r\n }\r\n\r\n if (spriteHistory.frameId === frameId) {\r\n spriteHistory.currentX = x;\r\n spriteHistory.currentY = y;\r\n spriteHistory.currentZ = z;\r\n spriteHistory.currentAngle = sprite.angle;\r\n spriteHistory.currentWidth = sprite.width;\r\n spriteHistory.currentHeight = sprite.height;\r\n }\r\n }\r\n\r\n private _animateSprite(sprite: ThinSprite, deltaTime: number): void {\r\n if (!this._scene) {\r\n sprite._animate(deltaTime);\r\n return;\r\n }\r\n\r\n const frameId = this._scene.getFrameId();\r\n const frameGraphRendering = !!this._scene.frameGraph || !!MaterialHelperGeometryRendering.GetConfiguration(this._engine.currentRenderPassId);\r\n if (!frameGraphRendering || sprite._animationFrameId !== frameId || sprite._animationSceneId !== this._scene.uniqueId) {\r\n sprite._animationFrameId = frameId;\r\n sprite._animationSceneId = this._scene.uniqueId;\r\n sprite._animate(deltaTime);\r\n }\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const renderPassId = engine._features.supportRenderPasses ? engine.currentRenderPassId : Constants.RENDERPASS_MAIN;\r\n const drawCache = this._getDrawCache(renderPassId);\r\n const drawWrapper = drawCache.drawWrapperBase;\r\n const drawWrapperDepth = drawCache.drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n const frameId = this._scene?.getFrameId() ?? engine.frameId;\r\n const usesVelocity = drawCache.usesVelocity;\r\n const cameraHistory = usesVelocity ? this._getCameraHistory(drawCache, viewMatrix, projectionMatrix, frameId) : null;\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n const floatingOriginOffset = this._scene?.floatingOriginOffset || Vector3.ZeroReadOnly;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n this._animateSprite(sprite, deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n const spriteHistory = cameraHistory ? this._prepareSpriteHistory(cameraHistory, sprite, frameId) : null;\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);\r\n }\r\n\r\n if (cameraHistory) {\r\n this._updateSpriteHistory(cameraHistory, sprite, spriteHistory, floatingOriginOffset, frameId);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n if (usesVelocity) {\r\n this._previousBuffer!.update(this._previousVertexData!);\r\n }\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n if (drawCache.usesGeometryRendering) {\r\n if (drawCache.usesInverseView) {\r\n this._inverseViewMatrix ??= Matrix.Identity();\r\n Matrix.FromArrayToRef(viewMatrix.asArray(), 0, this._inverseViewMatrix).invertToRef(this._inverseViewMatrix);\r\n effect.setMatrix(\"invView\", this._inverseViewMatrix);\r\n }\r\n if (drawCache.usesNormals) {\r\n effect.setFloat(\"spriteNormalSign\", useRightHandedSystem ? 1 : -1);\r\n }\r\n if (drawCache.usesNormalizedDepth) {\r\n const camera = this._scene?.activeCamera;\r\n effect.setFloat2(\"cameraInfo\", camera?.minZ ?? 0, camera?.maxZ ?? 1);\r\n }\r\n\r\n if (drawCache.usesObjectId) {\r\n effect.setFloat(\"objectId\", 0);\r\n }\r\n if (drawCache.usesMeshBlendTag) {\r\n effect.setInt(\"meshBlendTag\", 0);\r\n }\r\n if (cameraHistory) {\r\n effect.setMatrix(\"previousView\", cameraHistory.previousView);\r\n effect.setMatrix(\"previousProjection\", cameraHistory.previousProjection);\r\n }\r\n }\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n this._bindVertexBuffers(drawCache, effect);\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (drawCache.usesGeometryRendering) {\r\n MaterialHelperGeometryRendering._BindZeroAlphaDiscard(engine, effect);\r\n }\r\n try {\r\n if (MaterialHelperGeometryRendering._BindAttachmentsForEffect(engine, effect)) {\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n }\r\n } finally {\r\n MaterialHelperGeometryRendering._RestoreAttachments(engine);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>,\r\n floatingOriginOffset: Vector3,\r\n spriteHistory: Nullable<SpriteRendererSpriteHistory>,\r\n writeHistory: boolean\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x - floatingOriginOffset.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y - floatingOriginOffset.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z - floatingOriginOffset.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n\r\n if (writeHistory && this._previousVertexData) {\r\n const previousArrayOffset = index * 6;\r\n this._previousVertexData[previousArrayOffset] = spriteHistory?.previousX ?? sprite.position.x - floatingOriginOffset.x;\r\n this._previousVertexData[previousArrayOffset + 1] = spriteHistory?.previousY ?? sprite.position.y - floatingOriginOffset.y;\r\n this._previousVertexData[previousArrayOffset + 2] = spriteHistory?.previousZ ?? sprite.position.z - floatingOriginOffset.z;\r\n this._previousVertexData[previousArrayOffset + 3] = spriteHistory?.previousAngle ?? sprite.angle;\r\n this._previousVertexData[previousArrayOffset + 4] = spriteHistory?.previousWidth ?? sprite.width;\r\n this._previousVertexData[previousArrayOffset + 5] = spriteHistory?.previousHeight ?? sprite.height;\r\n }\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n for (const cache of this._drawCaches) {\r\n if (cache) {\r\n cache.vertexArrayObject = undefined;\r\n }\r\n }\r\n }\r\n\r\n for (const cache of this._drawCaches) {\r\n if (cache?.usesVelocity) {\r\n cache.cameraHistories = new WeakMap<object, SpriteRendererCameraHistory>();\r\n }\r\n // The draw contexts can still hold resources of the lost device (in WebGPU, the indirect draw buffer used for the instanced draws)\r\n cache?.drawWrapperBase._recreateDrawContext(this._engine);\r\n cache?.drawWrapperDepth._recreateDrawContext(this._engine);\r\n }\r\n\r\n // Rebuild each backing buffer once: the vertex buffers are views of _buffer and _spriteBuffer, and VertexBuffer._rebuild() rebuilds its backing buffer\r\n const buffers = new Set<Buffer>([this._buffer]);\r\n for (const key in this._vertexBuffers) {\r\n buffers.add(this._vertexBuffers[key].getWrapperBuffer());\r\n }\r\n if (this._spriteBuffer) {\r\n buffers.add(this._spriteBuffer);\r\n }\r\n if (this._previousBuffer) {\r\n buffers.add(this._previousBuffer);\r\n }\r\n\r\n for (const buffer of buffers) {\r\n buffer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n this._engine._onReleaseRenderPassObservable?.remove(this._renderPassObserver);\r\n this._renderPassObserver = null;\r\n this._disposeDrawCaches();\r\n\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/scene.pure.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type Nullable } from "./types.js";
|
|
|
3
3
|
import { type IAnimatable } from "./Animations/animatable.interface.js";
|
|
4
4
|
import { Observable } from "./Misc/observable.pure.js";
|
|
5
5
|
import { type ISmartArrayLike, SmartArrayNoDuplicate, SmartArray } from "./Misc/smartArray.js";
|
|
6
|
-
import {
|
|
6
|
+
import { Vector2, Vector3, Vector4, Matrix } from "./Maths/math.vector.pure.js";
|
|
7
7
|
import { type IParticleSystem } from "./Particles/IParticleSystem.js";
|
|
8
8
|
import { ImageProcessingConfiguration } from "./Materials/imageProcessingConfiguration.pure.js";
|
|
9
9
|
import { UniformBuffer } from "./Materials/uniformBuffer.js";
|
|
@@ -37,6 +37,7 @@ import { type PerformanceViewerCollector } from "./Misc/PerformanceViewer/perfor
|
|
|
37
37
|
import { type MorphTarget } from "./Morph/morphTarget.js";
|
|
38
38
|
import { type MorphTargetManager } from "./Morph/morphTargetManager.js";
|
|
39
39
|
import { type PostProcess } from "./PostProcesses/postProcess.pure.js";
|
|
40
|
+
import { type TAAMaterialManager } from "./PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js";
|
|
40
41
|
import { type Material } from "./Materials/material.pure.js";
|
|
41
42
|
import { type BaseTexture } from "./Materials/Textures/baseTexture.pure.js";
|
|
42
43
|
import { type Geometry } from "./Meshes/geometry.js";
|
|
@@ -861,6 +862,27 @@ export declare class Scene implements IAnimatable, IClipPlanesHolder, IAssetCont
|
|
|
861
862
|
* @returns the scene UniformBuffer
|
|
862
863
|
*/
|
|
863
864
|
finalizeSceneUbo(): UniformBuffer;
|
|
865
|
+
/** @internal The pass the scene UBO is finalized for: cameras keep a view history per pass (object renderers set theirs) */
|
|
866
|
+
_viewPassId: number;
|
|
867
|
+
/** @internal True during readiness checks: the view histories are read, not advanced */
|
|
868
|
+
_viewHistoryIsReadOnly: boolean;
|
|
869
|
+
/** @internal The TAA material manager of the scene's materials (the last one created): WGSL materials get its jitter from the scene UBO */
|
|
870
|
+
_taaMaterialManager: Nullable<TAAMaterialManager>;
|
|
871
|
+
/**
|
|
872
|
+
* Gets the camera's view-projection of the previous frame in the current pass, advancing the history on its first use in a frame.
|
|
873
|
+
* It starts again when the camera did not render in that pass in the previous frame.
|
|
874
|
+
* @param camera the camera whose view is being rendered
|
|
875
|
+
* @returns the previous view-projection
|
|
876
|
+
*/
|
|
877
|
+
private _getPreviousViewProjection;
|
|
878
|
+
/**
|
|
879
|
+
* Gets the TAA jitter of a camera's view, from the scene's TAA material manager. A TAA post-process computes it for each of its cameras, and
|
|
880
|
+
* the views of that camera (each eye of a rig) get it. With the prepass, it computes it after the draws of its frame: the jitter applies until
|
|
881
|
+
* the end of the next frame. The jitter of a manager used on its own applies to every camera's view.
|
|
882
|
+
* @param camera the camera whose view is being rendered
|
|
883
|
+
* @returns the jitter, in clip space
|
|
884
|
+
*/
|
|
885
|
+
private _getTaaJitter;
|
|
864
886
|
/** @internal */
|
|
865
887
|
_mirroredCameraPosition: Nullable<Vector3>;
|
|
866
888
|
/**
|
package/scene.pure.js
CHANGED
|
@@ -7,7 +7,7 @@ import { Observable } from "./Misc/observable.pure.js";
|
|
|
7
7
|
import { SmartArrayNoDuplicate, SmartArray } from "./Misc/smartArray.js";
|
|
8
8
|
import { StringDictionary } from "./Misc/stringDictionary.js";
|
|
9
9
|
import { Tags } from "./Misc/tags.js";
|
|
10
|
-
import { Vector3, Vector4, Matrix } from "./Maths/math.vector.pure.js";
|
|
10
|
+
import { Vector2, Vector3, Vector4, Matrix } from "./Maths/math.vector.pure.js";
|
|
11
11
|
import { ImageProcessingConfiguration } from "./Materials/imageProcessingConfiguration.pure.js";
|
|
12
12
|
import { UniformBuffer } from "./Materials/uniformBuffer.js";
|
|
13
13
|
import { PickingInfo } from "./Collisions/pickingInfo.js";
|
|
@@ -422,9 +422,80 @@ export class Scene {
|
|
|
422
422
|
const eyePosition = this.bindEyePosition(null);
|
|
423
423
|
const offset = this.floatingOriginOffset;
|
|
424
424
|
ubo.updateFloat4("vEyePosition", eyePosition.x - offset.x, eyePosition.y - offset.y, eyePosition.z - offset.z, eyePosition.w);
|
|
425
|
+
// The temporal data of the view, read by WGSL shaders only (WebGPU): the camera's view-projection in the previous frame and the TAA jitter.
|
|
426
|
+
// A pass that does not render the camera's view (shadow map, mirror, probe face) gets no camera motion and no jitter.
|
|
427
|
+
if (this._engine.isWebGPU) {
|
|
428
|
+
const camera = this._activeCamera;
|
|
429
|
+
const cameraView = camera && this._viewMatrix === camera._computedViewMatrix ? camera : null;
|
|
430
|
+
ubo.updateMatrix("previousViewProjection", cameraView ? this._getPreviousViewProjection(cameraView) : this._transformMatrix);
|
|
431
|
+
const jitter = cameraView ? this._getTaaJitter(cameraView) : Vector2.ZeroReadOnly;
|
|
432
|
+
ubo.updateFloat2("taaJitter", jitter.x, jitter.y);
|
|
433
|
+
}
|
|
425
434
|
ubo.update();
|
|
426
435
|
return ubo;
|
|
427
436
|
}
|
|
437
|
+
/**
|
|
438
|
+
* Gets the camera's view-projection of the previous frame in the current pass, advancing the history on its first use in a frame.
|
|
439
|
+
* It starts again when the camera did not render in that pass in the previous frame.
|
|
440
|
+
* @param camera the camera whose view is being rendered
|
|
441
|
+
* @returns the previous view-projection
|
|
442
|
+
*/
|
|
443
|
+
_getPreviousViewProjection(camera) {
|
|
444
|
+
const frameId = this._engine.frameId;
|
|
445
|
+
const transform = this._transformMatrix;
|
|
446
|
+
const histories = camera._viewHistories;
|
|
447
|
+
const history = histories.get(this._viewPassId);
|
|
448
|
+
if (this._viewHistoryIsReadOnly) {
|
|
449
|
+
return history && history.frameId === frameId ? history.previous : transform;
|
|
450
|
+
}
|
|
451
|
+
if (!history) {
|
|
452
|
+
// the first render of the camera in this pass: drop the histories of the passes it stopped rendering in
|
|
453
|
+
histories.forEach((other, passId) => {
|
|
454
|
+
if (other.frameId < frameId - 1) {
|
|
455
|
+
histories.delete(passId);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
const started = { previous: transform.clone(), current: transform.clone(), frameId, seeded: true };
|
|
459
|
+
histories.set(this._viewPassId, started);
|
|
460
|
+
return started.previous;
|
|
461
|
+
}
|
|
462
|
+
if (history.frameId < frameId - 1) {
|
|
463
|
+
// the camera did not render in this pass in the previous frame (a refresh rate, a camera switch): start again, in the same matrices
|
|
464
|
+
history.previous.copyFrom(transform);
|
|
465
|
+
history.current.copyFrom(transform);
|
|
466
|
+
history.frameId = frameId;
|
|
467
|
+
history.seeded = true;
|
|
468
|
+
}
|
|
469
|
+
else if (history.frameId !== frameId) {
|
|
470
|
+
history.previous.copyFrom(history.current);
|
|
471
|
+
history.current.copyFrom(transform);
|
|
472
|
+
history.frameId = frameId;
|
|
473
|
+
history.seeded = false;
|
|
474
|
+
}
|
|
475
|
+
else if (history.current.updateFlag !== transform.updateFlag) {
|
|
476
|
+
// the transform changed within the pass (camera moved, or the target's aspect ratio applied); a history seeded in this
|
|
477
|
+
// frame has no rendered view before it, so both follow the final view
|
|
478
|
+
history.current.copyFrom(transform);
|
|
479
|
+
if (history.seeded) {
|
|
480
|
+
history.previous.copyFrom(transform);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return history.previous;
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Gets the TAA jitter of a camera's view, from the scene's TAA material manager. A TAA post-process computes it for each of its cameras, and
|
|
487
|
+
* the views of that camera (each eye of a rig) get it. With the prepass, it computes it after the draws of its frame: the jitter applies until
|
|
488
|
+
* the end of the next frame. The jitter of a manager used on its own applies to every camera's view.
|
|
489
|
+
* @param camera the camera whose view is being rendered
|
|
490
|
+
* @returns the jitter, in clip space
|
|
491
|
+
*/
|
|
492
|
+
_getTaaJitter(camera) {
|
|
493
|
+
const manager = this._taaMaterialManager;
|
|
494
|
+
if (!manager?.isEnabled) {
|
|
495
|
+
return Vector2.ZeroReadOnly;
|
|
496
|
+
}
|
|
497
|
+
return manager._getCameraJitter(camera, this._engine.frameId);
|
|
498
|
+
}
|
|
428
499
|
/**
|
|
429
500
|
* Gets or sets a boolean indicating if the scene must use right-handed coordinates system
|
|
430
501
|
*/
|
|
@@ -1207,6 +1278,12 @@ export class Scene {
|
|
|
1207
1278
|
* Observable event triggered each time an input event is received from the rendering canvas
|
|
1208
1279
|
*/
|
|
1209
1280
|
this.onPointerObservable = new Observable();
|
|
1281
|
+
/** @internal The pass the scene UBO is finalized for: cameras keep a view history per pass (object renderers set theirs) */
|
|
1282
|
+
this._viewPassId = 0;
|
|
1283
|
+
/** @internal True during readiness checks: the view histories are read, not advanced */
|
|
1284
|
+
this._viewHistoryIsReadOnly = false;
|
|
1285
|
+
/** @internal The TAA material manager of the scene's materials (the last one created): WGSL materials get its jitter from the scene UBO */
|
|
1286
|
+
this._taaMaterialManager = null;
|
|
1210
1287
|
// Keyboard
|
|
1211
1288
|
/**
|
|
1212
1289
|
* This observable event is triggered when any keyboard event si raised and registered during Scene.attachControl()
|
|
@@ -2312,6 +2389,11 @@ export class Scene {
|
|
|
2312
2389
|
sceneUbo.addUniform("projection", 16);
|
|
2313
2390
|
sceneUbo.addUniform("vEyePosition", 4);
|
|
2314
2391
|
sceneUbo.addUniform("inverseProjection", 16);
|
|
2392
|
+
// the temporal data of the view, for WGSL shaders (see finalizeSceneUbo)
|
|
2393
|
+
if (this._engine.isWebGPU) {
|
|
2394
|
+
sceneUbo.addUniform("previousViewProjection", 16);
|
|
2395
|
+
sceneUbo.addUniform("taaJitter", 2);
|
|
2396
|
+
}
|
|
2315
2397
|
return sceneUbo;
|
|
2316
2398
|
}
|
|
2317
2399
|
/**
|