@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60

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 (273) hide show
  1. package/Buffers/buffer.js +3 -2
  2. package/Buffers/buffer.js.map +1 -1
  3. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  4. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  5. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  6. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  7. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  8. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  9. package/Cameras/camera.d.ts +4 -0
  10. package/Cameras/camera.js +2 -0
  11. package/Cameras/camera.js.map +1 -1
  12. package/Culling/boundingBox.d.ts +7 -1
  13. package/Culling/boundingBox.js +4 -0
  14. package/Culling/boundingBox.js.map +1 -1
  15. package/DeviceInput/Helpers/eventFactory.js +1 -2
  16. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  17. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  18. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  19. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  20. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  21. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  22. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  23. package/Engines/Extensions/engine.alpha.js +6 -6
  24. package/Engines/Extensions/engine.alpha.js.map +1 -1
  25. package/Engines/Extensions/engine.renderTarget.js +1 -1
  26. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  27. package/Engines/IDrawContext.d.ts +4 -0
  28. package/Engines/IDrawContext.js.map +1 -1
  29. package/Engines/IMaterialContext.d.ts +1 -0
  30. package/Engines/IMaterialContext.js.map +1 -1
  31. package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
  32. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  33. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
  34. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  36. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  37. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  38. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  39. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  40. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  41. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  42. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  43. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  44. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  45. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
  46. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  47. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  48. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  49. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  50. package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
  51. package/Engines/WebGPU/webgpuDrawContext.js +75 -1
  52. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  53. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
  54. package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
  55. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  56. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  57. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  58. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  59. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  60. package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
  61. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  62. package/Engines/constants.d.ts +40 -7
  63. package/Engines/constants.js +40 -7
  64. package/Engines/constants.js.map +1 -1
  65. package/Engines/engine.d.ts +37 -2
  66. package/Engines/engine.js +68 -0
  67. package/Engines/engine.js.map +1 -1
  68. package/Engines/engineFeatures.d.ts +2 -0
  69. package/Engines/engineFeatures.js.map +1 -1
  70. package/Engines/nativeEngine.js +19 -13
  71. package/Engines/nativeEngine.js.map +1 -1
  72. package/Engines/nullEngine.js +1 -0
  73. package/Engines/nullEngine.js.map +1 -1
  74. package/Engines/thinEngine.d.ts +8 -2
  75. package/Engines/thinEngine.js +10 -5
  76. package/Engines/thinEngine.js.map +1 -1
  77. package/Engines/webgpuEngine.d.ts +28 -7
  78. package/Engines/webgpuEngine.js +177 -58
  79. package/Engines/webgpuEngine.js.map +1 -1
  80. package/Inputs/scene.inputManager.js +2 -3
  81. package/Inputs/scene.inputManager.js.map +1 -1
  82. package/Layers/effectLayer.d.ts +0 -2
  83. package/Layers/effectLayer.js +12 -11
  84. package/Layers/effectLayer.js.map +1 -1
  85. package/Layers/effectLayerSceneComponent.js +5 -0
  86. package/Layers/effectLayerSceneComponent.js.map +1 -1
  87. package/Layers/glowLayer.js +2 -0
  88. package/Layers/glowLayer.js.map +1 -1
  89. package/Layers/highlightLayer.js +2 -0
  90. package/Layers/highlightLayer.js.map +1 -1
  91. package/LensFlares/lensFlare.d.ts +3 -0
  92. package/LensFlares/lensFlare.js +5 -0
  93. package/LensFlares/lensFlare.js.map +1 -1
  94. package/LensFlares/lensFlareSystem.d.ts +2 -1
  95. package/LensFlares/lensFlareSystem.js +15 -12
  96. package/LensFlares/lensFlareSystem.js.map +1 -1
  97. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  98. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  99. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  100. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  101. package/Lights/Shadows/shadowGenerator.js +8 -14
  102. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  103. package/Lights/light.js +3 -0
  104. package/Lights/light.js.map +1 -1
  105. package/Loading/Plugins/babylonFileLoader.js +3 -0
  106. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  107. package/Materials/Background/backgroundMaterial.js +8 -11
  108. package/Materials/Background/backgroundMaterial.js.map +1 -1
  109. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  110. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
  112. package/Materials/Node/Blocks/cloudBlock.js +27 -8
  113. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  115. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  116. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  118. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  119. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  120. package/Materials/Node/nodeMaterial.js +4 -4
  121. package/Materials/Node/nodeMaterial.js.map +1 -1
  122. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  123. package/Materials/PBR/pbrBaseMaterial.js +10 -5
  124. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  125. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  126. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  127. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  128. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  129. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  130. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  131. package/Materials/Textures/baseTexture.d.ts +2 -0
  132. package/Materials/Textures/baseTexture.js +2 -0
  133. package/Materials/Textures/baseTexture.js.map +1 -1
  134. package/Materials/Textures/renderTargetTexture.d.ts +27 -0
  135. package/Materials/Textures/renderTargetTexture.js +127 -14
  136. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  137. package/Materials/Textures/texture.js +11 -4
  138. package/Materials/Textures/texture.js.map +1 -1
  139. package/Materials/drawWrapper.d.ts +2 -1
  140. package/Materials/drawWrapper.js +10 -1
  141. package/Materials/drawWrapper.js.map +1 -1
  142. package/Materials/material.d.ts +3 -1
  143. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  144. package/Materials/material.detailMapConfiguration.js +2 -2
  145. package/Materials/material.detailMapConfiguration.js.map +1 -1
  146. package/Materials/material.js +18 -9
  147. package/Materials/material.js.map +1 -1
  148. package/Materials/materialHelper.js +3 -1
  149. package/Materials/materialHelper.js.map +1 -1
  150. package/Materials/pushMaterial.js +1 -1
  151. package/Materials/pushMaterial.js.map +1 -1
  152. package/Materials/shaderMaterial.d.ts +0 -1
  153. package/Materials/shaderMaterial.js +3 -4
  154. package/Materials/shaderMaterial.js.map +1 -1
  155. package/Materials/shadowDepthWrapper.d.ts +4 -4
  156. package/Materials/shadowDepthWrapper.js +16 -15
  157. package/Materials/shadowDepthWrapper.js.map +1 -1
  158. package/Materials/standardMaterial.d.ts +1 -0
  159. package/Materials/standardMaterial.js +10 -5
  160. package/Materials/standardMaterial.js.map +1 -1
  161. package/Materials/uniformBuffer.d.ts +10 -2
  162. package/Materials/uniformBuffer.js +17 -11
  163. package/Materials/uniformBuffer.js.map +1 -1
  164. package/Meshes/abstractMesh.d.ts +13 -0
  165. package/Meshes/abstractMesh.js +22 -2
  166. package/Meshes/abstractMesh.js.map +1 -1
  167. package/Meshes/geometry.d.ts +7 -0
  168. package/Meshes/geometry.js +16 -0
  169. package/Meshes/geometry.js.map +1 -1
  170. package/Meshes/linesMesh.js +1 -1
  171. package/Meshes/linesMesh.js.map +1 -1
  172. package/Meshes/mesh.js +15 -0
  173. package/Meshes/mesh.js.map +1 -1
  174. package/Meshes/subMesh.d.ts +10 -9
  175. package/Meshes/subMesh.js +44 -43
  176. package/Meshes/subMesh.js.map +1 -1
  177. package/Misc/basis.d.ts +3 -2
  178. package/Misc/basis.js +16 -15
  179. package/Misc/basis.js.map +1 -1
  180. package/Misc/environmentTextureTools.js +1 -0
  181. package/Misc/environmentTextureTools.js.map +1 -1
  182. package/Misc/rgbdTextureTools.js +1 -0
  183. package/Misc/rgbdTextureTools.js.map +1 -1
  184. package/Misc/sceneSerializer.js +17 -17
  185. package/Misc/sceneSerializer.js.map +1 -1
  186. package/Misc/textureTools.js +2 -0
  187. package/Misc/textureTools.js.map +1 -1
  188. package/Particles/gpuParticleSystem.d.ts +5 -1
  189. package/Particles/gpuParticleSystem.js +31 -5
  190. package/Particles/gpuParticleSystem.js.map +1 -1
  191. package/Particles/particleSystem.d.ts +5 -1
  192. package/Particles/particleSystem.js +35 -5
  193. package/Particles/particleSystem.js.map +1 -1
  194. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
  195. package/Physics/Plugins/ammoJSPlugin.js +10 -0
  196. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  197. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  198. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  199. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  200. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  201. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  202. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  203. package/PostProcesses/bloomMergePostProcess.js +1 -0
  204. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  205. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  206. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  207. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  208. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  209. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  210. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  211. package/PostProcesses/postProcess.d.ts +6 -0
  212. package/PostProcesses/postProcess.js +9 -1
  213. package/PostProcesses/postProcess.js.map +1 -1
  214. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
  215. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  216. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  217. package/PostProcesses/tonemapPostProcess.js +3 -2
  218. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  219. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  220. package/Rendering/boundingBoxRenderer.js +46 -14
  221. package/Rendering/boundingBoxRenderer.js.map +1 -1
  222. package/Rendering/depthPeelingRenderer.d.ts +20 -1
  223. package/Rendering/depthPeelingRenderer.js +125 -32
  224. package/Rendering/depthPeelingRenderer.js.map +1 -1
  225. package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
  226. package/Rendering/depthPeelingSceneComponent.js +16 -0
  227. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  228. package/Rendering/depthRenderer.d.ts +9 -2
  229. package/Rendering/depthRenderer.js +77 -43
  230. package/Rendering/depthRenderer.js.map +1 -1
  231. package/Rendering/depthRendererSceneComponent.js +0 -1
  232. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  233. package/Rendering/edgesRenderer.d.ts +2 -0
  234. package/Rendering/edgesRenderer.js +11 -0
  235. package/Rendering/edgesRenderer.js.map +1 -1
  236. package/Rendering/geometryBufferRenderer.js +4 -4
  237. package/Rendering/geometryBufferRenderer.js.map +1 -1
  238. package/Rendering/outlineRenderer.d.ts +5 -4
  239. package/Rendering/outlineRenderer.js +24 -19
  240. package/Rendering/outlineRenderer.js.map +1 -1
  241. package/Rendering/prePassRenderer.js +3 -2
  242. package/Rendering/prePassRenderer.js.map +1 -1
  243. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  244. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  245. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  246. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  247. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  248. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  249. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  250. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  251. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  252. package/Shaders/ShadersInclude/oitFragment.js +1 -1
  253. package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
  254. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  255. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  256. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  257. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  258. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  259. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  260. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  261. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  262. package/Sprites/spriteManager.d.ts +3 -1
  263. package/Sprites/spriteManager.js +16 -5
  264. package/Sprites/spriteManager.js.map +1 -1
  265. package/Sprites/spriteRenderer.d.ts +2 -0
  266. package/Sprites/spriteRenderer.js +26 -0
  267. package/Sprites/spriteRenderer.js.map +1 -1
  268. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  269. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  270. package/package.json +16 -1
  271. package/scene.d.ts +18 -4
  272. package/scene.js +100 -41
  273. package/scene.js.map +1 -1
@@ -1,7 +1,7 @@
1
1
  import { Nullable, DataArray, IndicesArray, Immutable } from "../types";
2
2
  import { Engine } from "../Engines/engine";
3
3
  import { InstancingAttributeInfo } from "../Engines/instancingAttributeInfo";
4
- import { InternalTexture } from "../Materials/Textures/internalTexture";
4
+ import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture";
5
5
  import { IEffectCreationOptions, Effect } from "../Materials/effect";
6
6
  import { EffectFallbacks } from "../Materials/effectFallbacks";
7
7
  import { VertexBuffer } from "../Buffers/buffer";
@@ -29,6 +29,7 @@ import { Observable } from "../Misc/observable";
29
29
  import { TwgslOptions } from "./WebGPU/webgpuTintWASM";
30
30
  import { ExternalTexture } from "../Materials/Textures/externalTexture";
31
31
  import { ShaderLanguage } from "../Materials/shaderLanguage";
32
+ import { InternalTextureCreationOptions, TextureSize } from "../Materials/Textures/textureCreationOptions";
32
33
  declare type RenderTargetWrapper = import("./renderTargetWrapper").RenderTargetWrapper;
33
34
  /**
34
35
  * Options to load the associated Glslang library
@@ -194,6 +195,8 @@ export declare class WebGPUEngine extends Engine {
194
195
  _counters: {
195
196
  numEnableEffects: number;
196
197
  numEnableDrawWrapper: number;
198
+ numBundleCreationNonCompatMode: number;
199
+ numBundleReuseNonCompatMode: number;
197
200
  };
198
201
  /**
199
202
  * Counters from last frame
@@ -201,6 +204,8 @@ export declare class WebGPUEngine extends Engine {
201
204
  readonly countersLastFrame: {
202
205
  numEnableEffects: number;
203
206
  numEnableDrawWrapper: number;
207
+ numBundleCreationNonCompatMode: number;
208
+ numBundleReuseNonCompatMode: number;
204
209
  };
205
210
  /**
206
211
  * Max number of uncaptured error messages to log
@@ -230,12 +235,15 @@ export declare class WebGPUEngine extends Engine {
230
235
  /** @hidden */
231
236
  _pendingDebugCommands: Array<[string, Nullable<string>]>;
232
237
  private _bundleList;
238
+ private _bundleListRenderTarget;
233
239
  /** @hidden */
234
240
  _onAfterUnbindFrameBufferObservable: Observable<WebGPUEngine>;
241
+ private _defaultDrawContext;
235
242
  private _defaultMaterialContext;
236
243
  /** @hidden */
244
+ _currentDrawContext: WebGPUDrawContext;
245
+ /** @hidden */
237
246
  _currentMaterialContext: WebGPUMaterialContext;
238
- private _currentDrawContext;
239
247
  private _currentOverrideVertexBuffers;
240
248
  private _currentIndexBuffer;
241
249
  private __colorWrite;
@@ -324,12 +332,12 @@ export declare class WebGPUEngine extends Engine {
324
332
  version: string;
325
333
  };
326
334
  /**
327
- * True to be in compatibility mode, meaning rendering in the same way than OpenGL.
328
- * Setting the property to false will improve performances, but can lead to rendering artifacts.
329
- * See @TODO WEBGPU DOC PAGE
330
- * @hidden
335
+ * (WebGPU only) True (default) to be in compatibility mode, meaning rendering all existing scenes without artifacts (same rendering than WebGL).
336
+ * Setting the property to false will improve performances but may not work in some scenes if some precautions are not taken.
337
+ * See @TODO WEBGPU DOC PAGE for more details
331
338
  */
332
- compatibilityMode: boolean;
339
+ get compatibilityMode(): boolean;
340
+ set compatibilityMode(mode: boolean);
333
341
  /** @hidden */
334
342
  get currentSampleCount(): number;
335
343
  /**
@@ -544,6 +552,16 @@ export declare class WebGPUEngine extends Engine {
544
552
  /** @hidden */
545
553
  _getRGBABufferInternalSizedFormat(type: number, format?: number): number;
546
554
  updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void;
555
+ /**
556
+ * Creates an internal texture without binding it to a framebuffer
557
+ * @hidden
558
+ * @param size defines the size of the texture
559
+ * @param options defines the options used to create the texture
560
+ * @param delayGPUTextureCreation true to delay the texture creation the first time it is really needed. false to create it right away
561
+ * @param source source type of the texture
562
+ * @returns a new render target texture stored in an InternalTexture
563
+ */
564
+ _createInternalTexture(size: TextureSize, options: boolean | InternalTextureCreationOptions, delayGPUTextureCreation?: boolean, source?: InternalTextureSource): InternalTexture;
547
565
  /**
548
566
  * Usually called from Texture.ts.
549
567
  * Passed information to create a hardware texture
@@ -715,6 +733,7 @@ export declare class WebGPUEngine extends Engine {
715
733
  * @param zOffsetUnits defines the value to apply to zOffsetUnits (0 by default)
716
734
  */
717
735
  setState(culling: boolean, zOffset?: number, force?: boolean, reverseSide?: boolean, cullBackFaces?: boolean, stencil?: IStencilState, zOffsetUnits?: number): void;
736
+ private _applyRenderPassChanges;
718
737
  private _draw;
719
738
  /**
720
739
  * Draw a list of indexed primitives
@@ -776,6 +795,8 @@ export declare class WebGPUEngine extends Engine {
776
795
  /** @hidden */
777
796
  _unpackFlipY(value: boolean): void;
778
797
  /** @hidden */
798
+ _bindUnboundFramebuffer(framebuffer: Nullable<WebGLFramebuffer>): void;
799
+ /** @hidden */
779
800
  _getSamplingParameters(samplingMode: number, generateMipMaps: boolean): {
780
801
  min: number;
781
802
  mag: number;
@@ -3,7 +3,7 @@ import { Logger } from "../Misc/logger.js";
3
3
  import { IsWindowObjectExist } from '../Misc/domManagement.js';
4
4
  import { Color4 } from "../Maths/math.js";
5
5
  import { Engine } from "../Engines/engine.js";
6
- import { InternalTextureSource } from "../Materials/Textures/internalTexture.js";
6
+ import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture.js";
7
7
  import { Effect } from "../Materials/effect.js";
8
8
  import * as WebGPUConstants from './WebGPU/webgpuConstants.js';
9
9
  import { VertexBuffer } from "../Buffers/buffer.js";
@@ -68,6 +68,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
68
68
  _this._counters = {
69
69
  numEnableEffects: 0,
70
70
  numEnableDrawWrapper: 0,
71
+ numBundleCreationNonCompatMode: 0,
72
+ numBundleReuseNonCompatMode: 0,
71
73
  };
72
74
  /**
73
75
  * Counters from last frame
@@ -75,6 +77,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
75
77
  _this.countersLastFrame = {
76
78
  numEnableEffects: 0,
77
79
  numEnableDrawWrapper: 0,
80
+ numBundleCreationNonCompatMode: 0,
81
+ numBundleReuseNonCompatMode: 0,
78
82
  };
79
83
  /**
80
84
  * Max number of uncaptured error messages to log
@@ -113,13 +117,6 @@ var WebGPUEngine = /** @class */ (function (_super) {
113
117
  _this._snapshotRenderingRecordBundles = false;
114
118
  _this._snapshotRenderingPlayBundles = false;
115
119
  _this._snapshotRenderingMainPassBundleList = [];
116
- /**
117
- * True to be in compatibility mode, meaning rendering in the same way than OpenGL.
118
- * Setting the property to false will improve performances, but can lead to rendering artifacts.
119
- * See @TODO WEBGPU DOC PAGE
120
- * @hidden
121
- */
122
- _this.compatibilityMode = true;
123
120
  //------------------------------------------------------------------------------
124
121
  // Dynamic WebGPU States
125
122
  //------------------------------------------------------------------------------
@@ -356,6 +353,21 @@ var WebGPUEngine = /** @class */ (function (_super) {
356
353
  version: "unknown version",
357
354
  };
358
355
  };
356
+ Object.defineProperty(WebGPUEngine.prototype, "compatibilityMode", {
357
+ /**
358
+ * (WebGPU only) True (default) to be in compatibility mode, meaning rendering all existing scenes without artifacts (same rendering than WebGL).
359
+ * Setting the property to false will improve performances but may not work in some scenes if some precautions are not taken.
360
+ * See @TODO WEBGPU DOC PAGE for more details
361
+ */
362
+ get: function () {
363
+ return this._compatibilityMode;
364
+ },
365
+ set: function (mode) {
366
+ this._compatibilityMode = mode;
367
+ },
368
+ enumerable: false,
369
+ configurable: true
370
+ });
359
371
  Object.defineProperty(WebGPUEngine.prototype, "currentSampleCount", {
360
372
  /** @hidden */
361
373
  get: function () {
@@ -467,6 +479,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
467
479
  _this._timestampQuery = new WebGPUTimestampQuery(_this._device, _this._bufferManager);
468
480
  _this._occlusionQuery = _this._device.createQuerySet ? new WebGPUOcclusionQuery(_this, _this._device, _this._bufferManager) : undefined;
469
481
  _this._bundleList = new WebGPUBundleList(_this._device);
482
+ _this._bundleListRenderTarget = new WebGPUBundleList(_this._device);
470
483
  if (_this.dbgVerboseLogsForFirstFrames) {
471
484
  if (_this._count === undefined) {
472
485
  _this._count = 0;
@@ -487,6 +500,8 @@ var WebGPUEngine = /** @class */ (function (_super) {
487
500
  _this._depthCullingState.depthMask = true;
488
501
  _this._textureHelper.setCommandEncoder(_this._uploadEncoder);
489
502
  _this._clearQuad = new WebGPUClearQuad(_this._device, _this, _this._emptyVertexBuffer);
503
+ _this._defaultDrawContext = _this.createDrawContext();
504
+ _this._currentDrawContext = _this._defaultDrawContext;
490
505
  _this._defaultMaterialContext = _this.createMaterialContext();
491
506
  _this._currentMaterialContext = _this._defaultMaterialContext;
492
507
  _this._initializeContextAndSwapChain();
@@ -596,6 +611,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
596
611
  needsInvertingBitmap: false,
597
612
  useUBOBindingCache: false,
598
613
  needShaderCodeInlining: true,
614
+ needToAlwaysBindUniformBuffers: true,
599
615
  _collectUbosUpdatedInFrame: false,
600
616
  };
601
617
  };
@@ -755,6 +771,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
755
771
  /** @hidden */
756
772
  WebGPUEngine.prototype.applyStates = function () {
757
773
  this._stencilStateComposer.apply();
774
+ this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState.alphaBlend);
758
775
  };
759
776
  /**
760
777
  * Force the entire cache to be cleared
@@ -963,7 +980,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
963
980
  this._startRenderTargetRenderPass(this._currentRenderTarget, false, backBuffer ? color : null, depth, stencil);
964
981
  }
965
982
  if (!this.compatibilityMode) {
966
- this._bundleList.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
983
+ this._bundleListRenderTarget.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
967
984
  }
968
985
  else {
969
986
  this._applyScissor(this._currentRenderPass);
@@ -995,19 +1012,21 @@ var WebGPUEngine = /** @class */ (function (_super) {
995
1012
  WebGPUEngine.prototype._clearFullQuad = function (clearColor, clearDepth, clearStencil) {
996
1013
  var _a, _b, _c;
997
1014
  var renderPass = !this.compatibilityMode ? null : this._getCurrentRenderPass();
1015
+ var renderPassIndex = this._getCurrentRenderPassIndex();
1016
+ var bundleList = renderPassIndex === 0 ? this._bundleList : this._bundleListRenderTarget;
998
1017
  this._clearQuad.setColorFormat(this._colorFormat);
999
1018
  this._clearQuad.setDepthStencilFormat(this._depthTextureFormat);
1000
1019
  this._clearQuad.setMRTAttachments((_a = this._cacheRenderPipeline.mrtAttachments) !== null && _a !== void 0 ? _a : [], (_b = this._cacheRenderPipeline.mrtTextureArray) !== null && _b !== void 0 ? _b : []);
1001
1020
  if (!this.compatibilityMode) {
1002
- this._bundleList.addItem(new WebGPURenderItemStencilRef(this._clearStencilValue));
1021
+ bundleList.addItem(new WebGPURenderItemStencilRef(this._clearStencilValue));
1003
1022
  }
1004
1023
  else {
1005
1024
  renderPass.setStencilReference(this._clearStencilValue);
1006
1025
  }
1007
1026
  var bundle = this._clearQuad.clear(renderPass, clearColor, clearDepth, clearStencil, this.currentSampleCount);
1008
1027
  if (!this.compatibilityMode) {
1009
- this._bundleList.addBundle(bundle);
1010
- this._bundleList.addItem(new WebGPURenderItemStencilRef((_c = this._stencilStateComposer.funcRef) !== null && _c !== void 0 ? _c : 0));
1028
+ bundleList.addBundle(bundle);
1029
+ bundleList.addItem(new WebGPURenderItemStencilRef((_c = this._stencilStateComposer.funcRef) !== null && _c !== void 0 ? _c : 0));
1011
1030
  this._reportDrawCall();
1012
1031
  }
1013
1032
  else {
@@ -1259,7 +1278,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
1259
1278
  * @returns the new context
1260
1279
  */
1261
1280
  WebGPUEngine.prototype.createDrawContext = function () {
1262
- return new WebGPUDrawContext();
1281
+ return new WebGPUDrawContext(this._bufferManager);
1263
1282
  };
1264
1283
  /** @hidden */
1265
1284
  WebGPUEngine.prototype._preparePipelineContext = function (pipelineContext, vertexSourceCode, fragmentSourceCode, createAsRaw, rawVertexSourceCode, rawFragmentSourceCode, rebuildRebind, defines, transformFeedbackVaryings, key) {
@@ -1317,7 +1336,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
1317
1336
  isNewEffect = effect !== this._currentEffect;
1318
1337
  this._currentEffect = effect;
1319
1338
  this._currentMaterialContext = this._defaultMaterialContext;
1320
- this._currentDrawContext = undefined;
1339
+ this._currentDrawContext = this._defaultDrawContext;
1321
1340
  this._counters.numEnableEffects++;
1322
1341
  if (this.dbgLogIfNotDrawWrapper) {
1323
1342
  Logger.Warn("enableEffect has been called with an Effect and not a Wrapper! effect.uniqueId=" + effect.uniqueId + ", effect.name=" + effect.name + ", effect.name.vertex=" + effect.name.vertex + ", effect.name.fragment=" + effect.name.fragment, 10);
@@ -1407,6 +1426,70 @@ var WebGPUEngine = /** @class */ (function (_super) {
1407
1426
  WebGPUEngine.prototype.updateTextureComparisonFunction = function (texture, comparisonFunction) {
1408
1427
  texture._comparisonFunction = comparisonFunction;
1409
1428
  };
1429
+ /**
1430
+ * Creates an internal texture without binding it to a framebuffer
1431
+ * @hidden
1432
+ * @param size defines the size of the texture
1433
+ * @param options defines the options used to create the texture
1434
+ * @param delayGPUTextureCreation true to delay the texture creation the first time it is really needed. false to create it right away
1435
+ * @param source source type of the texture
1436
+ * @returns a new render target texture stored in an InternalTexture
1437
+ */
1438
+ WebGPUEngine.prototype._createInternalTexture = function (size, options, delayGPUTextureCreation, source) {
1439
+ var _a, _b;
1440
+ if (delayGPUTextureCreation === void 0) { delayGPUTextureCreation = true; }
1441
+ if (source === void 0) { source = InternalTextureSource.Unknown; }
1442
+ var fullOptions = {};
1443
+ if (options !== undefined && typeof options === "object") {
1444
+ fullOptions.generateMipMaps = options.generateMipMaps;
1445
+ fullOptions.type = options.type === undefined ? 0 : options.type;
1446
+ fullOptions.samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;
1447
+ fullOptions.format = options.format === undefined ? 5 : options.format;
1448
+ fullOptions.samples = (_a = options.samples) !== null && _a !== void 0 ? _a : 1;
1449
+ fullOptions.creationFlags = (_b = options.creationFlags) !== null && _b !== void 0 ? _b : 0;
1450
+ }
1451
+ else {
1452
+ fullOptions.generateMipMaps = options;
1453
+ fullOptions.type = 0;
1454
+ fullOptions.samplingMode = 3;
1455
+ fullOptions.format = 5;
1456
+ fullOptions.samples = 1;
1457
+ fullOptions.creationFlags = 0;
1458
+ }
1459
+ if (fullOptions.type === 1 && !this._caps.textureFloatLinearFiltering) {
1460
+ fullOptions.samplingMode = 1;
1461
+ }
1462
+ else if (fullOptions.type === 2 && !this._caps.textureHalfFloatLinearFiltering) {
1463
+ fullOptions.samplingMode = 1;
1464
+ }
1465
+ if (fullOptions.type === 1 && !this._caps.textureFloat) {
1466
+ fullOptions.type = 0;
1467
+ Logger.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE");
1468
+ }
1469
+ var texture = new InternalTexture(this, source);
1470
+ var width = size.width || size;
1471
+ var height = size.height || size;
1472
+ var layers = size.layers || 0;
1473
+ texture.baseWidth = width;
1474
+ texture.baseHeight = height;
1475
+ texture.width = width;
1476
+ texture.height = height;
1477
+ texture.depth = layers;
1478
+ texture.isReady = true;
1479
+ texture.samples = fullOptions.samples;
1480
+ texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;
1481
+ texture.samplingMode = fullOptions.samplingMode;
1482
+ texture.type = fullOptions.type;
1483
+ texture.format = fullOptions.format;
1484
+ texture.is2DArray = layers > 0;
1485
+ texture._cachedWrapU = 0;
1486
+ texture._cachedWrapV = 0;
1487
+ this._internalTexturesCache.push(texture);
1488
+ if (!delayGPUTextureCreation) {
1489
+ this._textureHelper.createGPUTextureForInternalTexture(texture, width, height, layers || 1, fullOptions.creationFlags);
1490
+ }
1491
+ return texture;
1492
+ };
1410
1493
  /**
1411
1494
  * Usually called from Texture.ts.
1412
1495
  * Passed information to create a hardware texture
@@ -1848,8 +1931,12 @@ var WebGPUEngine = /** @class */ (function (_super) {
1848
1931
  }
1849
1932
  this.countersLastFrame.numEnableEffects = this._counters.numEnableEffects;
1850
1933
  this.countersLastFrame.numEnableDrawWrapper = this._counters.numEnableDrawWrapper;
1934
+ this.countersLastFrame.numBundleCreationNonCompatMode = this._counters.numBundleCreationNonCompatMode;
1935
+ this.countersLastFrame.numBundleReuseNonCompatMode = this._counters.numBundleReuseNonCompatMode;
1851
1936
  this._counters.numEnableEffects = 0;
1852
1937
  this._counters.numEnableDrawWrapper = 0;
1938
+ this._counters.numBundleCreationNonCompatMode = 0;
1939
+ this._counters.numBundleReuseNonCompatMode = 0;
1853
1940
  this._cacheRenderPipeline.endFrame();
1854
1941
  this._cacheBindGroups.endFrame();
1855
1942
  this._pendingDebugCommands.length = 0;
@@ -1896,6 +1983,7 @@ var WebGPUEngine = /** @class */ (function (_super) {
1896
1983
  this._timestampQuery.startFrame(this._uploadEncoder);
1897
1984
  this._textureHelper.setCommandEncoder(this._uploadEncoder);
1898
1985
  this._bundleList.reset();
1986
+ this._bundleListRenderTarget.reset();
1899
1987
  // restart the render pass
1900
1988
  if (reopenPass) {
1901
1989
  if (currentPasses & 2) {
@@ -2023,13 +2111,13 @@ var WebGPUEngine = /** @class */ (function (_super) {
2023
2111
  if (!gpuWrapper._bundleLists) {
2024
2112
  gpuWrapper._bundleLists = [];
2025
2113
  }
2026
- gpuWrapper._bundleLists[gpuWrapper._currentLayer] = this._bundleList.clone();
2114
+ gpuWrapper._bundleLists[gpuWrapper._currentLayer] = this._bundleListRenderTarget.clone();
2027
2115
  gpuWrapper._bundleLists[gpuWrapper._currentLayer].run(this._currentRenderPass);
2028
- this._bundleList.reset();
2116
+ this._bundleListRenderTarget.reset();
2029
2117
  }
2030
2118
  else if (!this.compatibilityMode) {
2031
- this._bundleList.run(this._currentRenderPass);
2032
- this._bundleList.reset();
2119
+ this._bundleListRenderTarget.run(this._currentRenderPass);
2120
+ this._bundleListRenderTarget.reset();
2033
2121
  }
2034
2122
  this._currentRenderPass.endPass();
2035
2123
  if (this.dbgVerboseLogsForFirstFrames) {
@@ -2339,54 +2427,81 @@ var WebGPUEngine = /** @class */ (function (_super) {
2339
2427
  }
2340
2428
  this._stencilStateComposer.stencilMaterial = stencil;
2341
2429
  };
2342
- WebGPUEngine.prototype._draw = function (drawType, fillMode, start, count, instancesCount) {
2343
- var _a, _b, _c;
2344
- var renderPass = this._getCurrentRenderPass();
2345
- this.applyStates();
2430
+ WebGPUEngine.prototype._applyRenderPassChanges = function (renderPass, bundleList) {
2431
+ var _a;
2346
2432
  var mustUpdateViewport = this._mustUpdateViewport(renderPass);
2347
2433
  var mustUpdateScissor = this._mustUpdateScissor(renderPass);
2348
2434
  var mustUpdateStencilRef = !this._stencilStateComposer.enabled ? false : this._mustUpdateStencilRef(renderPass);
2349
2435
  var mustUpdateBlendColor = !this._alphaState.alphaBlend ? false : this._mustUpdateBlendColor(renderPass);
2436
+ if (bundleList) {
2437
+ if (mustUpdateViewport) {
2438
+ bundleList.addItem(new WebGPURenderItemViewport(this._viewportCached.x, this._viewportCached.y, this._viewportCached.z, this._viewportCached.w));
2439
+ }
2440
+ if (mustUpdateScissor) {
2441
+ bundleList.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
2442
+ }
2443
+ if (mustUpdateStencilRef) {
2444
+ bundleList.addItem(new WebGPURenderItemStencilRef((_a = this._stencilStateComposer.funcRef) !== null && _a !== void 0 ? _a : 0));
2445
+ }
2446
+ if (mustUpdateBlendColor) {
2447
+ bundleList.addItem(new WebGPURenderItemBlendColor(this._alphaState._blendConstants.slice()));
2448
+ }
2449
+ }
2450
+ else {
2451
+ if (mustUpdateViewport) {
2452
+ this._applyViewport(renderPass);
2453
+ }
2454
+ if (mustUpdateScissor) {
2455
+ this._applyScissor(renderPass);
2456
+ }
2457
+ if (mustUpdateStencilRef) {
2458
+ this._applyStencilRef(renderPass);
2459
+ }
2460
+ if (mustUpdateBlendColor) {
2461
+ this._applyBlendColor(renderPass);
2462
+ }
2463
+ }
2464
+ };
2465
+ WebGPUEngine.prototype._draw = function (drawType, fillMode, start, count, instancesCount) {
2466
+ var _a;
2467
+ var renderPass = this._getCurrentRenderPass();
2468
+ var renderPassIndex = this._getCurrentRenderPassIndex();
2469
+ var bundleList = renderPassIndex === 0 ? this._bundleList : this._bundleListRenderTarget;
2470
+ this.applyStates();
2350
2471
  var webgpuPipelineContext = this._currentEffect._pipelineContext;
2351
2472
  if (webgpuPipelineContext.uniformBuffer) {
2352
2473
  webgpuPipelineContext.uniformBuffer.update();
2474
+ this.bindUniformBufferBase(webgpuPipelineContext.uniformBuffer.getBuffer(), 0, WebGPUShaderProcessor.LeftOvertUBOName);
2353
2475
  }
2354
2476
  if (this._snapshotRenderingPlayBundles) {
2355
2477
  this._reportDrawCall();
2356
2478
  return;
2357
2479
  }
2358
- var useFastPath = !this.compatibilityMode && ((_a = this._currentDrawContext) === null || _a === void 0 ? void 0 : _a.fastBundle);
2480
+ if (!this.compatibilityMode && (this._currentDrawContext.isDirty(this._currentMaterialContext.updateId) || this._currentMaterialContext.isDirty || this._currentMaterialContext.forceBindGroupCreation)) {
2481
+ this._currentDrawContext.fastBundle = undefined;
2482
+ }
2483
+ var useFastPath = !this.compatibilityMode && this._currentDrawContext.fastBundle;
2359
2484
  var renderPass2 = renderPass;
2360
2485
  if (useFastPath || this._snapshotRenderingRecordBundles) {
2361
- if (mustUpdateViewport) {
2362
- this._bundleList.addItem(new WebGPURenderItemViewport(this._viewportCached.x, this._viewportCached.y, this._viewportCached.z, this._viewportCached.w));
2363
- }
2364
- if (mustUpdateScissor) {
2365
- this._bundleList.addItem(new WebGPURenderItemScissor(this._scissorCached.x, this._scissorCached.y, this._scissorCached.z, this._scissorCached.w));
2366
- }
2367
- if (mustUpdateStencilRef) {
2368
- this._bundleList.addItem(new WebGPURenderItemStencilRef((_b = this._stencilStateComposer.funcRef) !== null && _b !== void 0 ? _b : 0));
2369
- }
2370
- if (mustUpdateBlendColor) {
2371
- this._bundleList.addItem(new WebGPURenderItemBlendColor(this._alphaState._blendConstants.slice()));
2372
- }
2486
+ this._applyRenderPassChanges(renderPass, bundleList);
2373
2487
  if (!this._snapshotRenderingRecordBundles) {
2374
- this._bundleList.addBundle(this._currentDrawContext.fastBundle);
2488
+ this._counters.numBundleReuseNonCompatMode++;
2489
+ if (this._currentDrawContext.indirectDrawBuffer) {
2490
+ this._currentDrawContext.setIndirectData(count, instancesCount || 1, start);
2491
+ }
2492
+ bundleList.addBundle(this._currentDrawContext.fastBundle);
2375
2493
  this._reportDrawCall();
2376
2494
  return;
2377
2495
  }
2378
- renderPass2 = this._bundleList.getBundleEncoder(this._cacheRenderPipeline.colorFormats, this._depthTextureFormat, this.currentSampleCount); // for snapshot recording mode
2379
- this._bundleList.numDrawCalls++;
2380
- }
2381
- if (webgpuPipelineContext.uniformBuffer) {
2382
- this.bindUniformBufferBase(webgpuPipelineContext.uniformBuffer.getBuffer(), 0, "LeftOver");
2496
+ renderPass2 = bundleList.getBundleEncoder(this._cacheRenderPipeline.colorFormats, this._depthTextureFormat, this.currentSampleCount); // for snapshot recording mode
2497
+ bundleList.numDrawCalls++;
2383
2498
  }
2384
2499
  var textureState = 0;
2385
2500
  if (!this._caps.textureFloatLinearFiltering && this._currentMaterialContext.hasFloatTextures) {
2386
2501
  var bitVal = 1;
2387
2502
  for (var i = 0; i < webgpuPipelineContext.shaderProcessingContext.textureNames.length; ++i) {
2388
2503
  var textureName = webgpuPipelineContext.shaderProcessingContext.textureNames[i];
2389
- var texture = (_c = this._currentMaterialContext.textures[textureName]) === null || _c === void 0 ? void 0 : _c.texture;
2504
+ var texture = (_a = this._currentMaterialContext.textures[textureName]) === null || _a === void 0 ? void 0 : _a.texture;
2390
2505
  if ((texture === null || texture === void 0 ? void 0 : texture.type) === 1) {
2391
2506
  textureState |= bitVal;
2392
2507
  }
@@ -2394,21 +2509,11 @@ var WebGPUEngine = /** @class */ (function (_super) {
2394
2509
  }
2395
2510
  }
2396
2511
  var pipeline = this._cacheRenderPipeline.getRenderPipeline(fillMode, this._currentEffect, this.currentSampleCount, textureState);
2397
- var bindGroups = this._cacheBindGroups.getBindGroups(webgpuPipelineContext, this._currentMaterialContext);
2512
+ var bindGroups = this._cacheBindGroups.getBindGroups(webgpuPipelineContext, this._currentDrawContext, this._currentMaterialContext);
2398
2513
  if (!this._snapshotRenderingRecordBundles) {
2399
- if (mustUpdateViewport) {
2400
- this._applyViewport(renderPass);
2401
- }
2402
- if (mustUpdateScissor) {
2403
- this._applyScissor(renderPass);
2404
- }
2405
- if (mustUpdateStencilRef) {
2406
- this._applyStencilRef(renderPass);
2407
- }
2408
- if (mustUpdateBlendColor) {
2409
- this._applyBlendColor(renderPass);
2410
- }
2514
+ this._applyRenderPassChanges(renderPass, !this.compatibilityMode ? bundleList : null);
2411
2515
  if (!this.compatibilityMode) {
2516
+ this._counters.numBundleCreationNonCompatMode++;
2412
2517
  renderPass2 = this._device.createRenderBundleEncoder({
2413
2518
  colorFormats: this._cacheRenderPipeline.colorFormats,
2414
2519
  depthStencilFormat: this._depthTextureFormat,
@@ -2435,15 +2540,25 @@ var WebGPUEngine = /** @class */ (function (_super) {
2435
2540
  renderPass2.setBindGroup(i, bindGroups[i]);
2436
2541
  }
2437
2542
  // draw
2438
- if (drawType === 0) {
2543
+ var nonCompatMode = !this.compatibilityMode && !this._snapshotRenderingRecordBundles;
2544
+ if (nonCompatMode && this._currentDrawContext.indirectDrawBuffer) {
2545
+ this._currentDrawContext.setIndirectData(count, instancesCount || 1, start);
2546
+ if (drawType === 0) {
2547
+ renderPass2.drawIndexedIndirect(this._currentDrawContext.indirectDrawBuffer, 0);
2548
+ }
2549
+ else {
2550
+ renderPass2.drawIndirect(this._currentDrawContext.indirectDrawBuffer, 0);
2551
+ }
2552
+ }
2553
+ else if (drawType === 0) {
2439
2554
  renderPass2.drawIndexed(count, instancesCount || 1, start, 0, 0);
2440
2555
  }
2441
2556
  else {
2442
2557
  renderPass2.draw(count, instancesCount || 1, start, 0);
2443
2558
  }
2444
- if (!this.compatibilityMode && this._currentDrawContext && !this._snapshotRenderingRecordBundles) {
2559
+ if (nonCompatMode) {
2445
2560
  this._currentDrawContext.fastBundle = renderPass2.finish();
2446
- this._bundleList.addBundle(this._currentDrawContext.fastBundle);
2561
+ bundleList.addBundle(this._currentDrawContext.fastBundle);
2447
2562
  }
2448
2563
  this._reportDrawCall();
2449
2564
  };
@@ -2563,6 +2678,10 @@ var WebGPUEngine = /** @class */ (function (_super) {
2563
2678
  };
2564
2679
  /** @hidden */
2565
2680
  WebGPUEngine.prototype._unpackFlipY = function (value) { };
2681
+ /** @hidden */
2682
+ WebGPUEngine.prototype._bindUnboundFramebuffer = function (framebuffer) {
2683
+ throw "_bindUnboundFramebuffer is not implementedin WebGPU! You probably want to use restoreDefaultFramebuffer or unBindFramebuffer instead";
2684
+ };
2566
2685
  // TODO WEBGPU. All of the below should go once engine split with baseEngine.
2567
2686
  /** @hidden */
2568
2687
  WebGPUEngine.prototype._getSamplingParameters = function (samplingMode, generateMipMaps) {