@babylonjs/core 6.41.0 → 6.41.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.js +1 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +4 -6
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +3 -3
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +3 -5
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +48 -74
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +6 -12
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -2
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +2 -4
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -2
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Bones/bone.js +4 -6
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +2 -3
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.js +5 -8
- package/Buffers/buffer.align.js.map +1 -1
- package/Buffers/buffer.js +6 -8
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +3 -4
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -5
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +1 -2
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +5 -0
- package/Cameras/camera.js +18 -11
- package/Cameras/camera.js.map +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.js +5 -8
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +12 -9
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +1 -2
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.js +2 -3
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/ray.d.ts +6 -1
- package/Culling/ray.js +9 -4
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.js +4 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +7 -9
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/physicsViewer.js +5 -7
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/rayHelper.js +1 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +26 -31
- package/Debug/skeletonViewer.js.map +1 -1
- package/Decorators/nodeDecorator.js +1 -1
- package/Decorators/nodeDecorator.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +3 -5
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/eventFactory.js +1 -1
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +1 -2
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +9 -12
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +6 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -4
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.js +2 -3
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +9 -5
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js +9 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Extensions/engine.views.js +1 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.js +6 -7
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +6 -11
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +1 -2
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +3 -5
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +9 -2
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -6
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +2 -4
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +11 -5
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +11 -3
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +2 -3
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +1 -2
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -2
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -7
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +15 -20
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +10 -5
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +2 -3
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -2
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +1 -2
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +4 -6
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +2 -3
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +3 -5
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +2 -4
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +5 -4
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -2
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +40 -43
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +12 -7
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +4 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/engine.js +4 -7
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +16 -22
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +9 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +11 -16
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +32 -44
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +77 -95
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +2 -3
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +3 -6
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +1 -2
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +2 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
- package/FlowGraph/flowGraph.js +1 -2
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +2 -4
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.js +1 -2
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.js +4 -7
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js +1 -2
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/FlowGraph/serialization.js +2 -3
- package/FlowGraph/serialization.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +2 -4
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +5 -8
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +1 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.js +2 -3
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +4 -7
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +3 -4
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +2 -4
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +2 -4
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +8 -2
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/videoDome.js +1 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.js +8 -10
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.js +16 -10
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +16 -6
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +12 -3
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +1 -2
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +1 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +21 -25
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +18 -21
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +2 -4
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -2
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +26 -32
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +22 -27
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -7
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +10 -16
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -3
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -4
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +1 -2
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +24 -26
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +45 -49
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -28
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +43 -33
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.js +1 -2
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +2 -3
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +4 -6
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js +2 -4
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +14 -23
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +4 -5
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +16 -11
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +3 -4
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +25 -28
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +6 -9
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +4 -7
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +4 -7
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +13 -14
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -2
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +19 -11
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js +2 -4
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +7 -13
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -2
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +2 -4
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +5 -3
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +3 -5
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +3 -6
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +5 -8
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +22 -34
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +16 -21
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +2 -4
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +1 -1
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +12 -10
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +18 -21
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/drawWrapper.js +2 -4
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +4 -0
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +2 -3
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/material.decalMapConfiguration.js +3 -3
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +1 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +7 -4
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.js +5 -6
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.d.ts +1 -1
- package/Materials/materialHelper.js +3 -4
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -5
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.js +13 -14
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Materials/multiMaterial.js +1 -2
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +64 -32
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +24 -23
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +10 -12
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.js +1 -2
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +26 -29
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.js +16 -16
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +5 -1
- package/Meshes/Builders/groundBuilder.js +13 -2
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.js +2 -3
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +9 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +141 -12
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +8 -11
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +3 -5
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +13 -18
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +18 -18
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +6 -3
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +1 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -2
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -2
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.js +6 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -2
- package/Meshes/csg.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/instancedMesh.js +5 -10
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.js +13 -22
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.js +18 -15
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/subMesh.js +8 -14
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +12 -18
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/trailMesh.js +2 -3
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +9 -14
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -3
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/basis.js +2 -3
- package/Misc/basis.js.map +1 -1
- package/Misc/dataStorage.js +1 -1
- package/Misc/dataStorage.js.map +1 -1
- package/Misc/deepCopier.js +1 -1
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/environmentTextureTools.js +3 -4
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/equirectangularCapture.js +2 -3
- package/Misc/equirectangularCapture.js.map +1 -1
- package/Misc/fileTools.js +4 -4
- package/Misc/fileTools.js.map +1 -1
- package/Misc/greasedLineTools.js +3 -5
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/logger.js +1 -2
- package/Misc/logger.js.map +1 -1
- package/Misc/minMaxReducer.js +2 -3
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/pressureObserverWrapper.js +5 -8
- package/Misc/pressureObserverWrapper.js.map +1 -1
- package/Misc/sceneRecorder.js +1 -1
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.js +5 -5
- package/Misc/textureTools.js.map +1 -1
- package/Misc/timer.js +3 -5
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +3 -2
- package/Misc/tools.js +6 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/trajectoryClassifier.js +3 -3
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +6 -4
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +4 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -2
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +1 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +4 -0
- package/Particles/baseParticleSystem.js +4 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +3 -6
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +2 -2
- package/Particles/gpuParticleSystem.js +30 -20
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +3 -2
- package/Particles/particleSystem.js +33 -30
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -3
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +5 -8
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +1 -2
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +2 -2
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.js +19 -21
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +48 -35
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +10 -12
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.js +2 -4
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsShape.js +1 -2
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.js +6 -8
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -8
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +14 -22
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +28 -34
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +4 -6
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +4 -7
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +2 -4
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js +22 -19
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +2 -3
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -4
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.js +2 -4
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.js +10 -13
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +8 -11
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +6 -11
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -5
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -4
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +30 -36
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +5 -7
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +3 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +5 -4
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +3 -6
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/reflectiveShadowMap.d.ts +1 -0
- package/Rendering/reflectiveShadowMap.js +5 -5
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Shaders/color.fragment.d.ts +2 -0
- package/Shaders/color.fragment.js +4 -0
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.d.ts +2 -0
- package/Shaders/color.vertex.js +7 -0
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
- package/Shaders/gpuRenderParticles.fragment.js +4 -0
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
- package/Shaders/gpuRenderParticles.vertex.js +5 -1
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +2 -0
- package/Shaders/particles.fragment.js +4 -0
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +2 -0
- package/Shaders/particles.vertex.js +5 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Sprites/spriteManager.js +1 -2
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +5 -7
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/stencilStateComposer.js +2 -4
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAbstractFeature.js +6 -2
- package/XR/features/WebXRAbstractFeature.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +1 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +6 -7
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +17 -10
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +1 -2
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.d.ts +1 -0
- package/XR/features/WebXRControllerTeleportation.js +6 -3
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +3 -5
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -0
- package/XR/features/WebXRHandTracking.js +31 -28
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +9 -11
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +3 -6
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -4
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +21 -18
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js +1 -2
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js +2 -3
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +4 -1
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/native/nativeXRFrame.js +1 -2
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRCamera.js +1 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.js +28 -6
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +5 -7
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.js +4 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +6 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +1 -2
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.js +16 -29
- package/XR/webXRSessionManager.js.map +1 -1
- package/assetContainer.js +4 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +18 -17
- package/scene.js.map +1 -1
|
@@ -50,7 +50,6 @@ export class WebGPUCacheBindGroups {
|
|
|
50
50
|
* @returns a bind group array
|
|
51
51
|
*/
|
|
52
52
|
getBindGroups(webgpuPipelineContext, drawContext, materialContext) {
|
|
53
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
54
53
|
let bindGroups = undefined;
|
|
55
54
|
let node = WebGPUCacheBindGroups._Cache;
|
|
56
55
|
const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;
|
|
@@ -60,7 +59,7 @@ export class WebGPUCacheBindGroups {
|
|
|
60
59
|
return drawContext.bindGroups;
|
|
61
60
|
}
|
|
62
61
|
for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {
|
|
63
|
-
const uboId =
|
|
62
|
+
const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;
|
|
64
63
|
let nextNode = node.values[uboId];
|
|
65
64
|
if (!nextNode) {
|
|
66
65
|
nextNode = new WebGPUBindGroupCacheNode();
|
|
@@ -69,7 +68,7 @@ export class WebGPUCacheBindGroups {
|
|
|
69
68
|
node = nextNode;
|
|
70
69
|
}
|
|
71
70
|
for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {
|
|
72
|
-
const samplerHashCode =
|
|
71
|
+
const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;
|
|
73
72
|
let nextNode = node.values[samplerHashCode];
|
|
74
73
|
if (!nextNode) {
|
|
75
74
|
nextNode = new WebGPUBindGroupCacheNode();
|
|
@@ -78,7 +77,7 @@ export class WebGPUCacheBindGroups {
|
|
|
78
77
|
node = nextNode;
|
|
79
78
|
}
|
|
80
79
|
for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {
|
|
81
|
-
const textureId =
|
|
80
|
+
const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;
|
|
82
81
|
let nextNode = node.values[textureId];
|
|
83
82
|
if (!nextNode) {
|
|
84
83
|
nextNode = new WebGPUBindGroupCacheNode();
|
|
@@ -109,7 +108,7 @@ export class WebGPUCacheBindGroups {
|
|
|
109
108
|
for (let j = 0; j < setDefinition.length; j++) {
|
|
110
109
|
const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];
|
|
111
110
|
const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];
|
|
112
|
-
const name =
|
|
111
|
+
const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;
|
|
113
112
|
if (entry.sampler) {
|
|
114
113
|
const bindingInfo = materialContext.samplers[name];
|
|
115
114
|
if (bindingInfo) {
|
|
@@ -136,7 +135,7 @@ export class WebGPUCacheBindGroups {
|
|
|
136
135
|
const hardwareTexture = bindingInfo.texture._hardwareTexture;
|
|
137
136
|
if (this._engine.dbgSanityChecks &&
|
|
138
137
|
(!hardwareTexture || (entry.texture && !hardwareTexture.view) || (entry.storageTexture && !hardwareTexture.viewForWriting))) {
|
|
139
|
-
Logger.Error(`Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key, value) => (key === "texture" ? "<no dump>" : value))}, isReady=${
|
|
138
|
+
Logger.Error(`Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key, value) => (key === "texture" ? "<no dump>" : value))}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);
|
|
140
139
|
continue;
|
|
141
140
|
}
|
|
142
141
|
entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting : hardwareTexture.view;
|
|
@@ -154,7 +153,7 @@ export class WebGPUCacheBindGroups {
|
|
|
154
153
|
}
|
|
155
154
|
const externalTexture = bindingInfo.texture.underlyingResource;
|
|
156
155
|
if (this._engine.dbgSanityChecks && !externalTexture) {
|
|
157
|
-
Logger.Error(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key, value) => (key === "texture" ? "<no dump>" : value))}, isReady=${
|
|
156
|
+
Logger.Error(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key, value) => (key === "texture" ? "<no dump>" : value))}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);
|
|
158
157
|
continue;
|
|
159
158
|
}
|
|
160
159
|
entries[j].resource = this._device.importExternalTexture({ source: externalTexture });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport type { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheBindGroups {\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n public static ResetCache() {\r\n WebGPUCacheBindGroups._Cache = new WebGPUBindGroupCacheNode();\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n * @param webgpuPipelineContext\r\n * @param drawContext\r\n * @param materialContext\r\n * @returns a bind group array\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[materialContext.textureState];\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(\r\n `Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode, sampler.label);\r\n } else {\r\n Logger.Error(\r\n `Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) =>\r\n key === \"texture\" ? \"<no dump>\" : value\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (\r\n this._engine.dbgSanityChecks &&\r\n (!hardwareTexture || (entry.texture && !hardwareTexture.view) || (entry.storageTexture && !hardwareTexture.viewForWriting))\r\n ) {\r\n Logger.Error(\r\n `Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(\r\n `Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(\r\n `Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${\r\n drawContext.uniqueId\r\n }`,\r\n 50\r\n );\r\n }\r\n }\r\n }\r\n\r\n const groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\n/* eslint-disable jsdoc/require-jsdoc */\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport type { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport type { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport type { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUCacheBindGroups {\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n public static ResetCache() {\r\n WebGPUCacheBindGroups._Cache = new WebGPUBindGroupCacheNode();\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = 0;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n * @param webgpuPipelineContext\r\n * @param drawContext\r\n * @param materialContext\r\n * @returns a bind group array\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts[materialContext.textureState];\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(\r\n `Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode, sampler.label);\r\n } else {\r\n Logger.Error(\r\n `Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) =>\r\n key === \"texture\" ? \"<no dump>\" : value\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (\r\n this._engine.dbgSanityChecks &&\r\n (!hardwareTexture || (entry.texture && !hardwareTexture.view) || (entry.storageTexture && !hardwareTexture.viewForWriting))\r\n ) {\r\n Logger.Error(\r\n `Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(\r\n `Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(\r\n `Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(\r\n bindingInfo,\r\n (key: string, value: any) => (key === \"texture\" ? \"<no dump>\" : value)\r\n )}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`,\r\n 50\r\n );\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(\r\n `Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) =>\r\n key === \"texture\" || key === \"sampler\" ? \"<no dump>\" : value\r\n )}`,\r\n 50\r\n );\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(\r\n `Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${\r\n drawContext.uniqueId\r\n }`,\r\n 50\r\n );\r\n }\r\n }\r\n }\r\n\r\n const groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
|
|
@@ -185,7 +185,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
185
185
|
setDepthCullingState(cullEnabled, frontFace, cullFace, zOffset, zOffsetUnits, depthTestEnabled, depthWriteEnabled, depthCompare) {
|
|
186
186
|
this._depthWriteEnabled = depthWriteEnabled;
|
|
187
187
|
this._depthTestEnabled = depthTestEnabled;
|
|
188
|
-
this._depthCompare = (depthCompare
|
|
188
|
+
this._depthCompare = (depthCompare ?? 519) - 0x0200;
|
|
189
189
|
this._cullFace = cullFace;
|
|
190
190
|
this._cullEnabled = cullEnabled;
|
|
191
191
|
this._frontFace = frontFace;
|
|
@@ -217,7 +217,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
217
217
|
}
|
|
218
218
|
setColorFormat(format) {
|
|
219
219
|
this._webgpuColorFormat[0] = format;
|
|
220
|
-
this._colorFormat = renderableTextureFormatToIndex[format
|
|
220
|
+
this._colorFormat = renderableTextureFormatToIndex[format ?? ""];
|
|
221
221
|
}
|
|
222
222
|
setMRTAttachments(attachments) {
|
|
223
223
|
this.mrtAttachments = attachments;
|
|
@@ -234,8 +234,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
setMRT(textureArray, textureCount) {
|
|
237
|
-
|
|
238
|
-
textureCount = textureCount !== null && textureCount !== void 0 ? textureCount : textureArray.length;
|
|
237
|
+
textureCount = textureCount ?? textureArray.length;
|
|
239
238
|
if (textureCount > 10) {
|
|
240
239
|
// If we want more than 10 attachments we need to change this method (and the StatePosition enum) but 10 seems plenty: note that WebGPU only supports 8 at the time (2021/12/13)!
|
|
241
240
|
// As we need ~39 different values we are using 6 bits to encode a texture format, meaning we can encode 5 texture formats in 32 bits
|
|
@@ -250,9 +249,9 @@ export class WebGPUCacheRenderPipeline {
|
|
|
250
249
|
let indexBits = 0, mask = 0, numRT = 0;
|
|
251
250
|
for (let i = 0; i < textureCount; ++i) {
|
|
252
251
|
const texture = textureArray[i];
|
|
253
|
-
const gpuWrapper = texture
|
|
254
|
-
this._mrtFormats[numRT] =
|
|
255
|
-
bits[indexBits] += renderableTextureFormatToIndex[
|
|
252
|
+
const gpuWrapper = texture?._hardwareTexture;
|
|
253
|
+
this._mrtFormats[numRT] = gpuWrapper?.format ?? this._webgpuColorFormat[0];
|
|
254
|
+
bits[indexBits] += renderableTextureFormatToIndex[this._mrtFormats[numRT] ?? ""] << mask;
|
|
256
255
|
mask += 6;
|
|
257
256
|
numRT++;
|
|
258
257
|
if (mask >= 32) {
|
|
@@ -291,13 +290,13 @@ export class WebGPUCacheRenderPipeline {
|
|
|
291
290
|
this._depthWriteEnabled = enabled;
|
|
292
291
|
}
|
|
293
292
|
setDepthCompare(func) {
|
|
294
|
-
this._depthCompare = (func
|
|
293
|
+
this._depthCompare = (func ?? 519) - 0x0200;
|
|
295
294
|
}
|
|
296
295
|
setStencilEnabled(enabled) {
|
|
297
296
|
this._stencilEnabled = enabled;
|
|
298
297
|
}
|
|
299
298
|
setStencilCompare(func) {
|
|
300
|
-
this._stencilFrontCompare = (func
|
|
299
|
+
this._stencilFrontCompare = (func ?? 519) - 0x0200;
|
|
301
300
|
}
|
|
302
301
|
setStencilDepthFailOp(op) {
|
|
303
302
|
this._stencilFrontDepthFailOp = op === null ? 1 /* KEEP */ : stencilOpToIndex[op];
|
|
@@ -329,7 +328,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
329
328
|
}
|
|
330
329
|
setStencilState(stencilEnabled, compare, depthFailOp, passOp, failOp, readMask, writeMask) {
|
|
331
330
|
this._stencilEnabled = stencilEnabled;
|
|
332
|
-
this._stencilFrontCompare = (compare
|
|
331
|
+
this._stencilFrontCompare = (compare ?? 519) - 0x0200;
|
|
333
332
|
this._stencilFrontDepthFailOp = depthFailOp === null ? 1 /* KEEP */ : stencilOpToIndex[depthFailOp];
|
|
334
333
|
this._stencilFrontPassOp = passOp === null ? 2 /* REPLACE */ : stencilOpToIndex[passOp];
|
|
335
334
|
this._stencilFrontFailOp = failOp === null ? 1 /* KEEP */ : stencilOpToIndex[failOp];
|
|
@@ -623,7 +622,6 @@ export class WebGPUCacheRenderPipeline {
|
|
|
623
622
|
}
|
|
624
623
|
}
|
|
625
624
|
_setVertexState(effect) {
|
|
626
|
-
var _a, _b;
|
|
627
625
|
const currStateLen = this._statesLength;
|
|
628
626
|
let newNumStates = StatePosition.VertexState;
|
|
629
627
|
const webgpuPipelineContext = effect._pipelineContext;
|
|
@@ -633,13 +631,13 @@ export class WebGPUCacheRenderPipeline {
|
|
|
633
631
|
let numVertexBuffers = 0;
|
|
634
632
|
for (let index = 0; index < attributes.length; index++) {
|
|
635
633
|
const location = locations[index];
|
|
636
|
-
let vertexBuffer = (
|
|
634
|
+
let vertexBuffer = (this._overrideVertexBuffers && this._overrideVertexBuffers[attributes[index]]) ?? this._vertexBuffers[attributes[index]];
|
|
637
635
|
if (!vertexBuffer) {
|
|
638
636
|
// In WebGL it's valid to not bind a vertex buffer to an attribute, but it's not valid in WebGPU
|
|
639
637
|
// So we must bind a dummy buffer when we are not given one for a specific attribute
|
|
640
638
|
vertexBuffer = this._emptyVertexBuffer;
|
|
641
639
|
}
|
|
642
|
-
const buffer =
|
|
640
|
+
const buffer = vertexBuffer.effectiveBuffer?.underlyingResource;
|
|
643
641
|
// We optimize usage of GPUVertexBufferLayout: we will create a single GPUVertexBufferLayout for all the attributes which follow each other and which use the same GPU buffer
|
|
644
642
|
// However, there are some constraints in the attribute.offset value range, so we must check for them before being able to reuse the same GPUVertexBufferLayout
|
|
645
643
|
// See _getVertexInputDescriptor() below
|
|
@@ -690,7 +688,6 @@ export class WebGPUCacheRenderPipeline {
|
|
|
690
688
|
return this._device.createPipelineLayout({ bindGroupLayouts });
|
|
691
689
|
}
|
|
692
690
|
_createPipelineLayoutWithTextureStage(webgpuPipelineContext) {
|
|
693
|
-
var _a;
|
|
694
691
|
const shaderProcessingContext = webgpuPipelineContext.shaderProcessingContext;
|
|
695
692
|
const bindGroupLayoutEntries = shaderProcessingContext.bindGroupLayoutEntries;
|
|
696
693
|
let bitVal = 1;
|
|
@@ -703,7 +700,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
703
700
|
const textureInfo = shaderProcessingContext.availableTextures[name];
|
|
704
701
|
const samplerInfo = textureInfo.autoBindSampler ? shaderProcessingContext.availableSamplers[name + WebGPUShaderProcessor.AutoSamplerSuffix] : null;
|
|
705
702
|
let sampleType = textureInfo.sampleType;
|
|
706
|
-
let samplerType =
|
|
703
|
+
let samplerType = samplerInfo?.type ?? WebGPUConstants.SamplerBindingType.Filtering;
|
|
707
704
|
if (this._textureState & bitVal && sampleType !== WebGPUConstants.TextureSampleType.Depth) {
|
|
708
705
|
// The texture is a 32 bits float texture but the system does not support linear filtering for them OR the texture is a depth texture with "float" filtering:
|
|
709
706
|
// we set the sampler to "non-filtering" and the texture sample type to "unfilterable-float"
|
|
@@ -731,7 +728,6 @@ export class WebGPUCacheRenderPipeline {
|
|
|
731
728
|
return this._device.createPipelineLayout({ bindGroupLayouts });
|
|
732
729
|
}
|
|
733
730
|
_getVertexInputDescriptor(effect) {
|
|
734
|
-
var _a, _b;
|
|
735
731
|
const descriptors = [];
|
|
736
732
|
const webgpuPipelineContext = effect._pipelineContext;
|
|
737
733
|
const attributes = webgpuPipelineContext.shaderProcessingContext.attributeNamesFromEffect;
|
|
@@ -740,13 +736,13 @@ export class WebGPUCacheRenderPipeline {
|
|
|
740
736
|
let currentGPUAttributes;
|
|
741
737
|
for (let index = 0; index < attributes.length; index++) {
|
|
742
738
|
const location = locations[index];
|
|
743
|
-
let vertexBuffer = (
|
|
739
|
+
let vertexBuffer = (this._overrideVertexBuffers && this._overrideVertexBuffers[attributes[index]]) ?? this._vertexBuffers[attributes[index]];
|
|
744
740
|
if (!vertexBuffer) {
|
|
745
741
|
// In WebGL it's valid to not bind a vertex buffer to an attribute, but it's not valid in WebGPU
|
|
746
742
|
// So we must bind a dummy buffer when we are not given one for a specific attribute
|
|
747
743
|
vertexBuffer = this._emptyVertexBuffer;
|
|
748
744
|
}
|
|
749
|
-
let buffer =
|
|
745
|
+
let buffer = vertexBuffer.effectiveBuffer?.underlyingResource;
|
|
750
746
|
// We reuse the same GPUVertexBufferLayout for all attributes that use the same underlying GPU buffer (and for attributes that follow each other in the attributes array)
|
|
751
747
|
let offset = vertexBuffer.effectiveByteOffset;
|
|
752
748
|
const invalidOffsetRange = !vertexBuffer._validOffsetRange;
|
|
@@ -799,7 +795,6 @@ export class WebGPUCacheRenderPipeline {
|
|
|
799
795
|
}
|
|
800
796
|
}
|
|
801
797
|
_createRenderPipeline(effect, topology, sampleCount) {
|
|
802
|
-
var _a, _b, _c;
|
|
803
798
|
const webgpuPipelineContext = effect._pipelineContext;
|
|
804
799
|
const inputStateDescriptor = this._getVertexInputDescriptor(effect);
|
|
805
800
|
const pipelineLayout = this._createPipelineLayout(webgpuPipelineContext);
|
|
@@ -858,7 +853,7 @@ export class WebGPUCacheRenderPipeline {
|
|
|
858
853
|
}
|
|
859
854
|
const depthStencilFormatHasStencil = this._webgpuDepthStencilFormat ? WebGPUTextureHelper.HasStencilAspect(this._webgpuDepthStencilFormat) : false;
|
|
860
855
|
return this._device.createRenderPipeline({
|
|
861
|
-
label: `RenderPipeline_${
|
|
856
|
+
label: `RenderPipeline_${colorStates[0]?.format ?? "nooutput"}_${this._webgpuDepthStencilFormat ?? "nodepth"}_samples${sampleCount}_textureState${this._textureState}`,
|
|
862
857
|
layout: pipelineLayout,
|
|
863
858
|
vertex: {
|
|
864
859
|
module: webgpuPipelineContext.stages.vertexStage.module,
|