@onerjs/core 9.0.0 → 9.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.js +6 -1
- package/Cameras/targetCamera.pure.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.renderTarget.pure.js +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +15 -1
- package/Engines/abstractEngine.pure.js +12 -4
- package/Engines/abstractEngine.pure.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 +1 -0
- package/Engines/thinEngine.pure.js +13 -2
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +217 -17
- package/Engines/thinNativeEngine.pure.js +1431 -164
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.js +6 -1
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +12 -1
- package/Engines/webgpuEngine.pure.js +8 -0
- package/Engines/webgpuEngine.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/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/flowGraphSceneTickEventBlock.pure.d.ts +16 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +20 -6
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.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 +7 -7
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +52 -35
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.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/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 +2 -1
- package/FlowGraph/flowGraph.js +3 -2
- 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/flowGraphContext.js +1 -0
- package/FlowGraph/flowGraphContext.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 +2 -2
- package/FlowGraph/serialization.js +2 -2
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +1 -1
- package/FlowGraph/typeDefinitions.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 +2 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/pure.js +1 -0
- package/FrameGraph/Node/Blocks/pure.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/Rendering/geometryRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.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/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +1 -0
- package/FrameGraph/pure.js +1 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- 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 +98 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +2 -2
- 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/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/Textures/Procedurals/proceduralTexture.pure.d.ts +1 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +31 -7
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/mirrorTexture.pure.js +3 -1
- package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
- package/Materials/Textures/texture.pure.js +8 -2
- package/Materials/Textures/texture.pure.js.map +1 -1
- 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 +4 -0
- package/Materials/index.js +4 -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/pure.d.ts +4 -0
- package/Materials/pure.js +4 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +8 -0
- package/Materials/standardMaterial.pure.js +24 -2
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.js +1 -1
- 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/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 +160 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +219 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +32 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +114 -21
- 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 +12 -0
- package/Meshes/abstractMesh.pure.js +32 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/pure.d.ts +1 -0
- package/Meshes/pure.js +1 -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/minMaxReducer.pure.d.ts +6 -0
- package/Misc/minMaxReducer.pure.js +10 -0
- package/Misc/minMaxReducer.pure.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 +2 -0
- package/Particles/gpuParticleSystem.pure.js +12 -4
- 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 +6 -0
- package/Particles/thinParticleSystem.pure.js +70 -9
- package/Particles/thinParticleSystem.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/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +43 -18
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.d.ts +9 -0
- package/Rendering/depthRenderer.pure.js +12 -0
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +4 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +6 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +4 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +8 -0
- 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.js +4 -1
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +3 -3
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.js +6 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- 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/lightsFragmentFunctions.js +27 -3
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.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.vertex.js +2 -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/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/minmaxRedux.fragment.js +20 -3
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.pure.js +2 -1
- package/XR/features/WebXRSpaceWarp.pure.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 +13 -2
- package/scene.pure.js +28 -4
- package/scene.pure.js.map +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/** This file must only contain pure code and pure imports */
|
|
2
|
+
import { __esDecorate, __runInitializers } from "../../tslib.es6.js";
|
|
3
|
+
import { serialize } from "../../Misc/decorators.js";
|
|
4
|
+
import { RegisterClass } from "../../Misc/typeStore.js";
|
|
5
|
+
|
|
6
|
+
import { MaterialPluginBase } from "../materialPluginBase.pure.js";
|
|
7
|
+
/**
|
|
8
|
+
* Displays equal-contribution Gaussian fragment overdraw, independently of color and Gaussian opacity.
|
|
9
|
+
* Uses additive ONE+ONE RGB blending and disables depth writes while active; keeps depth testing.
|
|
10
|
+
* Restores the material's prior blending/depth settings on disable or disposal.
|
|
11
|
+
* See https://playground.babylonjs.com/#D4U720#1
|
|
12
|
+
*/
|
|
13
|
+
let GaussianSplattingOverdrawMaterialPlugin = (() => {
|
|
14
|
+
var _a;
|
|
15
|
+
let _classSuper = MaterialPluginBase;
|
|
16
|
+
let _instanceExtraInitializers = [];
|
|
17
|
+
let _get_isEnabled_decorators;
|
|
18
|
+
let _get_intensity_decorators;
|
|
19
|
+
return _a = class GaussianSplattingOverdrawMaterialPlugin extends _classSuper {
|
|
20
|
+
/**
|
|
21
|
+
* Whether equal-contribution additive rendering is active. Defaults to true.
|
|
22
|
+
*/
|
|
23
|
+
get isEnabled() {
|
|
24
|
+
return this._isEnabled;
|
|
25
|
+
}
|
|
26
|
+
set isEnabled(value) {
|
|
27
|
+
if (value === this._isEnabled) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this._isEnabled = value;
|
|
31
|
+
if (value) {
|
|
32
|
+
this._originalAlphaMode = this._material.alphaMode;
|
|
33
|
+
this._originalDisableDepthWrite = this._material.disableDepthWrite;
|
|
34
|
+
this._originalForceDepthWrite = this._material.forceDepthWrite;
|
|
35
|
+
}
|
|
36
|
+
this._applyBlendState();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Equal RGB contribution per surviving fragment. Defaults to 1/256 (256 overlaps reach white).
|
|
40
|
+
*/
|
|
41
|
+
get intensity() {
|
|
42
|
+
return this._intensity;
|
|
43
|
+
}
|
|
44
|
+
set intensity(value) {
|
|
45
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
46
|
+
throw new RangeError("intensity must be a positive finite number.");
|
|
47
|
+
}
|
|
48
|
+
this._intensity = value;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Attaches the additive overdraw visualization to a Gaussian splat material.
|
|
52
|
+
* @param material The material to visualize
|
|
53
|
+
*/
|
|
54
|
+
constructor(material) {
|
|
55
|
+
super(material, "GaussianSplattingOverdraw", 220);
|
|
56
|
+
this._isEnabled = (__runInitializers(this, _instanceExtraInitializers), true);
|
|
57
|
+
this._intensity = 1 / 256;
|
|
58
|
+
this._originalAlphaMode = material.alphaMode;
|
|
59
|
+
this._originalDisableDepthWrite = material.disableDepthWrite;
|
|
60
|
+
this._originalForceDepthWrite = material.forceDepthWrite;
|
|
61
|
+
this._applyBlendState();
|
|
62
|
+
this._enable(true);
|
|
63
|
+
}
|
|
64
|
+
_applyBlendState() {
|
|
65
|
+
if (this._isEnabled) {
|
|
66
|
+
this._material.alphaMode = 6;
|
|
67
|
+
this._material.disableDepthWrite = true;
|
|
68
|
+
this._material.forceDepthWrite = false;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
if (this._material.alphaMode === 6) {
|
|
72
|
+
this._material.alphaMode = this._originalAlphaMode;
|
|
73
|
+
}
|
|
74
|
+
if (this._material.disableDepthWrite) {
|
|
75
|
+
this._material.disableDepthWrite = this._originalDisableDepthWrite;
|
|
76
|
+
}
|
|
77
|
+
if (!this._material.forceDepthWrite) {
|
|
78
|
+
this._material.forceDepthWrite = this._originalForceDepthWrite;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** @returns The registered plugin class name */
|
|
83
|
+
getClassName() {
|
|
84
|
+
return "GaussianSplattingOverdrawMaterialPlugin";
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @param shaderLanguage Shader language to test
|
|
88
|
+
* @returns Whether the shader language is supported
|
|
89
|
+
*/
|
|
90
|
+
isCompatible(shaderLanguage) {
|
|
91
|
+
return shaderLanguage === 0 /* ShaderLanguage.GLSL */ || shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @param shaderType Vertex or fragment
|
|
95
|
+
* @param shaderLanguage GLSL or WGSL
|
|
96
|
+
* @returns Code inserted into the Gaussian shader, or null
|
|
97
|
+
*/
|
|
98
|
+
getCustomCode(shaderType, shaderLanguage = 0 /* ShaderLanguage.GLSL */) {
|
|
99
|
+
if (shaderType !== "fragment") {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const wgsl = shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
103
|
+
return {
|
|
104
|
+
CUSTOM_FRAGMENT_DEFINITIONS: wgsl
|
|
105
|
+
? "uniform splatOverdrawEnabled: f32;\nuniform splatOverdrawIntensity: f32;"
|
|
106
|
+
: "uniform float splatOverdrawEnabled;\nuniform float splatOverdrawIntensity;",
|
|
107
|
+
CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: wgsl
|
|
108
|
+
? "if (uniforms.splatOverdrawEnabled > 0.5) { if (finalColor.a <= 0.0) { discard; } finalColor = vec4f(vec3f(uniforms.splatOverdrawIntensity), 1.0); }"
|
|
109
|
+
: "if (splatOverdrawEnabled > 0.5) { if (finalColor.a <= 0.0) discard; finalColor = vec4(vec3(splatOverdrawIntensity), 1.0); }",
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** @returns Shader uniforms for both languages */
|
|
113
|
+
getUniforms() {
|
|
114
|
+
return { externalUniforms: ["splatOverdrawEnabled", "splatOverdrawIntensity"] };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Binds the overdraw visualization uniforms for the rendered submesh.
|
|
118
|
+
* @param _uniformBuffer Unused
|
|
119
|
+
* @param _scene Current scene
|
|
120
|
+
* @param _engine Current engine
|
|
121
|
+
* @param subMesh Rendered submesh
|
|
122
|
+
*/
|
|
123
|
+
bindForSubMesh(_uniformBuffer, _scene, _engine, subMesh) {
|
|
124
|
+
subMesh.effect?.setFloat("splatOverdrawEnabled", this._isEnabled ? 1 : 0);
|
|
125
|
+
subMesh.effect?.setFloat("splatOverdrawIntensity", this._intensity);
|
|
126
|
+
}
|
|
127
|
+
/** Restores blend/depth settings owned by this plugin. */
|
|
128
|
+
dispose() {
|
|
129
|
+
this.isEnabled = false;
|
|
130
|
+
}
|
|
131
|
+
/** @returns Serialized settings, including the pre-plugin blend/depth state */
|
|
132
|
+
serialize() {
|
|
133
|
+
return {
|
|
134
|
+
...super.serialize(),
|
|
135
|
+
originalAlphaMode: this._originalAlphaMode,
|
|
136
|
+
originalDisableDepthWrite: this._originalDisableDepthWrite,
|
|
137
|
+
originalForceDepthWrite: this._originalForceDepthWrite,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Restores original blend settings after material parsing.
|
|
142
|
+
* @param source Serialized plugin
|
|
143
|
+
* @param scene Scene containing the material
|
|
144
|
+
* @param rootUrl Asset root URL
|
|
145
|
+
*/
|
|
146
|
+
parse(source, scene, rootUrl) {
|
|
147
|
+
super.parse(source, scene, rootUrl);
|
|
148
|
+
if (!this._isEnabled) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
this._originalAlphaMode = source.originalAlphaMode ?? this._originalAlphaMode;
|
|
152
|
+
this._originalDisableDepthWrite = source.originalDisableDepthWrite ?? this._originalDisableDepthWrite;
|
|
153
|
+
this._originalForceDepthWrite = source.originalForceDepthWrite ?? this._originalForceDepthWrite;
|
|
154
|
+
this._applyBlendState();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Copies the original blend state as well as the public settings.
|
|
158
|
+
* @param plugin Destination plugin
|
|
159
|
+
*/
|
|
160
|
+
copyTo(plugin) {
|
|
161
|
+
const target = plugin;
|
|
162
|
+
super.copyTo(plugin);
|
|
163
|
+
if (!target._isEnabled) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
target._originalAlphaMode = this._originalAlphaMode;
|
|
167
|
+
target._originalDisableDepthWrite = this._originalDisableDepthWrite;
|
|
168
|
+
target._originalForceDepthWrite = this._originalForceDepthWrite;
|
|
169
|
+
target._applyBlendState();
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
(() => {
|
|
173
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
174
|
+
_get_isEnabled_decorators = [serialize()];
|
|
175
|
+
_get_intensity_decorators = [serialize()];
|
|
176
|
+
__esDecorate(_a, null, _get_isEnabled_decorators, { kind: "getter", name: "isEnabled", static: false, private: false, access: { has: obj => "isEnabled" in obj, get: obj => obj.isEnabled }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
177
|
+
__esDecorate(_a, null, _get_intensity_decorators, { kind: "getter", name: "intensity", static: false, private: false, access: { has: obj => "intensity" in obj, get: obj => obj.intensity }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
178
|
+
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
179
|
+
})(),
|
|
180
|
+
_a;
|
|
181
|
+
})();
|
|
182
|
+
export { GaussianSplattingOverdrawMaterialPlugin };
|
|
183
|
+
let _Registered = false;
|
|
184
|
+
/** Registers the plugin for material parsing; safe to call repeatedly. */
|
|
185
|
+
export function RegisterGaussianSplattingOverdrawMaterialPlugin() {
|
|
186
|
+
if (!_Registered) {
|
|
187
|
+
_Registered = true;
|
|
188
|
+
RegisterClass("BABYLON.GaussianSplattingOverdrawMaterialPlugin", GaussianSplattingOverdrawMaterialPlugin);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=gaussianSplattingOverdrawMaterialPlugin.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianSplattingOverdrawMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;;AAO7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIhE;;;;;GAKG;IACU,uCAAuC;;sBAAS,kBAAkB;;;;sBAAlE,uCAAwC,SAAQ,WAAkB;YAO3E;;eAEG;YAEH,IAAW,SAAS;gBAChB,OAAO,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC;YACD,IAAW,SAAS,CAAC,KAAc;gBAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC5B,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACR,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;oBACnD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;oBACnE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;gBACnE,CAAC;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC;YAED;;eAEG;YAEH,IAAW,SAAS;gBAChB,OAAO,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC;YACD,IAAW,SAAS,CAAC,KAAa;gBAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACxC,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAC5B,CAAC;YAED;;;eAGG;YACH,YAAY,QAAmC;gBAC3C,KAAK,CAAC,QAAQ,EAAE,2BAA2B,EAAE,GAAG,CAAC,CAAC;gBA7C9C,eAAU,IADT,mDAAuC,EAC3B,IAAI,EAAC;gBAClB,eAAU,GAAG,CAAC,GAAG,GAAG,CAAC;gBA6CzB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC;gBAC7C,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,iBAAiB,CAAC;gBAC7D,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,eAAe,CAAC;gBACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAEO,gBAAgB;gBACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACJ,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;wBACtD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;oBACvD,CAAC;oBACD,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;wBACnC,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC;oBACvE,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;wBAClC,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC;oBACnE,CAAC;gBACL,CAAC;YACL,CAAC;YAED,gDAAgD;YAChC,YAAY;gBACxB,OAAO,yCAAyC,CAAC;YACrD,CAAC;YAED;;;eAGG;YACa,YAAY,CAAC,cAA8B;gBACvD,OAAO,cAAc,gCAAwB,IAAI,cAAc,gCAAwB,CAAC;YAC5F,CAAC;YAED;;;;eAIG;YACa,aAAa,CAAC,UAAkB,EAAE,cAAc,8BAAsB;gBAClF,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,MAAM,IAAI,GAAG,cAAc,gCAAwB,CAAC;gBACpD,OAAO;oBACH,2BAA2B,EAAE,IAAI;wBAC7B,CAAC,CAAC,0EAA0E;wBAC5E,CAAC,CAAC,4EAA4E;oBAClF,gCAAgC,EAAE,IAAI;wBAClC,CAAC,CAAC,qJAAqJ;wBACvJ,CAAC,CAAC,6HAA6H;iBACtI,CAAC;YACN,CAAC;YAED,kDAAkD;YAClC,WAAW;gBACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,EAAE,CAAC;YACpF,CAAC;YAED;;;;;;eAMG;YACa,cAAc,CAAC,cAA6B,EAAE,MAAa,EAAE,OAAuB,EAAE,OAAgB;gBAClH,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,wBAAwB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACxE,CAAC;YAED,0DAA0D;YAC1C,OAAO;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,CAAC;YAED,+EAA+E;YAC/D,SAAS;gBACrB,OAAO;oBACH,GAAG,KAAK,CAAC,SAAS,EAAE;oBACpB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;oBAC1C,yBAAyB,EAAE,IAAI,CAAC,0BAA0B;oBAC1D,uBAAuB,EAAE,IAAI,CAAC,wBAAwB;iBACzD,CAAC;YACN,CAAC;YAED;;;;;eAKG;YACa,KAAK,CAAC,MAAW,EAAE,KAAY,EAAE,OAAe;gBAC5D,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACnB,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,CAAC;gBAC9E,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,yBAAyB,IAAI,IAAI,CAAC,0BAA0B,CAAC;gBACtG,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,uBAAuB,IAAI,IAAI,CAAC,wBAAwB,CAAC;gBAChG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC;YAED;;;eAGG;YACa,MAAM,CAAC,MAA0B;gBAC7C,MAAM,MAAM,GAAG,MAAiD,CAAC;gBACjE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACrB,OAAO;gBACX,CAAC;gBACD,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpD,MAAM,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;gBACpE,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;gBAChE,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC9B,CAAC;;;;yCA9JA,SAAS,EAAE;yCAoBX,SAAS,EAAE;YAnBZ,gLAAW,SAAS,6DAEnB;YAkBD,gLAAW,SAAS,6DAEnB;;;;;SAjCQ,uCAAuC;AA2KpD,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,0EAA0E;AAC1E,MAAM,UAAU,+CAA+C;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,WAAW,GAAG,IAAI,CAAC;QACnB,aAAa,CAAC,iDAAiD,EAAE,uCAAuC,CAAC,CAAC;IAC9G,CAAC;AACL,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\r\nimport { type SubMesh } from \"../../Meshes/subMesh.pure\";\r\nimport { type UniformBuffer } from \"../uniformBuffer\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { type GaussianSplattingMaterial } from \"./gaussianSplattingMaterial.pure\";\r\n\r\n/**\r\n * Displays equal-contribution Gaussian fragment overdraw, independently of color and Gaussian opacity.\r\n * Uses additive ONE+ONE RGB blending and disables depth writes while active; keeps depth testing.\r\n * Restores the material's prior blending/depth settings on disable or disposal.\r\n * See https://playground.babylonjs.com/#D4U720#1\r\n */\r\nexport class GaussianSplattingOverdrawMaterialPlugin extends MaterialPluginBase {\r\n private _isEnabled = true;\r\n private _intensity = 1 / 256;\r\n private _originalAlphaMode: number;\r\n private _originalDisableDepthWrite: boolean;\r\n private _originalForceDepthWrite: boolean;\r\n\r\n /**\r\n * Whether equal-contribution additive rendering is active. Defaults to true.\r\n */\r\n @serialize()\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n public set isEnabled(value: boolean) {\r\n if (value === this._isEnabled) {\r\n return;\r\n }\r\n this._isEnabled = value;\r\n if (value) {\r\n this._originalAlphaMode = this._material.alphaMode;\r\n this._originalDisableDepthWrite = this._material.disableDepthWrite;\r\n this._originalForceDepthWrite = this._material.forceDepthWrite;\r\n }\r\n this._applyBlendState();\r\n }\r\n\r\n /**\r\n * Equal RGB contribution per surviving fragment. Defaults to 1/256 (256 overlaps reach white).\r\n */\r\n @serialize()\r\n public get intensity(): number {\r\n return this._intensity;\r\n }\r\n public set intensity(value: number) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new RangeError(\"intensity must be a positive finite number.\");\r\n }\r\n this._intensity = value;\r\n }\r\n\r\n /**\r\n * Attaches the additive overdraw visualization to a Gaussian splat material.\r\n * @param material The material to visualize\r\n */\r\n constructor(material: GaussianSplattingMaterial) {\r\n super(material, \"GaussianSplattingOverdraw\", 220);\r\n this._originalAlphaMode = material.alphaMode;\r\n this._originalDisableDepthWrite = material.disableDepthWrite;\r\n this._originalForceDepthWrite = material.forceDepthWrite;\r\n this._applyBlendState();\r\n this._enable(true);\r\n }\r\n\r\n private _applyBlendState(): void {\r\n if (this._isEnabled) {\r\n this._material.alphaMode = Constants.ALPHA_ONEONE;\r\n this._material.disableDepthWrite = true;\r\n this._material.forceDepthWrite = false;\r\n } else {\r\n if (this._material.alphaMode === Constants.ALPHA_ONEONE) {\r\n this._material.alphaMode = this._originalAlphaMode;\r\n }\r\n if (this._material.disableDepthWrite) {\r\n this._material.disableDepthWrite = this._originalDisableDepthWrite;\r\n }\r\n if (!this._material.forceDepthWrite) {\r\n this._material.forceDepthWrite = this._originalForceDepthWrite;\r\n }\r\n }\r\n }\r\n\r\n /** @returns The registered plugin class name */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingOverdrawMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * @param shaderLanguage Shader language to test\r\n * @returns Whether the shader language is supported\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n return shaderLanguage === ShaderLanguage.GLSL || shaderLanguage === ShaderLanguage.WGSL;\r\n }\r\n\r\n /**\r\n * @param shaderType Vertex or fragment\r\n * @param shaderLanguage GLSL or WGSL\r\n * @returns Code inserted into the Gaussian shader, or null\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType !== \"fragment\") {\r\n return null;\r\n }\r\n const wgsl = shaderLanguage === ShaderLanguage.WGSL;\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: wgsl\r\n ? \"uniform splatOverdrawEnabled: f32;\\nuniform splatOverdrawIntensity: f32;\"\r\n : \"uniform float splatOverdrawEnabled;\\nuniform float splatOverdrawIntensity;\",\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: wgsl\r\n ? \"if (uniforms.splatOverdrawEnabled > 0.5) { if (finalColor.a <= 0.0) { discard; } finalColor = vec4f(vec3f(uniforms.splatOverdrawIntensity), 1.0); }\"\r\n : \"if (splatOverdrawEnabled > 0.5) { if (finalColor.a <= 0.0) discard; finalColor = vec4(vec3(splatOverdrawIntensity), 1.0); }\",\r\n };\r\n }\r\n\r\n /** @returns Shader uniforms for both languages */\r\n public override getUniforms(): { externalUniforms: string[] } {\r\n return { externalUniforms: [\"splatOverdrawEnabled\", \"splatOverdrawIntensity\"] };\r\n }\r\n\r\n /**\r\n * Binds the overdraw visualization uniforms for the rendered submesh.\r\n * @param _uniformBuffer Unused\r\n * @param _scene Current scene\r\n * @param _engine Current engine\r\n * @param subMesh Rendered submesh\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n subMesh.effect?.setFloat(\"splatOverdrawEnabled\", this._isEnabled ? 1 : 0);\r\n subMesh.effect?.setFloat(\"splatOverdrawIntensity\", this._intensity);\r\n }\r\n\r\n /** Restores blend/depth settings owned by this plugin. */\r\n public override dispose(): void {\r\n this.isEnabled = false;\r\n }\r\n\r\n /** @returns Serialized settings, including the pre-plugin blend/depth state */\r\n public override serialize(): any {\r\n return {\r\n ...super.serialize(),\r\n originalAlphaMode: this._originalAlphaMode,\r\n originalDisableDepthWrite: this._originalDisableDepthWrite,\r\n originalForceDepthWrite: this._originalForceDepthWrite,\r\n };\r\n }\r\n\r\n /**\r\n * Restores original blend settings after material parsing.\r\n * @param source Serialized plugin\r\n * @param scene Scene containing the material\r\n * @param rootUrl Asset root URL\r\n */\r\n public override parse(source: any, scene: Scene, rootUrl: string): void {\r\n super.parse(source, scene, rootUrl);\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n this._originalAlphaMode = source.originalAlphaMode ?? this._originalAlphaMode;\r\n this._originalDisableDepthWrite = source.originalDisableDepthWrite ?? this._originalDisableDepthWrite;\r\n this._originalForceDepthWrite = source.originalForceDepthWrite ?? this._originalForceDepthWrite;\r\n this._applyBlendState();\r\n }\r\n\r\n /**\r\n * Copies the original blend state as well as the public settings.\r\n * @param plugin Destination plugin\r\n */\r\n public override copyTo(plugin: MaterialPluginBase): void {\r\n const target = plugin as GaussianSplattingOverdrawMaterialPlugin;\r\n super.copyTo(plugin);\r\n if (!target._isEnabled) {\r\n return;\r\n }\r\n target._originalAlphaMode = this._originalAlphaMode;\r\n target._originalDisableDepthWrite = this._originalDisableDepthWrite;\r\n target._originalForceDepthWrite = this._originalForceDepthWrite;\r\n target._applyBlendState();\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/** Registers the plugin for material parsing; safe to call repeatedly. */\r\nexport function RegisterGaussianSplattingOverdrawMaterialPlugin(): void {\r\n if (!_Registered) {\r\n _Registered = true;\r\n RegisterClass(\"BABYLON.GaussianSplattingOverdrawMaterialPlugin\", GaussianSplattingOverdrawMaterialPlugin);\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./gaussianSplattingSizeMaterialPlugin.pure.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./gaussianSplattingSizeMaterialPlugin.pure.js";
|
|
2
|
+
import { RegisterGaussianSplattingSizeMaterialPlugin } from "./gaussianSplattingSizeMaterialPlugin.pure.js";
|
|
3
|
+
RegisterGaussianSplattingSizeMaterialPlugin();
|
|
4
|
+
//# sourceMappingURL=gaussianSplattingSizeMaterialPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianSplattingSizeMaterialPlugin.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.ts"],"names":[],"mappings":"AAAA,cAAc,4CAA4C,CAAC;AAE3D,OAAO,EAAE,2CAA2C,EAAE,MAAM,4CAA4C,CAAC;AACzG,2CAA2C,EAAE,CAAC","sourcesContent":["export * from \"./gaussianSplattingSizeMaterialPlugin.pure\";\r\n\r\nimport { RegisterGaussianSplattingSizeMaterialPlugin } from \"./gaussianSplattingSizeMaterialPlugin.pure\";\r\nRegisterGaussianSplattingSizeMaterialPlugin();\r\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** This file must only contain pure code and pure imports */
|
|
2
|
+
import { type Nullable } from "../../types.js";
|
|
3
|
+
import { type Scene } from "../../scene.pure.js";
|
|
4
|
+
import { type AbstractEngine } from "../../Engines/abstractEngine.pure.js";
|
|
5
|
+
import { type SubMesh } from "../../Meshes/subMesh.pure.js";
|
|
6
|
+
import { type UniformBuffer } from "../uniformBuffer.js";
|
|
7
|
+
import { MaterialPluginBase } from "../materialPluginBase.pure.js";
|
|
8
|
+
import { ShaderLanguage } from "../shaderLanguage.js";
|
|
9
|
+
import { type GaussianSplattingMaterial } from "./gaussianSplattingMaterial.pure.js";
|
|
10
|
+
/**
|
|
11
|
+
* Visualizes the longest projected Gaussian ellipse diameter in render-target pixels.
|
|
12
|
+
* Smaller splats are whiter: brightness = sizeScale / (sizeScale + diameter).
|
|
13
|
+
* See https://playground.babylonjs.com/#8FOB3C#0
|
|
14
|
+
*/
|
|
15
|
+
export declare class GaussianSplattingSizeMaterialPlugin extends MaterialPluginBase {
|
|
16
|
+
private _isEnabled;
|
|
17
|
+
private _sizeScale;
|
|
18
|
+
/**
|
|
19
|
+
* Whether this plugin replaces the splat's RGB color. Disabling it restores normal color without removing the plugin.
|
|
20
|
+
*/
|
|
21
|
+
get isEnabled(): boolean;
|
|
22
|
+
set isEnabled(value: boolean);
|
|
23
|
+
/**
|
|
24
|
+
* Positive half-brightness diameter, measured in render-target pixels. Defaults to 16.
|
|
25
|
+
*/
|
|
26
|
+
get sizeScale(): number;
|
|
27
|
+
set sizeScale(value: number);
|
|
28
|
+
/**
|
|
29
|
+
* Attaches the projected-size visualization to a Gaussian splat material.
|
|
30
|
+
* @param material The material to visualize
|
|
31
|
+
*/
|
|
32
|
+
constructor(material: GaussianSplattingMaterial);
|
|
33
|
+
/** @returns The registered plugin class name */
|
|
34
|
+
getClassName(): string;
|
|
35
|
+
/**
|
|
36
|
+
* @param shaderLanguage Shader language to test
|
|
37
|
+
* @returns Whether the shader language is supported
|
|
38
|
+
*/
|
|
39
|
+
isCompatible(shaderLanguage: ShaderLanguage): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @param shaderType Vertex or fragment
|
|
42
|
+
* @param shaderLanguage GLSL or WGSL
|
|
43
|
+
* @returns Code inserted into the Gaussian shader, or null
|
|
44
|
+
*/
|
|
45
|
+
getCustomCode(shaderType: string, shaderLanguage?: ShaderLanguage): Nullable<{
|
|
46
|
+
[pointName: string]: string;
|
|
47
|
+
}>;
|
|
48
|
+
/** @returns Shader uniforms for both languages */
|
|
49
|
+
getUniforms(): {
|
|
50
|
+
externalUniforms: string[];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Binds the projected-size visualization uniforms for the rendered submesh.
|
|
54
|
+
* @param _uniformBuffer Unused
|
|
55
|
+
* @param _scene Current scene
|
|
56
|
+
* @param _engine Current engine
|
|
57
|
+
* @param subMesh Rendered submesh
|
|
58
|
+
*/
|
|
59
|
+
bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void;
|
|
60
|
+
}
|
|
61
|
+
/** Registers the plugin for material parsing; safe to call repeatedly. */
|
|
62
|
+
export declare function RegisterGaussianSplattingSizeMaterialPlugin(): void;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** This file must only contain pure code and pure imports */
|
|
2
|
+
import { __esDecorate, __runInitializers } from "../../tslib.es6.js";
|
|
3
|
+
import { serialize } from "../../Misc/decorators.js";
|
|
4
|
+
import { RegisterClass } from "../../Misc/typeStore.js";
|
|
5
|
+
import { MaterialPluginBase } from "../materialPluginBase.pure.js";
|
|
6
|
+
/**
|
|
7
|
+
* Visualizes the longest projected Gaussian ellipse diameter in render-target pixels.
|
|
8
|
+
* Smaller splats are whiter: brightness = sizeScale / (sizeScale + diameter).
|
|
9
|
+
* See https://playground.babylonjs.com/#8FOB3C#0
|
|
10
|
+
*/
|
|
11
|
+
let GaussianSplattingSizeMaterialPlugin = (() => {
|
|
12
|
+
var _a;
|
|
13
|
+
let _classSuper = MaterialPluginBase;
|
|
14
|
+
let _instanceExtraInitializers = [];
|
|
15
|
+
let _get_isEnabled_decorators;
|
|
16
|
+
let _get_sizeScale_decorators;
|
|
17
|
+
return _a = class GaussianSplattingSizeMaterialPlugin extends _classSuper {
|
|
18
|
+
/**
|
|
19
|
+
* Whether this plugin replaces the splat's RGB color. Disabling it restores normal color without removing the plugin.
|
|
20
|
+
*/
|
|
21
|
+
get isEnabled() {
|
|
22
|
+
return this._isEnabled;
|
|
23
|
+
}
|
|
24
|
+
set isEnabled(value) {
|
|
25
|
+
this._isEnabled = value;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Positive half-brightness diameter, measured in render-target pixels. Defaults to 16.
|
|
29
|
+
*/
|
|
30
|
+
get sizeScale() {
|
|
31
|
+
return this._sizeScale;
|
|
32
|
+
}
|
|
33
|
+
set sizeScale(value) {
|
|
34
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
35
|
+
throw new RangeError("sizeScale must be a positive finite number of pixels.");
|
|
36
|
+
}
|
|
37
|
+
this._sizeScale = value;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Attaches the projected-size visualization to a Gaussian splat material.
|
|
41
|
+
* @param material The material to visualize
|
|
42
|
+
*/
|
|
43
|
+
constructor(material) {
|
|
44
|
+
super(material, "GaussianSplattingSize", 210);
|
|
45
|
+
this._isEnabled = (__runInitializers(this, _instanceExtraInitializers), true);
|
|
46
|
+
this._sizeScale = 16;
|
|
47
|
+
this._enable(true);
|
|
48
|
+
}
|
|
49
|
+
/** @returns The registered plugin class name */
|
|
50
|
+
getClassName() {
|
|
51
|
+
return "GaussianSplattingSizeMaterialPlugin";
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @param shaderLanguage Shader language to test
|
|
55
|
+
* @returns Whether the shader language is supported
|
|
56
|
+
*/
|
|
57
|
+
isCompatible(shaderLanguage) {
|
|
58
|
+
return shaderLanguage === 0 /* ShaderLanguage.GLSL */ || shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @param shaderType Vertex or fragment
|
|
62
|
+
* @param shaderLanguage GLSL or WGSL
|
|
63
|
+
* @returns Code inserted into the Gaussian shader, or null
|
|
64
|
+
*/
|
|
65
|
+
getCustomCode(shaderType, shaderLanguage = 0 /* ShaderLanguage.GLSL */) {
|
|
66
|
+
const wgsl = shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
67
|
+
if (shaderType === "vertex") {
|
|
68
|
+
return {
|
|
69
|
+
CUSTOM_VERTEX_DEFINITIONS: wgsl
|
|
70
|
+
? "varying vSplatSizeBrightness: f32;\nuniform splatSizeScale: f32;"
|
|
71
|
+
: "varying float vSplatSizeBrightness;\nuniform float splatSizeScale;",
|
|
72
|
+
CUSTOM_VERTEX_UPDATE: wgsl ? "vertexOutputs.vSplatSizeBrightness = 0.0;" : "vSplatSizeBrightness = 0.0;",
|
|
73
|
+
CUSTOM_GAUSSIAN_SPLAT_PROJECTED_SIZE: wgsl
|
|
74
|
+
? "vertexOutputs.vSplatSizeBrightness = uniforms.splatSizeScale / (uniforms.splatSizeScale + 2.0 * max(length(majorAxis * scale), length(minorAxis * scale)));"
|
|
75
|
+
: "vSplatSizeBrightness = splatSizeScale / (splatSizeScale + 2.0 * max(length(majorAxis * scale), length(minorAxis * scale)));",
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (shaderType === "fragment") {
|
|
79
|
+
return {
|
|
80
|
+
CUSTOM_FRAGMENT_DEFINITIONS: wgsl
|
|
81
|
+
? "varying vSplatSizeBrightness: f32;\nuniform splatSizeEnabled: f32;"
|
|
82
|
+
: "varying float vSplatSizeBrightness;\nuniform float splatSizeEnabled;",
|
|
83
|
+
CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: wgsl
|
|
84
|
+
? "if (uniforms.splatSizeEnabled > 0.5) { finalColor = vec4f(vec3f(fragmentInputs.vSplatSizeBrightness), finalColor.a); }"
|
|
85
|
+
: "if (splatSizeEnabled > 0.5) { finalColor = vec4(vec3(vSplatSizeBrightness), finalColor.a); }",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/** @returns Shader uniforms for both languages */
|
|
91
|
+
getUniforms() {
|
|
92
|
+
return { externalUniforms: ["splatSizeScale", "splatSizeEnabled"] };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Binds the projected-size visualization uniforms for the rendered submesh.
|
|
96
|
+
* @param _uniformBuffer Unused
|
|
97
|
+
* @param _scene Current scene
|
|
98
|
+
* @param _engine Current engine
|
|
99
|
+
* @param subMesh Rendered submesh
|
|
100
|
+
*/
|
|
101
|
+
bindForSubMesh(_uniformBuffer, _scene, _engine, subMesh) {
|
|
102
|
+
subMesh.effect?.setFloat("splatSizeScale", this._sizeScale);
|
|
103
|
+
subMesh.effect?.setFloat("splatSizeEnabled", this._isEnabled ? 1 : 0);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
(() => {
|
|
107
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
108
|
+
_get_isEnabled_decorators = [serialize()];
|
|
109
|
+
_get_sizeScale_decorators = [serialize()];
|
|
110
|
+
__esDecorate(_a, null, _get_isEnabled_decorators, { kind: "getter", name: "isEnabled", static: false, private: false, access: { has: obj => "isEnabled" in obj, get: obj => obj.isEnabled }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
111
|
+
__esDecorate(_a, null, _get_sizeScale_decorators, { kind: "getter", name: "sizeScale", static: false, private: false, access: { has: obj => "sizeScale" in obj, get: obj => obj.sizeScale }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
112
|
+
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
113
|
+
})(),
|
|
114
|
+
_a;
|
|
115
|
+
})();
|
|
116
|
+
export { GaussianSplattingSizeMaterialPlugin };
|
|
117
|
+
let _Registered = false;
|
|
118
|
+
/** Registers the plugin for material parsing; safe to call repeatedly. */
|
|
119
|
+
export function RegisterGaussianSplattingSizeMaterialPlugin() {
|
|
120
|
+
if (!_Registered) {
|
|
121
|
+
_Registered = true;
|
|
122
|
+
RegisterClass("BABYLON.GaussianSplattingSizeMaterialPlugin", GaussianSplattingSizeMaterialPlugin);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=gaussianSplattingSizeMaterialPlugin.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussianSplattingSizeMaterialPlugin.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine.pure\";\r\nimport { type SubMesh } from \"../../Meshes/subMesh.pure\";\r\nimport { type UniformBuffer } from \"../uniformBuffer\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { type GaussianSplattingMaterial } from \"./gaussianSplattingMaterial.pure\";\r\n\r\n/**\r\n * Visualizes the longest projected Gaussian ellipse diameter in render-target pixels.\r\n * Smaller splats are whiter: brightness = sizeScale / (sizeScale + diameter).\r\n * See https://playground.babylonjs.com/#8FOB3C#0\r\n */\r\nexport class GaussianSplattingSizeMaterialPlugin extends MaterialPluginBase {\r\n private _isEnabled = true;\r\n private _sizeScale = 16;\r\n\r\n /**\r\n * Whether this plugin replaces the splat's RGB color. Disabling it restores normal color without removing the plugin.\r\n */\r\n @serialize()\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n }\r\n\r\n /**\r\n * Positive half-brightness diameter, measured in render-target pixels. Defaults to 16.\r\n */\r\n @serialize()\r\n public get sizeScale(): number {\r\n return this._sizeScale;\r\n }\r\n public set sizeScale(value: number) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new RangeError(\"sizeScale must be a positive finite number of pixels.\");\r\n }\r\n this._sizeScale = value;\r\n }\r\n\r\n /**\r\n * Attaches the projected-size visualization to a Gaussian splat material.\r\n * @param material The material to visualize\r\n */\r\n constructor(material: GaussianSplattingMaterial) {\r\n super(material, \"GaussianSplattingSize\", 210);\r\n this._enable(true);\r\n }\r\n\r\n /** @returns The registered plugin class name */\r\n public override getClassName(): string {\r\n return \"GaussianSplattingSizeMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * @param shaderLanguage Shader language to test\r\n * @returns Whether the shader language is supported\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n return shaderLanguage === ShaderLanguage.GLSL || shaderLanguage === ShaderLanguage.WGSL;\r\n }\r\n\r\n /**\r\n * @param shaderType Vertex or fragment\r\n * @param shaderLanguage GLSL or WGSL\r\n * @returns Code inserted into the Gaussian shader, or null\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n const wgsl = shaderLanguage === ShaderLanguage.WGSL;\r\n if (shaderType === \"vertex\") {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: wgsl\r\n ? \"varying vSplatSizeBrightness: f32;\\nuniform splatSizeScale: f32;\"\r\n : \"varying float vSplatSizeBrightness;\\nuniform float splatSizeScale;\",\r\n CUSTOM_VERTEX_UPDATE: wgsl ? \"vertexOutputs.vSplatSizeBrightness = 0.0;\" : \"vSplatSizeBrightness = 0.0;\",\r\n CUSTOM_GAUSSIAN_SPLAT_PROJECTED_SIZE: wgsl\r\n ? \"vertexOutputs.vSplatSizeBrightness = uniforms.splatSizeScale / (uniforms.splatSizeScale + 2.0 * max(length(majorAxis * scale), length(minorAxis * scale)));\"\r\n : \"vSplatSizeBrightness = splatSizeScale / (splatSizeScale + 2.0 * max(length(majorAxis * scale), length(minorAxis * scale)));\",\r\n };\r\n }\r\n if (shaderType === \"fragment\") {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: wgsl\r\n ? \"varying vSplatSizeBrightness: f32;\\nuniform splatSizeEnabled: f32;\"\r\n : \"varying float vSplatSizeBrightness;\\nuniform float splatSizeEnabled;\",\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: wgsl\r\n ? \"if (uniforms.splatSizeEnabled > 0.5) { finalColor = vec4f(vec3f(fragmentInputs.vSplatSizeBrightness), finalColor.a); }\"\r\n : \"if (splatSizeEnabled > 0.5) { finalColor = vec4(vec3(vSplatSizeBrightness), finalColor.a); }\",\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n /** @returns Shader uniforms for both languages */\r\n public override getUniforms(): { externalUniforms: string[] } {\r\n return { externalUniforms: [\"splatSizeScale\", \"splatSizeEnabled\"] };\r\n }\r\n\r\n /**\r\n * Binds the projected-size visualization uniforms for the rendered submesh.\r\n * @param _uniformBuffer Unused\r\n * @param _scene Current scene\r\n * @param _engine Current engine\r\n * @param subMesh Rendered submesh\r\n */\r\n public override bindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n subMesh.effect?.setFloat(\"splatSizeScale\", this._sizeScale);\r\n subMesh.effect?.setFloat(\"splatSizeEnabled\", this._isEnabled ? 1 : 0);\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/** Registers the plugin for material parsing; safe to call repeatedly. */\r\nexport function RegisterGaussianSplattingSizeMaterialPlugin(): void {\r\n if (!_Registered) {\r\n _Registered = true;\r\n RegisterClass(\"BABYLON.GaussianSplattingSizeMaterialPlugin\", GaussianSplattingSizeMaterialPlugin);\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/** Pure barrel — re-exports only side-effect-free modules */
|
|
2
|
+
export * from "./gaussianPointSplattingBlitMaterial.pure.js";
|
|
3
|
+
export * from "./gaussianPointSplattingDepthBlitMaterial.pure.js";
|
|
2
4
|
export * from "./gaussianSplattingDebugMaterialPlugin.pure.js";
|
|
3
5
|
export * from "./gaussianSplattingGpuPickingMaterialPlugin.pure.js";
|
|
4
6
|
export * from "./gaussianSplattingMaterial.pure.js";
|
|
7
|
+
export * from "./gaussianSplattingOverdrawMaterialPlugin.pure.js";
|
|
8
|
+
export * from "./gaussianSplattingSizeMaterialPlugin.pure.js";
|
|
5
9
|
export * from "./gaussianSplattingSolidColorMaterialPlugin.pure.js";
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/** Pure barrel — re-exports only side-effect-free modules */
|
|
2
|
+
export * from "./gaussianPointSplattingBlitMaterial.pure.js";
|
|
3
|
+
export * from "./gaussianPointSplattingDepthBlitMaterial.pure.js";
|
|
2
4
|
export * from "./gaussianSplattingDebugMaterialPlugin.pure.js";
|
|
3
5
|
export * from "./gaussianSplattingGpuPickingMaterialPlugin.pure.js";
|
|
4
6
|
export * from "./gaussianSplattingMaterial.pure.js";
|
|
7
|
+
export * from "./gaussianSplattingOverdrawMaterialPlugin.pure.js";
|
|
8
|
+
export * from "./gaussianSplattingSizeMaterialPlugin.pure.js";
|
|
5
9
|
export * from "./gaussianSplattingSolidColorMaterialPlugin.pure.js";
|
|
6
10
|
//# sourceMappingURL=pure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kCAAkC,CAAC;AACjD,cAAc,kDAAkD,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./gaussianSplattingDebugMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingGpuPickingMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingMaterial.pure\";\nexport * from \"./gaussianSplattingSolidColorMaterialPlugin.pure\";\n"]}
|
|
1
|
+
{"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GaussianSplatting/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kCAAkC,CAAC;AACjD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kDAAkD,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./gaussianPointSplattingBlitMaterial.pure\";\nexport * from \"./gaussianPointSplattingDepthBlitMaterial.pure\";\nexport * from \"./gaussianSplattingDebugMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingGpuPickingMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingMaterial.pure\";\nexport * from \"./gaussianSplattingOverdrawMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingSizeMaterialPlugin.pure\";\nexport * from \"./gaussianSplattingSolidColorMaterialPlugin.pure\";\n"]}
|
|
@@ -13,6 +13,7 @@ import { type Scene } from "../../../../scene.pure.js";
|
|
|
13
13
|
export declare class ImageSourceBlock extends NodeMaterialBlock {
|
|
14
14
|
private static _DefaultTextureByEngine;
|
|
15
15
|
private _samplerName;
|
|
16
|
+
private _dimensionsUniformName;
|
|
16
17
|
protected _texture: Nullable<Texture>;
|
|
17
18
|
private static _GetDefaultTexture;
|
|
18
19
|
/**
|
|
@@ -56,6 +56,7 @@ export class ImageSourceBlock extends NodeMaterialBlock {
|
|
|
56
56
|
*/
|
|
57
57
|
constructor(name) {
|
|
58
58
|
super(name, NodeMaterialBlockTargets.VertexAndFragment);
|
|
59
|
+
this._dimensionsUniformName = "";
|
|
59
60
|
this.registerOutput("source", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("source", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
|
|
60
61
|
this.registerOutput("dimensions", NodeMaterialBlockConnectionPointTypes.Vector2);
|
|
61
62
|
}
|
|
@@ -73,6 +74,10 @@ export class ImageSourceBlock extends NodeMaterialBlock {
|
|
|
73
74
|
return;
|
|
74
75
|
}
|
|
75
76
|
effect.setTexture(this._samplerName, this.texture);
|
|
77
|
+
if (this._dimensionsUniformName) {
|
|
78
|
+
const size = this.texture.getSize();
|
|
79
|
+
effect.setFloat2(this._dimensionsUniformName, size.width, size.height);
|
|
80
|
+
}
|
|
76
81
|
}
|
|
77
82
|
/**
|
|
78
83
|
* Checks if the block is ready
|
|
@@ -107,16 +112,23 @@ export class ImageSourceBlock extends NodeMaterialBlock {
|
|
|
107
112
|
super._buildBlock(state);
|
|
108
113
|
if (state.target === NodeMaterialBlockTargets.Vertex) {
|
|
109
114
|
this._samplerName = state._getFreeVariableName(this.name);
|
|
115
|
+
this._dimensionsUniformName = "";
|
|
110
116
|
// Declarations
|
|
111
117
|
state.sharedData.blockingBlocks.push(this);
|
|
112
118
|
state.sharedData.textureBlocks.push(this);
|
|
113
119
|
state.sharedData.bindableBlocks.push(this);
|
|
114
120
|
}
|
|
115
121
|
if (this.dimensions.isConnected) {
|
|
122
|
+
const engine = state.sharedData.scene.getEngine();
|
|
116
123
|
let affect;
|
|
117
124
|
if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
118
125
|
affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;
|
|
119
126
|
}
|
|
127
|
+
else if (!engine.isWebGPU && engine.version === 1) {
|
|
128
|
+
this._dimensionsUniformName || (this._dimensionsUniformName = state._getFreeVariableName("textureDimensions"));
|
|
129
|
+
state._emitUniformFromString(this._dimensionsUniformName, NodeMaterialBlockConnectionPointTypes.Vector2);
|
|
130
|
+
affect = this._dimensionsUniformName;
|
|
131
|
+
}
|
|
120
132
|
else {
|
|
121
133
|
affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;
|
|
122
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageSourceBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { ThinTexture } from \"../../../Textures/thinTexture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { type AbstractEngine } from \"../../../../Engines/abstractEngine.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private static _DefaultTextureByEngine = /*#__PURE__*/ new WeakMap<AbstractEngine, ThinTexture>();\r\n\r\n private _samplerName: string;\r\n protected _texture: Nullable<Texture>;\r\n\r\n private static _GetDefaultTexture(engine: AbstractEngine): ThinTexture {\r\n let texture = ImageSourceBlock._DefaultTextureByEngine.get(engine);\r\n\r\n if (!texture) {\r\n texture = new ThinTexture(engine.emptyTexture);\r\n ImageSourceBlock._DefaultTextureByEngine.set(engine, texture);\r\n }\r\n\r\n return texture;\r\n }\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param _nodeMaterial - the node material\r\n */\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n const engine = effect.getEngine();\r\n if (engine.isWebGPU) {\r\n effect.setTexture(this._samplerName, ImageSourceBlock._GetDefaultTexture(engine));\r\n }\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n let affect: string;\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @param ignoreTexture - whether to skip texture serialization\r\n * @returns the serialized object\r\n */\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n * @param urlRewriter - optional url rewriter\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for imageSourceBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterImageSourceBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"imageSourceBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAG1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IAO3C,MAAM,CAAC,kBAAkB,CAAC,MAAsB;QACpD,IAAI,OAAO,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/C,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IACD;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,OAA0B;QACzC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,WAAW,CAAC,gBAAgB,CAAC;QAElE,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvE,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvE,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QAtDpD,2BAAsB,GAAG,EAAE,CAAC;QAwDhC,IAAI,CAAC,cAAc,CACf,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,uDAA+C,gBAAgB,EAAE,kBAAkB,CAAC,CACjJ,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;IAED;;;;OAIG;IACa,IAAI,CAAC,MAAc,EAAE,aAA2B;QAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO;QACX,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED;;;OAGG;IACa,OAAO;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;YAEjC,eAAe;YACf,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,MAAc,CAAC;YACnB,IAAI,KAAK,CAAC,cAAc,gCAAwB,EAAE,CAAC;gBAC/C,MAAM,GAAG,2BAA2B,IAAI,CAAC,YAAY,UAAU,CAAC;YACpE,CAAC;iBAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,sBAAsB,KAA3B,IAAI,CAAC,sBAAsB,GAAK,KAAK,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,EAAC;gBAChF,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;gBACzG,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,oBAAoB,IAAI,CAAC,YAAY,UAAU,CAAC;YAC7D,CAAC;YAED,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,KAAK,CAAC;QACzF,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YACrC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,mBAAmB,CAAC,aAAa,GAAG,KAAK;QACxD,IAAI,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;YACjC,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mCAAmC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC;QAC1L,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;QACnF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;QACnF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;QACjF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;QACjF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;QACjF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,sBAAsB,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC;QACvF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,sBAAsB,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC;QACvF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,qBAAqB,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACrF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,qBAAqB,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACrF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,8BAA8B,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC;QAEvG,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACa,SAAS,CAAC,aAAa,GAAG,KAAK;QAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,IACI,CAAC,aAAa;YACd,IAAI,CAAC,OAAO;YACZ,CAAC,YAAY,CAAC,wCAAwC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,cAAc,EAChD,CAAC;YACC,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACa,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe,EAAE,WAAqC;QACvH,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAErE,IAAI,mBAAmB,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;YACxE,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAChD,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,OAAO,GAAG,EAAE,CAAC;gBACjB,CAAC;qBAAM,IAAI,WAAW,EAAE,CAAC;oBACrB,mBAAmB,CAAC,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC/E,mBAAmB,CAAC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;gBACvE,CAAC;YACL,CAAC;YACD,IAAI,mBAAmB,CAAC,OAAO,CAAC,YAAY,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC5F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAY,CAAC;YACzF,CAAC;QACL,CAAC;IACL,CAAC;;AAnOc,wCAAuB,GAAiB,IAAI,OAAO,EAA+B,AAA3D,CAA4D;AAsOtG,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACpC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,aAAa,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;AAChE,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { ThinTexture } from \"../../../Textures/thinTexture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { type AbstractEngine } from \"../../../../Engines/abstractEngine.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private static _DefaultTextureByEngine = /*#__PURE__*/ new WeakMap<AbstractEngine, ThinTexture>();\r\n\r\n private _samplerName: string;\r\n private _dimensionsUniformName = \"\";\r\n protected _texture: Nullable<Texture>;\r\n\r\n private static _GetDefaultTexture(engine: AbstractEngine): ThinTexture {\r\n let texture = ImageSourceBlock._DefaultTextureByEngine.get(engine);\r\n\r\n if (!texture) {\r\n texture = new ThinTexture(engine.emptyTexture);\r\n ImageSourceBlock._DefaultTextureByEngine.set(engine, texture);\r\n }\r\n\r\n return texture;\r\n }\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param _nodeMaterial - the node material\r\n */\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n const engine = effect.getEngine();\r\n if (engine.isWebGPU) {\r\n effect.setTexture(this._samplerName, ImageSourceBlock._GetDefaultTexture(engine));\r\n }\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\r\n if (this._dimensionsUniformName) {\r\n const size = this.texture.getSize();\r\n effect.setFloat2(this._dimensionsUniformName, size.width, size.height);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n this._dimensionsUniformName = \"\";\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n const engine = state.sharedData.scene.getEngine();\r\n let affect: string;\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else if (!engine.isWebGPU && engine.version === 1) {\r\n this._dimensionsUniformName ||= state._getFreeVariableName(\"textureDimensions\");\r\n state._emitUniformFromString(this._dimensionsUniformName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n affect = this._dimensionsUniformName;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @param ignoreTexture - whether to skip texture serialization\r\n * @returns the serialized object\r\n */\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n * @param urlRewriter - optional url rewriter\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for imageSourceBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterImageSourceBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n}\r\n"]}
|
|
@@ -141,6 +141,7 @@ export declare class ProceduralTexture extends Texture {
|
|
|
141
141
|
* @returns an ArrayBufferView promise (Uint8Array or Float32Array)
|
|
142
142
|
*/
|
|
143
143
|
getContent(): Nullable<Promise<ArrayBufferView>>;
|
|
144
|
+
private _readContent;
|
|
144
145
|
private _createIndexBuffer;
|
|
145
146
|
/** @internal */
|
|
146
147
|
_rebuild(): void;
|