@onerjs/core 9.0.2 → 9.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Buffers/buffer.pure.js +4 -0
- package/Buffers/buffer.pure.js.map +1 -1
- package/Cameras/camera.pure.d.ts +14 -0
- package/Cameras/camera.pure.js +15 -0
- package/Cameras/camera.pure.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +2 -1
- package/Compute/computeShader.pure.js +29 -10
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/ray.core.js +22 -9
- package/Culling/ray.core.js.map +1 -1
- package/Engines/IDrawContext.d.ts +2 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +55 -4
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +1 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +5 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.d.ts +2 -0
- package/Engines/Processors/shaderCodeInliner.js +251 -6
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +10 -1
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js +12 -0
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +0 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +5 -0
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +7 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.js +20 -8
- package/Engines/WebGPU/webgpuCacheTextureView.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +2 -0
- package/Engines/WebGPU/webgpuDrawContext.js +6 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js +23 -9
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassCommandStream.d.ts +156 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js +323 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js.map +1 -0
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +4 -3
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +3 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +9 -6
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +2 -0
- package/Engines/abstractEngine.pure.js +14 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +6 -0
- package/Engines/constants.js +6 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +198 -24
- package/Engines/pure.d.ts +1 -0
- package/Engines/pure.js +1 -0
- package/Engines/pure.js.map +1 -1
- package/Engines/renderCommandBatcher.pure.d.ts +16 -0
- package/Engines/renderCommandBatcher.pure.js +24 -0
- package/Engines/renderCommandBatcher.pure.js.map +1 -0
- package/Engines/thinEngine.functions.js +3 -2
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.pure.js +18 -2
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +10 -7
- package/Engines/thinNativeEngine.pure.js +117 -46
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +8 -0
- package/Engines/thinWebGPUEngine.js +11 -0
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +60 -1
- package/Engines/webgpuEngine.pure.js +238 -42
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.d.ts +5 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js +8 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.d.ts +77 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js +141 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.d.ts +5 -3
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js +38 -7
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/index.d.ts +1 -0
- package/FlowGraph/Blocks/Event/index.js +1 -0
- package/FlowGraph/Blocks/Event/index.js.map +1 -1
- package/FlowGraph/Blocks/Event/pure.d.ts +1 -0
- package/FlowGraph/Blocks/Event/pure.js +1 -0
- package/FlowGraph/Blocks/Event/pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/allBlocks.pure.js +2 -0
- package/FlowGraph/Blocks/allBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +12 -1
- package/FlowGraph/flowGraph.js +38 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +44 -0
- package/FlowGraph/flowGraphCoordinator.js +141 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.pure.js +41 -14
- package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +105 -5
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphSoundAssets.d.ts +40 -0
- package/FlowGraph/flowGraphSoundAssets.js +33 -0
- package/FlowGraph/flowGraphSoundAssets.js.map +1 -0
- package/FlowGraph/index.d.ts +1 -0
- package/FlowGraph/index.js +1 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +1 -0
- package/FlowGraph/pure.js +1 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +8 -0
- package/FlowGraph/serialization.js +31 -12
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +25 -0
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/taaTask.js +2 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +1 -0
- package/Instrumentation/engineInstrumentation.js +25 -6
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.js +2 -0
- package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +36 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +202 -27
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Lights/directionalLight.pure.d.ts +24 -10
- package/Lights/directionalLight.pure.js +29 -11
- package/Lights/directionalLight.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +4 -4
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.pure.js +4 -0
- package/Materials/Node/Blocks/Input/inputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.d.ts +9 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +23 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +9 -0
- package/Materials/PBR/pbrBaseMaterial.pure.js +60 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +11 -0
- package/Materials/PBR/pbrBaseSimpleMaterial.js +21 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +12 -0
- package/Materials/PBR/pbrMaterial.pure.js +23 -3
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +10 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +5 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +7 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -1
- package/Materials/Textures/HTML/htmlInteractionManager.d.ts +9 -3
- package/Materials/Textures/HTML/htmlInteractionManager.js +64 -5
- package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -1
- package/Materials/Textures/HTML/htmlTexture.d.ts +11 -11
- package/Materials/Textures/HTML/htmlTexture.js +106 -65
- package/Materials/Textures/HTML/htmlTexture.js.map +1 -1
- package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +4 -50
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +10 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/dynamicTexture.pure.js +6 -0
- package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
- package/Materials/Textures/ktx2encoderTypes.d.ts +51 -0
- package/Materials/Textures/ktx2encoderTypes.js +2 -0
- package/Materials/Textures/ktx2encoderTypes.js.map +1 -0
- package/Materials/Textures/renderTargetTexture.pure.js +10 -2
- package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +11 -0
- package/Materials/Textures/textureMerger.js +34 -19
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +145 -0
- package/Materials/Textures/textureProcessor.js +445 -45
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/textureSampling.functions.d.ts +41 -0
- package/Materials/Textures/textureSampling.functions.js +82 -0
- package/Materials/Textures/textureSampling.functions.js.map +1 -0
- package/Materials/drawWrapper.d.ts +8 -0
- package/Materials/drawWrapper.js +19 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.pure.d.ts +6 -0
- package/Materials/effect.pure.js +28 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effect.webgl.functions.pure.js +1 -1
- package/Materials/effect.webgl.functions.pure.js.map +1 -1
- package/Materials/material.pure.d.ts +5 -0
- package/Materials/material.pure.js +9 -2
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialFlags.d.ts +6 -0
- package/Materials/materialFlags.js +14 -0
- package/Materials/materialFlags.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +36 -2
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.js +19 -16
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginManager.pure.js +12 -8
- package/Materials/materialPluginManager.pure.js.map +1 -1
- package/Materials/prePassConfiguration.js +19 -16
- package/Materials/prePassConfiguration.js.map +1 -1
- package/Materials/shaderMaterial.pure.js +19 -6
- package/Materials/shaderMaterial.pure.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +6 -0
- package/Materials/shadowDepthWrapper.js +17 -0
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Meshes/Compression/dracoCodec.d.ts +14 -0
- package/Meshes/Compression/dracoCodec.js +22 -0
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.d.ts +1 -0
- package/Meshes/Compression/dracoDecoder.js +27 -0
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -0
- package/Meshes/Compression/dracoEncoder.js +8 -0
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.d.ts +1 -0
- package/Meshes/Compression/meshoptCompression.js +9 -0
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.d.ts +415 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js +912 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +40 -9
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +112 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +696 -74
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +12 -4
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/geometry.d.ts +5 -0
- package/Meshes/geometry.js +25 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/mesh.pure.d.ts +7 -0
- package/Meshes/mesh.pure.js +18 -13
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/pure.d.ts +1 -0
- package/Meshes/pure.js +1 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +3 -0
- package/Meshes/subMesh.pure.js +26 -0
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +5 -3
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +3 -2
- package/Misc/khronosTextureContainer2.js +24 -6
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/khronosTextureContainer2Encoder.d.ts +166 -0
- package/Misc/khronosTextureContainer2Encoder.js +556 -0
- package/Misc/khronosTextureContainer2Encoder.js.map +1 -0
- package/Misc/khronosTextureContainer2EncoderWorker.d.ts +61 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js +55 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js.map +1 -0
- package/Misc/pure.d.ts +1 -0
- package/Misc/pure.js +1 -0
- package/Misc/pure.js.map +1 -1
- package/Misc/textureFormat.functions.d.ts +6 -0
- package/Misc/textureFormat.functions.js +54 -0
- package/Misc/textureFormat.functions.js.map +1 -0
- package/Misc/textureTools.d.ts +6 -2
- package/Misc/textureTools.js +100 -42
- package/Misc/textureTools.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.d.ts +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.js +6 -3
- package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -0
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +2 -0
- package/Particles/gpuParticleSystem.pure.js +25 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/solidParticle.d.ts +5 -0
- package/Particles/solidParticle.js +5 -0
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +10 -0
- package/Particles/solidParticleSystem.js +72 -13
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.pure.js +4 -0
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.d.ts +27 -6
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js +60 -5
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +1 -0
- package/PostProcesses/thinTAAPostProcess.js +17 -1
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +2 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +6 -5
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -3
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.js +8 -2
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +1 -0
- package/Rendering/objectRenderer.js +14 -0
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +5 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +2 -2
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +7 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js +12 -0
- package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/geometry.vertex.js +6 -6
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/lod.fragment.js +15 -2
- package/Shaders/lod.fragment.js.map +1 -1
- package/Shaders/lod3D.fragment.js +15 -2
- package/Shaders/lod3D.fragment.js.map +1 -1
- package/Shaders/lodCube.fragment.js +15 -2
- package/Shaders/lodCube.fragment.js.map +1 -1
- package/Shaders/openpbr.vertex.js +2 -0
- package/Shaders/openpbr.vertex.js.map +1 -1
- package/Shaders/pbr.fragment.js +12 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.js +2 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/textureMerger.fragment.js +28 -0
- package/Shaders/textureMerger.fragment.js.map +1 -1
- package/Shaders/textureProcessor.fragment.js +26 -4
- package/Shaders/textureProcessor.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +44 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +17 -3
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +12 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +8 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertex.js +2 -2
- package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +3 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js +16 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +4 -4
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +1 -1
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/gsSortCount.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortCount.compute.js +19 -0
- package/ShadersWGSL/gsSortCount.compute.js.map +1 -0
- package/ShadersWGSL/gsSortKeys.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortKeys.compute.js +49 -0
- package/ShadersWGSL/gsSortKeys.compute.js.map +1 -0
- package/ShadersWGSL/gsSortOutput.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortOutput.compute.js +28 -0
- package/ShadersWGSL/gsSortOutput.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanLocal.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js +23 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanSums.compute.js +19 -0
- package/ShadersWGSL/gsSortScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScatter.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScatter.compute.js +33 -0
- package/ShadersWGSL/gsSortScatter.compute.js.map +1 -0
- package/ShadersWGSL/lod.fragment.js +14 -2
- package/ShadersWGSL/lod.fragment.js.map +1 -1
- package/ShadersWGSL/lod3D.fragment.js +14 -2
- package/ShadersWGSL/lod3D.fragment.js.map +1 -1
- package/ShadersWGSL/lodCube.fragment.js +14 -2
- package/ShadersWGSL/lodCube.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.vertex.js +3 -1
- package/ShadersWGSL/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +11 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +3 -1
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/textureMerger.fragment.js +40 -4
- package/ShadersWGSL/textureMerger.fragment.js.map +1 -1
- package/ShadersWGSL/textureProcessor.fragment.js +26 -4
- package/ShadersWGSL/textureProcessor.fragment.js.map +1 -1
- package/Sprites/spriteRenderer.js +15 -5
- package/Sprites/spriteRenderer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +23 -1
- package/scene.pure.js +83 -1
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderCodeInliner.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Processors/shaderCodeInliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAUzJ;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAa1B,+CAA+C;IAC/C,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,YAAY,UAAkB,EAAE,gBAAgB,GAAG,EAAE;QAbrD,kCAAkC;QAC3B,UAAK,GAAY,KAAK,CAAC;QAa1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,WAAW;QACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,WAAW,CAAC,MAAM,MAAM,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC1C,qDAAqD;YACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAChF,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM;YACV,CAAC;YAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvG,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,sEAAsE,UAAU,EAAE,CAAC,CAAC;gBACpG,CAAC;gBACD,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxD,SAAS;YACb,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,8BAA8B,CAAC,IAAI,CACvE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAC/F,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CACP,yDAAyD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,CAC1J,CAAC;gBACN,CAAC;gBACD,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxD,SAAS;YACb,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,wGAAwG;YACxG,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;YACnG,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,kDAAkD,QAAQ,WAAW,QAAQ,2BAA2B,oBAAoB,EAAE,CAAC,CAAC;gBAChJ,CAAC;gBACD,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxD,SAAS;YACb,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,oBAAoB,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAE5F,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC;YACrF,IAAI,kBAAkB,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,+CAA+C,QAAQ,WAAW,QAAQ,yBAAyB,kBAAkB,EAAE,CAAC,CAAC;gBACzI,CAAC;gBACD,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxD,SAAS;YACb,CAAC;YAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAC/F,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,+CAA+C,QAAQ,WAAW,QAAQ,yBAAyB,kBAAkB,EAAE,CAAC,CAAC;gBACzI,CAAC;gBACD,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACxD,SAAS;YACb,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAEtF,6CAA6C;YAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,EAAE,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAEnC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACX,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACtB,6HAA6H;gBAC7H,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,uBAAuB;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,UAAU;gBACtB,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,CAAC;aACf,CAAC,CAAC;YAEH,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAAC;YAElC,2CAA2C;YAC3C,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE7H,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;YAE1C,UAAU,IAAI,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,cAAc,CAAC,MAAM,mCAAmC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACzH,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,mBAA2B,EAAE;QAClD,OAAO,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;gBACtC,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,uBAAuB,gBAAgB,yBAAyB,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,gBAAgB,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,2BAA2B;QAC/B,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YAE9C,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC1C,gDAAgD;gBAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAErE,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM;gBACV,CAAC;gBAED,kDAAkD;gBAClD,IAAI,iBAAiB,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9F,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChG,IAAI,oBAAoB,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC5G,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBAED,6GAA6G;gBAC7G,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;gBACnG,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,oEAAoE,IAAI,WAAW,IAAI,2BAA2B,oBAAoB,EAAE,CAAC,CAAC;oBAC1J,CAAC;oBACD,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,oBAAoB,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBAE5F,iDAAiD;gBAEjD,sIAAsI;gBACtI,mCAAmC;gBACnC,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,EAAE;oBACrC,MAAM,UAAU,GAAG,EAAE,CAAC;oBACtB,IAAI,MAAM,GAAG,CAAC,EACV,aAAa,GAAG,CAAC,CAAC;oBACtB,OAAO,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;4BAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;4BACxD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gCACX,OAAO,IAAI,CAAC;4BAChB,CAAC;4BACD,MAAM,GAAG,IAAI,CAAC;wBAClB,CAAC;6BAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;4BAClC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;4BACpD,aAAa,GAAG,MAAM,GAAG,CAAC,CAAC;wBAC/B,CAAC;wBACD,MAAM,EAAE,CAAC;oBACb,CAAC;oBACD,IAAI,aAAa,GAAG,MAAM,EAAE,CAAC;wBACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,OAAO,UAAU,CAAC;gBACtB,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBAE9D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAClB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CACP,uFAAuF,IAAI,WAAW,IAAI,2BAA2B,oBAAoB,eAAe;4BACpK,UAAU,CACjB,CAAC;oBACN,CAAC;oBACD,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBAED,MAAM,UAAU,GAAG,EAAE,CAAC;gBAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBAED,MAAM,YAAY,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE5E,IAAI,YAAY,EAAE,CAAC;oBACf,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;gBACzC,CAAC;gBAED,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CACP,6HAA6H,IAAI,WAAW,IAAI,0BAA0B,UAAU,qBAAqB,UAAU,EAAE,CACxN,CAAC;oBACN,CAAC;oBACD,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBAED,UAAU,GAAG,kBAAkB,GAAG,CAAC,CAAC;gBAEpC,iDAAiD;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAElE,IAAI,UAAU,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/F,MAAM,SAAS,GAAG,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEjI,IAAI,YAAY,EAAE,CAAC;oBACf,wDAAwD;oBACxD,yBAAyB;oBACzB,kBAAkB;oBAClB,gDAAgD;oBAChD,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;oBAEhG,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,sBAAsB,GAAG,CAAC,CAAC,CAAC;oBACvE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,sBAAsB,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBAE9F,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;oBAE7H,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM,CAAC,GAAG,CACN,4CAA4C,IAAI,WAAW,IAAI,6BAA6B,sBAAsB,qBAAqB,UAAU,EAAE,CACtJ,CAAC;oBACN,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,+DAA+D;oBAC/D,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;oBAErD,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,kBAAkB,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC;oBAE7E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,MAAM,CAAC,GAAG,CAAC,4CAA4C,IAAI,WAAW,IAAI,wBAAwB,iBAAiB,qBAAqB,UAAU,EAAE,CAAC,CAAC;oBAC1J,CAAC;gBACL,CAAC;gBAED,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAAiB,EAAE,YAAsB;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EACpD,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAC7B,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;gBAC3C,MAAM,MAAM,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,sHAAsH;gBACtH,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;oBACjG,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO,WAAW,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;;AAvUuB,gDAA8B,GAAG,4BAA4B,AAA/B,CAAgC","sourcesContent":["import { Logger } from \"core/Misc/logger\";\r\nimport { EscapeRegExp, ExtractBetweenMarkers, FindBackward, IsIdentifierChar, RemoveComments, SkipWhitespaces } from \"../../Misc/codeStringParsingTools\";\r\n\r\ninterface IInlineFunctionDescr {\r\n name: string;\r\n type: string;\r\n parameters: string[];\r\n body: string;\r\n callIndex: number;\r\n}\r\n\r\n/**\r\n * Class used to inline functions in shader code\r\n */\r\nexport class ShaderCodeInliner {\r\n private static readonly _RegexpFindFunctionNameAndType = /((\\s+?)(\\w+)\\s+(\\w+)\\s*?)$/;\r\n\r\n private _sourceCode: string;\r\n private _functionDescr: IInlineFunctionDescr[];\r\n private _numMaxIterations: number;\r\n\r\n /** Gets or sets the token used to mark the functions to inline */\r\n public inlineToken: string;\r\n\r\n /** Gets or sets the debug mode */\r\n public debug: boolean = false;\r\n\r\n /** Gets the code after the inlining process */\r\n public get code(): string {\r\n return this._sourceCode;\r\n }\r\n\r\n /**\r\n * Initializes the inliner\r\n * @param sourceCode shader code source to inline\r\n * @param numMaxIterations maximum number of iterations (used to detect recursive calls)\r\n */\r\n constructor(sourceCode: string, numMaxIterations = 20) {\r\n this._sourceCode = sourceCode;\r\n this._numMaxIterations = numMaxIterations;\r\n this._functionDescr = [];\r\n this.inlineToken = \"#define inline\";\r\n }\r\n\r\n /**\r\n * Start the processing of the shader code\r\n */\r\n public processCode() {\r\n if (this.debug) {\r\n Logger.Log(`Start inlining process (code size=${this._sourceCode.length})...`);\r\n }\r\n this._collectFunctions();\r\n this._processInlining(this._numMaxIterations);\r\n if (this.debug) {\r\n Logger.Log(\"End of inlining process.\");\r\n }\r\n }\r\n\r\n private _collectFunctions() {\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // locate the function to inline and extract its name\r\n const inlineTokenIndex = this._sourceCode.indexOf(this.inlineToken, startIndex);\r\n if (inlineTokenIndex < 0) {\r\n break;\r\n }\r\n\r\n const funcParamsStartIndex = this._sourceCode.indexOf(\"(\", inlineTokenIndex + this.inlineToken.length);\r\n if (funcParamsStartIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not find the opening parenthesis after the token. startIndex=${startIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcNameMatch = ShaderCodeInliner._RegexpFindFunctionNameAndType.exec(\r\n this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)\r\n );\r\n if (!funcNameMatch) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Could not extract the name/type of the function from: ${this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)}`\r\n );\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const [funcType, funcName] = [funcNameMatch[3], funcNameMatch[4]];\r\n\r\n // extract the parameters of the function as a whole string (without the leading / trailing parenthesis)\r\n const funcParamsEndIndex = ExtractBetweenMarkers(\"(\", \")\", this._sourceCode, funcParamsStartIndex);\r\n if (funcParamsEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the parameters the function '${funcName}' (type=${funcType}). funcParamsStartIndex=${funcParamsStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcParams = this._sourceCode.substring(funcParamsStartIndex + 1, funcParamsEndIndex);\r\n\r\n // extract the body of the function (with the curly brackets)\r\n const funcBodyStartIndex = SkipWhitespaces(this._sourceCode, funcParamsEndIndex + 1);\r\n if (funcBodyStartIndex === this._sourceCode.length) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcParamsEndIndex=${funcParamsEndIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcBodyEndIndex = ExtractBetweenMarkers(\"{\", \"}\", this._sourceCode, funcBodyStartIndex);\r\n if (funcBodyEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcBodyStartIndex=${funcBodyStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcBody = this._sourceCode.substring(funcBodyStartIndex, funcBodyEndIndex + 1);\r\n\r\n // process the parameters: extract each names\r\n const params = RemoveComments(funcParams).split(\",\");\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n const idx = param.lastIndexOf(\" \");\r\n\r\n if (idx >= 0) {\r\n paramNames.push(param.substring(idx + 1));\r\n }\r\n }\r\n\r\n if (funcType !== \"void\") {\r\n // for functions that return a value, we will replace \"return\" by \"tempvarname = \", tempvarname being a unique generated name\r\n paramNames.push(\"return\");\r\n }\r\n\r\n // collect the function\r\n this._functionDescr.push({\r\n name: funcName,\r\n type: funcType,\r\n parameters: paramNames,\r\n body: funcBody,\r\n callIndex: 0,\r\n });\r\n\r\n startIndex = funcBodyEndIndex + 1;\r\n\r\n // remove the function from the source code\r\n const partBefore = inlineTokenIndex > 0 ? this._sourceCode.substring(0, inlineTokenIndex) : \"\";\r\n const partAfter = funcBodyEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(funcBodyEndIndex + 1) : \"\";\r\n\r\n this._sourceCode = partBefore + partAfter;\r\n\r\n startIndex -= funcBodyEndIndex + 1 - inlineTokenIndex;\r\n }\r\n\r\n if (this.debug) {\r\n Logger.Log(`Collect functions: ${this._functionDescr.length} functions found. functionDescr=${this._functionDescr}`);\r\n }\r\n }\r\n\r\n private _processInlining(numMaxIterations: number = 20): boolean {\r\n while (numMaxIterations-- >= 0) {\r\n if (!this._replaceFunctionCallsByCode()) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.debug) {\r\n Logger.Log(`numMaxIterations is ${numMaxIterations} after inlining process`);\r\n }\r\n\r\n return numMaxIterations >= 0;\r\n }\r\n\r\n private _replaceFunctionCallsByCode(): boolean {\r\n let doAgain = false;\r\n\r\n for (const func of this._functionDescr) {\r\n const { name, type, parameters, body } = func;\r\n\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // Look for the function name in the source code\r\n const functionCallIndex = this._sourceCode.indexOf(name, startIndex);\r\n\r\n if (functionCallIndex < 0) {\r\n break;\r\n }\r\n\r\n // Make sure \"name\" is not part of a bigger string\r\n if (functionCallIndex === 0 || IsIdentifierChar(this._sourceCode.charAt(functionCallIndex - 1))) {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // Find the opening parenthesis\r\n const callParamsStartIndex = SkipWhitespaces(this._sourceCode, functionCallIndex + name.length);\r\n if (callParamsStartIndex === this._sourceCode.length || this._sourceCode.charAt(callParamsStartIndex) !== \"(\") {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // extract the parameters of the function call as a whole string (without the leading / trailing parenthesis)\r\n const callParamsEndIndex = ExtractBetweenMarkers(\"(\", \")\", this._sourceCode, callParamsStartIndex);\r\n if (callParamsEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n const callParams = this._sourceCode.substring(callParamsStartIndex + 1, callParamsEndIndex);\r\n\r\n // process the parameter call: extract each names\r\n\r\n // this function split the parameter list used in the function call at ',' boundaries by taking care of potential parenthesis like in:\r\n // myfunc(a, vec2(1., 0.), 4.)\r\n const splitParameterCall = (s: string) => {\r\n const parameters = [];\r\n let curIdx = 0,\r\n startParamIdx = 0;\r\n while (curIdx < s.length) {\r\n if (s.charAt(curIdx) === \"(\") {\r\n const idx2 = ExtractBetweenMarkers(\"(\", \")\", s, curIdx);\r\n if (idx2 < 0) {\r\n return null;\r\n }\r\n curIdx = idx2;\r\n } else if (s.charAt(curIdx) === \",\") {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n startParamIdx = curIdx + 1;\r\n }\r\n curIdx++;\r\n }\r\n if (startParamIdx < curIdx) {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n }\r\n return parameters;\r\n };\r\n\r\n const params = splitParameterCall(RemoveComments(callParams));\r\n\r\n if (params === null) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Invalid function call: can't extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}, callParams=` +\r\n callParams\r\n );\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n paramNames.push(param);\r\n }\r\n\r\n const retParamName = type !== \"void\" ? name + \"_\" + func.callIndex++ : null;\r\n\r\n if (retParamName) {\r\n paramNames.push(retParamName + \" =\");\r\n }\r\n\r\n if (paramNames.length !== parameters.length) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '${name}' (type=${type}). function parameters=${parameters}, call parameters=${paramNames}`\r\n );\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n startIndex = callParamsEndIndex + 1;\r\n\r\n // replace the function call by the body function\r\n const funcBody = this._replaceNames(body, parameters, paramNames);\r\n\r\n let partBefore = functionCallIndex > 0 ? this._sourceCode.substring(0, functionCallIndex) : \"\";\r\n const partAfter = callParamsEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(callParamsEndIndex + 1) : \"\";\r\n\r\n if (retParamName) {\r\n // case where the function returns a value. We generate:\r\n // FUNCTYPE retParamName;\r\n // {function body}\r\n // and replace the function call by retParamName\r\n const injectDeclarationIndex = FindBackward(this._sourceCode, functionCallIndex - 1, \"\\n\", \"{\");\r\n\r\n partBefore = this._sourceCode.substring(0, injectDeclarationIndex + 1);\r\n const partBetween = this._sourceCode.substring(injectDeclarationIndex + 1, functionCallIndex);\r\n\r\n this._sourceCode = partBefore + type + \" \" + retParamName + \";\\n\" + funcBody + \"\\n\" + partBetween + retParamName + partAfter;\r\n\r\n if (this.debug) {\r\n Logger.Log(\r\n `Replace function call by code. Function '${name}' (type=${type}). injectDeclarationIndex=${injectDeclarationIndex}, call parameters=${paramNames}`\r\n );\r\n }\r\n } else {\r\n // simple case where the return value of the function is \"void\"\r\n this._sourceCode = partBefore + funcBody + partAfter;\r\n\r\n startIndex += funcBody.length - (callParamsEndIndex + 1 - functionCallIndex);\r\n\r\n if (this.debug) {\r\n Logger.Log(`Replace function call by code. Function '${name}' (type=${type}). functionCallIndex=${functionCallIndex}, call parameters=${paramNames}`);\r\n }\r\n }\r\n\r\n doAgain = true;\r\n }\r\n }\r\n\r\n return doAgain;\r\n }\r\n\r\n private _replaceNames(code: string, sources: string[], destinations: string[]): string {\r\n for (let i = 0; i < sources.length; ++i) {\r\n const source = new RegExp(EscapeRegExp(sources[i]), \"g\"),\r\n sourceLen = sources[i].length,\r\n destination = destinations[i];\r\n\r\n code = code.replace(source, (match, ...args) => {\r\n const offset: number = args[0];\r\n // Make sure \"source\" is not part of a bigger identifier (for eg, if source=view and we matched it with viewDirection)\r\n if (IsIdentifierChar(code.charAt(offset - 1)) || IsIdentifierChar(code.charAt(offset + sourceLen))) {\r\n return sources[i];\r\n }\r\n return destination;\r\n });\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"shaderCodeInliner.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Processors/shaderCodeInliner.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"core/Misc/logger\";\r\nimport { EscapeRegExp, ExtractBetweenMarkers, FindBackward, IsIdentifierChar, RemoveComments, SkipWhitespaces } from \"../../Misc/codeStringParsingTools\";\r\n\r\ninterface IInlineFunctionDescr {\r\n name: string;\r\n type: string;\r\n parameters: string[];\r\n /** Declarations (type with precision qualifiers) of the by-value parameters the body writes to (indexed like parameters), which must be copied at each call site */\r\n copiedParameterTypes: (string | null)[];\r\n body: string;\r\n callIndex: number;\r\n}\r\n\r\nconst PrecisionQualifiers = new Set([\"highp\", \"mediump\", \"lowp\", \"precise\"]);\r\nconst OpaqueTypeRegexp = /^(?:[iu]?(?:sampler|image|texture)(?:[123]D|Cube|2DRect|Buffer|ExternalOES)(?:MS)?(?:Array)?(?:Shadow)?|sampler(?:Shadow)?|atomic_uint)$/;\r\nconst BuiltinsWithOutputParameters = [\"modf\", \"frexp\", \"uaddCarry\", \"usubBorrow\", \"umulExtended\", \"imulExtended\"];\r\nconst FunctionHeaderRegexp = /(\\w+)\\s*\\(([^()]*)\\)\\s*[{;]/g;\r\nconst AssignmentOperatorRegexp = /^(?:(?:[-+*/%&|^]|<<|>>)?=(?!=)|\\+\\+|--)/;\r\n\r\n/**\r\n * Collects the names of the functions that have out or inout parameters, including the built-in ones\r\n * @param code code without comments\r\n * @returns the function names\r\n */\r\nfunction FindFunctionsWithOutputParameters(code: string): Set<string> {\r\n const names = new Set(BuiltinsWithOutputParameters);\r\n FunctionHeaderRegexp.lastIndex = 0;\r\n let match;\r\n while ((match = FunctionHeaderRegexp.exec(code)) !== null) {\r\n if (/\\b(?:out|inout)\\b/.test(match[2])) {\r\n names.add(match[1]);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction SkipWhitespacesBackward(s: string, index: number): number {\r\n while (index >= 0 && SkipWhitespaces(s, index) !== index) {\r\n index--;\r\n }\r\n return index;\r\n}\r\n\r\n/**\r\n * Checks whether the identifier at the given position is a member or swizzle name (preceded by \".\", possibly with whitespaces and comments in between)\r\n * @param s code to parse (may contain comments)\r\n * @param index start position of the identifier\r\n * @returns true if the identifier follows a \".\"\r\n */\r\nfunction IsMemberName(s: string, index: number): boolean {\r\n let i = SkipWhitespacesBackward(s, index - 1);\r\n while (i >= 0) {\r\n if (s.charAt(i) === \"/\" && s.charAt(i - 1) === \"*\") {\r\n const commentStart = s.lastIndexOf(\"/*\", i - 2);\r\n if (commentStart < 0) {\r\n return false;\r\n }\r\n i = SkipWhitespacesBackward(s, commentStart - 1);\r\n continue;\r\n }\r\n const lineComment = s.indexOf(\"//\", s.lastIndexOf(\"\\n\", i) + 1);\r\n if (lineComment >= 0 && lineComment < i) {\r\n i = SkipWhitespacesBackward(s, lineComment - 1);\r\n continue;\r\n }\r\n return s.charAt(i) === \".\";\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Replaces the comments with spaces, keeping the line breaks so that all offsets stay valid\r\n * @param s code to process\r\n * @returns the code with its comments masked\r\n */\r\nfunction MaskComments(s: string): string {\r\n let result = \"\";\r\n let i = 0;\r\n while (i < s.length) {\r\n let end = i;\r\n if (s.startsWith(\"/*\", i)) {\r\n end = s.indexOf(\"*/\", i + 2);\r\n end = end < 0 ? s.length : end + 2;\r\n } else if (s.startsWith(\"//\", i)) {\r\n end = s.indexOf(\"\\n\", i + 2);\r\n end = end < 0 ? s.length : end;\r\n }\r\n if (end === i) {\r\n result += s.charAt(i++);\r\n continue;\r\n }\r\n result += s.substring(i, end).replace(/[^\\r\\n]/g, \" \");\r\n i = end;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Finds the bodies of the struct declarations, which only contain type and field names\r\n * @param code code to parse (may contain comments)\r\n * @returns the [start, end] index ranges of the struct bodies, braces included\r\n */\r\nfunction FindStructBodies(code: string): [number, number][] {\r\n const s = MaskComments(code);\r\n const ranges: [number, number][] = [];\r\n const regexp = /\\bstruct\\s+(?:\\w+\\s*)?\\{/g;\r\n let match;\r\n while ((match = regexp.exec(s)) !== null) {\r\n const openIndex = match.index + match[0].length - 1;\r\n const closeIndex = ExtractBetweenMarkers(\"{\", \"}\", s, openIndex);\r\n if (closeIndex < 0) {\r\n break;\r\n }\r\n ranges.push([openIndex, closeIndex]);\r\n regexp.lastIndex = closeIndex + 1;\r\n }\r\n return ranges;\r\n}\r\n\r\n/**\r\n * Skips member accesses and (possibly nested) subscripts, e.g. \".xy\" or \"[indices[0]]\"\r\n * @param s code to parse\r\n * @param index index just after a variable name\r\n * @returns the index of the first character after the accesses that is not a whitespace\r\n */\r\nfunction SkipAccessors(s: string, index: number): number {\r\n index = SkipWhitespaces(s, index);\r\n for (;;) {\r\n if (s.charAt(index) === \".\") {\r\n index = SkipWhitespaces(s, index + 1);\r\n while (index < s.length && IsIdentifierChar(s.charAt(index))) {\r\n index++;\r\n }\r\n } else if (s.charAt(index) === \"[\") {\r\n const closeIndex = ExtractBetweenMarkers(\"[\", \"]\", s, index);\r\n if (closeIndex < 0) {\r\n return index;\r\n }\r\n index = closeIndex + 1;\r\n } else {\r\n return index;\r\n }\r\n index = SkipWhitespaces(s, index);\r\n }\r\n}\r\n\r\n/**\r\n * Finds the name of the function whose argument list contains the given position\r\n * @param s code to parse\r\n * @param index position of a \"(\" or \",\" in the argument list\r\n * @returns the function name, or null if the position is not inside a function call\r\n */\r\nfunction FindEnclosingCallee(s: string, index: number): string | null {\r\n let depth = 0;\r\n for (let i = index; i >= 0; --i) {\r\n const c = s.charAt(i);\r\n if (c === \")\" || c === \"]\") {\r\n depth++;\r\n } else if (c === \"(\" || c === \"[\") {\r\n if (depth === 0) {\r\n if (c === \"[\") {\r\n return null;\r\n }\r\n const nameEnd = SkipWhitespacesBackward(s, i - 1) + 1;\r\n let nameStart = nameEnd;\r\n while (nameStart > 0 && IsIdentifierChar(s.charAt(nameStart - 1))) {\r\n nameStart--;\r\n }\r\n return nameStart < nameEnd ? s.substring(nameStart, nameEnd) : null;\r\n }\r\n depth--;\r\n } else if (depth === 0 && (c === \";\" || c === \"{\" || c === \"}\")) {\r\n return null;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Checks whether a function body may write to a variable: assignments (\"name = ...\", \"name.x += ...\", \"name[i[0]]++\", \"--name\")\r\n * and arguments of functions with out or inout parameters\r\n * @param body code of the function body, without comments\r\n * @param name name of the variable\r\n * @param functionsWithOutputParameters names of the functions that have out or inout parameters\r\n * @returns true if the variable may be written in the body\r\n */\r\nfunction IsWrittenInBody(body: string, name: string, functionsWithOutputParameters: Set<string>): boolean {\r\n for (let index = body.indexOf(name); index >= 0; index = body.indexOf(name, index + name.length)) {\r\n const end = index + name.length;\r\n if ((index > 0 && IsIdentifierChar(body.charAt(index - 1))) || (end < body.length && IsIdentifierChar(body.charAt(end)))) {\r\n continue;\r\n }\r\n const previousIndex = SkipWhitespacesBackward(body, index - 1);\r\n const previous = body.charAt(previousIndex);\r\n if (previous === \".\") {\r\n continue;\r\n }\r\n const previousTwo = body.substring(previousIndex - 1, previousIndex + 1);\r\n if (previousTwo === \"++\" || previousTwo === \"--\") {\r\n return true;\r\n }\r\n const nextIndex = SkipAccessors(body, end);\r\n if (AssignmentOperatorRegexp.test(body.substring(nextIndex, nextIndex + 3))) {\r\n return true;\r\n }\r\n const next = body.charAt(nextIndex);\r\n if ((previous === \"(\" || previous === \",\") && (next === \",\" || next === \")\")) {\r\n const callee = FindEnclosingCallee(body, previousIndex);\r\n if (callee !== null && functionsWithOutputParameters.has(callee)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Class used to inline functions in shader code\r\n */\r\nexport class ShaderCodeInliner {\r\n private static readonly _RegexpFindFunctionNameAndType = /((\\s+?)(\\w+)\\s+(\\w+)\\s*?)$/;\r\n\r\n private _sourceCode: string;\r\n private _functionDescr: IInlineFunctionDescr[];\r\n private _numMaxIterations: number;\r\n private _copyIndex = 0;\r\n\r\n /** Gets or sets the token used to mark the functions to inline */\r\n public inlineToken: string;\r\n\r\n /** Gets or sets the debug mode */\r\n public debug: boolean = false;\r\n\r\n /** Gets the code after the inlining process */\r\n public get code(): string {\r\n return this._sourceCode;\r\n }\r\n\r\n /**\r\n * Initializes the inliner\r\n * @param sourceCode shader code source to inline\r\n * @param numMaxIterations maximum number of iterations (used to detect recursive calls)\r\n */\r\n constructor(sourceCode: string, numMaxIterations = 20) {\r\n this._sourceCode = sourceCode;\r\n this._numMaxIterations = numMaxIterations;\r\n this._functionDescr = [];\r\n this.inlineToken = \"#define inline\";\r\n }\r\n\r\n /**\r\n * Start the processing of the shader code\r\n */\r\n public processCode() {\r\n if (this.debug) {\r\n Logger.Log(`Start inlining process (code size=${this._sourceCode.length})...`);\r\n }\r\n this._collectFunctions();\r\n this._processInlining(this._numMaxIterations);\r\n if (this.debug) {\r\n Logger.Log(\"End of inlining process.\");\r\n }\r\n }\r\n\r\n private _collectFunctions() {\r\n let startIndex = 0;\r\n const functionsWithOutputParameters = FindFunctionsWithOutputParameters(RemoveComments(this._sourceCode));\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // locate the function to inline and extract its name\r\n const inlineTokenIndex = this._sourceCode.indexOf(this.inlineToken, startIndex);\r\n if (inlineTokenIndex < 0) {\r\n break;\r\n }\r\n\r\n const funcParamsStartIndex = this._sourceCode.indexOf(\"(\", inlineTokenIndex + this.inlineToken.length);\r\n if (funcParamsStartIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not find the opening parenthesis after the token. startIndex=${startIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcNameMatch = ShaderCodeInliner._RegexpFindFunctionNameAndType.exec(\r\n this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)\r\n );\r\n if (!funcNameMatch) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Could not extract the name/type of the function from: ${this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)}`\r\n );\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const [funcType, funcName] = [funcNameMatch[3], funcNameMatch[4]];\r\n\r\n // extract the parameters of the function as a whole string (without the leading / trailing parenthesis)\r\n const funcParamsEndIndex = ExtractBetweenMarkers(\"(\", \")\", this._sourceCode, funcParamsStartIndex);\r\n if (funcParamsEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the parameters the function '${funcName}' (type=${funcType}). funcParamsStartIndex=${funcParamsStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcParams = this._sourceCode.substring(funcParamsStartIndex + 1, funcParamsEndIndex);\r\n\r\n // extract the body of the function (with the curly brackets)\r\n const funcBodyStartIndex = SkipWhitespaces(this._sourceCode, funcParamsEndIndex + 1);\r\n if (funcBodyStartIndex === this._sourceCode.length) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcParamsEndIndex=${funcParamsEndIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcBodyEndIndex = ExtractBetweenMarkers(\"{\", \"}\", this._sourceCode, funcBodyStartIndex);\r\n if (funcBodyEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcBodyStartIndex=${funcBodyStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcBody = this._sourceCode.substring(funcBodyStartIndex, funcBodyEndIndex + 1);\r\n\r\n // process the parameters: extract each names\r\n const params = RemoveComments(funcParams).split(\",\");\r\n const paramNames = [];\r\n const copiedParameterTypes: (string | null)[] = [];\r\n const analyzedBody = RemoveComments(funcBody);\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n const idx = param.lastIndexOf(\" \");\r\n\r\n if (idx >= 0) {\r\n const paramName = param.substring(idx + 1);\r\n paramNames.push(paramName);\r\n\r\n // Inlining substitutes the call argument for the parameter name, so a by-value parameter the body\r\n // writes to would modify the caller's variable. Such parameters get a local copy instead.\r\n const tokens = param.substring(0, idx).trim().split(/\\s+/);\r\n const isByValue = !tokens.includes(\"out\") && !tokens.includes(\"inout\") && !tokens.includes(\"const\");\r\n const declarationTokens = tokens.filter((token) => token !== \"in\");\r\n const typeTokens = declarationTokens.filter((token) => !PrecisionQualifiers.has(token));\r\n const needsCopy =\r\n isByValue &&\r\n typeTokens.length === 1 &&\r\n !OpaqueTypeRegexp.test(typeTokens[0]) &&\r\n !paramName.includes(\"[\") &&\r\n IsWrittenInBody(analyzedBody, paramName, functionsWithOutputParameters);\r\n copiedParameterTypes.push(needsCopy ? declarationTokens.join(\" \") : null);\r\n }\r\n }\r\n\r\n if (funcType !== \"void\") {\r\n // for functions that return a value, we will replace \"return\" by \"tempvarname = \", tempvarname being a unique generated name\r\n paramNames.push(\"return\");\r\n }\r\n\r\n // collect the function\r\n this._functionDescr.push({\r\n name: funcName,\r\n type: funcType,\r\n parameters: paramNames,\r\n copiedParameterTypes,\r\n body: funcBody,\r\n callIndex: 0,\r\n });\r\n\r\n startIndex = funcBodyEndIndex + 1;\r\n\r\n // remove the function from the source code\r\n const partBefore = inlineTokenIndex > 0 ? this._sourceCode.substring(0, inlineTokenIndex) : \"\";\r\n const partAfter = funcBodyEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(funcBodyEndIndex + 1) : \"\";\r\n\r\n this._sourceCode = partBefore + partAfter;\r\n\r\n startIndex -= funcBodyEndIndex + 1 - inlineTokenIndex;\r\n }\r\n\r\n if (this.debug) {\r\n Logger.Log(`Collect functions: ${this._functionDescr.length} functions found. functionDescr=${this._functionDescr}`);\r\n }\r\n }\r\n\r\n private _processInlining(numMaxIterations: number = 20): boolean {\r\n while (numMaxIterations-- >= 0) {\r\n if (!this._replaceFunctionCallsByCode()) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.debug) {\r\n Logger.Log(`numMaxIterations is ${numMaxIterations} after inlining process`);\r\n }\r\n\r\n return numMaxIterations >= 0;\r\n }\r\n\r\n private _replaceFunctionCallsByCode(): boolean {\r\n let doAgain = false;\r\n\r\n for (const func of this._functionDescr) {\r\n const { name, type, parameters, copiedParameterTypes, body } = func;\r\n\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // Look for the function name in the source code\r\n const functionCallIndex = this._sourceCode.indexOf(name, startIndex);\r\n\r\n if (functionCallIndex < 0) {\r\n break;\r\n }\r\n\r\n // Make sure \"name\" is not part of a bigger string\r\n if (functionCallIndex === 0 || IsIdentifierChar(this._sourceCode.charAt(functionCallIndex - 1))) {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // Find the opening parenthesis\r\n const callParamsStartIndex = SkipWhitespaces(this._sourceCode, functionCallIndex + name.length);\r\n if (callParamsStartIndex === this._sourceCode.length || this._sourceCode.charAt(callParamsStartIndex) !== \"(\") {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // extract the parameters of the function call as a whole string (without the leading / trailing parenthesis)\r\n const callParamsEndIndex = ExtractBetweenMarkers(\"(\", \")\", this._sourceCode, callParamsStartIndex);\r\n if (callParamsEndIndex < 0) {\r\n if (this.debug) {\r\n Logger.Warn(`Could not extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n const callParams = this._sourceCode.substring(callParamsStartIndex + 1, callParamsEndIndex);\r\n\r\n // process the parameter call: extract each names\r\n\r\n // this function split the parameter list used in the function call at ',' boundaries by taking care of potential parenthesis like in:\r\n // myfunc(a, vec2(1., 0.), 4.)\r\n const splitParameterCall = (s: string) => {\r\n const parameters = [];\r\n let curIdx = 0,\r\n startParamIdx = 0;\r\n while (curIdx < s.length) {\r\n if (s.charAt(curIdx) === \"(\") {\r\n const idx2 = ExtractBetweenMarkers(\"(\", \")\", s, curIdx);\r\n if (idx2 < 0) {\r\n return null;\r\n }\r\n curIdx = idx2;\r\n } else if (s.charAt(curIdx) === \",\") {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n startParamIdx = curIdx + 1;\r\n }\r\n curIdx++;\r\n }\r\n if (startParamIdx < curIdx) {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n }\r\n return parameters;\r\n };\r\n\r\n const params = splitParameterCall(RemoveComments(callParams));\r\n\r\n if (params === null) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Invalid function call: can't extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}, callParams=` +\r\n callParams\r\n );\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n paramNames.push(param);\r\n }\r\n\r\n let retParamName: string | null = null;\r\n if (type !== \"void\") {\r\n do {\r\n retParamName = name + \"_\" + func.callIndex++;\r\n } while (this._isIdentifierUsed(retParamName));\r\n }\r\n\r\n if (retParamName) {\r\n paramNames.push(retParamName + \" =\");\r\n }\r\n\r\n if (paramNames.length !== parameters.length) {\r\n if (this.debug) {\r\n Logger.Warn(\r\n `Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '${name}' (type=${type}). function parameters=${parameters}, call parameters=${paramNames}`\r\n );\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n startIndex = callParamsEndIndex + 1;\r\n\r\n const copies: string[] = [];\r\n for (let p = 0; p < copiedParameterTypes.length; ++p) {\r\n const copiedType = copiedParameterTypes[p];\r\n if (copiedType) {\r\n // The \"_c\" suffix keeps copies distinct from return temporaries, which end with \"_<number>\"\r\n let localName: string;\r\n do {\r\n localName = `${name}_${parameters[p]}_c${this._copyIndex++}`;\r\n } while (this._isIdentifierUsed(localName));\r\n copies.push(`${copiedType} ${localName} = ${paramNames[p]};`);\r\n paramNames[p] = localName;\r\n }\r\n }\r\n\r\n // replace the function call by the body function\r\n let funcBody = this._replaceNames(body, parameters, paramNames);\r\n if (copies.length > 0) {\r\n funcBody = \"{\\n\" + copies.join(\"\\n\") + \"\\n\" + funcBody + \"\\n}\";\r\n }\r\n\r\n let partBefore = functionCallIndex > 0 ? this._sourceCode.substring(0, functionCallIndex) : \"\";\r\n const partAfter = callParamsEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(callParamsEndIndex + 1) : \"\";\r\n\r\n if (retParamName) {\r\n // case where the function returns a value. We generate:\r\n // FUNCTYPE retParamName;\r\n // {function body}\r\n // and replace the function call by retParamName\r\n const injectDeclarationIndex = FindBackward(this._sourceCode, functionCallIndex - 1, \"\\n\", \"{\");\r\n\r\n partBefore = this._sourceCode.substring(0, injectDeclarationIndex + 1);\r\n const partBetween = this._sourceCode.substring(injectDeclarationIndex + 1, functionCallIndex);\r\n\r\n this._sourceCode = partBefore + type + \" \" + retParamName + \";\\n\" + funcBody + \"\\n\" + partBetween + retParamName + partAfter;\r\n\r\n if (this.debug) {\r\n Logger.Log(\r\n `Replace function call by code. Function '${name}' (type=${type}). injectDeclarationIndex=${injectDeclarationIndex}, call parameters=${paramNames}`\r\n );\r\n }\r\n } else {\r\n // simple case where the return value of the function is \"void\"\r\n this._sourceCode = partBefore + funcBody + partAfter;\r\n\r\n startIndex += funcBody.length - (callParamsEndIndex + 1 - functionCallIndex);\r\n\r\n if (this.debug) {\r\n Logger.Log(`Replace function call by code. Function '${name}' (type=${type}). functionCallIndex=${functionCallIndex}, call parameters=${paramNames}`);\r\n }\r\n }\r\n\r\n doAgain = true;\r\n }\r\n }\r\n\r\n return doAgain;\r\n }\r\n\r\n private _isIdentifierUsed(identifier: string): boolean {\r\n const regexp = new RegExp(`\\\\b${identifier}\\\\b`);\r\n return regexp.test(this._sourceCode) || this._functionDescr.some((func) => regexp.test(func.body));\r\n }\r\n\r\n private _replaceNames(code: string, sources: string[], destinations: string[]): string {\r\n for (let i = 0; i < sources.length; ++i) {\r\n const source = new RegExp(EscapeRegExp(sources[i]), \"g\"),\r\n sourceLen = sources[i].length,\r\n destination = destinations[i],\r\n structBodies = FindStructBodies(code);\r\n\r\n code = code.replace(source, (match, ...args) => {\r\n const offset: number = args[0];\r\n // Make sure \"source\" is not part of a bigger identifier (for eg, if source=view and we matched it with viewDirection)\r\n if (\r\n IsIdentifierChar(code.charAt(offset - 1)) ||\r\n IsIdentifierChar(code.charAt(offset + sourceLen)) ||\r\n IsMemberName(code, offset) ||\r\n structBodies.some(([start, end]) => offset > start && offset < end)\r\n ) {\r\n return sources[i];\r\n }\r\n return destination;\r\n });\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
|
|
@@ -12,6 +12,7 @@ import { _WarnImport } from "../../Misc/devTools.js";
|
|
|
12
12
|
import { _GetGlobalDefines } from "../abstractEngine.functions.js";
|
|
13
13
|
const RegexSe = /defined\s*?\((.+?)\)/g;
|
|
14
14
|
const RegexSeRevert = /defined\s*?\[(.+?)\]/g;
|
|
15
|
+
const RegexMacroName = /^[A-Za-z_]\w*$/;
|
|
15
16
|
const RegexShaderInclude = /#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g;
|
|
16
17
|
const RegexShaderDecl = /__decl__/;
|
|
17
18
|
const RegexLightX = /light\{X\}.(\w*)/g;
|
|
@@ -94,7 +95,11 @@ function ExtractOperation(expression) {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
if (indexOperator === -1) {
|
|
97
|
-
|
|
98
|
+
// a define alone: #if !X is #if !defined(X), as #if X is #if defined(X) (it used to test a define named "!X"). Only a macro name
|
|
99
|
+
// is negated so: anything else after the "!" keeps its reading (#if !1 tests a define named "!1", which never exists)
|
|
100
|
+
const define = expression.trim();
|
|
101
|
+
const name = define.substring(1).trim();
|
|
102
|
+
return define[0] === "!" && RegexMacroName.test(name) ? new ShaderDefineIsDefinedOperator(name, true) : new ShaderDefineIsDefinedOperator(expression);
|
|
98
103
|
}
|
|
99
104
|
const define = expression.substring(0, indexOperator).trim();
|
|
100
105
|
const value = expression.substring(indexOperator + operator.length).trim();
|
|
@@ -241,6 +246,10 @@ function PreparePreProcessors(options, engine) {
|
|
|
241
246
|
if (options.processor?.shaderLanguage === 0 /* ShaderLanguage.GLSL */) {
|
|
242
247
|
preprocessors["GL_ES"] = "true";
|
|
243
248
|
}
|
|
249
|
+
if (engine?.getCaps().highPrecisionShaderSupported) {
|
|
250
|
+
// Resolve the GLSL capability macro before the driver's own preprocessor runs.
|
|
251
|
+
preprocessors["GL_FRAGMENT_PRECISION_HIGH"] = "true";
|
|
252
|
+
}
|
|
244
253
|
preprocessors["__VERSION__"] = options.version;
|
|
245
254
|
preprocessors[options.platformName] = "true";
|
|
246
255
|
_GetGlobalDefines(preprocessors, engine?.isNDCHalfZRange, engine?.useReverseDepthBuffer, engine?.useExactSrgbConversions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderProcessor.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Processors/shaderProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { ShaderCodeNode } from \"./shaderCodeNode\";\r\nimport { ShaderCodeCursor } from \"./shaderCodeCursor\";\r\nimport { ShaderCodeConditionNode } from \"./shaderCodeConditionNode\";\r\nimport { ShaderCodeTestNode } from \"./shaderCodeTestNode\";\r\nimport { ShaderDefineIsDefinedOperator } from \"./Expressions/Operators/shaderDefineIsDefinedOperator\";\r\nimport { ShaderDefineOrOperator } from \"./Expressions/Operators/shaderDefineOrOperator\";\r\nimport { ShaderDefineAndOperator } from \"./Expressions/Operators/shaderDefineAndOperator\";\r\nimport { ShaderDefineExpression } from \"./Expressions/shaderDefineExpression\";\r\nimport { ShaderDefineArithmeticOperator } from \"./Expressions/Operators/shaderDefineArithmeticOperator\";\r\nimport { type _IProcessingOptions } from \"./shaderProcessingOptions\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\nimport { type WebRequest } from \"../../Misc/webRequest\";\r\nimport { type LoadFileError } from \"../../Misc/fileTools\";\r\nimport { type IOfflineProvider } from \"../../Offline/IOfflineProvider\";\r\nimport { type IFileRequest } from \"../../Misc/fileRequest\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport { _GetGlobalDefines } from \"../abstractEngine.functions\";\r\nimport { type AbstractEngine } from \"../abstractEngine\";\r\n\r\nconst RegexSe = /defined\\s*?\\((.+?)\\)/g;\r\nconst RegexSeRevert = /defined\\s*?\\[(.+?)\\]/g;\r\nconst RegexShaderInclude = /#include\\s?<(.+)>(\\((.*)\\))*(\\[(.*)\\])*/g;\r\nconst RegexShaderDecl = /__decl__/;\r\nconst RegexLightX = /light\\{X\\}.(\\w*)/g;\r\nconst RegexX = /\\{X\\}/g;\r\nconst ReusableMatches: RegExpMatchArray[] = [];\r\n\r\nconst MoveCursorRegex = /(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;\r\n\r\n/** @internal */\r\nexport function Initialize(options: _IProcessingOptions): void {\r\n if (options.processor && options.processor.initializeShaders) {\r\n options.processor.initializeShaders(options.processingContext);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function Process(sourceCode: string, options: _IProcessingOptions, callback: (migratedCode: string, codeBeforeMigration: string) => void, engine?: AbstractEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes, options.defines);\r\n }\r\n const migratedCode = ProcessShaderConversion(codeWithIncludes, options, engine);\r\n callback(migratedCode, codeWithIncludes);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function PreProcess(sourceCode: string, options: _IProcessingOptions, callback: (migratedCode: string, codeBeforeMigration: string) => void, engine: AbstractEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes, options.defines);\r\n }\r\n const migratedCode = ApplyPreProcessing(codeWithIncludes, options, engine);\r\n callback(migratedCode, codeWithIncludes);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function Finalize(vertexCode: string, fragmentCode: string, options: _IProcessingOptions): { vertexCode: string; fragmentCode: string } {\r\n if (!options.processor || !options.processor.finalizeShaders) {\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n return options.processor.finalizeShaders(vertexCode, fragmentCode, options.processingContext);\r\n}\r\n\r\nfunction ProcessPrecision(source: string, options: _IProcessingOptions): string {\r\n if (options.processor?.noPrecision) {\r\n return source;\r\n }\r\n\r\n const shouldUseHighPrecisionShader = options.shouldUseHighPrecisionShader;\r\n\r\n if (source.indexOf(\"precision highp float\") === -1) {\r\n if (!shouldUseHighPrecisionShader) {\r\n source = \"precision mediump float;\\n\" + source;\r\n } else {\r\n source = \"precision highp float;\\n\" + source;\r\n }\r\n } else {\r\n if (!shouldUseHighPrecisionShader) {\r\n // Moving highp to mediump\r\n source = source.replace(\"precision highp float\", \"precision mediump float\");\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction ExtractOperation(expression: string) {\r\n const regex = /defined\\((.+)\\)/;\r\n\r\n const match = regex.exec(expression);\r\n\r\n if (match && match.length) {\r\n return new ShaderDefineIsDefinedOperator(match[1].trim(), expression[0] === \"!\");\r\n }\r\n\r\n const operators = [\"==\", \"!=\", \">=\", \"<=\", \"<\", \">\"];\r\n let operator = \"\";\r\n let indexOperator = 0;\r\n\r\n for (operator of operators) {\r\n indexOperator = expression.indexOf(operator);\r\n\r\n if (indexOperator > -1) {\r\n break;\r\n }\r\n }\r\n\r\n if (indexOperator === -1) {\r\n return new ShaderDefineIsDefinedOperator(expression);\r\n }\r\n\r\n const define = expression.substring(0, indexOperator).trim();\r\n const value = expression.substring(indexOperator + operator.length).trim();\r\n\r\n return new ShaderDefineArithmeticOperator(define, operator, value);\r\n}\r\n\r\nfunction BuildSubExpression(expression: string): ShaderDefineExpression {\r\n expression = expression.replace(RegexSe, \"defined[$1]\");\r\n\r\n const postfix = ShaderDefineExpression.infixToPostfix(expression);\r\n\r\n const stack: (string | ShaderDefineExpression)[] = [];\r\n\r\n for (const c of postfix) {\r\n if (c !== \"||\" && c !== \"&&\") {\r\n stack.push(c);\r\n } else if (stack.length >= 2) {\r\n let v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n\r\n const operator = c == \"&&\" ? new ShaderDefineAndOperator() : new ShaderDefineOrOperator();\r\n\r\n if (typeof v1 === \"string\") {\r\n v1 = v1.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n if (typeof v2 === \"string\") {\r\n v2 = v2.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n operator.leftOperand = typeof v2 === \"string\" ? ExtractOperation(v2) : v2;\r\n operator.rightOperand = typeof v1 === \"string\" ? ExtractOperation(v1) : v1;\r\n\r\n stack.push(operator);\r\n }\r\n }\r\n\r\n let result = stack[stack.length - 1];\r\n\r\n if (typeof result === \"string\") {\r\n result = result.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n // note: stack.length !== 1 if there was an error in the parsing\r\n\r\n return typeof result === \"string\" ? ExtractOperation(result) : result;\r\n}\r\n\r\nfunction BuildExpression(line: string, start: number): ShaderCodeTestNode {\r\n const node = new ShaderCodeTestNode();\r\n const command = line.substring(0, start);\r\n let expression = line.substring(start);\r\n\r\n expression = expression.substring(0, (expression.indexOf(\"//\") + 1 || expression.length + 1) - 1).trim();\r\n\r\n if (command === \"#ifdef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression);\r\n } else if (command === \"#ifndef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression, true);\r\n } else {\r\n node.testExpression = BuildSubExpression(expression);\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction MoveCursorWithinIf(cursor: ShaderCodeCursor, rootNode: ShaderCodeConditionNode, ifNode: ShaderCodeNode, preProcessorsFromCode: { [key: string]: string }) {\r\n let line: string;\r\n while (MoveCursor(cursor, ifNode, preProcessorsFromCode)) {\r\n line = cursor.currentLine;\r\n const first5 = line.substring(0, 5).toLowerCase();\r\n\r\n if (first5 === \"#else\") {\r\n const elseNode = new ShaderCodeNode();\r\n rootNode.children.push(elseNode);\r\n MoveCursor(cursor, elseNode, preProcessorsFromCode);\r\n return;\r\n } else if (first5 === \"#elif\") {\r\n const elifNode = BuildExpression(line, 5);\r\n\r\n rootNode.children.push(elifNode);\r\n ifNode = elifNode;\r\n }\r\n }\r\n}\r\n\r\nfunction MoveCursor(cursor: ShaderCodeCursor, rootNode: ShaderCodeNode, preProcessorsFromCode: { [key: string]: string }): boolean {\r\n while (cursor.canRead) {\r\n cursor.lineIndex++;\r\n const line = cursor.currentLine;\r\n\r\n if (line.indexOf(\"#\") >= 0) {\r\n const matches = MoveCursorRegex.exec(line);\r\n\r\n if (matches && matches.length) {\r\n const keyword = matches[0];\r\n\r\n switch (keyword) {\r\n case \"#ifdef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = BuildExpression(line, 6);\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n case \"#else\":\r\n case \"#elif\":\r\n return true;\r\n case \"#endif\":\r\n return false;\r\n case \"#ifndef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = BuildExpression(line, 7);\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n case \"#if\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n const ifNode = BuildExpression(line, 3);\r\n rootNode.children.push(newRootNode);\r\n\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n const newNode = new ShaderCodeNode();\r\n newNode.line = line;\r\n rootNode.children.push(newNode);\r\n\r\n // Detect additional defines\r\n if (line[0] === \"#\" && line[1] === \"d\") {\r\n const split = line.replace(\";\", \"\").split(\" \");\r\n newNode.additionalDefineKey = split[1];\r\n\r\n if (split.length === 3) {\r\n newNode.additionalDefineValue = split[2];\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction EvaluatePreProcessors(\r\n sourceCode: string,\r\n preprocessors: { [key: string]: string },\r\n options: _IProcessingOptions,\r\n preProcessorsFromCode: { [key: string]: string }\r\n): string {\r\n const rootNode = new ShaderCodeNode();\r\n const cursor = new ShaderCodeCursor();\r\n\r\n cursor.lineIndex = -1;\r\n cursor.lines = sourceCode.split(\"\\n\");\r\n\r\n // Decompose (We keep it in 2 steps so it is easier to maintain and perf hit is insignificant)\r\n MoveCursor(cursor, rootNode, preProcessorsFromCode);\r\n\r\n // Recompose\r\n return rootNode.process(preprocessors, options, preProcessorsFromCode);\r\n}\r\n\r\nfunction PreparePreProcessors(options: _IProcessingOptions, engine?: AbstractEngine): { [key: string]: string } {\r\n const defines = options.defines;\r\n const preprocessors: { [key: string]: string } = {};\r\n\r\n for (const define of defines) {\r\n const keyValue = define.replace(\"#define\", \"\").replace(\";\", \"\").trim();\r\n const split = keyValue.split(\" \");\r\n preprocessors[split[0]] = split.length > 1 ? split[1] : \"\";\r\n }\r\n\r\n if (options.processor?.shaderLanguage === ShaderLanguage.GLSL) {\r\n preprocessors[\"GL_ES\"] = \"true\";\r\n }\r\n preprocessors[\"__VERSION__\"] = options.version;\r\n preprocessors[options.platformName] = \"true\";\r\n\r\n _GetGlobalDefines(preprocessors, engine?.isNDCHalfZRange, engine?.useReverseDepthBuffer, engine?.useExactSrgbConversions);\r\n\r\n return preprocessors;\r\n}\r\n\r\nfunction ProcessShaderConversion(sourceCode: string, options: _IProcessingOptions, engine?: AbstractEngine): string {\r\n let preparedSourceCode = ProcessPrecision(sourceCode, options);\r\n\r\n if (!options.processor) {\r\n return preparedSourceCode;\r\n }\r\n\r\n // Already converted\r\n if (options.processor.shaderLanguage === ShaderLanguage.GLSL && preparedSourceCode.indexOf(\"#version 3\") !== -1) {\r\n preparedSourceCode = preparedSourceCode.replace(\"#version 300 es\", \"\");\r\n if (!options.processor.parseGLES3) {\r\n return preparedSourceCode;\r\n }\r\n }\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, preprocessors, options.isFragment, options.processingContext);\r\n }\r\n\r\n const preProcessorsFromCode: { [key: string]: string } = {};\r\n\r\n preparedSourceCode = EvaluatePreProcessors(preparedSourceCode, preprocessors, options, preProcessorsFromCode);\r\n\r\n // Post processing\r\n if (options.processor.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(\r\n preparedSourceCode,\r\n defines,\r\n options.isFragment,\r\n options.processingContext,\r\n engine\r\n ? {\r\n drawBuffersExtensionDisabled: engine.getCaps().drawBuffersExtension ? false : true,\r\n }\r\n : {},\r\n preprocessors,\r\n preProcessorsFromCode\r\n );\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine?._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n}\r\n\r\nfunction ApplyPreProcessing(sourceCode: string, options: _IProcessingOptions, engine: AbstractEngine): string {\r\n let preparedSourceCode = sourceCode;\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor?.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, preprocessors, options.isFragment, options.processingContext);\r\n }\r\n\r\n const preProcessorsFromCode: { [key: string]: string } = {};\r\n\r\n preparedSourceCode = EvaluatePreProcessors(preparedSourceCode, preprocessors, options, preProcessorsFromCode);\r\n\r\n // Post processing\r\n if (options.processor?.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(\r\n preparedSourceCode,\r\n defines,\r\n options.isFragment,\r\n options.processingContext,\r\n engine\r\n ? {\r\n drawBuffersExtensionDisabled: engine.getCaps().drawBuffersExtension ? false : true,\r\n }\r\n : {},\r\n preprocessors,\r\n preProcessorsFromCode\r\n );\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n}\r\n\r\n/** @internal */\r\nexport function ProcessIncludes(sourceCode: string, options: _IProcessingOptions, callback: (data: any) => void): void {\r\n ReusableMatches.length = 0;\r\n let match: RegExpMatchArray | null;\r\n // stay back-compat to the old matchAll syntax\r\n while ((match = RegexShaderInclude.exec(sourceCode)) !== null) {\r\n ReusableMatches.push(match);\r\n }\r\n\r\n let parts = [sourceCode];\r\n\r\n let keepProcessing = false;\r\n\r\n for (const match of ReusableMatches) {\r\n let includeFile = match[1];\r\n\r\n // Uniform declaration\r\n if (includeFile.indexOf(\"__decl__\") !== -1) {\r\n includeFile = includeFile.replace(RegexShaderDecl, \"\");\r\n if (options.supportsUniformBuffers) {\r\n includeFile = includeFile.replace(\"Vertex\", \"Ubo\").replace(\"Fragment\", \"Ubo\");\r\n }\r\n includeFile = includeFile + \"Declaration\";\r\n }\r\n\r\n if (options.includesShadersStore[includeFile]) {\r\n // Substitution\r\n let includeContent = options.includesShadersStore[includeFile];\r\n if (match[2]) {\r\n const splits = match[3].split(\",\");\r\n\r\n for (let index = 0; index < splits.length; index += 2) {\r\n const source = new RegExp(splits[index], \"g\");\r\n const dest = splits[index + 1];\r\n\r\n includeContent = includeContent.replace(source, dest);\r\n }\r\n }\r\n\r\n if (match[4]) {\r\n const indexString = match[5];\r\n\r\n if (indexString.indexOf(\"..\") !== -1) {\r\n const indexSplits = indexString.split(\"..\");\r\n const minIndex = parseInt(indexSplits[0]);\r\n let maxIndex = parseInt(indexSplits[1]);\r\n let sourceIncludeContent = includeContent.slice(0);\r\n includeContent = \"\";\r\n\r\n if (isNaN(maxIndex)) {\r\n maxIndex = options.indexParameters[indexSplits[1]];\r\n }\r\n\r\n for (let i = minIndex; i < maxIndex; i++) {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n sourceIncludeContent = sourceIncludeContent.replace(RegexLightX, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent += sourceIncludeContent.replace(RegexX, i.toString()) + \"\\n\";\r\n }\r\n } else {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n includeContent = includeContent.replace(RegexLightX, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent = includeContent.replace(RegexX, indexString);\r\n }\r\n }\r\n\r\n // Replace\r\n // Split all parts on match[0] and intersperse the parts with the include content\r\n const newParts = [];\r\n for (const part of parts) {\r\n const splitPart = part.split(match[0]);\r\n for (let i = 0; i < splitPart.length - 1; i++) {\r\n newParts.push(splitPart[i]);\r\n newParts.push(includeContent);\r\n }\r\n newParts.push(splitPart[splitPart.length - 1]);\r\n }\r\n parts = newParts;\r\n\r\n keepProcessing = keepProcessing || includeContent.indexOf(\"#include<\") >= 0 || includeContent.indexOf(\"#include <\") >= 0;\r\n } else {\r\n const includeShaderUrl = options.shadersRepository + \"ShadersInclude/\" + includeFile + \".fx\";\r\n\r\n _FunctionContainer.loadFile(includeShaderUrl, (fileContent) => {\r\n options.includesShadersStore[includeFile] = fileContent as string;\r\n ProcessIncludes(parts.join(\"\"), options, callback);\r\n });\r\n return;\r\n }\r\n }\r\n ReusableMatches.length = 0;\r\n\r\n const returnValue = parts.join(\"\");\r\n\r\n if (keepProcessing) {\r\n ProcessIncludes(returnValue.toString(), options, callback);\r\n } else {\r\n callback(returnValue);\r\n }\r\n}\r\n\r\n/**\r\n * @deprecated Use direct imports from fileTools.pure instead. Kept for backwards compatibility.\r\n * @internal\r\n */\r\nexport const _FunctionContainer = {\r\n loadFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void\r\n ): IFileRequest => {\r\n throw _WarnImport(\"FileTools\");\r\n },\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"shaderProcessor.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Processors/shaderProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { ShaderCodeNode } from \"./shaderCodeNode\";\r\nimport { ShaderCodeCursor } from \"./shaderCodeCursor\";\r\nimport { ShaderCodeConditionNode } from \"./shaderCodeConditionNode\";\r\nimport { ShaderCodeTestNode } from \"./shaderCodeTestNode\";\r\nimport { ShaderDefineIsDefinedOperator } from \"./Expressions/Operators/shaderDefineIsDefinedOperator\";\r\nimport { ShaderDefineOrOperator } from \"./Expressions/Operators/shaderDefineOrOperator\";\r\nimport { ShaderDefineAndOperator } from \"./Expressions/Operators/shaderDefineAndOperator\";\r\nimport { ShaderDefineExpression } from \"./Expressions/shaderDefineExpression\";\r\nimport { ShaderDefineArithmeticOperator } from \"./Expressions/Operators/shaderDefineArithmeticOperator\";\r\nimport { type _IProcessingOptions } from \"./shaderProcessingOptions\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\nimport { type WebRequest } from \"../../Misc/webRequest\";\r\nimport { type LoadFileError } from \"../../Misc/fileTools\";\r\nimport { type IOfflineProvider } from \"../../Offline/IOfflineProvider\";\r\nimport { type IFileRequest } from \"../../Misc/fileRequest\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport { _GetGlobalDefines } from \"../abstractEngine.functions\";\r\nimport { type AbstractEngine } from \"../abstractEngine\";\r\n\r\nconst RegexSe = /defined\\s*?\\((.+?)\\)/g;\r\nconst RegexSeRevert = /defined\\s*?\\[(.+?)\\]/g;\r\nconst RegexMacroName = /^[A-Za-z_]\\w*$/;\r\nconst RegexShaderInclude = /#include\\s?<(.+)>(\\((.*)\\))*(\\[(.*)\\])*/g;\r\nconst RegexShaderDecl = /__decl__/;\r\nconst RegexLightX = /light\\{X\\}.(\\w*)/g;\r\nconst RegexX = /\\{X\\}/g;\r\nconst ReusableMatches: RegExpMatchArray[] = [];\r\n\r\nconst MoveCursorRegex = /(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;\r\n\r\n/** @internal */\r\nexport function Initialize(options: _IProcessingOptions): void {\r\n if (options.processor && options.processor.initializeShaders) {\r\n options.processor.initializeShaders(options.processingContext);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function Process(sourceCode: string, options: _IProcessingOptions, callback: (migratedCode: string, codeBeforeMigration: string) => void, engine?: AbstractEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes, options.defines);\r\n }\r\n const migratedCode = ProcessShaderConversion(codeWithIncludes, options, engine);\r\n callback(migratedCode, codeWithIncludes);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function PreProcess(sourceCode: string, options: _IProcessingOptions, callback: (migratedCode: string, codeBeforeMigration: string) => void, engine: AbstractEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes, options.defines);\r\n }\r\n const migratedCode = ApplyPreProcessing(codeWithIncludes, options, engine);\r\n callback(migratedCode, codeWithIncludes);\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function Finalize(vertexCode: string, fragmentCode: string, options: _IProcessingOptions): { vertexCode: string; fragmentCode: string } {\r\n if (!options.processor || !options.processor.finalizeShaders) {\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n return options.processor.finalizeShaders(vertexCode, fragmentCode, options.processingContext);\r\n}\r\n\r\nfunction ProcessPrecision(source: string, options: _IProcessingOptions): string {\r\n if (options.processor?.noPrecision) {\r\n return source;\r\n }\r\n\r\n const shouldUseHighPrecisionShader = options.shouldUseHighPrecisionShader;\r\n\r\n if (source.indexOf(\"precision highp float\") === -1) {\r\n if (!shouldUseHighPrecisionShader) {\r\n source = \"precision mediump float;\\n\" + source;\r\n } else {\r\n source = \"precision highp float;\\n\" + source;\r\n }\r\n } else {\r\n if (!shouldUseHighPrecisionShader) {\r\n // Moving highp to mediump\r\n source = source.replace(\"precision highp float\", \"precision mediump float\");\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction ExtractOperation(expression: string) {\r\n const regex = /defined\\((.+)\\)/;\r\n\r\n const match = regex.exec(expression);\r\n\r\n if (match && match.length) {\r\n return new ShaderDefineIsDefinedOperator(match[1].trim(), expression[0] === \"!\");\r\n }\r\n\r\n const operators = [\"==\", \"!=\", \">=\", \"<=\", \"<\", \">\"];\r\n let operator = \"\";\r\n let indexOperator = 0;\r\n\r\n for (operator of operators) {\r\n indexOperator = expression.indexOf(operator);\r\n\r\n if (indexOperator > -1) {\r\n break;\r\n }\r\n }\r\n\r\n if (indexOperator === -1) {\r\n // a define alone: #if !X is #if !defined(X), as #if X is #if defined(X) (it used to test a define named \"!X\"). Only a macro name\r\n // is negated so: anything else after the \"!\" keeps its reading (#if !1 tests a define named \"!1\", which never exists)\r\n const define = expression.trim();\r\n const name = define.substring(1).trim();\r\n return define[0] === \"!\" && RegexMacroName.test(name) ? new ShaderDefineIsDefinedOperator(name, true) : new ShaderDefineIsDefinedOperator(expression);\r\n }\r\n\r\n const define = expression.substring(0, indexOperator).trim();\r\n const value = expression.substring(indexOperator + operator.length).trim();\r\n\r\n return new ShaderDefineArithmeticOperator(define, operator, value);\r\n}\r\n\r\nfunction BuildSubExpression(expression: string): ShaderDefineExpression {\r\n expression = expression.replace(RegexSe, \"defined[$1]\");\r\n\r\n const postfix = ShaderDefineExpression.infixToPostfix(expression);\r\n\r\n const stack: (string | ShaderDefineExpression)[] = [];\r\n\r\n for (const c of postfix) {\r\n if (c !== \"||\" && c !== \"&&\") {\r\n stack.push(c);\r\n } else if (stack.length >= 2) {\r\n let v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n\r\n const operator = c == \"&&\" ? new ShaderDefineAndOperator() : new ShaderDefineOrOperator();\r\n\r\n if (typeof v1 === \"string\") {\r\n v1 = v1.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n if (typeof v2 === \"string\") {\r\n v2 = v2.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n operator.leftOperand = typeof v2 === \"string\" ? ExtractOperation(v2) : v2;\r\n operator.rightOperand = typeof v1 === \"string\" ? ExtractOperation(v1) : v1;\r\n\r\n stack.push(operator);\r\n }\r\n }\r\n\r\n let result = stack[stack.length - 1];\r\n\r\n if (typeof result === \"string\") {\r\n result = result.replace(RegexSeRevert, \"defined($1)\");\r\n }\r\n\r\n // note: stack.length !== 1 if there was an error in the parsing\r\n\r\n return typeof result === \"string\" ? ExtractOperation(result) : result;\r\n}\r\n\r\nfunction BuildExpression(line: string, start: number): ShaderCodeTestNode {\r\n const node = new ShaderCodeTestNode();\r\n const command = line.substring(0, start);\r\n let expression = line.substring(start);\r\n\r\n expression = expression.substring(0, (expression.indexOf(\"//\") + 1 || expression.length + 1) - 1).trim();\r\n\r\n if (command === \"#ifdef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression);\r\n } else if (command === \"#ifndef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression, true);\r\n } else {\r\n node.testExpression = BuildSubExpression(expression);\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction MoveCursorWithinIf(cursor: ShaderCodeCursor, rootNode: ShaderCodeConditionNode, ifNode: ShaderCodeNode, preProcessorsFromCode: { [key: string]: string }) {\r\n let line: string;\r\n while (MoveCursor(cursor, ifNode, preProcessorsFromCode)) {\r\n line = cursor.currentLine;\r\n const first5 = line.substring(0, 5).toLowerCase();\r\n\r\n if (first5 === \"#else\") {\r\n const elseNode = new ShaderCodeNode();\r\n rootNode.children.push(elseNode);\r\n MoveCursor(cursor, elseNode, preProcessorsFromCode);\r\n return;\r\n } else if (first5 === \"#elif\") {\r\n const elifNode = BuildExpression(line, 5);\r\n\r\n rootNode.children.push(elifNode);\r\n ifNode = elifNode;\r\n }\r\n }\r\n}\r\n\r\nfunction MoveCursor(cursor: ShaderCodeCursor, rootNode: ShaderCodeNode, preProcessorsFromCode: { [key: string]: string }): boolean {\r\n while (cursor.canRead) {\r\n cursor.lineIndex++;\r\n const line = cursor.currentLine;\r\n\r\n if (line.indexOf(\"#\") >= 0) {\r\n const matches = MoveCursorRegex.exec(line);\r\n\r\n if (matches && matches.length) {\r\n const keyword = matches[0];\r\n\r\n switch (keyword) {\r\n case \"#ifdef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = BuildExpression(line, 6);\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n case \"#else\":\r\n case \"#elif\":\r\n return true;\r\n case \"#endif\":\r\n return false;\r\n case \"#ifndef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = BuildExpression(line, 7);\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n case \"#if\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n const ifNode = BuildExpression(line, 3);\r\n rootNode.children.push(newRootNode);\r\n\r\n newRootNode.children.push(ifNode);\r\n MoveCursorWithinIf(cursor, newRootNode, ifNode, preProcessorsFromCode);\r\n break;\r\n }\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n const newNode = new ShaderCodeNode();\r\n newNode.line = line;\r\n rootNode.children.push(newNode);\r\n\r\n // Detect additional defines\r\n if (line[0] === \"#\" && line[1] === \"d\") {\r\n const split = line.replace(\";\", \"\").split(\" \");\r\n newNode.additionalDefineKey = split[1];\r\n\r\n if (split.length === 3) {\r\n newNode.additionalDefineValue = split[2];\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction EvaluatePreProcessors(\r\n sourceCode: string,\r\n preprocessors: { [key: string]: string },\r\n options: _IProcessingOptions,\r\n preProcessorsFromCode: { [key: string]: string }\r\n): string {\r\n const rootNode = new ShaderCodeNode();\r\n const cursor = new ShaderCodeCursor();\r\n\r\n cursor.lineIndex = -1;\r\n cursor.lines = sourceCode.split(\"\\n\");\r\n\r\n // Decompose (We keep it in 2 steps so it is easier to maintain and perf hit is insignificant)\r\n MoveCursor(cursor, rootNode, preProcessorsFromCode);\r\n\r\n // Recompose\r\n return rootNode.process(preprocessors, options, preProcessorsFromCode);\r\n}\r\n\r\nfunction PreparePreProcessors(options: _IProcessingOptions, engine?: AbstractEngine): { [key: string]: string } {\r\n const defines = options.defines;\r\n const preprocessors: { [key: string]: string } = {};\r\n\r\n for (const define of defines) {\r\n const keyValue = define.replace(\"#define\", \"\").replace(\";\", \"\").trim();\r\n const split = keyValue.split(\" \");\r\n preprocessors[split[0]] = split.length > 1 ? split[1] : \"\";\r\n }\r\n\r\n if (options.processor?.shaderLanguage === ShaderLanguage.GLSL) {\r\n preprocessors[\"GL_ES\"] = \"true\";\r\n }\r\n if (engine?.getCaps().highPrecisionShaderSupported) {\r\n // Resolve the GLSL capability macro before the driver's own preprocessor runs.\r\n preprocessors[\"GL_FRAGMENT_PRECISION_HIGH\"] = \"true\";\r\n }\r\n preprocessors[\"__VERSION__\"] = options.version;\r\n preprocessors[options.platformName] = \"true\";\r\n\r\n _GetGlobalDefines(preprocessors, engine?.isNDCHalfZRange, engine?.useReverseDepthBuffer, engine?.useExactSrgbConversions);\r\n\r\n return preprocessors;\r\n}\r\n\r\nfunction ProcessShaderConversion(sourceCode: string, options: _IProcessingOptions, engine?: AbstractEngine): string {\r\n let preparedSourceCode = ProcessPrecision(sourceCode, options);\r\n\r\n if (!options.processor) {\r\n return preparedSourceCode;\r\n }\r\n\r\n // Already converted\r\n if (options.processor.shaderLanguage === ShaderLanguage.GLSL && preparedSourceCode.indexOf(\"#version 3\") !== -1) {\r\n preparedSourceCode = preparedSourceCode.replace(\"#version 300 es\", \"\");\r\n if (!options.processor.parseGLES3) {\r\n return preparedSourceCode;\r\n }\r\n }\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, preprocessors, options.isFragment, options.processingContext);\r\n }\r\n\r\n const preProcessorsFromCode: { [key: string]: string } = {};\r\n\r\n preparedSourceCode = EvaluatePreProcessors(preparedSourceCode, preprocessors, options, preProcessorsFromCode);\r\n\r\n // Post processing\r\n if (options.processor.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(\r\n preparedSourceCode,\r\n defines,\r\n options.isFragment,\r\n options.processingContext,\r\n engine\r\n ? {\r\n drawBuffersExtensionDisabled: engine.getCaps().drawBuffersExtension ? false : true,\r\n }\r\n : {},\r\n preprocessors,\r\n preProcessorsFromCode\r\n );\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine?._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n}\r\n\r\nfunction ApplyPreProcessing(sourceCode: string, options: _IProcessingOptions, engine: AbstractEngine): string {\r\n let preparedSourceCode = sourceCode;\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor?.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, preprocessors, options.isFragment, options.processingContext);\r\n }\r\n\r\n const preProcessorsFromCode: { [key: string]: string } = {};\r\n\r\n preparedSourceCode = EvaluatePreProcessors(preparedSourceCode, preprocessors, options, preProcessorsFromCode);\r\n\r\n // Post processing\r\n if (options.processor?.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(\r\n preparedSourceCode,\r\n defines,\r\n options.isFragment,\r\n options.processingContext,\r\n engine\r\n ? {\r\n drawBuffersExtensionDisabled: engine.getCaps().drawBuffersExtension ? false : true,\r\n }\r\n : {},\r\n preprocessors,\r\n preProcessorsFromCode\r\n );\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n}\r\n\r\n/** @internal */\r\nexport function ProcessIncludes(sourceCode: string, options: _IProcessingOptions, callback: (data: any) => void): void {\r\n ReusableMatches.length = 0;\r\n let match: RegExpMatchArray | null;\r\n // stay back-compat to the old matchAll syntax\r\n while ((match = RegexShaderInclude.exec(sourceCode)) !== null) {\r\n ReusableMatches.push(match);\r\n }\r\n\r\n let parts = [sourceCode];\r\n\r\n let keepProcessing = false;\r\n\r\n for (const match of ReusableMatches) {\r\n let includeFile = match[1];\r\n\r\n // Uniform declaration\r\n if (includeFile.indexOf(\"__decl__\") !== -1) {\r\n includeFile = includeFile.replace(RegexShaderDecl, \"\");\r\n if (options.supportsUniformBuffers) {\r\n includeFile = includeFile.replace(\"Vertex\", \"Ubo\").replace(\"Fragment\", \"Ubo\");\r\n }\r\n includeFile = includeFile + \"Declaration\";\r\n }\r\n\r\n if (options.includesShadersStore[includeFile]) {\r\n // Substitution\r\n let includeContent = options.includesShadersStore[includeFile];\r\n if (match[2]) {\r\n const splits = match[3].split(\",\");\r\n\r\n for (let index = 0; index < splits.length; index += 2) {\r\n const source = new RegExp(splits[index], \"g\");\r\n const dest = splits[index + 1];\r\n\r\n includeContent = includeContent.replace(source, dest);\r\n }\r\n }\r\n\r\n if (match[4]) {\r\n const indexString = match[5];\r\n\r\n if (indexString.indexOf(\"..\") !== -1) {\r\n const indexSplits = indexString.split(\"..\");\r\n const minIndex = parseInt(indexSplits[0]);\r\n let maxIndex = parseInt(indexSplits[1]);\r\n let sourceIncludeContent = includeContent.slice(0);\r\n includeContent = \"\";\r\n\r\n if (isNaN(maxIndex)) {\r\n maxIndex = options.indexParameters[indexSplits[1]];\r\n }\r\n\r\n for (let i = minIndex; i < maxIndex; i++) {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n sourceIncludeContent = sourceIncludeContent.replace(RegexLightX, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent += sourceIncludeContent.replace(RegexX, i.toString()) + \"\\n\";\r\n }\r\n } else {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n includeContent = includeContent.replace(RegexLightX, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent = includeContent.replace(RegexX, indexString);\r\n }\r\n }\r\n\r\n // Replace\r\n // Split all parts on match[0] and intersperse the parts with the include content\r\n const newParts = [];\r\n for (const part of parts) {\r\n const splitPart = part.split(match[0]);\r\n for (let i = 0; i < splitPart.length - 1; i++) {\r\n newParts.push(splitPart[i]);\r\n newParts.push(includeContent);\r\n }\r\n newParts.push(splitPart[splitPart.length - 1]);\r\n }\r\n parts = newParts;\r\n\r\n keepProcessing = keepProcessing || includeContent.indexOf(\"#include<\") >= 0 || includeContent.indexOf(\"#include <\") >= 0;\r\n } else {\r\n const includeShaderUrl = options.shadersRepository + \"ShadersInclude/\" + includeFile + \".fx\";\r\n\r\n _FunctionContainer.loadFile(includeShaderUrl, (fileContent) => {\r\n options.includesShadersStore[includeFile] = fileContent as string;\r\n ProcessIncludes(parts.join(\"\"), options, callback);\r\n });\r\n return;\r\n }\r\n }\r\n ReusableMatches.length = 0;\r\n\r\n const returnValue = parts.join(\"\");\r\n\r\n if (keepProcessing) {\r\n ProcessIncludes(returnValue.toString(), options, callback);\r\n } else {\r\n callback(returnValue);\r\n }\r\n}\r\n\r\n/**\r\n * @deprecated Use direct imports from fileTools.pure instead. Kept for backwards compatibility.\r\n * @internal\r\n */\r\nexport const _FunctionContainer = {\r\n loadFile: (\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void\r\n ): IFileRequest => {\r\n throw _WarnImport(\"FileTools\");\r\n },\r\n};\r\n"]}
|
|
@@ -102,6 +102,10 @@ export function RegisterWebGPUDebugging() {
|
|
|
102
102
|
if (!this._enableGPUDebugMarkers) {
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
|
+
if (this._currentRenderPass) {
|
|
106
|
+
// Record batched draws before opening the group so they stay attributed to the enclosing scope.
|
|
107
|
+
this._flushRenderPassCommands();
|
|
108
|
+
}
|
|
105
109
|
const debugCommands = this._currentRenderPass ?? this._renderEncoder;
|
|
106
110
|
debugCommands.pushDebugGroup(groupName);
|
|
107
111
|
if (this._currentRenderPass) {
|
|
@@ -118,6 +122,10 @@ export function RegisterWebGPUDebugging() {
|
|
|
118
122
|
if (!this._enableGPUDebugMarkers) {
|
|
119
123
|
return;
|
|
120
124
|
}
|
|
125
|
+
if (this._currentRenderPass) {
|
|
126
|
+
// Record batched draws before closing the group so they stay attributed to it.
|
|
127
|
+
this._flushRenderPassCommands();
|
|
128
|
+
}
|
|
121
129
|
const debugCommands = this._currentRenderPass ?? this._renderEncoder;
|
|
122
130
|
if (this._currentRenderPass) {
|
|
123
131
|
if (this._debugMarkersPassGroups.length > 0) {
|
|
@@ -160,6 +168,10 @@ export function RegisterWebGPUDebugging() {
|
|
|
160
168
|
if (!this._enableGPUDebugMarkers) {
|
|
161
169
|
return;
|
|
162
170
|
}
|
|
171
|
+
if (this._currentRenderPass) {
|
|
172
|
+
// Keep the marker positioned after the draws that were issued before it.
|
|
173
|
+
this._flushRenderPassCommands();
|
|
174
|
+
}
|
|
163
175
|
const debugCommands = this._currentRenderPass ?? this._renderEncoder;
|
|
164
176
|
if (this._showGPUDebugMarkersLog) {
|
|
165
177
|
Logger.Log(`[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Inserting debug marker '${text}' on '${debugCommands.label}'`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.debugging.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.debugging.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\n/**\r\n * # WebGPU Debug Marker Implementation — Problem Statement\r\n *\r\n * ## Background\r\n *\r\n * WebGPU exposes `pushDebugGroup` / `popDebugGroup` on two distinct objects:\r\n * - The **render encoder** (`GPUCommandEncoder`), which lives for the lifetime of an entire\r\n * submission (one call to `flushFramebuffer`).\r\n * - The **render pass encoder** (`GPURenderPassEncoder`), which lives only for the duration of\r\n * a single render pass.\r\n *\r\n * WebGPU requires that every push/pop pair is issued on the **same** object, and that all open\r\n * groups are closed before the object ends. Violating either rule is a validation error.\r\n *\r\n * ## The Core Problem\r\n *\r\n * From the Babylon.js side, the user calls `_debugPushGroup` / `_debugPopGroup` at arbitrary\r\n * points in time — completely independently of whether a render pass is currently active or not.\r\n * This creates several mismatched-context scenarios that must be handled transparently.\r\n *\r\n * ## Scenario 1 — Push on render encoder, pop inside a render pass\r\n *\r\n * 1. User calls `_debugPushGroup` while no render pass is active → group is pushed on the\r\n * render encoder and recorded in `_debugMarkersEncoderGroups`.\r\n * 2. A render pass starts (`_currentRenderPass` becomes non-null).\r\n * 3. User calls `_debugPopGroup` while the render pass is active. The pop must logically target\r\n * the render encoder group, but we cannot call `popDebugGroup` on the render encoder while a\r\n * render pass is active (the pass is the live object).\r\n * 4. We detect this mismatch because `_debugMarkersPassGroups` is empty (no group was pushed\r\n * during this render pass), so we increment `_debugMarkersPendingEncoderPops` instead of\r\n * issuing the pop immediately.\r\n * 5. When the render pass ends (`_endCurrentRenderPass`), `_debugPendingPop` drains the\r\n * `_debugMarkersPendingEncoderPops` counter and issues the deferred pops on the render encoder.\r\n *\r\n * **Edge case — deferred pop followed by a render-pass push:** if the user pushes another group\r\n * during the same render pass *after* the deferred pop was recorded, that new group goes into\r\n * `_debugMarkersPassGroups`. When the pass ends, `_debugPopBeforeEndOfEncoder` auto-pops the\r\n * pass-level group, leaving it floating in `_debugMarkersPassGroups`. `_debugPendingPop` then\r\n * pops from `_debugMarkersEncoderGroups` — a separate array that can never contain pass-level\r\n * entries — so the floating pass-level group is preserved intact and will be re-pushed on the\r\n * next render pass by `_debugPushAfterStartOfEncoder`.\r\n *\r\n * ## Scenario 2 — Push inside a render pass, render pass ends before pop\r\n *\r\n * 1. User calls `_debugPushGroup` while a render pass is active → group is pushed on the render\r\n * pass encoder and recorded in `_debugMarkersPassGroups`.\r\n * 2. The render pass ends (e.g. a new render target is bound) before the user calls\r\n * `_debugPopGroup`. All open render-pass groups must be closed before\r\n * `GPURenderPassEncoder.end()` is called.\r\n * 3. `_debugPopBeforeEndOfEncoder` auto-pops every group in `_debugMarkersPassGroups` from the\r\n * render pass encoder. The names remain in `_debugMarkersPassGroups` (the array is not\r\n * cleared) so the logical nesting is preserved and the groups are now \"floating\".\r\n * 4. After the next render pass is created, `_debugPushAfterStartOfEncoder` re-pushes all\r\n * floating pass groups onto it, so that when the user eventually calls `_debugPopGroup`\r\n * there is always a matching push on the current live object.\r\n *\r\n * ## Scenario 3 — `flushFramebuffer` called mid-frame (multiple times per frame)\r\n *\r\n * `flushFramebuffer` submits all recorded GPU commands and creates a brand-new pair of encoders.\r\n * It can be called more than once during a single Babylon.js frame (e.g. for read-back\r\n * operations, multi-view rendering, or explicit flushes). Each call:\r\n * 1. Ends the current render pass if any (`_endCurrentRenderPass`), which triggers the\r\n * render-pass auto-pop and pending-pop handling described above.\r\n * 2. Calls `_debugPopBeforeEndOfEncoder` to close every still-open group on the render encoder\r\n * before it is finalised and submitted. Only encoder-level groups (`_debugMarkersEncoderGroups`)\r\n * are popped from the encoder; pass-level groups (`_debugMarkersPassGroups`) are already\r\n * floating after step 1 and were never pushed on the encoder, so they are left alone.\r\n * 3. Creates new `_uploadEncoder` / `_renderEncoder` instances.\r\n * 4. Calls `_debugPushAfterStartOfEncoder` to re-open the encoder-level groups on the new render\r\n * encoder, so the user's subsequent pops still find a matching push.\r\n * When `flushFramebuffer` is called from `endFrame` (the last flush of the frame), both arrays\r\n * are cleared (`_debugMarkersEncoderGroups` and `_debugMarkersPassGroups`) because any groups\r\n * still open at end-of-frame are considered abandoned.\r\n *\r\n * ## State variables\r\n *\r\n * - `_debugMarkersEncoderGroups` — names of groups currently open on the render encoder (pushed\r\n * while no render pass was active). These are re-pushed on the new render encoder after each\r\n * mid-frame flush.\r\n * - `_debugMarkersPassGroups` — names of groups pushed while a render pass was active. While a\r\n * pass is live these are open on that pass encoder. When a pass ends they become \"floating\" —\r\n * auto-popped from the finished pass but not yet on any GPU object — and remain here until the\r\n * next render pass starts and `_debugPushAfterStartOfEncoder` re-opens them on it.\r\n * - `_debugMarkersPendingEncoderPops` — count of user pops that arrived while a render pass was\r\n * active but whose matching push lived on the render encoder. These pops are deferred and\r\n * replayed on the render encoder once the render pass ends.\r\n */\r\n\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine.pure\";\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register WebGPU debug marker methods on WebGPUEngine.\r\n * @internal\r\n */\r\nexport function RegisterWebGPUDebugging(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n WebGPUEngine.prototype._debugPushGroup = function (groupName: string): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n debugCommands.pushDebugGroup(groupName);\r\n\r\n if (this._currentRenderPass) {\r\n this._debugMarkersPassGroups.push(groupName);\r\n } else {\r\n this._debugMarkersEncoderGroups.push(groupName);\r\n }\r\n\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Pushing debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._debugPopGroup = function (): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n if (this._currentRenderPass) {\r\n if (this._debugMarkersPassGroups.length > 0) {\r\n // Normal case: pop the most-recent pass-level group from the active render pass.\r\n const groupName = this._debugMarkersPassGroups.pop();\r\n debugCommands.popDebugGroup();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n } else {\r\n // The group was pushed on the render encoder (before this pass started); we cannot pop\r\n // it while the pass is active, so defer it until the pass ends.\r\n this._debugMarkersPendingEncoderPops++;\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Deferring pop of encoder-level group on '${debugCommands.label}' (pending: ${this._debugMarkersPendingEncoderPops}).`\r\n );\r\n }\r\n }\r\n } else {\r\n if (this._debugMarkersPassGroups.length > 0) {\r\n // The group was pushed during a render pass that has since ended (floating). No GPU\r\n // object currently holds this push, so we just discard the name without any GPU call.\r\n const groupName = this._debugMarkersPassGroups.pop();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping floating pass-level debug group '${groupName}' (no GPU pop needed).`\r\n );\r\n }\r\n } else {\r\n // Normal case: pop the most-recent encoder-level group from the render encoder.\r\n const groupName = this._debugMarkersEncoderGroups.pop();\r\n debugCommands.popDebugGroup();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._debugInsertMarker = function (text: string): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Inserting debug marker '${text}' on '${debugCommands.label}'`\r\n );\r\n }\r\n\r\n debugCommands.insertDebugMarker(text);\r\n };\r\n} // end RegisterWebGPUDebugging\r\n"]}
|
|
1
|
+
{"version":3,"file":"engine.debugging.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.debugging.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\n/**\r\n * # WebGPU Debug Marker Implementation — Problem Statement\r\n *\r\n * ## Background\r\n *\r\n * WebGPU exposes `pushDebugGroup` / `popDebugGroup` on two distinct objects:\r\n * - The **render encoder** (`GPUCommandEncoder`), which lives for the lifetime of an entire\r\n * submission (one call to `flushFramebuffer`).\r\n * - The **render pass encoder** (`GPURenderPassEncoder`), which lives only for the duration of\r\n * a single render pass.\r\n *\r\n * WebGPU requires that every push/pop pair is issued on the **same** object, and that all open\r\n * groups are closed before the object ends. Violating either rule is a validation error.\r\n *\r\n * ## The Core Problem\r\n *\r\n * From the Babylon.js side, the user calls `_debugPushGroup` / `_debugPopGroup` at arbitrary\r\n * points in time — completely independently of whether a render pass is currently active or not.\r\n * This creates several mismatched-context scenarios that must be handled transparently.\r\n *\r\n * ## Scenario 1 — Push on render encoder, pop inside a render pass\r\n *\r\n * 1. User calls `_debugPushGroup` while no render pass is active → group is pushed on the\r\n * render encoder and recorded in `_debugMarkersEncoderGroups`.\r\n * 2. A render pass starts (`_currentRenderPass` becomes non-null).\r\n * 3. User calls `_debugPopGroup` while the render pass is active. The pop must logically target\r\n * the render encoder group, but we cannot call `popDebugGroup` on the render encoder while a\r\n * render pass is active (the pass is the live object).\r\n * 4. We detect this mismatch because `_debugMarkersPassGroups` is empty (no group was pushed\r\n * during this render pass), so we increment `_debugMarkersPendingEncoderPops` instead of\r\n * issuing the pop immediately.\r\n * 5. When the render pass ends (`_endCurrentRenderPass`), `_debugPendingPop` drains the\r\n * `_debugMarkersPendingEncoderPops` counter and issues the deferred pops on the render encoder.\r\n *\r\n * **Edge case — deferred pop followed by a render-pass push:** if the user pushes another group\r\n * during the same render pass *after* the deferred pop was recorded, that new group goes into\r\n * `_debugMarkersPassGroups`. When the pass ends, `_debugPopBeforeEndOfEncoder` auto-pops the\r\n * pass-level group, leaving it floating in `_debugMarkersPassGroups`. `_debugPendingPop` then\r\n * pops from `_debugMarkersEncoderGroups` — a separate array that can never contain pass-level\r\n * entries — so the floating pass-level group is preserved intact and will be re-pushed on the\r\n * next render pass by `_debugPushAfterStartOfEncoder`.\r\n *\r\n * ## Scenario 2 — Push inside a render pass, render pass ends before pop\r\n *\r\n * 1. User calls `_debugPushGroup` while a render pass is active → group is pushed on the render\r\n * pass encoder and recorded in `_debugMarkersPassGroups`.\r\n * 2. The render pass ends (e.g. a new render target is bound) before the user calls\r\n * `_debugPopGroup`. All open render-pass groups must be closed before\r\n * `GPURenderPassEncoder.end()` is called.\r\n * 3. `_debugPopBeforeEndOfEncoder` auto-pops every group in `_debugMarkersPassGroups` from the\r\n * render pass encoder. The names remain in `_debugMarkersPassGroups` (the array is not\r\n * cleared) so the logical nesting is preserved and the groups are now \"floating\".\r\n * 4. After the next render pass is created, `_debugPushAfterStartOfEncoder` re-pushes all\r\n * floating pass groups onto it, so that when the user eventually calls `_debugPopGroup`\r\n * there is always a matching push on the current live object.\r\n *\r\n * ## Scenario 3 — `flushFramebuffer` called mid-frame (multiple times per frame)\r\n *\r\n * `flushFramebuffer` submits all recorded GPU commands and creates a brand-new pair of encoders.\r\n * It can be called more than once during a single Babylon.js frame (e.g. for read-back\r\n * operations, multi-view rendering, or explicit flushes). Each call:\r\n * 1. Ends the current render pass if any (`_endCurrentRenderPass`), which triggers the\r\n * render-pass auto-pop and pending-pop handling described above.\r\n * 2. Calls `_debugPopBeforeEndOfEncoder` to close every still-open group on the render encoder\r\n * before it is finalised and submitted. Only encoder-level groups (`_debugMarkersEncoderGroups`)\r\n * are popped from the encoder; pass-level groups (`_debugMarkersPassGroups`) are already\r\n * floating after step 1 and were never pushed on the encoder, so they are left alone.\r\n * 3. Creates new `_uploadEncoder` / `_renderEncoder` instances.\r\n * 4. Calls `_debugPushAfterStartOfEncoder` to re-open the encoder-level groups on the new render\r\n * encoder, so the user's subsequent pops still find a matching push.\r\n * When `flushFramebuffer` is called from `endFrame` (the last flush of the frame), both arrays\r\n * are cleared (`_debugMarkersEncoderGroups` and `_debugMarkersPassGroups`) because any groups\r\n * still open at end-of-frame are considered abandoned.\r\n *\r\n * ## State variables\r\n *\r\n * - `_debugMarkersEncoderGroups` — names of groups currently open on the render encoder (pushed\r\n * while no render pass was active). These are re-pushed on the new render encoder after each\r\n * mid-frame flush.\r\n * - `_debugMarkersPassGroups` — names of groups pushed while a render pass was active. While a\r\n * pass is live these are open on that pass encoder. When a pass ends they become \"floating\" —\r\n * auto-popped from the finished pass but not yet on any GPU object — and remain here until the\r\n * next render pass starts and `_debugPushAfterStartOfEncoder` re-opens them on it.\r\n * - `_debugMarkersPendingEncoderPops` — count of user pops that arrived while a render pass was\r\n * active but whose matching push lived on the render encoder. These pops are deferred and\r\n * replayed on the render encoder once the render pass ends.\r\n */\r\n\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine.pure\";\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register WebGPU debug marker methods on WebGPUEngine.\r\n * @internal\r\n */\r\nexport function RegisterWebGPUDebugging(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n WebGPUEngine.prototype._debugPushGroup = function (groupName: string): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n if (this._currentRenderPass) {\r\n // Record batched draws before opening the group so they stay attributed to the enclosing scope.\r\n this._flushRenderPassCommands();\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n debugCommands.pushDebugGroup(groupName);\r\n\r\n if (this._currentRenderPass) {\r\n this._debugMarkersPassGroups.push(groupName);\r\n } else {\r\n this._debugMarkersEncoderGroups.push(groupName);\r\n }\r\n\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Pushing debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._debugPopGroup = function (): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n if (this._currentRenderPass) {\r\n // Record batched draws before closing the group so they stay attributed to it.\r\n this._flushRenderPassCommands();\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n if (this._currentRenderPass) {\r\n if (this._debugMarkersPassGroups.length > 0) {\r\n // Normal case: pop the most-recent pass-level group from the active render pass.\r\n const groupName = this._debugMarkersPassGroups.pop();\r\n debugCommands.popDebugGroup();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n } else {\r\n // The group was pushed on the render encoder (before this pass started); we cannot pop\r\n // it while the pass is active, so defer it until the pass ends.\r\n this._debugMarkersPendingEncoderPops++;\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Deferring pop of encoder-level group on '${debugCommands.label}' (pending: ${this._debugMarkersPendingEncoderPops}).`\r\n );\r\n }\r\n }\r\n } else {\r\n if (this._debugMarkersPassGroups.length > 0) {\r\n // The group was pushed during a render pass that has since ended (floating). No GPU\r\n // object currently holds this push, so we just discard the name without any GPU call.\r\n const groupName = this._debugMarkersPassGroups.pop();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping floating pass-level debug group '${groupName}' (no GPU pop needed).`\r\n );\r\n }\r\n } else {\r\n // Normal case: pop the most-recent encoder-level group from the render encoder.\r\n const groupName = this._debugMarkersEncoderGroups.pop();\r\n debugCommands.popDebugGroup();\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Popping debug group '${groupName}' on '${debugCommands.label}'.`\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n WebGPUEngine.prototype._debugInsertMarker = function (text: string): void {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n if (this._currentRenderPass) {\r\n // Keep the marker positioned after the draws that were issued before it.\r\n this._flushRenderPassCommands();\r\n }\r\n\r\n const debugCommands = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] Inserting debug marker '${text}' on '${debugCommands.label}'`\r\n );\r\n }\r\n\r\n debugCommands.insertDebugMarker(text);\r\n };\r\n} // end RegisterWebGPUDebugging\r\n"]}
|
|
@@ -169,7 +169,6 @@ export function RegisterEnginesWebGPUExtensionsEngineMultiRender() {
|
|
|
169
169
|
if (depthStencilTexture) {
|
|
170
170
|
depthStencilTexture.incrementReferences();
|
|
171
171
|
textures[textureCount] = depthStencilTexture;
|
|
172
|
-
this._internalTexturesCache.push(depthStencilTexture);
|
|
173
172
|
}
|
|
174
173
|
rtWrapper.setTextures(textures);
|
|
175
174
|
rtWrapper.setLayerAndFaceIndices(layerIndex, faceIndex);
|