@onerjs/core 8.55.9 → 8.56.1

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 (187) hide show
  1. package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
  2. package/AudioV2/webAudio/webAudioEngine.js +6 -5
  3. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  4. package/Culling/Helper/boundingInfoHelper.js +8 -4
  5. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  6. package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +5 -1
  7. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +7 -3
  8. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -1
  9. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.d.ts +6 -0
  10. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js +16 -0
  11. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js.map +1 -0
  12. package/Engines/AbstractEngine/pure.d.ts +1 -0
  13. package/Engines/AbstractEngine/pure.js +1 -0
  14. package/Engines/AbstractEngine/pure.js.map +1 -1
  15. package/Engines/IDrawContext.d.ts +2 -0
  16. package/Engines/IDrawContext.js.map +1 -1
  17. package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
  18. package/Engines/WebGPU/webgpuDrawContext.js +15 -0
  19. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  20. package/Engines/abstractEngine.pure.js +2 -2
  21. package/Engines/abstractEngine.pure.js.map +1 -1
  22. package/Engines/engine.d.ts +11 -3
  23. package/Engines/webgpuEngine.d.ts +1 -0
  24. package/Engines/webgpuEngine.js +1 -0
  25. package/Engines/webgpuEngine.js.map +1 -1
  26. package/Engines/webgpuEngine.pure.d.ts +10 -0
  27. package/Engines/webgpuEngine.pure.js +15 -1
  28. package/Engines/webgpuEngine.pure.js.map +1 -1
  29. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +2 -5
  30. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  31. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +2 -0
  32. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  33. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1 -0
  34. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  35. package/Materials/Node/Blocks/powBlock.pure.js +2 -1
  36. package/Materials/Node/Blocks/powBlock.pure.js.map +1 -1
  37. package/Materials/Node/Blocks/triPlanarBlock.pure.js +14 -12
  38. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  39. package/Materials/Node/nodeMaterial.pure.d.ts +1 -0
  40. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  41. package/Materials/PBR/openpbrMaterial.pure.d.ts +1 -0
  42. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -0
  43. package/Materials/Textures/index.d.ts +1 -0
  44. package/Materials/Textures/index.js +1 -0
  45. package/Materials/Textures/index.js.map +1 -1
  46. package/Materials/drawWrapper.js +3 -0
  47. package/Materials/drawWrapper.js.map +1 -1
  48. package/Materials/imageProcessingConfiguration.defines.d.ts +3 -0
  49. package/Materials/imageProcessingConfiguration.defines.js +2 -0
  50. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  51. package/Materials/imageProcessingConfiguration.functions.js +3 -0
  52. package/Materials/imageProcessingConfiguration.functions.js.map +1 -1
  53. package/Materials/imageProcessingConfiguration.pure.d.ts +58 -0
  54. package/Materials/imageProcessingConfiguration.pure.js +123 -2
  55. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  56. package/Materials/standardMaterial.pure.d.ts +1 -0
  57. package/Materials/uniformBuffer.d.ts +29 -0
  58. package/Materials/uniformBuffer.js +146 -0
  59. package/Materials/uniformBuffer.js.map +1 -1
  60. package/Maths/colorTemperature.functions.d.ts +29 -0
  61. package/Maths/colorTemperature.functions.js +196 -0
  62. package/Maths/colorTemperature.functions.js.map +1 -0
  63. package/Maths/index.d.ts +1 -0
  64. package/Maths/index.js +1 -0
  65. package/Maths/index.js.map +1 -1
  66. package/Maths/pure.d.ts +1 -0
  67. package/Maths/pure.js +1 -0
  68. package/Maths/pure.js.map +1 -1
  69. package/Misc/observable.pure.js +1 -3
  70. package/Misc/observable.pure.js.map +1 -1
  71. package/Misc/tools.pure.js +1 -1
  72. package/Misc/tools.pure.js.map +1 -1
  73. package/PostProcesses/imageProcessingPostProcess.d.ts +41 -1
  74. package/PostProcesses/imageProcessingPostProcess.js +41 -1
  75. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  76. package/PostProcesses/thinImageProcessingPostProcess.d.ts +50 -0
  77. package/PostProcesses/thinImageProcessingPostProcess.js +65 -0
  78. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  79. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.d.ts +12 -0
  80. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js +22 -0
  81. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js.map +1 -0
  82. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -0
  83. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +39 -0
  84. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  85. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +2 -4
  86. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  87. package/Rendering/IBLShadows/pure.d.ts +1 -0
  88. package/Rendering/IBLShadows/pure.js +1 -0
  89. package/Rendering/IBLShadows/pure.js.map +1 -1
  90. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +11 -0
  91. package/Rendering/fluidRenderer/fluidRenderingObject.js +36 -14
  92. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  93. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +5 -0
  94. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +16 -3
  95. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  96. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +5 -0
  97. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +12 -0
  98. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  99. package/Rendering/iblCdfGenerator.js +10 -1
  100. package/Rendering/iblCdfGenerator.js.map +1 -1
  101. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  102. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  103. package/Shaders/ShadersInclude/helperFunctions.js +2 -2
  104. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  105. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +3 -0
  106. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  107. package/Shaders/ShadersInclude/imageProcessingFunctions.js +3 -0
  108. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  109. package/Shaders/ShadersInclude/openpbrDirectLighting.js +34 -4
  110. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  111. package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -2
  112. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  113. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  114. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  115. package/Shaders/fluidRenderingParticleDepth.vertex.js +7 -1
  116. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  117. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +7 -1
  118. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  119. package/Shaders/fluidRenderingParticleThickness.vertex.js +7 -1
  120. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  121. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -0
  122. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  123. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +3 -0
  124. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  125. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +35 -5
  126. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  127. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +1 -1
  128. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
  129. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +8 -2
  130. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  131. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  132. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  133. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +16 -4
  134. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  135. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +15 -3
  136. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  137. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -3
  138. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  139. package/XR/features/Layers/WebXRCompositionLayer.d.ts +52 -0
  140. package/XR/features/Layers/WebXRCompositionLayer.js +80 -0
  141. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  142. package/XR/features/WebXRControllerPointerSelection.pure.js +2 -1
  143. package/XR/features/WebXRControllerPointerSelection.pure.js.map +1 -1
  144. package/XR/features/WebXRControllerTeleportation.pure.js +2 -1
  145. package/XR/features/WebXRControllerTeleportation.pure.js.map +1 -1
  146. package/XR/features/WebXRDepthSensing.pure.d.ts +21 -0
  147. package/XR/features/WebXRDepthSensing.pure.js +42 -0
  148. package/XR/features/WebXRDepthSensing.pure.js.map +1 -1
  149. package/XR/features/WebXRHandTracking.pure.js +2 -0
  150. package/XR/features/WebXRHandTracking.pure.js.map +1 -1
  151. package/XR/features/WebXRLayers.pure.d.ts +12 -0
  152. package/XR/features/WebXRLayers.pure.js +31 -1
  153. package/XR/features/WebXRLayers.pure.js.map +1 -1
  154. package/XR/features/WebXRTrackedSources.d.ts +5 -0
  155. package/XR/features/WebXRTrackedSources.js +8 -0
  156. package/XR/features/WebXRTrackedSources.js.map +1 -0
  157. package/XR/features/WebXRTrackedSources.pure.d.ts +70 -0
  158. package/XR/features/WebXRTrackedSources.pure.js +153 -0
  159. package/XR/features/WebXRTrackedSources.pure.js.map +1 -0
  160. package/XR/features/index.d.ts +1 -0
  161. package/XR/features/index.js +1 -0
  162. package/XR/features/index.js.map +1 -1
  163. package/XR/features/pure.d.ts +1 -0
  164. package/XR/features/pure.js +1 -0
  165. package/XR/features/pure.js.map +1 -1
  166. package/XR/motionController/webXRAbstractMotionController.d.ts +53 -1
  167. package/XR/motionController/webXRAbstractMotionController.js +61 -0
  168. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  169. package/XR/webXRDefaultExperience.js +8 -4
  170. package/XR/webXRDefaultExperience.js.map +1 -1
  171. package/XR/webXRExperienceHelper.js +86 -44
  172. package/XR/webXRExperienceHelper.js.map +1 -1
  173. package/XR/webXRFeaturesManager.d.ts +9 -0
  174. package/XR/webXRFeaturesManager.js +4 -0
  175. package/XR/webXRFeaturesManager.js.map +1 -1
  176. package/XR/webXRGraphicsBinding.d.ts +29 -0
  177. package/XR/webXRGraphicsBinding.js +40 -0
  178. package/XR/webXRGraphicsBinding.js.map +1 -1
  179. package/XR/webXRInputSource.js +1 -1
  180. package/XR/webXRInputSource.js.map +1 -1
  181. package/XR/webXRLayerWrapper.d.ts +7 -5
  182. package/XR/webXRLayerWrapper.js +10 -7
  183. package/XR/webXRLayerWrapper.js.map +1 -1
  184. package/XR/webXRSessionManager.d.ts +45 -0
  185. package/XR/webXRSessionManager.js +174 -29
  186. package/XR/webXRSessionManager.js.map +1 -1
  187. package/package.json +1 -1
@@ -41,6 +41,7 @@ export class UniformBuffer {
41
41
  this._uniformArraySizes = {};
42
42
  this._uniformLocationPointer = 0;
43
43
  this._needSync = false;
44
+ this._dataGeneration = 0;
44
45
  this._trackUBOsInFrame = false;
45
46
  if ((trackUBOsInFrame === undefined && this._engine._features.trackUbosInFrame) || trackUBOsInFrame === true) {
46
47
  this._buffers = [];
@@ -49,6 +50,7 @@ export class UniformBuffer {
49
50
  this._createBufferOnWrite = false;
50
51
  this._currentFrameId = 0;
51
52
  this._trackUBOsInFrame = true;
53
+ this._resetOwnerSlots();
52
54
  }
53
55
  if (this._noUBO) {
54
56
  this.updateMatrix3x3 = this._updateMatrix3x3ForEffect;
@@ -328,6 +330,7 @@ export class UniformBuffer {
328
330
  // See spec, alignment must be filled as a vec4
329
331
  this._fillAlignment(4);
330
332
  this._bufferData = new Float32Array(this._data);
333
+ this._dataGeneration++;
331
334
  this._rebuild();
332
335
  this._needSync = true;
333
336
  }
@@ -368,9 +371,23 @@ export class UniformBuffer {
368
371
  if (this._trackUBOsInFrame) {
369
372
  this._buffers = [];
370
373
  this._currentFrameId = 0;
374
+ this._resetOwnerSlots();
371
375
  }
372
376
  this._rebuild();
373
377
  }
378
+ _resetOwnerSlots() {
379
+ if (this._ownerListsBySlot) {
380
+ for (const list of this._ownerListsBySlot.values()) {
381
+ this._removeOwnerBacklink(list);
382
+ }
383
+ }
384
+ this._ownerListsBySlot = new Map();
385
+ this._slotByOwner = new WeakMap();
386
+ this._slotFrameId = [];
387
+ this._ownerCount = 0;
388
+ this._freeSlots = [];
389
+ this._slotGeneration = [];
390
+ }
374
391
  /** @internal */
375
392
  get _numBuffers() {
376
393
  return this._buffers.length;
@@ -436,6 +453,122 @@ export class UniformBuffer {
436
453
  this._needSync = false;
437
454
  this._createBufferOnWrite = this._trackUBOsInFrame;
438
455
  }
456
+ /**
457
+ * Flushes the current uniform values into the GPU buffer owned by the draw context.
458
+ * Invariant: `_buffers[i][1]` (the CPU shadow) always holds what the GPU buffer of slot i contains.
459
+ * @param owner the draw context on behalf of which the update is done
460
+ * @internal
461
+ */
462
+ _updateOwnerKeyed(owner) {
463
+ if (this._noUBO || !this._trackUBOsInFrame) {
464
+ this.update();
465
+ return;
466
+ }
467
+ if (!this._buffer) {
468
+ this.create(); // _rebuild pushes slot 0, created from _bufferData, with a shadow copy of it
469
+ }
470
+ this._checkNewFrame();
471
+ let idx = this._slotByOwner.get(owner);
472
+ if (idx === undefined) {
473
+ if (this._ownerCount === 0 && this._buffers.length === 1 && this._freeSlots.length === 0) {
474
+ // the slot create() made and nobody has owned yet: hand it to the first owner instead of leaving it unused.
475
+ // (Once an owner has released it, it is in _freeSlots and must be taken from there, or two owners could share it.)
476
+ idx = 0;
477
+ }
478
+ else {
479
+ idx = this._takeFreeSlot(true);
480
+ }
481
+ this._slotByOwner.set(owner, idx);
482
+ this._ownerCount++;
483
+ if (!owner._uniformBuffersWithOwnedSlot) {
484
+ owner._uniformBuffersWithOwnedSlot = [];
485
+ }
486
+ owner._uniformBuffersWithOwnedSlot.push(this);
487
+ this._ownerListsBySlot.set(idx, owner._uniformBuffersWithOwnedSlot);
488
+ }
489
+ if (this._slotGeneration[idx] === this._dataGeneration) {
490
+ // The slot was last flushed with exactly the current data and nothing has been written since: nothing to
491
+ // compare, nothing to upload, and no same-frame conflict is possible either (same bytes).
492
+ this._bufferIndex = idx;
493
+ this._buffer = this._buffers[idx][0];
494
+ this.bindUniformBuffer();
495
+ this._slotFrameId[idx] = this._currentFrameId;
496
+ this._needSync = false;
497
+ this._createBufferOnWrite = false;
498
+ return;
499
+ }
500
+ const owned = this._buffers[idx][1];
501
+ if (this._slotFrameId[idx] === this._currentFrameId && owned && !this._buffersEqual(this._bufferData, owned)) {
502
+ // The same context flushes a second time in the same frame with different values: the GPU has not consumed the
503
+ // first values yet, so they must not be overwritten. Use a slot nobody owns for this flush.
504
+ idx = this._takeFreeSlot(false);
505
+ }
506
+ this._bufferIndex = idx;
507
+ this._buffer = this._buffers[idx][0];
508
+ this.bindUniformBuffer();
509
+ const shadow = this._buffers[idx][1];
510
+ if (!shadow || !this._buffersEqual(this._bufferData, shadow)) {
511
+ if (shadow) {
512
+ this._copyBuffer(this._bufferData, shadow);
513
+ }
514
+ this._bufferUpdatedLastFrame = true;
515
+ this._engine.updateUniformBuffer(this._buffer, this._bufferData);
516
+ }
517
+ this._slotFrameId[idx] = this._currentFrameId;
518
+ this._slotGeneration[idx] = this._dataGeneration;
519
+ this._needSync = false;
520
+ this._createBufferOnWrite = false; // slots are keyed on the owner, the updateXXX methods must never switch buffer
521
+ }
522
+ /**
523
+ * Gets a slot that is not owned by any draw context and has not been flushed in the current frame, creating one if needed.
524
+ * @param takeOwnership true to remove the slot from the free list (it is going to be owned by a context)
525
+ * @returns the slot index
526
+ */
527
+ _takeFreeSlot(takeOwnership) {
528
+ for (let i = 0; i < this._freeSlots.length; ++i) {
529
+ const idx = this._freeSlots[i];
530
+ if (this._slotFrameId[idx] !== this._currentFrameId) {
531
+ if (takeOwnership) {
532
+ this._freeSlots[i] = this._freeSlots[this._freeSlots.length - 1];
533
+ this._freeSlots.pop();
534
+ }
535
+ return idx;
536
+ }
537
+ }
538
+ this._rebuild();
539
+ const idx = this._buffers.length - 1;
540
+ if (!takeOwnership) {
541
+ this._freeSlots.push(idx);
542
+ }
543
+ return idx;
544
+ }
545
+ /**
546
+ * Releases the slot owned by a draw context (called when the context is disposed), so that another context can reuse it.
547
+ * @param owner the draw context
548
+ * @internal
549
+ */
550
+ _releaseOwnerSlot(owner) {
551
+ const idx = this._slotByOwner?.get(owner);
552
+ if (idx === undefined) {
553
+ return;
554
+ }
555
+ this._slotByOwner.delete(owner);
556
+ const list = this._ownerListsBySlot.get(idx);
557
+ if (list) {
558
+ this._removeOwnerBacklink(list);
559
+ this._ownerListsBySlot.delete(idx);
560
+ }
561
+ this._ownerCount--;
562
+ // Keep _slotFrameId: a draw encoded earlier this frame may still need these bytes.
563
+ this._freeSlots.push(idx);
564
+ }
565
+ _removeOwnerBacklink(list) {
566
+ const index = list.indexOf(this);
567
+ if (index !== -1) {
568
+ list[index] = list[list.length - 1];
569
+ list.pop();
570
+ }
571
+ }
439
572
  _createNewBuffer() {
440
573
  if (this._bufferIndex + 1 < this._buffers.length) {
441
574
  this._bufferIndex++;
@@ -502,12 +635,16 @@ export class UniformBuffer {
502
635
  }
503
636
  }
504
637
  this._needSync = this._needSync || changed;
638
+ if (changed) {
639
+ this._dataGeneration++;
640
+ }
505
641
  }
506
642
  else {
507
643
  // No cache for dynamic
508
644
  for (let i = 0; i < size; i++) {
509
645
  this._bufferData[location + i] = data[i];
510
646
  }
647
+ this._dataGeneration++;
511
648
  }
512
649
  }
513
650
  /**
@@ -550,12 +687,16 @@ export class UniformBuffer {
550
687
  }
551
688
  }
552
689
  this._needSync = this._needSync || changed;
690
+ if (changed) {
691
+ this._dataGeneration++;
692
+ }
553
693
  }
554
694
  else {
555
695
  // No cache for dynamic
556
696
  for (let i = 0; i < size; i++) {
557
697
  this._bufferData[location + i] = data[i];
558
698
  }
699
+ this._dataGeneration++;
559
700
  }
560
701
  }
561
702
  _cacheMatrix(name, matrix) {
@@ -875,6 +1016,7 @@ export class UniformBuffer {
875
1016
  // Note that if _buffers.length == 1, we don't copy _bufferData into _buffers[_bufferIndex][1] (see the update() method), and _bufferData already contains the right data
876
1017
  if (this._buffers.length > 1 && this._buffers[b][1]) {
877
1018
  this._bufferData.set(this._buffers[b][1]);
1019
+ this._dataGeneration++;
878
1020
  }
879
1021
  this._valueCache = {};
880
1022
  // The following line prevents the current buffer (_buffer / _bufferIndex) from being updated during subsequent calls to updateXXX() due to a call to _checkNewFrame()
@@ -910,10 +1052,14 @@ export class UniformBuffer {
910
1052
  uniformBuffers.pop();
911
1053
  }
912
1054
  if (this._trackUBOsInFrame && this._buffers) {
1055
+ this._resetOwnerSlots();
913
1056
  for (let i = 0; i < this._buffers.length; ++i) {
914
1057
  const buffer = this._buffers[i][0];
915
1058
  this._engine._releaseBuffer(buffer);
916
1059
  }
1060
+ this._buffers = [];
1061
+ this._buffer = null;
1062
+ this._bufferIndex = -1;
917
1063
  }
918
1064
  else if (this._buffer && this._engine._releaseBuffer(this._buffer)) {
919
1065
  this._buffer = null;