@babylonjs/core 9.12.0 → 9.13.0

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.
Files changed (127) hide show
  1. package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
  2. package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
  3. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  4. package/Cameras/Inputs/flyCameraKeyboardInput.js +9 -1
  5. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  6. package/Cameras/Inputs/flyCameraMouseInput.d.ts +2 -0
  7. package/Cameras/Inputs/flyCameraMouseInput.js +14 -2
  8. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  9. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +25 -5
  10. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  11. package/Cameras/Inputs/freeCameraMouseInput.d.ts +14 -0
  12. package/Cameras/Inputs/freeCameraMouseInput.js +26 -4
  13. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  14. package/Cameras/Inputs/freeCameraTouchInput.js +16 -5
  15. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  16. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +8 -1
  17. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  19. package/Cameras/flyCamera.pure.d.ts +8 -0
  20. package/Cameras/flyCamera.pure.js.map +1 -1
  21. package/Cameras/freeCamera.pure.d.ts +8 -0
  22. package/Cameras/freeCamera.pure.js.map +1 -1
  23. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  24. package/Cameras/geospatialCamera.pure.js +39 -14
  25. package/Cameras/geospatialCamera.pure.js.map +1 -1
  26. package/Cameras/geospatialCameraMovement.js +2 -2
  27. package/Cameras/geospatialCameraMovement.js.map +1 -1
  28. package/Cameras/index.d.ts +1 -0
  29. package/Cameras/index.js +1 -0
  30. package/Cameras/index.js.map +1 -1
  31. package/Cameras/pure.d.ts +1 -0
  32. package/Cameras/pure.js +1 -0
  33. package/Cameras/pure.js.map +1 -1
  34. package/Cameras/targetCamera.pure.d.ts +25 -0
  35. package/Cameras/targetCamera.pure.js +83 -25
  36. package/Cameras/targetCamera.pure.js.map +1 -1
  37. package/Cameras/targetCameraMovement.d.ts +56 -0
  38. package/Cameras/targetCameraMovement.js +63 -0
  39. package/Cameras/targetCameraMovement.js.map +1 -0
  40. package/Collisions/gpuPicker.d.ts +111 -4
  41. package/Collisions/gpuPicker.js +673 -106
  42. package/Collisions/gpuPicker.js.map +1 -1
  43. package/Engines/AbstractEngine/abstractEngine.scissor.d.ts +18 -0
  44. package/Engines/AbstractEngine/abstractEngine.scissor.js +2 -0
  45. package/Engines/AbstractEngine/abstractEngine.scissor.js.map +1 -0
  46. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  47. package/Engines/Native/nativeInterfaces.js.map +1 -1
  48. package/Engines/abstractEngine.pure.js +2 -2
  49. package/Engines/abstractEngine.pure.js.map +1 -1
  50. package/Engines/engine.d.ts +1 -0
  51. package/Engines/engine.js +1 -0
  52. package/Engines/engine.js.map +1 -1
  53. package/Engines/engine.pure.d.ts +0 -12
  54. package/Engines/engine.pure.js +0 -20
  55. package/Engines/engine.pure.js.map +1 -1
  56. package/Engines/nullEngine.pure.d.ts +66 -0
  57. package/Engines/nullEngine.pure.js +97 -0
  58. package/Engines/nullEngine.pure.js.map +1 -1
  59. package/Engines/pure.d.ts +1 -0
  60. package/Engines/pure.js +1 -0
  61. package/Engines/pure.js.map +1 -1
  62. package/Engines/thinEngine.scissor.d.ts +6 -0
  63. package/Engines/thinEngine.scissor.js +9 -0
  64. package/Engines/thinEngine.scissor.js.map +1 -0
  65. package/Engines/thinEngine.scissor.pure.d.ts +6 -0
  66. package/Engines/thinEngine.scissor.pure.js +24 -0
  67. package/Engines/thinEngine.scissor.pure.js.map +1 -0
  68. package/Engines/thinNativeEngine.d.ts +0 -1
  69. package/Engines/thinNativeEngine.js +0 -1
  70. package/Engines/thinNativeEngine.js.map +1 -1
  71. package/Engines/thinNativeEngine.pure.d.ts +3 -0
  72. package/Engines/thinNativeEngine.pure.js +50 -4
  73. package/Engines/thinNativeEngine.pure.js.map +1 -1
  74. package/Engines/webgpuEngine.pure.js.map +1 -1
  75. package/Loading/sceneLoader.d.ts +5 -1
  76. package/Loading/sceneLoader.js +298 -401
  77. package/Loading/sceneLoader.js.map +1 -1
  78. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
  79. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
  80. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  81. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
  82. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
  83. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  84. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +10 -3
  85. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  86. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
  87. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  88. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  89. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  90. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +77 -1
  91. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +243 -104
  92. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  93. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
  94. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +308 -0
  95. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  96. package/Meshes/geometry.js +30 -15
  97. package/Meshes/geometry.js.map +1 -1
  98. package/Meshes/mesh.pure.js +26 -14
  99. package/Meshes/mesh.pure.js.map +1 -1
  100. package/Misc/tools.pure.js +1 -1
  101. package/Misc/tools.pure.js.map +1 -1
  102. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
  103. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  104. package/Shaders/gaussianSplatting.fragment.js +17 -1
  105. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  106. package/Shaders/gaussianSplatting.vertex.js +1 -1
  107. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  108. package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
  109. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  110. package/Shaders/greasedLine.vertex.js +19 -3
  111. package/Shaders/greasedLine.vertex.js.map +1 -1
  112. package/Shaders/picking.fragment.js +39 -3
  113. package/Shaders/picking.fragment.js.map +1 -1
  114. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
  115. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  116. package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
  117. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  118. package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
  119. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  120. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  121. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  122. package/ShadersWGSL/picking.fragment.js +22 -1
  123. package/ShadersWGSL/picking.fragment.js.map +1 -1
  124. package/package.json +3 -2
  125. package/scene.pure.d.ts +12 -0
  126. package/scene.pure.js +36 -0
  127. package/scene.pure.js.map +1 -1
@@ -1,4 +1,5 @@
1
1
  /** This file must only contain pure code and pure imports */
2
+ import { RegisterBufferAlign } from "../Buffers/buffer.align.pure.js";
2
3
  import { InternalTexture } from "../Materials/Textures/internalTexture.js";
3
4
  import { DataBuffer } from "../Buffers/dataBuffer.js";
4
5
  import { Observable } from "../Misc/observable.pure.js";
@@ -132,6 +133,12 @@ export class ThinNativeEngine extends ThinEngine {
132
133
  * @internal
133
134
  */
134
135
  _initializeNativeEngine(adaptToDeviceRatio) {
136
+ // ThinNativeEngine relies on VertexBuffer.effective{Buffer,ByteOffset,ByteStride}
137
+ // (defined in Buffers/buffer.align.pure) to bind vertex attributes through
138
+ // recordVertexBuffer. Register the side effect here so the engine is usable
139
+ // on its own without callers having to remember to import the wrapper module.
140
+ // The registration is idempotent.
141
+ RegisterBufferAlign();
135
142
  this._engine = new _native.Engine({
136
143
  version: AbstractEngine.Version,
137
144
  nonFloatVertexBuffers: true,
@@ -141,7 +148,8 @@ export class ThinNativeEngine extends ThinEngine {
141
148
  this._frameStats = { gpuTimeNs: Number.NaN };
142
149
  this._boundBuffersVertexArray = null;
143
150
  this._currentDepthTest = _native.Engine.DEPTH_TEST_LEQUAL;
144
- this._stencilTest;
151
+ this._depthTestEnabled = true;
152
+ this._stencilTest = false;
145
153
  this._stencilMask = 255;
146
154
  this._stencilFunc = 519;
147
155
  this._stencilFuncRef = 0;
@@ -538,6 +546,7 @@ export class ThinNativeEngine extends ThinEngine {
538
546
  return;
539
547
  }
540
548
  // Apply states
549
+ this._flushDepthTestState();
541
550
  this._drawCalls.addCount(1, false);
542
551
  if (instancesCount) {
543
552
  this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAWINDEXEDINSTANCED);
@@ -566,6 +575,7 @@ export class ThinNativeEngine extends ThinEngine {
566
575
  return;
567
576
  }
568
577
  // Apply states
578
+ this._flushDepthTestState();
569
579
  this._drawCalls.addCount(1, false);
570
580
  if (instancesCount) {
571
581
  this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAWINSTANCED);
@@ -816,10 +826,28 @@ export class ThinNativeEngine extends ThinEngine {
816
826
  * @param enable defines the state to set
817
827
  */
818
828
  setDepthBuffer(enable) {
829
+ // Keep the shared depth-culling state in sync so that code paths which toggle
830
+ // depth testing through engine.depthCullingState.depthTest (for example
831
+ // EffectRenderer.applyEffectWrapper) are also honored on the native side. The
832
+ // native draw path does not go through the WebGL applyStates() flush, so the
833
+ // value is reconciled in _flushDepthTestState() right before each draw.
834
+ this._depthCullingState.depthTest = enable;
835
+ this._encodeDepthTest(enable);
836
+ }
837
+ _encodeDepthTest(enable) {
838
+ this._depthTestEnabled = enable;
819
839
  this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);
820
840
  this._commandBufferEncoder.encodeCommandArgAsUInt32(enable ? this._currentDepthTest : _native.Engine.DEPTH_TEST_ALWAYS);
821
841
  this._commandBufferEncoder.finishEncodingCommand();
822
842
  }
843
+ _flushDepthTestState() {
844
+ // Unlike the WebGL engine, the native engine does not call applyStates() before
845
+ // a draw, so depth-test toggles made directly on engine.depthCullingState are
846
+ // flushed here to match the cross-engine contract.
847
+ if (this._depthCullingState.depthTest !== this._depthTestEnabled) {
848
+ this._encodeDepthTest(this._depthCullingState.depthTest);
849
+ }
850
+ }
823
851
  /**
824
852
  * Gets a boolean indicating if depth writing is enabled
825
853
  * @returns the current depth writing state
@@ -877,9 +905,13 @@ export class ThinNativeEngine extends ThinEngine {
877
905
  break;
878
906
  }
879
907
  this._currentDepthTest = nativeDepthFunc;
880
- this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);
881
- this._commandBufferEncoder.encodeCommandArgAsUInt32(this._currentDepthTest);
882
- this._commandBufferEncoder.finishEncodingCommand();
908
+ // Route through _encodeDepthTest so the tracked _depthTestEnabled state stays in
909
+ // sync with the encoded command. Because COMMAND_SETDEPTHTEST conflates the
910
+ // compare function and the enable bit (DEPTH_TEST_ALWAYS == disabled), encoding
911
+ // the new function directly here would silently re-enable depth testing while
912
+ // depth testing is logically disabled; _encodeDepthTest honors the current
913
+ // depthCullingState.depthTest and only emits the new function when enabled.
914
+ this._encodeDepthTest(this._depthCullingState.depthTest);
883
915
  }
884
916
  /**
885
917
  * Enable or disable depth writing
@@ -1555,6 +1587,13 @@ export class ThinNativeEngine extends ThinEngine {
1555
1587
  internalTexture.baseHeight = this._engine.getTextureHeight(texture);
1556
1588
  internalTexture.width = internalTexture.baseWidth;
1557
1589
  internalTexture.height = internalTexture.baseHeight;
1590
+ if (this._engine.getTextureLayerCount) {
1591
+ const layerCount = this._engine.getTextureLayerCount(texture);
1592
+ if (layerCount > 1) {
1593
+ internalTexture.is2DArray = true;
1594
+ internalTexture.baseDepth = internalTexture.depth = layerCount;
1595
+ }
1596
+ }
1558
1597
  internalTexture.isReady = true;
1559
1598
  internalTexture.useMipMaps = hasMipMaps;
1560
1599
  this.updateTextureSamplingMode(samplingMode, internalTexture);
@@ -1589,6 +1628,13 @@ export class ThinNativeEngine extends ThinEngine {
1589
1628
  if (newWidth !== internalTexture.baseWidth || newHeight !== internalTexture.baseHeight) {
1590
1629
  throw new Error(`updateWrappedNativeTexture: new handle dimensions (${newWidth}x${newHeight}) must match the wrapped texture's dimensions (${internalTexture.baseWidth}x${internalTexture.baseHeight}).`);
1591
1630
  }
1631
+ if (this._engine.getTextureLayerCount) {
1632
+ const newLayerCount = this._engine.getTextureLayerCount(texture);
1633
+ const oldLayerCount = internalTexture.is2DArray ? internalTexture.depth : 1;
1634
+ if (newLayerCount !== oldLayerCount) {
1635
+ throw new Error(`updateWrappedNativeTexture: new handle layer count (${newLayerCount}) must match the wrapped texture's layer count (${oldLayerCount}).`);
1636
+ }
1637
+ }
1592
1638
  // Pre-validate before mutating any state so a thrown precondition leaves the InternalTexture untouched.
1593
1639
  // Note: rtWrapper.texture only returns _textures[0]; walk every attachment to catch the multi-RT case where
1594
1640
  // the wrapped texture is at index > 0.