@onerjs/core 8.42.6 → 8.42.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +1 -1
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animatorAvatar.d.ts +5 -2
- package/Animations/animatorAvatar.js +42 -29
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +1 -1
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Buffers/buffer.js +1 -1
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +0 -4
- package/Cameras/Inputs/geospatialCameraPointersInput.js +1 -5
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +1 -4
- package/Cameras/cameraMovement.js +1 -4
- package/Cameras/cameraMovement.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +22 -4
- package/Cameras/geospatialCamera.js +27 -9
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +3 -3
- package/Cameras/geospatialCameraMovement.js +18 -18
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
- package/Engines/Extensions/engine.query.js +1 -1
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +2 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
- package/Engines/WebGPU/Extensions/engine.debugging.js +135 -21
- package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +10 -5
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.common.js +2 -2
- package/Engines/engine.common.js.map +1 -1
- package/Engines/engine.js +0 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +0 -2
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nullEngine.js +0 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.functions.js +1 -1
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +4 -6
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/thinNativeEngine.js +2 -6
- package/Engines/thinNativeEngine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +11 -4
- package/Engines/thinWebGPUEngine.js +58 -34
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +3 -1
- package/Engines/webgpuEngine.js +30 -169
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +1 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +1 -0
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
- package/FrameGraph/Node/nodeRenderGraph.js +36 -2
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Passes/renderPass.js +0 -3
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -3
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -29
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +3 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphContext.js +1 -1
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +0 -2
- package/FrameGraph/frameGraphTask.js +15 -17
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +2 -2
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +1 -1
- package/Gizmos/cameraGizmo.js +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +4 -4
- package/Gizmos/gizmo.js +5 -5
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +1 -1
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeRotationGizmo.d.ts +2 -2
- package/Gizmos/planeRotationGizmo.js +2 -3
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +1 -1
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +1 -1
- package/Gizmos/scaleGizmo.js +1 -1
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +28 -1
- package/Lights/Shadows/shadowGenerator.js +77 -11
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/lightingVolume.d.ts +1 -0
- package/Lights/lightingVolume.js +10 -2
- package/Lights/lightingVolume.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +44 -14
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +12 -3
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +33 -8
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +1 -1
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js +2 -3
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.js +3 -5
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +2 -3
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +2 -2
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +13 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effect.js +2 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/standardMaterial.js +1 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +0 -4
- package/Materials/uniformBuffer.js +0 -8
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/index.d.ts +2 -0
- package/Maths/index.js +2 -0
- package/Maths/index.js.map +1 -1
- package/Maths/math.geospatial.d.ts +27 -0
- package/Maths/math.geospatial.functions.d.ts +33 -0
- package/Maths/math.geospatial.functions.js +60 -0
- package/Maths/math.geospatial.functions.js.map +1 -0
- package/Maths/math.geospatial.js +2 -0
- package/Maths/math.geospatial.js.map +1 -0
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.scalar.functions.js +3 -3
- package/Maths/math.scalar.functions.js.map +1 -1
- package/Maths/math.vector.js +1 -1
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.js +1 -2
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.js +2 -2
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -2
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.js +2 -2
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.js +11 -15
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.js +6 -6
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +2 -2
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +6 -6
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.js +2 -3
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +4 -0
- package/Meshes/abstractMesh.js +14 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.js +11 -13
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.js +2 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.js +7 -7
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -0
- package/Meshes/mesh.js +22 -8
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +22 -22
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplification.js +1 -1
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/polygonMesh.js +1 -1
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/trailMesh.js +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/hdr.js +4 -6
- package/Misc/HighDynamicRange/hdr.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/meshExploder.js +1 -2
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/tga.js +2 -2
- package/Misc/tga.js.map +1 -1
- package/Misc/timer.js +4 -2
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +7 -0
- package/Misc/tools.js +20 -6
- package/Misc/tools.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Navigation/INavigationEngine.d.ts +2 -2
- package/Navigation/INavigationEngine.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +2 -2
- package/Navigation/Plugins/recastJSPlugin.js +14 -5
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +1 -1
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +2 -0
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +14 -0
- package/Particles/gpuParticleSystem.js +94 -12
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +4 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +46 -47
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -6
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +3 -4
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/castingResult.d.ts +4 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +1 -1
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +8 -8
- package/Physics/physicsHelper.js +7 -7
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/shapeCastResult.d.ts +4 -0
- package/Physics/shapeCastResult.js +7 -0
- package/Physics/shapeCastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +51 -4
- package/Physics/v2/IPhysicsEnginePlugin.js +12 -12
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/characterController.js +4 -8
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +1 -1
- package/Physics/v2/physicsConstraint.js +1 -1
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +0 -5
- package/Physics/v2/physicsEngine.js +0 -5
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsEngineComponent.d.ts +1 -1
- package/Physics/v2/physicsEngineComponent.js.map +1 -1
- package/Physics/v2/physicsMaterial.d.ts +6 -0
- package/Physics/v2/physicsMaterial.js +2 -2
- package/Physics/v2/physicsMaterial.js.map +1 -1
- package/Physics/v2/ragdoll.js +1 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/postProcess.js +3 -3
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/Probes/reflectionProbe.js +0 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +0 -11
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +1 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.js +1 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +0 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/objectRenderer.js +15 -9
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/renderingGroup.d.ts +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.js +1 -1
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +4 -0
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +15 -3
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/iblVoxelGrid.fragment.js +4 -1
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/ShadersWGSL/background.vertex.js +8 -8
- package/ShadersWGSL/background.vertex.js.map +1 -1
- package/ShadersWGSL/boundingBoxRenderer.vertex.js +2 -2
- package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/clearQuad.vertex.js +1 -1
- package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
- package/ShadersWGSL/color.vertex.js +1 -1
- package/ShadersWGSL/color.vertex.js.map +1 -1
- package/ShadersWGSL/depth.vertex.js +3 -3
- package/ShadersWGSL/depth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/fxaa.vertex.js +1 -1
- package/ShadersWGSL/fxaa.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +4 -4
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapGeneration.vertex.js +4 -4
- package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/greasedLine.vertex.js +10 -4
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.js +2 -2
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -1
- package/ShadersWGSL/kernelBlur.vertex.js +2 -2
- package/ShadersWGSL/kernelBlur.vertex.js.map +1 -1
- package/ShadersWGSL/layer.vertex.js +1 -1
- package/ShadersWGSL/layer.vertex.js.map +1 -1
- package/ShadersWGSL/lensFlare.vertex.js +1 -1
- package/ShadersWGSL/lensFlare.vertex.js.map +1 -1
- package/ShadersWGSL/line.vertex.js +2 -2
- package/ShadersWGSL/line.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js +2 -2
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +9 -9
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/picking.vertex.js +2 -2
- package/ShadersWGSL/picking.vertex.js.map +1 -1
- package/ShadersWGSL/procedural.vertex.js +1 -1
- package/ShadersWGSL/procedural.vertex.js.map +1 -1
- package/ShadersWGSL/shadowMap.vertex.js +4 -4
- package/ShadersWGSL/shadowMap.vertex.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +3 -3
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.js +4 -4
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +2 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +0 -2
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +4 -7
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/assetContainer.js +1 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +16 -0
- package/scene.js +30 -1
- package/scene.js.map +1 -1
- package/sceneComponent.js +1 -1
- package/sceneComponent.js.map +1 -1
|
@@ -17,14 +17,10 @@ export declare abstract class ThinWebGPUEngine extends AbstractEngine {
|
|
|
17
17
|
/** @internal */
|
|
18
18
|
dbgSanityChecks: boolean;
|
|
19
19
|
/** @internal */
|
|
20
|
-
dbgVerboseLogsNumFrames: number;
|
|
21
|
-
/** @internal */
|
|
22
20
|
dbgLogIfNotDrawWrapper: boolean;
|
|
23
21
|
/** @internal */
|
|
24
22
|
dbgShowEmptyEnableEffectCalls: boolean;
|
|
25
23
|
/** @internal */
|
|
26
|
-
dbgVerboseLogsForFirstFrames: boolean;
|
|
27
|
-
/** @internal */
|
|
28
24
|
_textureHelper: WebGPUTextureManager;
|
|
29
25
|
/** @internal */
|
|
30
26
|
_cacheRenderPipeline: WebGPUCacheRenderPipeline;
|
|
@@ -42,6 +38,14 @@ export declare abstract class ThinWebGPUEngine extends AbstractEngine {
|
|
|
42
38
|
_timestampQuery: WebGPUTimestampQuery;
|
|
43
39
|
/** @internal */
|
|
44
40
|
_timestampIndex: number;
|
|
41
|
+
/** @internal */
|
|
42
|
+
_showGPUDebugMarkersLog: boolean;
|
|
43
|
+
/** @internal */
|
|
44
|
+
_debugMarkersEncoderGroups: string[];
|
|
45
|
+
/** @internal */
|
|
46
|
+
_debugMarkersPassGroups: string[];
|
|
47
|
+
/** @internal */
|
|
48
|
+
_debugMarkersPendingEncoderPops: number;
|
|
45
49
|
/**
|
|
46
50
|
* Gets the GPU time spent in the main render pass for the last frame rendered (in nanoseconds).
|
|
47
51
|
* You have to enable the "timestamp-query" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.
|
|
@@ -66,4 +70,7 @@ export declare abstract class ThinWebGPUEngine extends AbstractEngine {
|
|
|
66
70
|
* @internal
|
|
67
71
|
*/
|
|
68
72
|
_generateMipmaps(texture: InternalTexture, commandEncoder?: GPUCommandEncoder): void;
|
|
73
|
+
protected _debugPopBeforeEndOfEncoder(): void;
|
|
74
|
+
protected _debugPushAfterStartOfEncoder(): void;
|
|
75
|
+
protected _debugPendingPop(currentRenderPass: GPURenderPassEncoder): void;
|
|
69
76
|
}
|
|
@@ -15,18 +15,22 @@ export class ThinWebGPUEngine extends AbstractEngine {
|
|
|
15
15
|
/** @internal */
|
|
16
16
|
this.dbgSanityChecks = true;
|
|
17
17
|
/** @internal */
|
|
18
|
-
this.dbgVerboseLogsNumFrames = 10;
|
|
19
|
-
/** @internal */
|
|
20
18
|
this.dbgLogIfNotDrawWrapper = true;
|
|
21
19
|
/** @internal */
|
|
22
20
|
this.dbgShowEmptyEnableEffectCalls = true;
|
|
23
21
|
/** @internal */
|
|
24
|
-
this.dbgVerboseLogsForFirstFrames = false;
|
|
25
|
-
/** @internal */
|
|
26
22
|
this._currentRenderPass = null;
|
|
27
23
|
this._snapshotRenderingMode = 0;
|
|
28
24
|
/** @internal */
|
|
29
25
|
this._timestampIndex = 0;
|
|
26
|
+
/** @internal */
|
|
27
|
+
this._showGPUDebugMarkersLog = false;
|
|
28
|
+
/** @internal */
|
|
29
|
+
this._debugMarkersEncoderGroups = [];
|
|
30
|
+
/** @internal */
|
|
31
|
+
this._debugMarkersPassGroups = [];
|
|
32
|
+
/** @internal */
|
|
33
|
+
this._debugMarkersPendingEncoderPops = 0;
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* Enables or disables GPU timing measurements.
|
|
@@ -50,6 +54,7 @@ export class ThinWebGPUEngine extends AbstractEngine {
|
|
|
50
54
|
if (!this._currentRenderPass) {
|
|
51
55
|
return 0;
|
|
52
56
|
}
|
|
57
|
+
this._debugPopBeforeEndOfEncoder();
|
|
53
58
|
const currentPassIndex = this._currentPassIsMainPass() ? 2 : 1;
|
|
54
59
|
if (!this._snapshotRendering.endRenderPass(this._currentRenderPass) && !this.compatibilityMode) {
|
|
55
60
|
this._bundleList.run(this._currentRenderPass);
|
|
@@ -60,19 +65,7 @@ export class ThinWebGPUEngine extends AbstractEngine {
|
|
|
60
65
|
? this._currentRenderTarget.gpuTimeInFrame
|
|
61
66
|
: this.gpuTimeInFrameForMainPass));
|
|
62
67
|
this._timestampIndex += 2;
|
|
63
|
-
|
|
64
|
-
if (this._count === undefined) {
|
|
65
|
-
this._count = 0;
|
|
66
|
-
}
|
|
67
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
68
|
-
Logger.Log("frame #" +
|
|
69
|
-
this._count +
|
|
70
|
-
" - " +
|
|
71
|
-
(currentPassIndex === 2 ? "main" : "render target") +
|
|
72
|
-
" end pass" +
|
|
73
|
-
(currentPassIndex === 1 ? " - internalTexture.uniqueId=" + this._currentRenderTarget?.texture?.uniqueId : ""));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
68
|
+
this._debugPendingPop(this._currentRenderPass);
|
|
76
69
|
this._currentRenderPass = null;
|
|
77
70
|
return currentPassIndex;
|
|
78
71
|
}
|
|
@@ -90,23 +83,6 @@ export class ThinWebGPUEngine extends AbstractEngine {
|
|
|
90
83
|
this._endCurrentRenderPass();
|
|
91
84
|
}
|
|
92
85
|
const mipmapCount = WebGPUTextureHelper.ComputeNumMipmapLevels(texture.width, texture.height);
|
|
93
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
94
|
-
if (this._count === undefined) {
|
|
95
|
-
this._count = 0;
|
|
96
|
-
}
|
|
97
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
98
|
-
Logger.Log("frame #" +
|
|
99
|
-
this._count +
|
|
100
|
-
" - generate mipmaps - width=" +
|
|
101
|
-
texture.width +
|
|
102
|
-
", height=" +
|
|
103
|
-
texture.height +
|
|
104
|
-
", isCube=" +
|
|
105
|
-
texture.isCube +
|
|
106
|
-
", command encoder=" +
|
|
107
|
-
(commandEncoder === this._renderEncoder ? "render" : "copy"));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
86
|
if (texture.isCube) {
|
|
111
87
|
this._textureHelper.generateCubeMipmaps(gpuHardwareTexture, mipmapCount, commandEncoder);
|
|
112
88
|
}
|
|
@@ -117,5 +93,53 @@ export class ThinWebGPUEngine extends AbstractEngine {
|
|
|
117
93
|
this._textureHelper.generateMipmaps(gpuHardwareTexture, mipmapCount, 0, commandEncoder);
|
|
118
94
|
}
|
|
119
95
|
}
|
|
96
|
+
_debugPopBeforeEndOfEncoder() {
|
|
97
|
+
if (!this._enableGPUDebugMarkers) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// When a render pass is active, pop its groups; otherwise pop encoder-level groups.
|
|
101
|
+
// Pass-level groups are never pushed on the encoder, so we never pop them from it.
|
|
102
|
+
const groups = this._currentRenderPass ? this._debugMarkersPassGroups : this._debugMarkersEncoderGroups;
|
|
103
|
+
const target = this._currentRenderPass ?? this._renderEncoder;
|
|
104
|
+
for (let i = groups.length - 1; i >= 0; --i) {
|
|
105
|
+
if (this._showGPUDebugMarkersLog) {
|
|
106
|
+
Logger.Log(`[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Popping debug group '${groups[i]}' on '${target.label}'.`);
|
|
107
|
+
}
|
|
108
|
+
target.popDebugGroup();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
_debugPushAfterStartOfEncoder() {
|
|
112
|
+
if (!this._enableGPUDebugMarkers) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// When a render pass is active, re-push its floating groups onto it; otherwise re-push
|
|
116
|
+
// encoder-level groups onto the new render encoder.
|
|
117
|
+
// Pass-level groups stay floating until the next render pass starts.
|
|
118
|
+
const groups = this._currentRenderPass ? this._debugMarkersPassGroups : this._debugMarkersEncoderGroups;
|
|
119
|
+
const target = this._currentRenderPass ?? this._renderEncoder;
|
|
120
|
+
for (const groupName of groups) {
|
|
121
|
+
if (this._showGPUDebugMarkersLog) {
|
|
122
|
+
Logger.Log(`[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Pushing debug group '${groupName}' on '${target.label}'.`);
|
|
123
|
+
}
|
|
124
|
+
target.pushDebugGroup(groupName);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
_debugPendingPop(currentRenderPass) {
|
|
128
|
+
if (!this._enableGPUDebugMarkers) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// The user popped encoder-level groups while a render pass was active (the pass was the live
|
|
132
|
+
// object, so the pops were deferred). Now that the pass has ended we replay them on the render
|
|
133
|
+
// encoder. Because _debugMarkersEncoderGroups only ever contains encoder-level entries, popping
|
|
134
|
+
// from it here can never accidentally consume a pass-level group.
|
|
135
|
+
while (this._debugMarkersPendingEncoderPops-- > 0) {
|
|
136
|
+
const groupName = this._debugMarkersEncoderGroups.pop();
|
|
137
|
+
if (this._showGPUDebugMarkersLog) {
|
|
138
|
+
Logger.Log(`[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Popping debug group '${groupName}' on render encoder '${this._renderEncoder.label}' after the end of render pass '${currentRenderPass.label}'.`);
|
|
139
|
+
}
|
|
140
|
+
this._renderEncoder.popDebugGroup();
|
|
141
|
+
}
|
|
142
|
+
this._debugMarkersPendingEncoderPops = 0;
|
|
143
|
+
}
|
|
120
144
|
}
|
|
121
145
|
//# sourceMappingURL=thinWebGPUEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinWebGPUEngine.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/thinWebGPUEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"core/Materials/Textures/internalTexture\";\r\nimport { AbstractEngine } from \"./abstractEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./WebGPU/webgpuCacheRenderPipeline\";\r\nimport type { WebGPUTextureManager } from \"./WebGPU/webgpuTextureManager\";\r\nimport type { WebGPUHardwareTexture } from \"./WebGPU/webgpuHardwareTexture\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { WebGPUTextureHelper } from \"./WebGPU/webgpuTextureHelper\";\r\nimport type { WebGPURenderTargetWrapper } from \"./WebGPU/webgpuRenderTargetWrapper\";\r\nimport { WebGPUPerfCounter } from \"./WebGPU/webgpuPerfCounter\";\r\nimport type { WebGPUSnapshotRendering } from \"./WebGPU/webgpuSnapshotRendering\";\r\nimport { Constants } from \"./constants\";\r\nimport type { WebGPUBundleList } from \"./WebGPU/webgpuBundleList\";\r\nimport type { WebGPUTimestampQuery } from \"./WebGPU/webgpuTimestampQuery\";\r\nimport type { WebGPUOcclusionQuery } from \"./WebGPU/webgpuOcclusionQuery\";\r\n\r\n/**\r\n * The base engine class for WebGPU\r\n */\r\nexport abstract class ThinWebGPUEngine extends AbstractEngine {\r\n // TODO WEBGPU remove those variables when code stabilized\r\n /** @internal */\r\n public dbgShowShaderCode = false;\r\n /** @internal */\r\n public dbgSanityChecks = true;\r\n /** @internal */\r\n public dbgVerboseLogsNumFrames = 10;\r\n /** @internal */\r\n public dbgLogIfNotDrawWrapper = true;\r\n /** @internal */\r\n public dbgShowEmptyEnableEffectCalls = true;\r\n /** @internal */\r\n public dbgVerboseLogsForFirstFrames = false;\r\n\r\n /** @internal */\r\n public _textureHelper: WebGPUTextureManager;\r\n /** @internal */\r\n public _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n /** @internal */\r\n public _occlusionQuery: WebGPUOcclusionQuery;\r\n\r\n // Frame Life Cycle (recreated each frame)\r\n /** @internal */\r\n public _renderEncoder: GPUCommandEncoder;\r\n /** @internal */\r\n public _uploadEncoder: GPUCommandEncoder;\r\n\r\n /** @internal */\r\n public _currentRenderPass: Nullable<GPURenderPassEncoder> = null;\r\n\r\n protected _snapshotRendering: WebGPUSnapshotRendering;\r\n protected _snapshotRenderingMode = Constants.SNAPSHOTRENDERING_STANDARD;\r\n\r\n /** @internal */\r\n public _timestampQuery: WebGPUTimestampQuery;\r\n /** @internal */\r\n public _timestampIndex = 0;\r\n\r\n /**\r\n * Gets the GPU time spent in the main render pass for the last frame rendered (in nanoseconds).\r\n * You have to enable the \"timestamp-query\" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.\r\n * It will only return time spent in the main pass, not additional render target / compute passes (if any)!\r\n */\r\n public readonly gpuTimeInFrameForMainPass?: WebGPUPerfCounter;\r\n\r\n /**\r\n * Used for both the compatibilityMode=false and the snapshot rendering modes (as both can't be enabled at the same time)\r\n * @internal\r\n */\r\n public _bundleList: WebGPUBundleList;\r\n\r\n /**\r\n * Enables or disables GPU timing measurements.\r\n * Note that this is only supported if the \"timestamp-query\" extension is enabled in the options.\r\n */\r\n public get enableGPUTimingMeasurements(): boolean {\r\n return this._timestampQuery.enable;\r\n }\r\n\r\n public set enableGPUTimingMeasurements(enable: boolean) {\r\n if (this._timestampQuery.enable === enable) {\r\n return;\r\n }\r\n (this.gpuTimeInFrameForMainPass as any) = enable ? new WebGPUPerfCounter() : undefined;\r\n this._timestampQuery.enable = enable;\r\n }\r\n\r\n protected _currentPassIsMainPass() {\r\n return this._currentRenderTarget === null;\r\n }\r\n\r\n /** @internal */\r\n public _endCurrentRenderPass(): number {\r\n if (!this._currentRenderPass) {\r\n return 0;\r\n }\r\n\r\n const currentPassIndex = this._currentPassIsMainPass() ? 2 : 1;\r\n\r\n if (!this._snapshotRendering.endRenderPass(this._currentRenderPass) && !this.compatibilityMode) {\r\n this._bundleList.run(this._currentRenderPass);\r\n this._bundleList.reset();\r\n }\r\n this._currentRenderPass.end();\r\n\r\n this._timestampQuery.endPass(\r\n this._timestampIndex,\r\n (this._currentRenderTarget && (this._currentRenderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame\r\n ? (this._currentRenderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame\r\n : this.gpuTimeInFrameForMainPass) as WebGPUPerfCounter\r\n );\r\n this._timestampIndex += 2;\r\n\r\n if (this.dbgVerboseLogsForFirstFrames) {\r\n if ((this as any)._count === undefined) {\r\n (this as any)._count = 0;\r\n }\r\n if (!(this as any)._count || (this as any)._count < this.dbgVerboseLogsNumFrames) {\r\n Logger.Log(\r\n \"frame #\" +\r\n (this as any)._count +\r\n \" - \" +\r\n (currentPassIndex === 2 ? \"main\" : \"render target\") +\r\n \" end pass\" +\r\n (currentPassIndex === 1 ? \" - internalTexture.uniqueId=\" + this._currentRenderTarget?.texture?.uniqueId : \"\")\r\n );\r\n }\r\n }\r\n this._currentRenderPass = null;\r\n\r\n return currentPassIndex;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _generateMipmaps(texture: InternalTexture, commandEncoder?: GPUCommandEncoder) {\r\n commandEncoder = commandEncoder ?? this._renderEncoder;\r\n\r\n const gpuHardwareTexture = texture._hardwareTexture as Nullable<WebGPUHardwareTexture>;\r\n\r\n if (!gpuHardwareTexture) {\r\n return;\r\n }\r\n\r\n if (commandEncoder === this._renderEncoder) {\r\n // We must close the current pass (if any) because we are going to use the render encoder to generate the mipmaps (so, we are going to create a new render pass)\r\n this._endCurrentRenderPass();\r\n }\r\n\r\n const mipmapCount = WebGPUTextureHelper.ComputeNumMipmapLevels(texture.width, texture.height);\r\n\r\n if (this.dbgVerboseLogsForFirstFrames) {\r\n if ((this as any)._count === undefined) {\r\n (this as any)._count = 0;\r\n }\r\n if (!(this as any)._count || (this as any)._count < this.dbgVerboseLogsNumFrames) {\r\n Logger.Log(\r\n \"frame #\" +\r\n (this as any)._count +\r\n \" - generate mipmaps - width=\" +\r\n texture.width +\r\n \", height=\" +\r\n texture.height +\r\n \", isCube=\" +\r\n texture.isCube +\r\n \", command encoder=\" +\r\n (commandEncoder === this._renderEncoder ? \"render\" : \"copy\")\r\n );\r\n }\r\n }\r\n\r\n if (texture.isCube) {\r\n this._textureHelper.generateCubeMipmaps(gpuHardwareTexture, mipmapCount, commandEncoder);\r\n } else if (texture._source === InternalTextureSource.Raw || texture._source === InternalTextureSource.Raw2DArray) {\r\n this._textureHelper.generateMipmaps(gpuHardwareTexture, texture.mipLevelCount, 0, commandEncoder);\r\n } else {\r\n this._textureHelper.generateMipmaps(gpuHardwareTexture, mipmapCount, 0, commandEncoder);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"thinWebGPUEngine.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/thinWebGPUEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"core/Materials/Textures/internalTexture\";\r\nimport { AbstractEngine } from \"./abstractEngine\";\r\nimport type { WebGPUCacheRenderPipeline } from \"./WebGPU/webgpuCacheRenderPipeline\";\r\nimport type { WebGPUTextureManager } from \"./WebGPU/webgpuTextureManager\";\r\nimport type { WebGPUHardwareTexture } from \"./WebGPU/webgpuHardwareTexture\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { WebGPUTextureHelper } from \"./WebGPU/webgpuTextureHelper\";\r\nimport type { WebGPURenderTargetWrapper } from \"./WebGPU/webgpuRenderTargetWrapper\";\r\nimport { WebGPUPerfCounter } from \"./WebGPU/webgpuPerfCounter\";\r\nimport type { WebGPUSnapshotRendering } from \"./WebGPU/webgpuSnapshotRendering\";\r\nimport { Constants } from \"./constants\";\r\nimport type { WebGPUBundleList } from \"./WebGPU/webgpuBundleList\";\r\nimport type { WebGPUTimestampQuery } from \"./WebGPU/webgpuTimestampQuery\";\r\nimport type { WebGPUOcclusionQuery } from \"./WebGPU/webgpuOcclusionQuery\";\r\n\r\n/**\r\n * The base engine class for WebGPU\r\n */\r\nexport abstract class ThinWebGPUEngine extends AbstractEngine {\r\n // TODO WEBGPU remove those variables when code stabilized\r\n /** @internal */\r\n public dbgShowShaderCode = false;\r\n /** @internal */\r\n public dbgSanityChecks = true;\r\n /** @internal */\r\n public dbgLogIfNotDrawWrapper = true;\r\n /** @internal */\r\n public dbgShowEmptyEnableEffectCalls = true;\r\n\r\n /** @internal */\r\n public _textureHelper: WebGPUTextureManager;\r\n /** @internal */\r\n public _cacheRenderPipeline: WebGPUCacheRenderPipeline;\r\n /** @internal */\r\n public _occlusionQuery: WebGPUOcclusionQuery;\r\n\r\n // Frame Life Cycle (recreated each frame)\r\n /** @internal */\r\n public _renderEncoder: GPUCommandEncoder;\r\n /** @internal */\r\n public _uploadEncoder: GPUCommandEncoder;\r\n\r\n /** @internal */\r\n public _currentRenderPass: Nullable<GPURenderPassEncoder> = null;\r\n\r\n protected _snapshotRendering: WebGPUSnapshotRendering;\r\n protected _snapshotRenderingMode = Constants.SNAPSHOTRENDERING_STANDARD;\r\n\r\n /** @internal */\r\n public _timestampQuery: WebGPUTimestampQuery;\r\n /** @internal */\r\n public _timestampIndex = 0;\r\n\r\n /** @internal */\r\n public _showGPUDebugMarkersLog = false;\r\n /** @internal */\r\n public _debugMarkersEncoderGroups: string[] = [];\r\n /** @internal */\r\n public _debugMarkersPassGroups: string[] = [];\r\n /** @internal */\r\n public _debugMarkersPendingEncoderPops = 0;\r\n\r\n /**\r\n * Gets the GPU time spent in the main render pass for the last frame rendered (in nanoseconds).\r\n * You have to enable the \"timestamp-query\" extension in the engine constructor options and set engine.enableGPUTimingMeasurements = true.\r\n * It will only return time spent in the main pass, not additional render target / compute passes (if any)!\r\n */\r\n public readonly gpuTimeInFrameForMainPass?: WebGPUPerfCounter;\r\n\r\n /**\r\n * Used for both the compatibilityMode=false and the snapshot rendering modes (as both can't be enabled at the same time)\r\n * @internal\r\n */\r\n public _bundleList: WebGPUBundleList;\r\n\r\n /**\r\n * Enables or disables GPU timing measurements.\r\n * Note that this is only supported if the \"timestamp-query\" extension is enabled in the options.\r\n */\r\n public get enableGPUTimingMeasurements(): boolean {\r\n return this._timestampQuery.enable;\r\n }\r\n\r\n public set enableGPUTimingMeasurements(enable: boolean) {\r\n if (this._timestampQuery.enable === enable) {\r\n return;\r\n }\r\n (this.gpuTimeInFrameForMainPass as any) = enable ? new WebGPUPerfCounter() : undefined;\r\n this._timestampQuery.enable = enable;\r\n }\r\n\r\n protected _currentPassIsMainPass() {\r\n return this._currentRenderTarget === null;\r\n }\r\n\r\n /** @internal */\r\n public _endCurrentRenderPass(): number {\r\n if (!this._currentRenderPass) {\r\n return 0;\r\n }\r\n\r\n this._debugPopBeforeEndOfEncoder();\r\n\r\n const currentPassIndex = this._currentPassIsMainPass() ? 2 : 1;\r\n\r\n if (!this._snapshotRendering.endRenderPass(this._currentRenderPass) && !this.compatibilityMode) {\r\n this._bundleList.run(this._currentRenderPass);\r\n this._bundleList.reset();\r\n }\r\n this._currentRenderPass.end();\r\n\r\n this._timestampQuery.endPass(\r\n this._timestampIndex,\r\n (this._currentRenderTarget && (this._currentRenderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame\r\n ? (this._currentRenderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame\r\n : this.gpuTimeInFrameForMainPass) as WebGPUPerfCounter\r\n );\r\n this._timestampIndex += 2;\r\n\r\n this._debugPendingPop(this._currentRenderPass);\r\n\r\n this._currentRenderPass = null;\r\n\r\n return currentPassIndex;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _generateMipmaps(texture: InternalTexture, commandEncoder?: GPUCommandEncoder) {\r\n commandEncoder = commandEncoder ?? this._renderEncoder;\r\n\r\n const gpuHardwareTexture = texture._hardwareTexture as Nullable<WebGPUHardwareTexture>;\r\n\r\n if (!gpuHardwareTexture) {\r\n return;\r\n }\r\n\r\n if (commandEncoder === this._renderEncoder) {\r\n // We must close the current pass (if any) because we are going to use the render encoder to generate the mipmaps (so, we are going to create a new render pass)\r\n this._endCurrentRenderPass();\r\n }\r\n\r\n const mipmapCount = WebGPUTextureHelper.ComputeNumMipmapLevels(texture.width, texture.height);\r\n\r\n if (texture.isCube) {\r\n this._textureHelper.generateCubeMipmaps(gpuHardwareTexture, mipmapCount, commandEncoder);\r\n } else if (texture._source === InternalTextureSource.Raw || texture._source === InternalTextureSource.Raw2DArray) {\r\n this._textureHelper.generateMipmaps(gpuHardwareTexture, texture.mipLevelCount, 0, commandEncoder);\r\n } else {\r\n this._textureHelper.generateMipmaps(gpuHardwareTexture, mipmapCount, 0, commandEncoder);\r\n }\r\n }\r\n\r\n protected _debugPopBeforeEndOfEncoder() {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n // When a render pass is active, pop its groups; otherwise pop encoder-level groups.\r\n // Pass-level groups are never pushed on the encoder, so we never pop them from it.\r\n const groups = this._currentRenderPass ? this._debugMarkersPassGroups : this._debugMarkersEncoderGroups;\r\n const target = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n for (let i = groups.length - 1; i >= 0; --i) {\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Popping debug group '${groups[i]}' on '${target.label}'.`\r\n );\r\n }\r\n target.popDebugGroup();\r\n }\r\n }\r\n\r\n protected _debugPushAfterStartOfEncoder() {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n // When a render pass is active, re-push its floating groups onto it; otherwise re-push\r\n // encoder-level groups onto the new render encoder.\r\n // Pass-level groups stay floating until the next render pass starts.\r\n const groups = this._currentRenderPass ? this._debugMarkersPassGroups : this._debugMarkersEncoderGroups;\r\n const target = this._currentRenderPass ?? this._renderEncoder;\r\n\r\n for (const groupName of groups) {\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Pushing debug group '${groupName}' on '${target.label}'.`\r\n );\r\n }\r\n target.pushDebugGroup(groupName);\r\n }\r\n }\r\n\r\n protected _debugPendingPop(currentRenderPass: GPURenderPassEncoder) {\r\n if (!this._enableGPUDebugMarkers) {\r\n return;\r\n }\r\n\r\n // The user popped encoder-level groups while a render pass was active (the pass was the live\r\n // object, so the pops were deferred). Now that the pass has ended we replay them on the render\r\n // encoder. Because _debugMarkersEncoderGroups only ever contains encoder-level entries, popping\r\n // from it here can never accidentally consume a pass-level group.\r\n while (this._debugMarkersPendingEncoderPops-- > 0) {\r\n const groupName = this._debugMarkersEncoderGroups.pop();\r\n\r\n if (this._showGPUDebugMarkersLog) {\r\n Logger.Log(\r\n `[${this.frameId}] [E${this._debugMarkersEncoderGroups.length}|P${this._debugMarkersPassGroups.length}] [automatic] Popping debug group '${groupName}' on render encoder '${this._renderEncoder.label}' after the end of render pass '${currentRenderPass.label}'.`\r\n );\r\n }\r\n\r\n this._renderEncoder.popDebugGroup();\r\n }\r\n\r\n this._debugMarkersPendingEncoderPops = 0;\r\n }\r\n}\r\n"]}
|
|
@@ -222,6 +222,7 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
222
222
|
private _dummyIndexBuffer;
|
|
223
223
|
private _colorWriteLocal;
|
|
224
224
|
private _forceEnableEffect;
|
|
225
|
+
private _internalFrameCounter;
|
|
225
226
|
/**
|
|
226
227
|
* Gets or sets the snapshot rendering mode
|
|
227
228
|
*/
|
|
@@ -859,8 +860,9 @@ export declare class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
859
860
|
extractDriverInfo(): string;
|
|
860
861
|
/**
|
|
861
862
|
* Force a WebGPU flush (ie. a flush of all waiting commands)
|
|
863
|
+
* @internal @param _fromEndFrame defines whether the flush is triggered from endFrame or not (default: false)
|
|
862
864
|
*/
|
|
863
|
-
flushFramebuffer(): void;
|
|
865
|
+
flushFramebuffer(_fromEndFrame?: boolean): void;
|
|
864
866
|
/** @internal */
|
|
865
867
|
_currentFrameBufferIsDefaultFrameBuffer(): boolean;
|
|
866
868
|
/** @internal */
|
package/Engines/webgpuEngine.js
CHANGED
|
@@ -18,7 +18,6 @@ import { WebGPUTextureManager } from "./WebGPU/webgpuTextureManager.js";
|
|
|
18
18
|
import { AbstractEngine } from "./abstractEngine.js";
|
|
19
19
|
import { WebGPUBufferManager } from "./WebGPU/webgpuBufferManager.js";
|
|
20
20
|
import { WebGPUHardwareTexture } from "./WebGPU/webgpuHardwareTexture.js";
|
|
21
|
-
import { UniformBuffer } from "../Materials/uniformBuffer.js";
|
|
22
21
|
import { WebGPUCacheSampler } from "./WebGPU/webgpuCacheSampler.js";
|
|
23
22
|
import { WebGPUCacheRenderPipelineTree } from "./WebGPU/webgpuCacheRenderPipelineTree.js";
|
|
24
23
|
import { WebGPUStencilStateComposer } from "./WebGPU/webgpuStencilStateComposer.js";
|
|
@@ -328,6 +327,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
328
327
|
this._currentIndexBuffer = null;
|
|
329
328
|
this._colorWriteLocal = true;
|
|
330
329
|
this._forceEnableEffect = false;
|
|
330
|
+
this._internalFrameCounter = 0;
|
|
331
331
|
/**
|
|
332
332
|
* Indicates if the z range in NDC space is 0..1 (value: true) or -1..1 (value: false)
|
|
333
333
|
*/
|
|
@@ -507,12 +507,9 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
507
507
|
this._snapshotRendering = new WebGPUSnapshotRendering(this, this._snapshotRenderingMode, this._bundleList);
|
|
508
508
|
this._ubInvertY = this._bufferManager.createBuffer(new Float32Array([-1, 0]), WebGPUConstants.BufferUsage.Uniform | WebGPUConstants.BufferUsage.CopyDst, "UBInvertY");
|
|
509
509
|
this._ubDontInvertY = this._bufferManager.createBuffer(new Float32Array([1, 0]), WebGPUConstants.BufferUsage.Uniform | WebGPUConstants.BufferUsage.CopyDst, "UBDontInvertY");
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
Logger.Log(["%c frame #" + this._count + " - begin", "background: #ffff00"]);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
510
|
+
const frameCounter = this._internalFrameCounter++;
|
|
511
|
+
this._uploadEncoderDescriptor.label = `[${this.frameId}|${frameCounter}] - UploadEncoder`;
|
|
512
|
+
this._renderEncoderDescriptor.label = `[${this.frameId}|${frameCounter}] - RenderEncoder`;
|
|
516
513
|
this._uploadEncoder = this._device.createCommandEncoder(this._uploadEncoderDescriptor);
|
|
517
514
|
this._renderEncoder = this._device.createCommandEncoder(this._renderEncoderDescriptor);
|
|
518
515
|
this._emptyVertexBuffer = new VertexBuffer(this, [0], "", {
|
|
@@ -656,7 +653,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
656
653
|
supportSpriteInstancing: true,
|
|
657
654
|
forceVertexBufferStrideAndOffsetMultiple4Bytes: true,
|
|
658
655
|
_checkNonFloatVertexBuffersDontRecreatePipelineContext: true,
|
|
659
|
-
_collectUbosUpdatedInFrame: false,
|
|
660
656
|
};
|
|
661
657
|
this._alphaState = new AlphaState(this._caps.blendParametersPerTarget);
|
|
662
658
|
}
|
|
@@ -757,16 +753,17 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
757
753
|
stencilLoadOp: !this.isStencilEnable ? undefined : "clear" /* WebGPUConstants.LoadOp.Clear */,
|
|
758
754
|
stencilStoreOp: !this.isStencilEnable ? undefined : "store" /* WebGPUConstants.StoreOp.Store */,
|
|
759
755
|
};
|
|
756
|
+
const frameCounter = this._internalFrameCounter++;
|
|
760
757
|
this._mainRenderPassWrapper.renderPassDescriptor = {
|
|
761
|
-
label:
|
|
758
|
+
label: `[${this.frameId}|${frameCounter}] - MainRenderPass`,
|
|
762
759
|
colorAttachments: mainColorAttachments,
|
|
763
760
|
depthStencilAttachment: mainDepthAttachment,
|
|
764
761
|
};
|
|
765
762
|
this.beginFrame();
|
|
766
763
|
this._startMainRenderPass(true, null, true, false);
|
|
767
764
|
this._endCurrentRenderPass();
|
|
768
|
-
this.endFrame();
|
|
769
765
|
this._frameId--; // We don't want to count the frame as a real frame, because it was only used to initialize the depth texture
|
|
766
|
+
this.endFrame();
|
|
770
767
|
}
|
|
771
768
|
/**
|
|
772
769
|
* Shared initialization across engines types.
|
|
@@ -902,14 +899,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
902
899
|
if (!super.setSize(width, height, forceSetSize)) {
|
|
903
900
|
return false;
|
|
904
901
|
}
|
|
905
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
906
|
-
if (this._count === undefined) {
|
|
907
|
-
this._count = 0;
|
|
908
|
-
}
|
|
909
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
910
|
-
Logger.Log(["frame #" + this._count + " - setSize -", width, height]);
|
|
911
|
-
}
|
|
912
|
-
}
|
|
913
902
|
this._initializeMainAttachments();
|
|
914
903
|
if (this.snapshotRendering) {
|
|
915
904
|
// reset snapshot rendering so that the next frame will record a new list of bundles
|
|
@@ -1023,21 +1012,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
1023
1012
|
else {
|
|
1024
1013
|
this._getCurrentRenderPass().setViewport(x, y, w, h, 0, 1);
|
|
1025
1014
|
}
|
|
1026
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
1027
|
-
if (this._count === undefined) {
|
|
1028
|
-
this._count = 0;
|
|
1029
|
-
}
|
|
1030
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
1031
|
-
Logger.Log([
|
|
1032
|
-
"frame #" + this._count + " - viewport applied - (",
|
|
1033
|
-
this._viewportCached.x,
|
|
1034
|
-
this._viewportCached.y,
|
|
1035
|
-
this._viewportCached.z,
|
|
1036
|
-
this._viewportCached.w,
|
|
1037
|
-
") current pass is main pass=" + this._currentPassIsMainPass(),
|
|
1038
|
-
]);
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
1015
|
}
|
|
1042
1016
|
/**
|
|
1043
1017
|
* @internal
|
|
@@ -1067,21 +1041,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
1067
1041
|
else {
|
|
1068
1042
|
this._getCurrentRenderPass().setScissorRect(this._scissorCached.x, y, this._scissorCached.z, this._scissorCached.w);
|
|
1069
1043
|
}
|
|
1070
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
1071
|
-
if (this._count === undefined) {
|
|
1072
|
-
this._count = 0;
|
|
1073
|
-
}
|
|
1074
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
1075
|
-
Logger.Log([
|
|
1076
|
-
"frame #" + this._count + " - scissor applied - (",
|
|
1077
|
-
this._scissorCached.x,
|
|
1078
|
-
this._scissorCached.y,
|
|
1079
|
-
this._scissorCached.z,
|
|
1080
|
-
this._scissorCached.w,
|
|
1081
|
-
") current pass is main pass=" + this._currentPassIsMainPass(),
|
|
1082
|
-
]);
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
1044
|
}
|
|
1086
1045
|
_scissorIsActive() {
|
|
1087
1046
|
return this._scissorCached.x !== 0 || this._scissorCached.y !== 0 || this._scissorCached.z !== 0 || this._scissorCached.w !== 0;
|
|
@@ -1156,14 +1115,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
1156
1115
|
this._clearStencilValue = stencilClearValue;
|
|
1157
1116
|
}
|
|
1158
1117
|
const hasScissor = this._scissorIsActive();
|
|
1159
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
1160
|
-
if (this._count === undefined) {
|
|
1161
|
-
this._count = 0;
|
|
1162
|
-
}
|
|
1163
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
1164
|
-
Logger.Log(["frame #" + this._count + " - clear - backBuffer=", backBuffer, " depth=", depth, " stencil=", stencil, " scissor is active=", hasScissor]);
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1167
1118
|
// We need to recreate the render pass so that the new parameters for clear color / depth / stencil are taken into account
|
|
1168
1119
|
if (this._currentRenderTarget) {
|
|
1169
1120
|
if (hasScissor) {
|
|
@@ -2100,7 +2051,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2100
2051
|
texture.delayLoad();
|
|
2101
2052
|
return false;
|
|
2102
2053
|
}
|
|
2103
|
-
let internalTexture
|
|
2054
|
+
let internalTexture;
|
|
2104
2055
|
if (depthStencilTexture) {
|
|
2105
2056
|
internalTexture = texture.depthStencilTexture;
|
|
2106
2057
|
}
|
|
@@ -2138,16 +2089,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2138
2089
|
}
|
|
2139
2090
|
this._setInternalTexture(name, internalTexture, baseName);
|
|
2140
2091
|
}
|
|
2141
|
-
else {
|
|
2142
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2143
|
-
if (this._count === undefined) {
|
|
2144
|
-
this._count = 0;
|
|
2145
|
-
}
|
|
2146
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2147
|
-
Logger.Log(["frame #" + this._count + " - _setTexture called with a null _currentEffect! texture=", texture]);
|
|
2148
|
-
}
|
|
2149
|
-
}
|
|
2150
|
-
}
|
|
2151
2092
|
return true;
|
|
2152
2093
|
}
|
|
2153
2094
|
/**
|
|
@@ -2307,24 +2248,10 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2307
2248
|
this._snapshotRendering.endFrame();
|
|
2308
2249
|
this._timestampQuery.endFrame(this._renderEncoder);
|
|
2309
2250
|
this._timestampIndex = 0;
|
|
2310
|
-
this.
|
|
2251
|
+
this._internalFrameCounter = 0;
|
|
2252
|
+
this.flushFramebuffer(true);
|
|
2311
2253
|
this._textureHelper.destroyDeferredTextures();
|
|
2312
2254
|
this._bufferManager.destroyDeferredBuffers();
|
|
2313
|
-
if (this._features._collectUbosUpdatedInFrame) {
|
|
2314
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2315
|
-
if (this._count === undefined) {
|
|
2316
|
-
this._count = 0;
|
|
2317
|
-
}
|
|
2318
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2319
|
-
const list = [];
|
|
2320
|
-
for (const name in UniformBuffer._UpdatedUbosInFrame) {
|
|
2321
|
-
list.push(name + ":" + UniformBuffer._UpdatedUbosInFrame[name]);
|
|
2322
|
-
}
|
|
2323
|
-
Logger.Log(["frame #" + this._count + " - updated ubos -", list.join(", ")]);
|
|
2324
|
-
}
|
|
2325
|
-
}
|
|
2326
|
-
UniformBuffer._UpdatedUbosInFrame = {};
|
|
2327
|
-
}
|
|
2328
2255
|
this.countersLastFrame.numEnableEffects = this._counters.numEnableEffects;
|
|
2329
2256
|
this.countersLastFrame.numEnableDrawWrapper = this._counters.numEnableDrawWrapper;
|
|
2330
2257
|
this.countersLastFrame.numBundleCreationNonCompatMode = this._counters.numBundleCreationNonCompatMode;
|
|
@@ -2335,20 +2262,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2335
2262
|
this._counters.numBundleReuseNonCompatMode = 0;
|
|
2336
2263
|
this._cacheRenderPipeline.endFrame();
|
|
2337
2264
|
this._cacheBindGroups.endFrame();
|
|
2338
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2339
|
-
if (this._count === undefined) {
|
|
2340
|
-
this._count = 0;
|
|
2341
|
-
}
|
|
2342
|
-
if (this._count < this.dbgVerboseLogsNumFrames) {
|
|
2343
|
-
Logger.Log(["%c frame #" + this._count + " - end", "background: #ffff00"]);
|
|
2344
|
-
}
|
|
2345
|
-
if (this._count < this.dbgVerboseLogsNumFrames) {
|
|
2346
|
-
this._count++;
|
|
2347
|
-
if (this._count !== this.dbgVerboseLogsNumFrames) {
|
|
2348
|
-
Logger.Log(["%c frame #" + this._count + " - begin", "background: #ffff00"]);
|
|
2349
|
-
}
|
|
2350
|
-
}
|
|
2351
|
-
}
|
|
2352
2265
|
super.endFrame();
|
|
2353
2266
|
}
|
|
2354
2267
|
/**Gets driver info if available */
|
|
@@ -2357,15 +2270,28 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2357
2270
|
}
|
|
2358
2271
|
/**
|
|
2359
2272
|
* Force a WebGPU flush (ie. a flush of all waiting commands)
|
|
2273
|
+
* @internal @param _fromEndFrame defines whether the flush is triggered from endFrame or not (default: false)
|
|
2360
2274
|
*/
|
|
2361
|
-
flushFramebuffer() {
|
|
2275
|
+
flushFramebuffer(_fromEndFrame = false) {
|
|
2362
2276
|
// we need to end the current render pass (main or rtt) if any as we are not allowed to submit the command buffers when being in a pass
|
|
2363
2277
|
this._endCurrentRenderPass();
|
|
2278
|
+
this._debugPopBeforeEndOfEncoder();
|
|
2364
2279
|
this._commandBuffers[0] = this._uploadEncoder.finish();
|
|
2365
2280
|
this._commandBuffers[1] = this._renderEncoder.finish();
|
|
2366
2281
|
this._device.queue.submit(this._commandBuffers);
|
|
2282
|
+
const frameCounter = this._internalFrameCounter++;
|
|
2283
|
+
// If flushFramebuffer is called from endFrame, it means the encoders are created for the next frame, but because frameId is not yet incremented at the time of the call, we use frameId + 1
|
|
2284
|
+
this._uploadEncoderDescriptor.label = `[${_fromEndFrame ? this.frameId + 1 : this.frameId}|${frameCounter}] - UploadEncoder`;
|
|
2285
|
+
this._renderEncoderDescriptor.label = `[${_fromEndFrame ? this.frameId + 1 : this.frameId}|${frameCounter}] - RenderEncoder`;
|
|
2367
2286
|
this._uploadEncoder = this._device.createCommandEncoder(this._uploadEncoderDescriptor);
|
|
2368
2287
|
this._renderEncoder = this._device.createCommandEncoder(this._renderEncoderDescriptor);
|
|
2288
|
+
if (_fromEndFrame) {
|
|
2289
|
+
this._debugMarkersEncoderGroups.length = 0;
|
|
2290
|
+
this._debugMarkersPassGroups.length = 0;
|
|
2291
|
+
}
|
|
2292
|
+
else {
|
|
2293
|
+
this._debugPushAfterStartOfEncoder();
|
|
2294
|
+
}
|
|
2369
2295
|
this._timestampQuery.startFrame(this._uploadEncoder);
|
|
2370
2296
|
this._textureHelper.setCommandEncoder(this._uploadEncoder);
|
|
2371
2297
|
this._bundleList.reset();
|
|
@@ -2488,8 +2414,9 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2488
2414
|
colorAttachments.push(null);
|
|
2489
2415
|
}
|
|
2490
2416
|
}
|
|
2417
|
+
const frameCounter = this._internalFrameCounter++;
|
|
2491
2418
|
this._rttRenderPassWrapper.renderPassDescriptor = {
|
|
2492
|
-
label: (renderTargetWrapper.label ?? "RTT") + " - RenderPass",
|
|
2419
|
+
label: `[${this.frameId}|${frameCounter}] - ` + (renderTargetWrapper.label ?? "RTT") + " - RenderPass",
|
|
2493
2420
|
colorAttachments,
|
|
2494
2421
|
depthStencilAttachment: depthStencilTexture && gpuDepthStencilTexture
|
|
2495
2422
|
? {
|
|
@@ -2512,30 +2439,7 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2512
2439
|
};
|
|
2513
2440
|
this._timestampQuery.startPass(this._rttRenderPassWrapper.renderPassDescriptor, this._timestampIndex);
|
|
2514
2441
|
this._currentRenderPass = this._renderEncoder.beginRenderPass(this._rttRenderPassWrapper.renderPassDescriptor);
|
|
2515
|
-
|
|
2516
|
-
if (this._count === undefined) {
|
|
2517
|
-
this._count = 0;
|
|
2518
|
-
}
|
|
2519
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2520
|
-
const internalTexture = rtWrapper.texture;
|
|
2521
|
-
Logger.Log([
|
|
2522
|
-
"frame #" +
|
|
2523
|
-
this._count +
|
|
2524
|
-
" - render target begin pass - rtt name=" +
|
|
2525
|
-
renderTargetWrapper.label +
|
|
2526
|
-
", internalTexture.uniqueId=" +
|
|
2527
|
-
internalTexture.uniqueId +
|
|
2528
|
-
", width=" +
|
|
2529
|
-
internalTexture.width +
|
|
2530
|
-
", height=" +
|
|
2531
|
-
internalTexture.height +
|
|
2532
|
-
", setClearStates=" +
|
|
2533
|
-
setClearStates,
|
|
2534
|
-
"renderPassDescriptor=",
|
|
2535
|
-
this._rttRenderPassWrapper.renderPassDescriptor,
|
|
2536
|
-
]);
|
|
2537
|
-
}
|
|
2538
|
-
}
|
|
2442
|
+
this._debugPushAfterStartOfEncoder();
|
|
2539
2443
|
this._resetRenderPassStates();
|
|
2540
2444
|
if (!gpuDepthStencilWrapper || !WebGPUTextureHelper.HasStencilAspect(gpuDepthStencilWrapper.format)) {
|
|
2541
2445
|
this._stencilStateComposer.enabled = false;
|
|
@@ -2549,6 +2453,8 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2549
2453
|
const mustClearColor = setClearStates && clearColor;
|
|
2550
2454
|
const mustClearDepth = setClearStates && clearDepth;
|
|
2551
2455
|
const mustClearStencil = setClearStates && clearStencil;
|
|
2456
|
+
const frameCounter = this._internalFrameCounter++;
|
|
2457
|
+
this._mainRenderPassWrapper.renderPassDescriptor.label = `[${this.frameId}|${frameCounter}] - MainRenderPass`;
|
|
2552
2458
|
this._mainRenderPassWrapper.renderPassDescriptor.colorAttachments[0].clearValue = mustClearColor ? clearColor : undefined;
|
|
2553
2459
|
this._mainRenderPassWrapper.renderPassDescriptor.colorAttachments[0].loadOp = mustClearColor ? "clear" /* WebGPUConstants.LoadOp.Clear */ : "load" /* WebGPUConstants.LoadOp.Load */;
|
|
2554
2460
|
this._mainRenderPassWrapper.renderPassDescriptor.depthStencilAttachment.depthClearValue = mustClearDepth
|
|
@@ -2575,21 +2481,9 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2575
2481
|
ViewDescriptorSwapChain.format = swapChainTexture.format;
|
|
2576
2482
|
this._mainRenderPassWrapper.renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView(ViewDescriptorSwapChain);
|
|
2577
2483
|
}
|
|
2578
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2579
|
-
if (this._count === undefined) {
|
|
2580
|
-
this._count = 0;
|
|
2581
|
-
}
|
|
2582
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2583
|
-
Logger.Log([
|
|
2584
|
-
"frame #" + this._count + " - main begin pass - texture width=" + this._mainTextureExtends.width,
|
|
2585
|
-
" height=" + this._mainTextureExtends.height + ", setClearStates=" + setClearStates,
|
|
2586
|
-
"renderPassDescriptor=",
|
|
2587
|
-
this._mainRenderPassWrapper.renderPassDescriptor,
|
|
2588
|
-
]);
|
|
2589
|
-
}
|
|
2590
|
-
}
|
|
2591
2484
|
this._timestampQuery.startPass(this._mainRenderPassWrapper.renderPassDescriptor, this._timestampIndex);
|
|
2592
2485
|
this._currentRenderPass = this._renderEncoder.beginRenderPass(this._mainRenderPassWrapper.renderPassDescriptor);
|
|
2486
|
+
this._debugPushAfterStartOfEncoder();
|
|
2593
2487
|
this._setDepthTextureFormat(this._mainRenderPassWrapper);
|
|
2594
2488
|
this._setColorFormat(this._mainRenderPassWrapper);
|
|
2595
2489
|
this._resetRenderPassStates();
|
|
@@ -2641,31 +2535,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2641
2535
|
arrayLayerCount: 1,
|
|
2642
2536
|
aspect: "all" /* WebGPUConstants.TextureAspect.All */,
|
|
2643
2537
|
};
|
|
2644
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2645
|
-
if (this._count === undefined) {
|
|
2646
|
-
this._count = 0;
|
|
2647
|
-
}
|
|
2648
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2649
|
-
Logger.Log([
|
|
2650
|
-
"frame #" +
|
|
2651
|
-
this._count +
|
|
2652
|
-
" - bindFramebuffer - rtt name=" +
|
|
2653
|
-
texture.label +
|
|
2654
|
-
", internalTexture.uniqueId=" +
|
|
2655
|
-
texture.texture?.uniqueId +
|
|
2656
|
-
", face=" +
|
|
2657
|
-
faceIndex +
|
|
2658
|
-
", lodLevel=" +
|
|
2659
|
-
lodLevel +
|
|
2660
|
-
", layer=" +
|
|
2661
|
-
layer,
|
|
2662
|
-
"colorAttachmentViewDescriptor=",
|
|
2663
|
-
this._rttRenderPassWrapper.colorAttachmentViewDescriptor,
|
|
2664
|
-
"depthAttachmentViewDescriptor=",
|
|
2665
|
-
this._rttRenderPassWrapper.depthAttachmentViewDescriptor,
|
|
2666
|
-
]);
|
|
2667
|
-
}
|
|
2668
|
-
}
|
|
2669
2538
|
// We don't create the render pass just now, we do a lazy creation of the render pass, hoping the render pass will be created by a call to clear()...
|
|
2670
2539
|
// However, if snapshot rendering is enabled, we need to create the render pass immediately, to be sure currentRenderPass is not null when _endCurrentRenderPass() is called.
|
|
2671
2540
|
// (as in snapshot rendering mode, we may not have a call to clear() before _endCurrentRenderPass(), so lazy creation would not work)
|
|
@@ -2708,14 +2577,6 @@ export class WebGPUEngine extends ThinWebGPUEngine {
|
|
|
2708
2577
|
this._endCurrentRenderPass();
|
|
2709
2578
|
this._resolveAndGenerateMipMapsFramebuffer(texture, disableGenerateMipMaps);
|
|
2710
2579
|
this._currentRenderTarget = null;
|
|
2711
|
-
if (this.dbgVerboseLogsForFirstFrames) {
|
|
2712
|
-
if (this._count === undefined) {
|
|
2713
|
-
this._count = 0;
|
|
2714
|
-
}
|
|
2715
|
-
if (!this._count || this._count < this.dbgVerboseLogsNumFrames) {
|
|
2716
|
-
Logger.Log("frame #" + this._count + " - unBindFramebuffer - rtt name=" + texture.label + ", internalTexture.uniqueId=", texture.texture?.uniqueId);
|
|
2717
|
-
}
|
|
2718
|
-
}
|
|
2719
2580
|
this._mrtAttachments = [];
|
|
2720
2581
|
this._cacheRenderPipeline.setMRT([]);
|
|
2721
2582
|
this._cacheRenderPipeline.setMRTAttachments(this._mrtAttachments);
|