@onerjs/core 8.56.4 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +13 -2
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
- package/Engines/Native/nativeHardwareTexture.js +7 -0
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +56 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +37 -8
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
- package/Engines/Processors/shaderCodeCursor.js +40 -3
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +17 -1
- package/Engines/abstractEngine.pure.js +17 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -1
- package/Engines/engine.pure.js +0 -7
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/nativeEngine.pure.js +1 -1
- package/Engines/nativeEngine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +15 -0
- package/Engines/thinEngine.pure.js +61 -14
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +218 -17
- package/Engines/thinNativeEngine.pure.js +1438 -165
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +16 -2
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +17 -3
- package/Engines/webgpuEngine.pure.js +56 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +6 -1
- package/FlowGraph/flowGraph.js +41 -9
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
- package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
- package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +5 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js +0 -4
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/index.d.ts +2 -0
- package/FlowGraph/index.js +2 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +2 -0
- package/FlowGraph/pure.js +2 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +4 -2
- package/FlowGraph/serialization.js +12 -24
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +9 -1
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +2 -0
- package/FrameGraph/Node/Blocks/index.js +2 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
- package/FrameGraph/Node/Blocks/pure.js +2 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +4 -0
- package/FrameGraph/frameGraph.js +14 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +2 -0
- package/FrameGraph/index.js +2 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +2 -0
- package/FrameGraph/pure.js +2 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/pure.d.ts +4 -0
- package/Materials/GaussianSplatting/pure.js +4 -0
- package/Materials/GaussianSplatting/pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.pure.js +3 -1
- package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/texture.pure.js +1 -1
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/effectRenderer.pure.d.ts +4 -0
- package/Materials/effectRenderer.pure.js +3 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/index.d.ts +5 -0
- package/Materials/index.js +5 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.pure.js +25 -12
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +5 -0
- package/Materials/pure.js +5 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +10 -0
- package/Materials/standardMaterial.pure.js +30 -5
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +3 -0
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/pure.js +2 -0
- package/Meshes/GaussianSplatting/pure.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +30 -0
- package/Meshes/abstractMesh.pure.js +54 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +2 -0
- package/Meshes/index.js +2 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +2 -0
- package/Meshes/pure.js +2 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +11 -2
- package/Meshes/subMesh.pure.js +20 -5
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +1 -0
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/andOrNotEvaluator.js +4 -0
- package/Misc/andOrNotEvaluator.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/minMaxReducer.pure.d.ts +6 -0
- package/Misc/minMaxReducer.pure.js +10 -0
- package/Misc/minMaxReducer.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +19 -2
- package/Misc/thinMinMaxReducer.js +74 -21
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +4 -0
- package/Particles/gpuParticleSystem.pure.js +101 -32
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.js +3 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/solidParticleSystem.js +7 -1
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.function.d.ts +6 -0
- package/Particles/thinParticleSystem.function.js +144 -88
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +8 -0
- package/Particles/thinParticleSystem.pure.js +154 -28
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -4
- package/Physics/v2/ragdoll.js +11 -4
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.d.ts +9 -0
- package/Rendering/depthRenderer.pure.js +15 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +130 -18
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +3 -3
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/minmaxRedux.fragment.js +6 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
- package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPartition.compute.js +27 -0
- package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
- package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
- package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
- package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
- package/ShadersWGSL/gpsResolve.compute.js +41 -0
- package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
- package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanSums.compute.js +30 -0
- package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
- package/ShadersWGSL/gpsSplat.compute.js +37 -0
- package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.pure.js +2 -1
- package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/assetContainer.d.ts +1 -0
- package/assetContainer.js +5 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +36 -2
- package/scene.pure.js +63 -4
- package/scene.pure.js.map +1 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type FrameGraph, type FrameGraphTextureHandle } from "../../../index.js";
|
|
2
|
+
import { DepthTextureType } from "../../../Misc/thinMinMaxReducer.js";
|
|
3
|
+
import { FrameGraphTask } from "../../frameGraphTask.js";
|
|
4
|
+
/**
|
|
5
|
+
* Task which computes the minimum and maximum values in the red channel of a frame graph texture,
|
|
6
|
+
* or in the depth aspect of a WebGPU depth/stencil attachment.
|
|
7
|
+
* Set sourceTexture to a handle from an earlier task (for example, a geometry renderer's geometryNormViewDepthTexture)
|
|
8
|
+
* to reuse its output without rendering another depth map. The reduction is performed on each graph execution.
|
|
9
|
+
*/
|
|
10
|
+
export declare class FrameGraphMinMaxReducerTask extends FrameGraphTask {
|
|
11
|
+
/**
|
|
12
|
+
* The 2D texture to reduce. If generated by a graph task, that task must execute before this one.
|
|
13
|
+
* WebGPU can reduce the depth aspect of a single-sampled depth/stencil attachment; backbuffer depth,
|
|
14
|
+
* stencil-only attachments and integer color formats are not supported.
|
|
15
|
+
*/
|
|
16
|
+
sourceTexture: FrameGraphTextureHandle;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to ignore the clear value of a depth-as-color texture during reduction (default: false).
|
|
19
|
+
* For normalized view or forward screen depth, the clear value is 1; for view depth or reverse screen depth, it is 0.
|
|
20
|
+
* Always enabled for a depth/stencil attachment, which stores screen depth.
|
|
21
|
+
*/
|
|
22
|
+
depthRedux: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The type of depth values stored in the source texture when depthRedux is true (default: normalized view depth).
|
|
25
|
+
*/
|
|
26
|
+
depthTextureType: DepthTextureType;
|
|
27
|
+
/**
|
|
28
|
+
* The type of the intermediate and output textures (default: half float).
|
|
29
|
+
* Supported types are FLOAT, HALF_FLOAT, and UNSIGNED_BYTE.
|
|
30
|
+
*/
|
|
31
|
+
textureType: number;
|
|
32
|
+
/**
|
|
33
|
+
* Wait for WebGPU texture readback before notifying observers (default: false).
|
|
34
|
+
* This delays the notification; it does not block graph execution.
|
|
35
|
+
*/
|
|
36
|
+
get waitForReadback(): boolean;
|
|
37
|
+
set waitForReadback(value: boolean);
|
|
38
|
+
/**
|
|
39
|
+
* The 1x1 RG texture containing the minimum in red and maximum in green.
|
|
40
|
+
*/
|
|
41
|
+
readonly outputTexture: FrameGraphTextureHandle;
|
|
42
|
+
/**
|
|
43
|
+
* Observable triggered after the reduced texture has been read back.
|
|
44
|
+
* With depthRedux enabled, an empty or equal-valued depth range falls back to [0, 1].
|
|
45
|
+
*/
|
|
46
|
+
get onAfterReductionPerformed(): import("../../../index.js").Observable<{
|
|
47
|
+
min: number;
|
|
48
|
+
max: number;
|
|
49
|
+
}>;
|
|
50
|
+
private readonly _reducer;
|
|
51
|
+
private _stepCount;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a min/max reduction task.
|
|
54
|
+
* @param name The name of the task.
|
|
55
|
+
* @param frameGraph The frame graph to add the task to.
|
|
56
|
+
*/
|
|
57
|
+
constructor(name: string, frameGraph: FrameGraph);
|
|
58
|
+
getClassName(): string;
|
|
59
|
+
isReady(): boolean;
|
|
60
|
+
record(): void;
|
|
61
|
+
dispose(): void;
|
|
62
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
|
|
2
|
+
import { ThinMinMaxReducer } from "../../../Misc/thinMinMaxReducer.js";
|
|
3
|
+
import { IsDepthTexture, IsIntegerTextureFormat } from "../../../Materials/Textures/textureHelper.functions.js";
|
|
4
|
+
import { FrameGraphTask } from "../../frameGraphTask.js";
|
|
5
|
+
import { FrameGraphPostProcessTask } from "../PostProcesses/postProcessTask.js";
|
|
6
|
+
/**
|
|
7
|
+
* Task which computes the minimum and maximum values in the red channel of a frame graph texture,
|
|
8
|
+
* or in the depth aspect of a WebGPU depth/stencil attachment.
|
|
9
|
+
* Set sourceTexture to a handle from an earlier task (for example, a geometry renderer's geometryNormViewDepthTexture)
|
|
10
|
+
* to reuse its output without rendering another depth map. The reduction is performed on each graph execution.
|
|
11
|
+
*/
|
|
12
|
+
export class FrameGraphMinMaxReducerTask extends FrameGraphTask {
|
|
13
|
+
/**
|
|
14
|
+
* Wait for WebGPU texture readback before notifying observers (default: false).
|
|
15
|
+
* This delays the notification; it does not block graph execution.
|
|
16
|
+
*/
|
|
17
|
+
get waitForReadback() {
|
|
18
|
+
return this._reducer.waitForReadback;
|
|
19
|
+
}
|
|
20
|
+
set waitForReadback(value) {
|
|
21
|
+
this._reducer.waitForReadback = value;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Observable triggered after the reduced texture has been read back.
|
|
25
|
+
* With depthRedux enabled, an empty or equal-valued depth range falls back to [0, 1].
|
|
26
|
+
*/
|
|
27
|
+
get onAfterReductionPerformed() {
|
|
28
|
+
return this._reducer.onAfterReductionPerformed;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a min/max reduction task.
|
|
32
|
+
* @param name The name of the task.
|
|
33
|
+
* @param frameGraph The frame graph to add the task to.
|
|
34
|
+
*/
|
|
35
|
+
constructor(name, frameGraph) {
|
|
36
|
+
super(name, frameGraph);
|
|
37
|
+
/**
|
|
38
|
+
* Whether to ignore the clear value of a depth-as-color texture during reduction (default: false).
|
|
39
|
+
* For normalized view or forward screen depth, the clear value is 1; for view depth or reverse screen depth, it is 0.
|
|
40
|
+
* Always enabled for a depth/stencil attachment, which stores screen depth.
|
|
41
|
+
*/
|
|
42
|
+
this.depthRedux = false;
|
|
43
|
+
/**
|
|
44
|
+
* The type of depth values stored in the source texture when depthRedux is true (default: normalized view depth).
|
|
45
|
+
*/
|
|
46
|
+
this.depthTextureType = 0 /* DepthTextureType.NormalizedViewDepth */;
|
|
47
|
+
/**
|
|
48
|
+
* The type of the intermediate and output textures (default: half float).
|
|
49
|
+
* Supported types are FLOAT, HALF_FLOAT, and UNSIGNED_BYTE.
|
|
50
|
+
*/
|
|
51
|
+
this.textureType = 2;
|
|
52
|
+
this._stepCount = 0;
|
|
53
|
+
this._reducer = new ThinMinMaxReducer(frameGraph.scene, false);
|
|
54
|
+
this.outputTexture = frameGraph.textureManager.createDanglingHandle();
|
|
55
|
+
}
|
|
56
|
+
getClassName() {
|
|
57
|
+
return "FrameGraphMinMaxReducerTask";
|
|
58
|
+
}
|
|
59
|
+
isReady() {
|
|
60
|
+
for (let i = 0; i < this._stepCount; i++) {
|
|
61
|
+
if (!this._reducer.reductionSteps[i].isReady()) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
record() {
|
|
68
|
+
if (this.sourceTexture === undefined) {
|
|
69
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture is required`);
|
|
70
|
+
}
|
|
71
|
+
const description = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);
|
|
72
|
+
const { width, height } = description.size;
|
|
73
|
+
if (!Number.isInteger(width) || !Number.isInteger(height) || width < 1 || height < 1) {
|
|
74
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have positive integer dimensions`);
|
|
75
|
+
}
|
|
76
|
+
if ((description.options.targetTypes?.[0] ?? 3553) !== 3553) {
|
|
77
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must be a 2D texture`);
|
|
78
|
+
}
|
|
79
|
+
const format = description.options.formats?.[0];
|
|
80
|
+
const sourceIsDepthTexture = format !== undefined && IsDepthTexture(format);
|
|
81
|
+
if (sourceIsDepthTexture) {
|
|
82
|
+
if (!this._frameGraph.engine.isWebGPU) {
|
|
83
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: depth/stencil sources require WebGPU`);
|
|
84
|
+
}
|
|
85
|
+
if (this._frameGraph.textureManager.isBackbufferDepthStencil(this.sourceTexture)) {
|
|
86
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: backbuffer depth cannot be sampled`);
|
|
87
|
+
}
|
|
88
|
+
if (format !== 15 &&
|
|
89
|
+
format !== 16 &&
|
|
90
|
+
format !== 13 &&
|
|
91
|
+
format !== 14 &&
|
|
92
|
+
format !== 18) {
|
|
93
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have a supported depth aspect`);
|
|
94
|
+
}
|
|
95
|
+
const samples = description.options.samples;
|
|
96
|
+
if (samples !== undefined && samples !== 0 && samples !== 1) {
|
|
97
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: depth/stencil sources must be single-sampled`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (format !== undefined && IsIntegerTextureFormat(format)) {
|
|
101
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have a non-integer color format`);
|
|
102
|
+
}
|
|
103
|
+
if (this.textureType !== 1 && this.textureType !== 2 && this.textureType !== 0) {
|
|
104
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: textureType must be FLOAT, HALF_FLOAT, or UNSIGNED_BYTE`);
|
|
105
|
+
}
|
|
106
|
+
const depthRedux = this.depthRedux || sourceIsDepthTexture;
|
|
107
|
+
this._reducer.depthRedux = depthRedux;
|
|
108
|
+
const sourceDepthTextureType = sourceIsDepthTexture ? 2 /* DepthTextureType.ScreenDepth */ : this.depthTextureType;
|
|
109
|
+
const depthTextureType = depthRedux && sourceDepthTextureType === 2 /* DepthTextureType.ScreenDepth */ && this._frameGraph.engine.useReverseDepthBuffer
|
|
110
|
+
? 1 /* DepthTextureType.ViewDepth */
|
|
111
|
+
: sourceDepthTextureType;
|
|
112
|
+
this._reducer.setTextureDimensions(width, height, depthTextureType, sourceIsDepthTexture);
|
|
113
|
+
const steps = this._reducer.reductionSteps;
|
|
114
|
+
const stepCount = Math.max(1, steps.length - 1);
|
|
115
|
+
this._stepCount = stepCount;
|
|
116
|
+
let sourceTexture = this.sourceTexture;
|
|
117
|
+
for (let i = 0; i < stepCount; i++) {
|
|
118
|
+
const step = steps[i];
|
|
119
|
+
const nextStep = steps[i + 1];
|
|
120
|
+
const targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${step.name}`, {
|
|
121
|
+
size: { width: nextStep?.textureWidth ?? 1, height: nextStep?.textureHeight ?? 1 },
|
|
122
|
+
sizeIsPercentage: false,
|
|
123
|
+
options: {
|
|
124
|
+
createMipMaps: false,
|
|
125
|
+
samples: 1,
|
|
126
|
+
types: [this.textureType],
|
|
127
|
+
formats: [7],
|
|
128
|
+
useSRGBBuffers: [false],
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
const pass = new FrameGraphPostProcessTask(`${this.name} ${step.name}`, this._frameGraph, step);
|
|
132
|
+
pass.sourceTexture = sourceTexture;
|
|
133
|
+
pass.sourceSamplingMode = 1;
|
|
134
|
+
pass.targetTexture = targetTexture;
|
|
135
|
+
pass.record(true);
|
|
136
|
+
sourceTexture = pass.outputTexture;
|
|
137
|
+
}
|
|
138
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, sourceTexture);
|
|
139
|
+
const readPass = this._frameGraph.addPass(`${this.name} Read min/max`);
|
|
140
|
+
readPass.setExecuteFunc((context) => {
|
|
141
|
+
if (!this._reducer.onAfterReductionPerformed.hasObservers()) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const texture = context.getTextureFromHandle(this.outputTexture);
|
|
145
|
+
if (!texture) {
|
|
146
|
+
throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: output texture is unavailable`);
|
|
147
|
+
}
|
|
148
|
+
this._reducer.readMinMax(texture, depthRedux);
|
|
149
|
+
});
|
|
150
|
+
const passDisabled = this._frameGraph.addRenderPass(`${this.name}_disabled`, true);
|
|
151
|
+
passDisabled.setRenderTarget(this.outputTexture);
|
|
152
|
+
passDisabled.setExecuteFunc(() => { });
|
|
153
|
+
}
|
|
154
|
+
dispose() {
|
|
155
|
+
this._reducer.dispose();
|
|
156
|
+
super.dispose();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=minMaxReducerTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minMaxReducerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/minMaxReducerTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type FrameGraph, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { DepthTextureType, ThinMinMaxReducer } from \"core/Misc/thinMinMaxReducer\";\r\nimport { IsDepthTexture, IsIntegerTextureFormat } from \"core/Materials/Textures/textureHelper.functions\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\n\r\n/**\r\n * Task which computes the minimum and maximum values in the red channel of a frame graph texture,\r\n * or in the depth aspect of a WebGPU depth/stencil attachment.\r\n * Set sourceTexture to a handle from an earlier task (for example, a geometry renderer's geometryNormViewDepthTexture)\r\n * to reuse its output without rendering another depth map. The reduction is performed on each graph execution.\r\n */\r\nexport class FrameGraphMinMaxReducerTask extends FrameGraphTask {\r\n /**\r\n * The 2D texture to reduce. If generated by a graph task, that task must execute before this one.\r\n * WebGPU can reduce the depth aspect of a single-sampled depth/stencil attachment; backbuffer depth,\r\n * stencil-only attachments and integer color formats are not supported.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Whether to ignore the clear value of a depth-as-color texture during reduction (default: false).\r\n * For normalized view or forward screen depth, the clear value is 1; for view depth or reverse screen depth, it is 0.\r\n * Always enabled for a depth/stencil attachment, which stores screen depth.\r\n */\r\n public depthRedux = false;\r\n\r\n /**\r\n * The type of depth values stored in the source texture when depthRedux is true (default: normalized view depth).\r\n */\r\n public depthTextureType = DepthTextureType.NormalizedViewDepth;\r\n\r\n /**\r\n * The type of the intermediate and output textures (default: half float).\r\n * Supported types are FLOAT, HALF_FLOAT, and UNSIGNED_BYTE.\r\n */\r\n public textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n\r\n /**\r\n * Wait for WebGPU texture readback before notifying observers (default: false).\r\n * This delays the notification; it does not block graph execution.\r\n */\r\n public get waitForReadback(): boolean {\r\n return this._reducer.waitForReadback;\r\n }\r\n\r\n public set waitForReadback(value: boolean) {\r\n this._reducer.waitForReadback = value;\r\n }\r\n\r\n /**\r\n * The 1x1 RG texture containing the minimum in red and maximum in green.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Observable triggered after the reduced texture has been read back.\r\n * With depthRedux enabled, an empty or equal-valued depth range falls back to [0, 1].\r\n */\r\n public get onAfterReductionPerformed() {\r\n return this._reducer.onAfterReductionPerformed;\r\n }\r\n\r\n private readonly _reducer: ThinMinMaxReducer;\r\n private _stepCount = 0;\r\n\r\n /**\r\n * Creates a min/max reduction task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph to add the task to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n this._reducer = new ThinMinMaxReducer(frameGraph.scene, false);\r\n this.outputTexture = frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphMinMaxReducerTask\";\r\n }\r\n\r\n public override isReady(): boolean {\r\n for (let i = 0; i < this._stepCount; i++) {\r\n if (!this._reducer.reductionSteps[i].isReady()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public override record(): void {\r\n if (this.sourceTexture === undefined) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture is required`);\r\n }\r\n\r\n const description = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n const { width, height } = description.size;\r\n if (!Number.isInteger(width) || !Number.isInteger(height) || width < 1 || height < 1) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have positive integer dimensions`);\r\n }\r\n if ((description.options.targetTypes?.[0] ?? Constants.TEXTURE_2D) !== Constants.TEXTURE_2D) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must be a 2D texture`);\r\n }\r\n const format = description.options.formats?.[0];\r\n const sourceIsDepthTexture = format !== undefined && IsDepthTexture(format);\r\n if (sourceIsDepthTexture) {\r\n if (!this._frameGraph.engine.isWebGPU) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: depth/stencil sources require WebGPU`);\r\n }\r\n if (this._frameGraph.textureManager.isBackbufferDepthStencil(this.sourceTexture)) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: backbuffer depth cannot be sampled`);\r\n }\r\n if (\r\n format !== Constants.TEXTUREFORMAT_DEPTH16 &&\r\n format !== Constants.TEXTUREFORMAT_DEPTH24 &&\r\n format !== Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 &&\r\n format !== Constants.TEXTUREFORMAT_DEPTH32_FLOAT &&\r\n format !== Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8\r\n ) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have a supported depth aspect`);\r\n }\r\n const samples = description.options.samples;\r\n if (samples !== undefined && samples !== 0 && samples !== 1) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: depth/stencil sources must be single-sampled`);\r\n }\r\n } else if (format !== undefined && IsIntegerTextureFormat(format)) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: sourceTexture must have a non-integer color format`);\r\n }\r\n if (this.textureType !== Constants.TEXTURETYPE_FLOAT && this.textureType !== Constants.TEXTURETYPE_HALF_FLOAT && this.textureType !== Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: textureType must be FLOAT, HALF_FLOAT, or UNSIGNED_BYTE`);\r\n }\r\n\r\n const depthRedux = this.depthRedux || sourceIsDepthTexture;\r\n this._reducer.depthRedux = depthRedux;\r\n const sourceDepthTextureType = sourceIsDepthTexture ? DepthTextureType.ScreenDepth : this.depthTextureType;\r\n const depthTextureType =\r\n depthRedux && sourceDepthTextureType === DepthTextureType.ScreenDepth && this._frameGraph.engine.useReverseDepthBuffer\r\n ? DepthTextureType.ViewDepth\r\n : sourceDepthTextureType;\r\n this._reducer.setTextureDimensions(width, height, depthTextureType, sourceIsDepthTexture);\r\n\r\n const steps = this._reducer.reductionSteps;\r\n const stepCount = Math.max(1, steps.length - 1);\r\n this._stepCount = stepCount;\r\n let sourceTexture = this.sourceTexture;\r\n\r\n for (let i = 0; i < stepCount; i++) {\r\n const step = steps[i];\r\n const nextStep = steps[i + 1];\r\n const targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${step.name}`, {\r\n size: { width: nextStep?.textureWidth ?? 1, height: nextStep?.textureHeight ?? 1 },\r\n sizeIsPercentage: false,\r\n options: {\r\n createMipMaps: false,\r\n samples: 1,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RG],\r\n useSRGBBuffers: [false],\r\n },\r\n });\r\n const pass = new FrameGraphPostProcessTask(`${this.name} ${step.name}`, this._frameGraph, step);\r\n pass.sourceTexture = sourceTexture;\r\n pass.sourceSamplingMode = Constants.TEXTURE_NEAREST_NEAREST;\r\n pass.targetTexture = targetTexture;\r\n pass.record(true);\r\n\r\n sourceTexture = pass.outputTexture;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, sourceTexture);\r\n\r\n const readPass = this._frameGraph.addPass(`${this.name} Read min/max`);\r\n readPass.setExecuteFunc((context) => {\r\n if (!this._reducer.onAfterReductionPerformed.hasObservers()) {\r\n return;\r\n }\r\n const texture = context.getTextureFromHandle(this.outputTexture);\r\n if (!texture) {\r\n throw new Error(`FrameGraphMinMaxReducerTask ${this.name}: output texture is unavailable`);\r\n }\r\n this._reducer.readMinMax(texture, depthRedux);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(`${this.name}_disabled`, true);\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n public override dispose(): void {\r\n this._reducer.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type Camera } from "../../../Cameras/camera.pure.js";
|
|
2
|
+
import { type FrameGraph } from "../../frameGraph.js";
|
|
3
|
+
import { type FrameGraphRenderPass } from "../../Passes/renderPass.js";
|
|
4
|
+
import { type FrameGraphTextureHandle } from "../../frameGraphTypes.js";
|
|
5
|
+
import { type IMeshBlendConfiguration, type MeshBlendDebugMode, MeshBlendDepthType, type MeshBlendQuality, type MeshBlendRadiusDefinitions, ThinMeshBlendingPostProcess } from "../../../PostProcesses/thinMeshBlendingPostProcess.js";
|
|
6
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
7
|
+
/**
|
|
8
|
+
* Frame-graph task which visually blends SceneColor across validated contacts between opaque or alpha-tested meshes.
|
|
9
|
+
*
|
|
10
|
+
* This WebGL2 and WebGPU task uses the same effect and configuration as MeshBlendingPostProcess. It does not modify
|
|
11
|
+
* geometry, collision queries, depth, normals, or shadows. All source and geometry textures must have matching
|
|
12
|
+
* physical dimensions and sample counts. Transparent rendering is caller-controlled; overlapping transparent
|
|
13
|
+
* surfaces can make SceneColor inconsistent with the single-layer geometry inputs. On WebGL2, rendering transparent
|
|
14
|
+
* meshes into the integer tag attachment requires per-target blend parameters.
|
|
15
|
+
* @see https://playground.babylonjs.com/?version=preview#O05LI8#6
|
|
16
|
+
*/
|
|
17
|
+
export declare class FrameGraphMeshBlendingTask extends FrameGraphPostProcessTask {
|
|
18
|
+
/**
|
|
19
|
+
* The packed R8UI mesh-blending tag texture used to locate seams.
|
|
20
|
+
*/
|
|
21
|
+
meshBlendTagTexture: FrameGraphTextureHandle;
|
|
22
|
+
/**
|
|
23
|
+
* The view-depth or screen-depth texture aligned with the packed tag texture.
|
|
24
|
+
*/
|
|
25
|
+
depthTexture: FrameGraphTextureHandle;
|
|
26
|
+
/**
|
|
27
|
+
* Optional linear base-color/albedo geometry texture aligned with SceneColor.
|
|
28
|
+
*
|
|
29
|
+
* When omitted, shadow estimation is compiled out.
|
|
30
|
+
*/
|
|
31
|
+
baseColorTexture?: FrameGraphTextureHandle;
|
|
32
|
+
/**
|
|
33
|
+
* Camera used to project radii and reconstruct view-space positions.
|
|
34
|
+
*/
|
|
35
|
+
camera: Camera;
|
|
36
|
+
/**
|
|
37
|
+
* The thin post process containing the shared quality variant and blend configuration.
|
|
38
|
+
*/
|
|
39
|
+
readonly postProcess: ThinMeshBlendingPostProcess;
|
|
40
|
+
/** Gets or sets the compile-time mesh-blending quality variant. */
|
|
41
|
+
get quality(): MeshBlendQuality;
|
|
42
|
+
set quality(value: MeshBlendQuality);
|
|
43
|
+
/** Gets the four configurable radius definitions indexed by packed radius class. */
|
|
44
|
+
get radiusClasses(): MeshBlendRadiusDefinitions;
|
|
45
|
+
/** Gets or sets the contact-slope narrowing factor. A value of 1 disables narrowing. */
|
|
46
|
+
get slopeFactor(): number;
|
|
47
|
+
set slopeFactor(value: number);
|
|
48
|
+
/** Gets or sets the representation stored in depthTexture. */
|
|
49
|
+
get depthType(): MeshBlendDepthType;
|
|
50
|
+
set depthType(value: MeshBlendDepthType);
|
|
51
|
+
/** Gets or sets the compiled debug visualization. */
|
|
52
|
+
get debugMode(): MeshBlendDebugMode;
|
|
53
|
+
set debugMode(value: MeshBlendDebugMode);
|
|
54
|
+
/**
|
|
55
|
+
* Constructs a mesh-blending task.
|
|
56
|
+
* @param name The name of the task.
|
|
57
|
+
* @param frameGraph The frame graph this task belongs to.
|
|
58
|
+
* @param thinPostProcess The thin post process to use. A new one is created when omitted.
|
|
59
|
+
*/
|
|
60
|
+
constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinMeshBlendingPostProcess);
|
|
61
|
+
dispose(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Applies the same configuration accepted by the classic MeshBlendingPostProcess wrapper.
|
|
64
|
+
* @param options Values to apply. Omitted values retain their current settings.
|
|
65
|
+
*/
|
|
66
|
+
configure(options?: IMeshBlendConfiguration): void;
|
|
67
|
+
getClassName(): string;
|
|
68
|
+
record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
|
|
69
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
|
|
2
|
+
import { MeshBlendDepthType, ThinMeshBlendingPostProcess, _ClaimMeshBlendingEffectWrapper, _IsMeshBlendingEffectWrapperOwned, _ReleaseMeshBlendingEffectWrapper, } from "../../../PostProcesses/thinMeshBlendingPostProcess.js";
|
|
3
|
+
import { FrameGraphPostProcessTask } from "./postProcessTask.js";
|
|
4
|
+
import { _IsMeshBlendingSupported } from "../../../Meshes/meshBlendingTag.js";
|
|
5
|
+
function _Is2DTexture(creationOptions) {
|
|
6
|
+
return (creationOptions.options.targetTypes?.[0] ?? 3553) === 3553;
|
|
7
|
+
}
|
|
8
|
+
function _GetTextureType(creationOptions) {
|
|
9
|
+
return creationOptions.options.types?.[0] ?? 0;
|
|
10
|
+
}
|
|
11
|
+
function _GetTextureFormat(creationOptions) {
|
|
12
|
+
return creationOptions.options.formats?.[0] ?? 5;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Frame-graph task which visually blends SceneColor across validated contacts between opaque or alpha-tested meshes.
|
|
16
|
+
*
|
|
17
|
+
* This WebGL2 and WebGPU task uses the same effect and configuration as MeshBlendingPostProcess. It does not modify
|
|
18
|
+
* geometry, collision queries, depth, normals, or shadows. All source and geometry textures must have matching
|
|
19
|
+
* physical dimensions and sample counts. Transparent rendering is caller-controlled; overlapping transparent
|
|
20
|
+
* surfaces can make SceneColor inconsistent with the single-layer geometry inputs. On WebGL2, rendering transparent
|
|
21
|
+
* meshes into the integer tag attachment requires per-target blend parameters.
|
|
22
|
+
* @see https://playground.babylonjs.com/?version=preview#O05LI8#6
|
|
23
|
+
*/
|
|
24
|
+
export class FrameGraphMeshBlendingTask extends FrameGraphPostProcessTask {
|
|
25
|
+
/** Gets or sets the compile-time mesh-blending quality variant. */
|
|
26
|
+
get quality() {
|
|
27
|
+
return this.postProcess.quality;
|
|
28
|
+
}
|
|
29
|
+
set quality(value) {
|
|
30
|
+
this.postProcess.quality = value;
|
|
31
|
+
}
|
|
32
|
+
/** Gets the four configurable radius definitions indexed by packed radius class. */
|
|
33
|
+
get radiusClasses() {
|
|
34
|
+
return this.postProcess.radiusClasses;
|
|
35
|
+
}
|
|
36
|
+
/** Gets or sets the contact-slope narrowing factor. A value of 1 disables narrowing. */
|
|
37
|
+
get slopeFactor() {
|
|
38
|
+
return this.postProcess.slopeFactor;
|
|
39
|
+
}
|
|
40
|
+
set slopeFactor(value) {
|
|
41
|
+
this.postProcess.slopeFactor = value;
|
|
42
|
+
}
|
|
43
|
+
/** Gets or sets the representation stored in depthTexture. */
|
|
44
|
+
get depthType() {
|
|
45
|
+
return this.postProcess.depthType;
|
|
46
|
+
}
|
|
47
|
+
set depthType(value) {
|
|
48
|
+
this.postProcess.depthType = value;
|
|
49
|
+
}
|
|
50
|
+
/** Gets or sets the compiled debug visualization. */
|
|
51
|
+
get debugMode() {
|
|
52
|
+
return this.postProcess.debugMode;
|
|
53
|
+
}
|
|
54
|
+
set debugMode(value) {
|
|
55
|
+
this.postProcess.debugMode = value;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Constructs a mesh-blending task.
|
|
59
|
+
* @param name The name of the task.
|
|
60
|
+
* @param frameGraph The frame graph this task belongs to.
|
|
61
|
+
* @param thinPostProcess The thin post process to use. A new one is created when omitted.
|
|
62
|
+
*/
|
|
63
|
+
constructor(name, frameGraph, thinPostProcess) {
|
|
64
|
+
if (thinPostProcess && thinPostProcess.options.engine !== frameGraph.engine) {
|
|
65
|
+
throw new Error(`FrameGraphMeshBlendingTask "${name}": thinPostProcess must use the frame graph engine`);
|
|
66
|
+
}
|
|
67
|
+
if (thinPostProcess && _IsMeshBlendingEffectWrapperOwned(thinPostProcess)) {
|
|
68
|
+
throw new Error(`FrameGraphMeshBlendingTask "${name}": thinPostProcess is already attached to another owner`);
|
|
69
|
+
}
|
|
70
|
+
super(name, frameGraph, thinPostProcess || new ThinMeshBlendingPostProcess(name, frameGraph.engine));
|
|
71
|
+
_ClaimMeshBlendingEffectWrapper(this.postProcess, this);
|
|
72
|
+
this.sourceSamplingMode = 1;
|
|
73
|
+
}
|
|
74
|
+
dispose() {
|
|
75
|
+
_ReleaseMeshBlendingEffectWrapper(this.postProcess, this);
|
|
76
|
+
super.dispose();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Applies the same configuration accepted by the classic MeshBlendingPostProcess wrapper.
|
|
80
|
+
* @param options Values to apply. Omitted values retain their current settings.
|
|
81
|
+
*/
|
|
82
|
+
configure(options) {
|
|
83
|
+
this.postProcess.configure(options);
|
|
84
|
+
}
|
|
85
|
+
getClassName() {
|
|
86
|
+
return "FrameGraphMeshBlendingTask";
|
|
87
|
+
}
|
|
88
|
+
record(skipCreationOfDisabledPasses = false) {
|
|
89
|
+
this.sourceSamplingMode = 1;
|
|
90
|
+
if (this.sourceTexture === undefined || this.meshBlendTagTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {
|
|
91
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": sourceTexture, meshBlendTagTexture, depthTexture and camera are required`);
|
|
92
|
+
}
|
|
93
|
+
const engine = this._frameGraph.engine;
|
|
94
|
+
if (!_IsMeshBlendingSupported(engine)) {
|
|
95
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": mesh blending requires WebGL2 or WebGPU`);
|
|
96
|
+
}
|
|
97
|
+
if (this.depthType !== MeshBlendDepthType.View && this.depthType !== MeshBlendDepthType.Screen) {
|
|
98
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": depthType must be View or Screen`);
|
|
99
|
+
}
|
|
100
|
+
const meshBlendTagCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.meshBlendTagTexture);
|
|
101
|
+
const meshBlendTagType = _GetTextureType(meshBlendTagCreationOptions);
|
|
102
|
+
const meshBlendTagFormat = _GetTextureFormat(meshBlendTagCreationOptions);
|
|
103
|
+
const meshBlendTagSamples = meshBlendTagCreationOptions.options.samples ?? 1;
|
|
104
|
+
if (meshBlendTagType !== 0 || meshBlendTagFormat !== 8) {
|
|
105
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": meshBlendTagTexture must use TEXTURETYPE_UNSIGNED_BYTE with TEXTUREFORMAT_RED_INTEGER`);
|
|
106
|
+
}
|
|
107
|
+
if (!_Is2DTexture(meshBlendTagCreationOptions)) {
|
|
108
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": meshBlendTagTexture must be a 2D texture`);
|
|
109
|
+
}
|
|
110
|
+
if (meshBlendTagSamples !== 1) {
|
|
111
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": meshBlendTagTexture must be single-sampled`);
|
|
112
|
+
}
|
|
113
|
+
if (meshBlendTagCreationOptions.options.createMipMaps) {
|
|
114
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": meshBlendTagTexture must not use mipmaps`);
|
|
115
|
+
}
|
|
116
|
+
const depthCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);
|
|
117
|
+
const depthType = _GetTextureType(depthCreationOptions);
|
|
118
|
+
const depthFormat = _GetTextureFormat(depthCreationOptions);
|
|
119
|
+
const depthSamples = depthCreationOptions.options.samples ?? 1;
|
|
120
|
+
const validDepthFormat = depthFormat === 6 || depthFormat === 7 || depthFormat === 5;
|
|
121
|
+
const validDepthType = depthType === 1 ||
|
|
122
|
+
depthType === 2 ||
|
|
123
|
+
(this.depthType === MeshBlendDepthType.Screen && depthType === 0);
|
|
124
|
+
if (!validDepthFormat || !validDepthType) {
|
|
125
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": ${this.depthType === MeshBlendDepthType.View ? "view" : "screen"} depthTexture has an incompatible type or format`);
|
|
126
|
+
}
|
|
127
|
+
if (!_Is2DTexture(depthCreationOptions)) {
|
|
128
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": depthTexture must be a 2D texture`);
|
|
129
|
+
}
|
|
130
|
+
if (depthSamples !== 1) {
|
|
131
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": depthTexture must be single-sampled`);
|
|
132
|
+
}
|
|
133
|
+
if (depthCreationOptions.options.createMipMaps) {
|
|
134
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": depthTexture must not use mipmaps`);
|
|
135
|
+
}
|
|
136
|
+
let baseColorSamples;
|
|
137
|
+
if (this.baseColorTexture !== undefined) {
|
|
138
|
+
const baseColorCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.baseColorTexture);
|
|
139
|
+
const baseColorType = _GetTextureType(baseColorCreationOptions);
|
|
140
|
+
const baseColorFormat = _GetTextureFormat(baseColorCreationOptions);
|
|
141
|
+
baseColorSamples = baseColorCreationOptions.options.samples ?? 1;
|
|
142
|
+
const validBaseColorFormat = baseColorFormat === 4 || baseColorFormat === 5;
|
|
143
|
+
const validBaseColorType = baseColorType === 0 || baseColorType === 2 || baseColorType === 1;
|
|
144
|
+
if (!validBaseColorFormat || !validBaseColorType) {
|
|
145
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": baseColorTexture must use a non-integer RGB or RGBA color format`);
|
|
146
|
+
}
|
|
147
|
+
if (!_Is2DTexture(baseColorCreationOptions)) {
|
|
148
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": baseColorTexture must be a 2D texture`);
|
|
149
|
+
}
|
|
150
|
+
if (baseColorCreationOptions.options.createMipMaps) {
|
|
151
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": baseColorTexture must not use mipmaps`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const sourceCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);
|
|
155
|
+
const sourceType = _GetTextureType(sourceCreationOptions);
|
|
156
|
+
const sourceFormat = _GetTextureFormat(sourceCreationOptions);
|
|
157
|
+
const sourceSamples = sourceCreationOptions.options.samples ?? 1;
|
|
158
|
+
const validSourceFormat = sourceFormat === 4 || sourceFormat === 5;
|
|
159
|
+
const validSourceType = sourceType === 0 || sourceType === 2 || sourceType === 1;
|
|
160
|
+
if (!validSourceFormat || !validSourceType) {
|
|
161
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": sourceTexture must use a non-integer RGB or RGBA color format`);
|
|
162
|
+
}
|
|
163
|
+
if (!_Is2DTexture(sourceCreationOptions)) {
|
|
164
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": sourceTexture must be a 2D texture`);
|
|
165
|
+
}
|
|
166
|
+
if (sourceSamples !== meshBlendTagSamples || sourceSamples !== depthSamples || (baseColorSamples !== undefined && sourceSamples !== baseColorSamples)) {
|
|
167
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": sourceTexture, meshBlendTagTexture, depthTexture and baseColorTexture when provided must have matching sample counts`);
|
|
168
|
+
}
|
|
169
|
+
const sourceSize = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture).size;
|
|
170
|
+
const meshBlendTagSize = this._frameGraph.textureManager.getTextureDescription(this.meshBlendTagTexture).size;
|
|
171
|
+
const depthSize = this._frameGraph.textureManager.getTextureDescription(this.depthTexture).size;
|
|
172
|
+
const baseColorSize = this.baseColorTexture === undefined ? undefined : this._frameGraph.textureManager.getTextureDescription(this.baseColorTexture).size;
|
|
173
|
+
if (sourceSize.width !== meshBlendTagSize.width ||
|
|
174
|
+
sourceSize.height !== meshBlendTagSize.height ||
|
|
175
|
+
sourceSize.width !== depthSize.width ||
|
|
176
|
+
sourceSize.height !== depthSize.height ||
|
|
177
|
+
(baseColorSize !== undefined && (sourceSize.width !== baseColorSize.width || sourceSize.height !== baseColorSize.height))) {
|
|
178
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": sourceTexture, meshBlendTagTexture, depthTexture and baseColorTexture when provided must have matching dimensions`);
|
|
179
|
+
}
|
|
180
|
+
if (this.targetTexture !== undefined) {
|
|
181
|
+
const targetCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.targetTexture);
|
|
182
|
+
const targetType = _GetTextureType(targetCreationOptions);
|
|
183
|
+
const targetFormat = _GetTextureFormat(targetCreationOptions);
|
|
184
|
+
const targetSamples = targetCreationOptions.options.samples ?? 1;
|
|
185
|
+
const validTargetFormat = targetFormat === 4 || targetFormat === 5;
|
|
186
|
+
const validTargetType = targetType === 0 || targetType === 2 || targetType === 1;
|
|
187
|
+
if (!validTargetFormat || !validTargetType) {
|
|
188
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": targetTexture must use a non-integer RGB or RGBA color format`);
|
|
189
|
+
}
|
|
190
|
+
if (!_Is2DTexture(targetCreationOptions)) {
|
|
191
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": targetTexture must be a 2D texture`);
|
|
192
|
+
}
|
|
193
|
+
if (targetSamples !== sourceSamples) {
|
|
194
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": targetTexture and sourceTexture must have matching sample counts`);
|
|
195
|
+
}
|
|
196
|
+
const targetSize = this._frameGraph.textureManager.getTextureDescription(this.targetTexture).size;
|
|
197
|
+
if (targetSize.width !== sourceSize.width || targetSize.height !== sourceSize.height) {
|
|
198
|
+
throw new Error(`FrameGraphMeshBlendingTask "${this.name}": targetTexture and sourceTexture must have matching dimensions`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
this.postProcess.camera = this.camera;
|
|
202
|
+
this.postProcess.hasBaseColorTexture = this.baseColorTexture !== undefined;
|
|
203
|
+
const pass = super.record(skipCreationOfDisabledPasses, (context) => {
|
|
204
|
+
context.setTextureSamplingMode(this.meshBlendTagTexture, 1);
|
|
205
|
+
context.setTextureSamplingMode(this.depthTexture, 1);
|
|
206
|
+
if (this.baseColorTexture !== undefined) {
|
|
207
|
+
context.setTextureSamplingMode(this.baseColorTexture, 1);
|
|
208
|
+
}
|
|
209
|
+
}, (context) => {
|
|
210
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "meshBlendTagSampler", this.meshBlendTagTexture);
|
|
211
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "meshBlendDepthSampler", this.depthTexture);
|
|
212
|
+
if (this.baseColorTexture !== undefined) {
|
|
213
|
+
context.bindTextureHandle(this._postProcessDrawWrapper.effect, "meshBlendBaseColorSampler", this.baseColorTexture);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
pass.addDependencies([this.meshBlendTagTexture, this.depthTexture]);
|
|
217
|
+
if (this.baseColorTexture !== undefined) {
|
|
218
|
+
pass.addDependencies(this.baseColorTexture);
|
|
219
|
+
}
|
|
220
|
+
return pass;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=meshBlendingTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshBlendingTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/meshBlendingTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../../../Engines/constants\";\r\nimport { type Camera } from \"../../../Cameras/camera.pure\";\r\nimport { type FrameGraph } from \"../../frameGraph\";\r\nimport { type FrameGraphRenderPass } from \"../../Passes/renderPass\";\r\nimport { type FrameGraphTextureCreationOptions, type FrameGraphTextureHandle } from \"../../frameGraphTypes\";\r\nimport {\r\n type IMeshBlendConfiguration,\r\n type MeshBlendDebugMode,\r\n MeshBlendDepthType,\r\n type MeshBlendQuality,\r\n type MeshBlendRadiusDefinitions,\r\n ThinMeshBlendingPostProcess,\r\n _ClaimMeshBlendingEffectWrapper,\r\n _IsMeshBlendingEffectWrapperOwned,\r\n _ReleaseMeshBlendingEffectWrapper,\r\n} from \"../../../PostProcesses/thinMeshBlendingPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { _IsMeshBlendingSupported } from \"../../../Meshes/meshBlendingTag\";\r\n\r\nfunction _Is2DTexture(creationOptions: FrameGraphTextureCreationOptions): boolean {\r\n return (creationOptions.options.targetTypes?.[0] ?? Constants.TEXTURE_2D) === Constants.TEXTURE_2D;\r\n}\r\n\r\nfunction _GetTextureType(creationOptions: FrameGraphTextureCreationOptions): number {\r\n return creationOptions.options.types?.[0] ?? Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n}\r\n\r\nfunction _GetTextureFormat(creationOptions: FrameGraphTextureCreationOptions): number {\r\n return creationOptions.options.formats?.[0] ?? Constants.TEXTUREFORMAT_RGBA;\r\n}\r\n\r\n/**\r\n * Frame-graph task which visually blends SceneColor across validated contacts between opaque or alpha-tested meshes.\r\n *\r\n * This WebGL2 and WebGPU task uses the same effect and configuration as MeshBlendingPostProcess. It does not modify\r\n * geometry, collision queries, depth, normals, or shadows. All source and geometry textures must have matching\r\n * physical dimensions and sample counts. Transparent rendering is caller-controlled; overlapping transparent\r\n * surfaces can make SceneColor inconsistent with the single-layer geometry inputs. On WebGL2, rendering transparent\r\n * meshes into the integer tag attachment requires per-target blend parameters.\r\n * @see https://playground.babylonjs.com/?version=preview#O05LI8#6\r\n */\r\nexport class FrameGraphMeshBlendingTask extends FrameGraphPostProcessTask {\r\n /**\r\n * The packed R8UI mesh-blending tag texture used to locate seams.\r\n */\r\n public meshBlendTagTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The view-depth or screen-depth texture aligned with the packed tag texture.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Optional linear base-color/albedo geometry texture aligned with SceneColor.\r\n *\r\n * When omitted, shadow estimation is compiled out.\r\n */\r\n public baseColorTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Camera used to project radii and reconstruct view-space positions.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The thin post process containing the shared quality variant and blend configuration.\r\n */\r\n public override readonly postProcess: ThinMeshBlendingPostProcess;\r\n\r\n /** Gets or sets the compile-time mesh-blending quality variant. */\r\n public get quality(): MeshBlendQuality {\r\n return this.postProcess.quality;\r\n }\r\n\r\n public set quality(value: MeshBlendQuality) {\r\n this.postProcess.quality = value;\r\n }\r\n\r\n /** Gets the four configurable radius definitions indexed by packed radius class. */\r\n public get radiusClasses(): MeshBlendRadiusDefinitions {\r\n return this.postProcess.radiusClasses;\r\n }\r\n\r\n /** Gets or sets the contact-slope narrowing factor. A value of 1 disables narrowing. */\r\n public get slopeFactor(): number {\r\n return this.postProcess.slopeFactor;\r\n }\r\n\r\n public set slopeFactor(value: number) {\r\n this.postProcess.slopeFactor = value;\r\n }\r\n\r\n /** Gets or sets the representation stored in depthTexture. */\r\n public get depthType(): MeshBlendDepthType {\r\n return this.postProcess.depthType;\r\n }\r\n\r\n public set depthType(value: MeshBlendDepthType) {\r\n this.postProcess.depthType = value;\r\n }\r\n\r\n /** Gets or sets the compiled debug visualization. */\r\n public get debugMode(): MeshBlendDebugMode {\r\n return this.postProcess.debugMode;\r\n }\r\n\r\n public set debugMode(value: MeshBlendDebugMode) {\r\n this.postProcess.debugMode = value;\r\n }\r\n\r\n /**\r\n * Constructs a mesh-blending task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param thinPostProcess The thin post process to use. A new one is created when omitted.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinMeshBlendingPostProcess) {\r\n if (thinPostProcess && thinPostProcess.options.engine !== frameGraph.engine) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${name}\": thinPostProcess must use the frame graph engine`);\r\n }\r\n if (thinPostProcess && _IsMeshBlendingEffectWrapperOwned(thinPostProcess)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${name}\": thinPostProcess is already attached to another owner`);\r\n }\r\n super(name, frameGraph, thinPostProcess || new ThinMeshBlendingPostProcess(name, frameGraph.engine));\r\n _ClaimMeshBlendingEffectWrapper(this.postProcess, this);\r\n this.sourceSamplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n }\r\n\r\n public override dispose(): void {\r\n _ReleaseMeshBlendingEffectWrapper(this.postProcess, this);\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Applies the same configuration accepted by the classic MeshBlendingPostProcess wrapper.\r\n * @param options Values to apply. Omitted values retain their current settings.\r\n */\r\n public configure(options?: IMeshBlendConfiguration): void {\r\n this.postProcess.configure(options);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphMeshBlendingTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n this.sourceSamplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n\r\n if (this.sourceTexture === undefined || this.meshBlendTagTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": sourceTexture, meshBlendTagTexture, depthTexture and camera are required`);\r\n }\r\n\r\n const engine = this._frameGraph.engine;\r\n if (!_IsMeshBlendingSupported(engine)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": mesh blending requires WebGL2 or WebGPU`);\r\n }\r\n if (this.depthType !== MeshBlendDepthType.View && this.depthType !== MeshBlendDepthType.Screen) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": depthType must be View or Screen`);\r\n }\r\n\r\n const meshBlendTagCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.meshBlendTagTexture);\r\n const meshBlendTagType = _GetTextureType(meshBlendTagCreationOptions);\r\n const meshBlendTagFormat = _GetTextureFormat(meshBlendTagCreationOptions);\r\n const meshBlendTagSamples = meshBlendTagCreationOptions.options.samples ?? 1;\r\n\r\n if (meshBlendTagType !== Constants.TEXTURETYPE_UNSIGNED_BYTE || meshBlendTagFormat !== Constants.TEXTUREFORMAT_RED_INTEGER) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": meshBlendTagTexture must use TEXTURETYPE_UNSIGNED_BYTE with TEXTUREFORMAT_RED_INTEGER`);\r\n }\r\n if (!_Is2DTexture(meshBlendTagCreationOptions)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": meshBlendTagTexture must be a 2D texture`);\r\n }\r\n if (meshBlendTagSamples !== 1) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": meshBlendTagTexture must be single-sampled`);\r\n }\r\n if (meshBlendTagCreationOptions.options.createMipMaps) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": meshBlendTagTexture must not use mipmaps`);\r\n }\r\n\r\n const depthCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);\r\n const depthType = _GetTextureType(depthCreationOptions);\r\n const depthFormat = _GetTextureFormat(depthCreationOptions);\r\n const depthSamples = depthCreationOptions.options.samples ?? 1;\r\n const validDepthFormat = depthFormat === Constants.TEXTUREFORMAT_RED || depthFormat === Constants.TEXTUREFORMAT_RG || depthFormat === Constants.TEXTUREFORMAT_RGBA;\r\n const validDepthType =\r\n depthType === Constants.TEXTURETYPE_FLOAT ||\r\n depthType === Constants.TEXTURETYPE_HALF_FLOAT ||\r\n (this.depthType === MeshBlendDepthType.Screen && depthType === Constants.TEXTURETYPE_UNSIGNED_BYTE);\r\n\r\n if (!validDepthFormat || !validDepthType) {\r\n throw new Error(\r\n `FrameGraphMeshBlendingTask \"${this.name}\": ${this.depthType === MeshBlendDepthType.View ? \"view\" : \"screen\"} depthTexture has an incompatible type or format`\r\n );\r\n }\r\n if (!_Is2DTexture(depthCreationOptions)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": depthTexture must be a 2D texture`);\r\n }\r\n if (depthSamples !== 1) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": depthTexture must be single-sampled`);\r\n }\r\n if (depthCreationOptions.options.createMipMaps) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": depthTexture must not use mipmaps`);\r\n }\r\n\r\n let baseColorSamples: number | undefined;\r\n if (this.baseColorTexture !== undefined) {\r\n const baseColorCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.baseColorTexture);\r\n const baseColorType = _GetTextureType(baseColorCreationOptions);\r\n const baseColorFormat = _GetTextureFormat(baseColorCreationOptions);\r\n baseColorSamples = baseColorCreationOptions.options.samples ?? 1;\r\n const validBaseColorFormat = baseColorFormat === Constants.TEXTUREFORMAT_RGB || baseColorFormat === Constants.TEXTUREFORMAT_RGBA;\r\n const validBaseColorType =\r\n baseColorType === Constants.TEXTURETYPE_UNSIGNED_BYTE || baseColorType === Constants.TEXTURETYPE_HALF_FLOAT || baseColorType === Constants.TEXTURETYPE_FLOAT;\r\n if (!validBaseColorFormat || !validBaseColorType) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": baseColorTexture must use a non-integer RGB or RGBA color format`);\r\n }\r\n if (!_Is2DTexture(baseColorCreationOptions)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": baseColorTexture must be a 2D texture`);\r\n }\r\n if (baseColorCreationOptions.options.createMipMaps) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": baseColorTexture must not use mipmaps`);\r\n }\r\n }\r\n\r\n const sourceCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n const sourceType = _GetTextureType(sourceCreationOptions);\r\n const sourceFormat = _GetTextureFormat(sourceCreationOptions);\r\n const sourceSamples = sourceCreationOptions.options.samples ?? 1;\r\n const validSourceFormat = sourceFormat === Constants.TEXTUREFORMAT_RGB || sourceFormat === Constants.TEXTUREFORMAT_RGBA;\r\n const validSourceType = sourceType === Constants.TEXTURETYPE_UNSIGNED_BYTE || sourceType === Constants.TEXTURETYPE_HALF_FLOAT || sourceType === Constants.TEXTURETYPE_FLOAT;\r\n if (!validSourceFormat || !validSourceType) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": sourceTexture must use a non-integer RGB or RGBA color format`);\r\n }\r\n if (!_Is2DTexture(sourceCreationOptions)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": sourceTexture must be a 2D texture`);\r\n }\r\n if (sourceSamples !== meshBlendTagSamples || sourceSamples !== depthSamples || (baseColorSamples !== undefined && sourceSamples !== baseColorSamples)) {\r\n throw new Error(\r\n `FrameGraphMeshBlendingTask \"${this.name}\": sourceTexture, meshBlendTagTexture, depthTexture and baseColorTexture when provided must have matching sample counts`\r\n );\r\n }\r\n\r\n const sourceSize = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture).size;\r\n const meshBlendTagSize = this._frameGraph.textureManager.getTextureDescription(this.meshBlendTagTexture).size;\r\n const depthSize = this._frameGraph.textureManager.getTextureDescription(this.depthTexture).size;\r\n const baseColorSize = this.baseColorTexture === undefined ? undefined : this._frameGraph.textureManager.getTextureDescription(this.baseColorTexture).size;\r\n if (\r\n sourceSize.width !== meshBlendTagSize.width ||\r\n sourceSize.height !== meshBlendTagSize.height ||\r\n sourceSize.width !== depthSize.width ||\r\n sourceSize.height !== depthSize.height ||\r\n (baseColorSize !== undefined && (sourceSize.width !== baseColorSize.width || sourceSize.height !== baseColorSize.height))\r\n ) {\r\n throw new Error(\r\n `FrameGraphMeshBlendingTask \"${this.name}\": sourceTexture, meshBlendTagTexture, depthTexture and baseColorTexture when provided must have matching dimensions`\r\n );\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n const targetCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.targetTexture);\r\n const targetType = _GetTextureType(targetCreationOptions);\r\n const targetFormat = _GetTextureFormat(targetCreationOptions);\r\n const targetSamples = targetCreationOptions.options.samples ?? 1;\r\n const validTargetFormat = targetFormat === Constants.TEXTUREFORMAT_RGB || targetFormat === Constants.TEXTUREFORMAT_RGBA;\r\n const validTargetType =\r\n targetType === Constants.TEXTURETYPE_UNSIGNED_BYTE || targetType === Constants.TEXTURETYPE_HALF_FLOAT || targetType === Constants.TEXTURETYPE_FLOAT;\r\n if (!validTargetFormat || !validTargetType) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": targetTexture must use a non-integer RGB or RGBA color format`);\r\n }\r\n if (!_Is2DTexture(targetCreationOptions)) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": targetTexture must be a 2D texture`);\r\n }\r\n if (targetSamples !== sourceSamples) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": targetTexture and sourceTexture must have matching sample counts`);\r\n }\r\n\r\n const targetSize = this._frameGraph.textureManager.getTextureDescription(this.targetTexture).size;\r\n if (targetSize.width !== sourceSize.width || targetSize.height !== sourceSize.height) {\r\n throw new Error(`FrameGraphMeshBlendingTask \"${this.name}\": targetTexture and sourceTexture must have matching dimensions`);\r\n }\r\n }\r\n\r\n this.postProcess.camera = this.camera;\r\n this.postProcess.hasBaseColorTexture = this.baseColorTexture !== undefined;\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.meshBlendTagTexture, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n context.setTextureSamplingMode(this.depthTexture, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n if (this.baseColorTexture !== undefined) {\r\n context.setTextureSamplingMode(this.baseColorTexture, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n }\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"meshBlendTagSampler\", this.meshBlendTagTexture);\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"meshBlendDepthSampler\", this.depthTexture);\r\n if (this.baseColorTexture !== undefined) {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"meshBlendBaseColorSampler\", this.baseColorTexture);\r\n }\r\n }\r\n );\r\n\r\n pass.addDependencies([this.meshBlendTagTexture, this.depthTexture]);\r\n if (this.baseColorTexture !== undefined) {\r\n pass.addDependencies(this.baseColorTexture);\r\n }\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
|