@babylonjs/core 7.35.2 → 7.37.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 (272) hide show
  1. package/Collisions/gpuPicker.js.map +1 -1
  2. package/Engines/Extensions/engine.multiRender.d.ts +11 -0
  3. package/Engines/Extensions/engine.multiRender.js +71 -32
  4. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  5. package/Engines/Extensions/engine.rawTexture.d.ts +8 -8
  6. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  7. package/Engines/Extensions/engine.renderTarget.js +1 -13
  8. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  9. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  10. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +2 -0
  11. package/Engines/WebGL/webGLRenderTargetWrapper.js +37 -7
  12. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +11 -0
  14. package/Engines/WebGPU/Extensions/engine.multiRender.js +30 -11
  15. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  16. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +9 -9
  17. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  18. package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -5
  19. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  20. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  21. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +3 -2
  22. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  23. package/Engines/WebGPU/webgpuConstants.d.ts +6 -0
  24. package/Engines/WebGPU/webgpuConstants.js +6 -0
  25. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  26. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +3 -1
  27. package/Engines/WebGPU/webgpuHardwareTexture.js +5 -4
  28. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  29. package/Engines/WebGPU/webgpuTextureHelper.js +18 -0
  30. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  31. package/Engines/WebGPU/webgpuTextureManager.js +8 -2
  32. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  33. package/Engines/abstractEngine.d.ts +12 -1
  34. package/Engines/abstractEngine.js +4 -4
  35. package/Engines/abstractEngine.js.map +1 -1
  36. package/Engines/constants.d.ts +17 -1
  37. package/Engines/constants.js +17 -1
  38. package/Engines/constants.js.map +1 -1
  39. package/Engines/engine.d.ts +31 -1
  40. package/Engines/engine.js +17 -1
  41. package/Engines/engine.js.map +1 -1
  42. package/Engines/engineCapabilities.d.ts +2 -0
  43. package/Engines/engineCapabilities.js.map +1 -1
  44. package/Engines/nativeEngine.js +1 -0
  45. package/Engines/nativeEngine.js.map +1 -1
  46. package/Engines/nullEngine.d.ts +2 -2
  47. package/Engines/nullEngine.js +3 -2
  48. package/Engines/nullEngine.js.map +1 -1
  49. package/Engines/renderTargetWrapper.d.ts +33 -1
  50. package/Engines/renderTargetWrapper.js +64 -4
  51. package/Engines/renderTargetWrapper.js.map +1 -1
  52. package/Engines/thinEngine.d.ts +13 -1
  53. package/Engines/thinEngine.functions.d.ts +4 -0
  54. package/Engines/thinEngine.functions.js +17 -0
  55. package/Engines/thinEngine.functions.js.map +1 -1
  56. package/Engines/thinEngine.js +151 -32
  57. package/Engines/thinEngine.js.map +1 -1
  58. package/Engines/thinWebGPUEngine.d.ts +2 -0
  59. package/Engines/thinWebGPUEngine.js +7 -0
  60. package/Engines/thinWebGPUEngine.js.map +1 -1
  61. package/Engines/webgpuEngine.d.ts +12 -3
  62. package/Engines/webgpuEngine.js +40 -9
  63. package/Engines/webgpuEngine.js.map +1 -1
  64. package/FrameGraph/Node/Blocks/Textures/clearBlock.d.ts +8 -0
  65. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +22 -1
  66. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  67. package/FrameGraph/Node/Blocks/inputBlock.d.ts +4 -9
  68. package/FrameGraph/Node/Blocks/inputBlock.js +15 -25
  69. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  70. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +10 -2
  71. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
  72. package/FrameGraph/Passes/renderPass.d.ts +10 -10
  73. package/FrameGraph/Passes/renderPass.js +10 -10
  74. package/FrameGraph/Passes/renderPass.js.map +1 -1
  75. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +10 -5
  76. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +29 -14
  77. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  78. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +4 -0
  79. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +11 -6
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +30 -13
  82. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  83. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +4 -6
  84. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  85. package/FrameGraph/Tasks/Rendering/cullObjectsTask.d.ts +1 -1
  86. package/FrameGraph/Tasks/Rendering/cullObjectsTask.js.map +1 -1
  87. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +3 -3
  88. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +33 -32
  89. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  90. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -2
  91. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +8 -12
  92. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  93. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +13 -18
  94. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  95. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +15 -2
  96. package/FrameGraph/Tasks/Texture/clearTextureTask.js +17 -4
  97. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  98. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +2 -2
  99. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  100. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +3 -3
  101. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
  102. package/FrameGraph/frameGraph.d.ts +11 -74
  103. package/FrameGraph/frameGraph.js +12 -126
  104. package/FrameGraph/frameGraph.js.map +1 -1
  105. package/FrameGraph/frameGraphRenderContext.d.ts +17 -8
  106. package/FrameGraph/frameGraphRenderContext.js +55 -43
  107. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  108. package/FrameGraph/frameGraphRenderTarget.d.ts +16 -0
  109. package/FrameGraph/frameGraphRenderTarget.js +67 -0
  110. package/FrameGraph/frameGraphRenderTarget.js.map +1 -0
  111. package/FrameGraph/frameGraphTask.d.ts +4 -3
  112. package/FrameGraph/frameGraphTask.js +41 -8
  113. package/FrameGraph/frameGraphTask.js.map +1 -1
  114. package/FrameGraph/frameGraphTextureManager.d.ts +130 -22
  115. package/FrameGraph/frameGraphTextureManager.js +312 -130
  116. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  117. package/FrameGraph/frameGraphTypes.d.ts +28 -13
  118. package/FrameGraph/frameGraphTypes.js.map +1 -1
  119. package/FrameGraph/index.d.ts +1 -0
  120. package/FrameGraph/index.js +1 -0
  121. package/FrameGraph/index.js.map +1 -1
  122. package/Helpers/environmentHelper.js.map +1 -1
  123. package/Layers/effectLayer.d.ts +1 -1
  124. package/Layers/effectLayer.js.map +1 -1
  125. package/Layers/glowLayer.d.ts +1 -1
  126. package/Layers/glowLayer.js.map +1 -1
  127. package/Layers/highlightLayer.d.ts +1 -1
  128. package/Layers/highlightLayer.js.map +1 -1
  129. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  130. package/Materials/Node/Blocks/conditionalBlock.d.ts +2 -0
  131. package/Materials/Node/Blocks/conditionalBlock.js +13 -0
  132. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  133. package/Materials/Node/nodeMaterial.js.map +1 -1
  134. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +12 -4
  135. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  136. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  137. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  138. package/Materials/Textures/baseTexture.js.map +1 -1
  139. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  140. package/Materials/Textures/internalTexture.d.ts +20 -0
  141. package/Materials/Textures/internalTexture.js +48 -0
  142. package/Materials/Textures/internalTexture.js.map +1 -1
  143. package/Materials/Textures/mirrorTexture.js.map +1 -1
  144. package/Materials/Textures/multiRenderTarget.d.ts +5 -0
  145. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  146. package/Materials/Textures/rawCubeTexture.d.ts +2 -2
  147. package/Materials/Textures/rawCubeTexture.js +2 -2
  148. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  149. package/Materials/Textures/rawTexture.js.map +1 -1
  150. package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
  151. package/Materials/Textures/rawTexture2DArray.js +1 -1
  152. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  153. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  154. package/Materials/Textures/rawTexture3D.js +1 -1
  155. package/Materials/Textures/rawTexture3D.js.map +1 -1
  156. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  157. package/Materials/Textures/textureCreationOptions.d.ts +6 -6
  158. package/Materials/Textures/textureCreationOptions.js.map +1 -1
  159. package/Materials/drawWrapper.d.ts +6 -1
  160. package/Materials/drawWrapper.js +18 -2
  161. package/Materials/drawWrapper.js.map +1 -1
  162. package/Materials/effect.d.ts +6 -1
  163. package/Materials/effect.functions.d.ts +5 -0
  164. package/Materials/effect.functions.js +19 -0
  165. package/Materials/effect.functions.js.map +1 -1
  166. package/Materials/effect.js +22 -20
  167. package/Materials/effect.js.map +1 -1
  168. package/Materials/effect.webgl.functions.js +12 -4
  169. package/Materials/effect.webgl.functions.js.map +1 -1
  170. package/Maths/math.color.d.ts +16 -0
  171. package/Maths/math.color.js +16 -0
  172. package/Maths/math.color.js.map +1 -1
  173. package/Maths/math.vector.d.ts +32 -0
  174. package/Maths/math.vector.js +32 -0
  175. package/Maths/math.vector.js.map +1 -1
  176. package/Meshes/Compression/dracoCompression.d.ts +3 -1
  177. package/Meshes/Compression/dracoCompression.js +5 -2
  178. package/Meshes/Compression/dracoCompression.js.map +1 -1
  179. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +2 -1
  180. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -0
  181. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  182. package/Meshes/Node/Blocks/Matrices/rotationXBlock.d.ts +0 -1
  183. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js +1 -9
  184. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -1
  185. package/Meshes/Node/Blocks/Matrices/rotationYBlock.d.ts +0 -1
  186. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js +1 -9
  187. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -1
  188. package/Meshes/Node/Blocks/Matrices/rotationZBlock.d.ts +0 -1
  189. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js +1 -9
  190. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -1
  191. package/Meshes/Node/Blocks/Set/latticeBlock.js +3 -1
  192. package/Meshes/Node/Blocks/Set/latticeBlock.js.map +1 -1
  193. package/Meshes/Node/Blocks/conditionBlock.d.ts +2 -0
  194. package/Meshes/Node/Blocks/conditionBlock.js +15 -0
  195. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  196. package/Meshes/Node/Blocks/geometryClampBlock.d.ts +4 -4
  197. package/Meshes/Node/Blocks/geometryClampBlock.js +16 -25
  198. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  199. package/Meshes/Node/Blocks/geometryLerpBlock.js +2 -2
  200. package/Meshes/Node/Blocks/geometryLerpBlock.js.map +1 -1
  201. package/Meshes/Node/Blocks/geometryNLerpBlock.js +2 -2
  202. package/Meshes/Node/Blocks/geometryNLerpBlock.js.map +1 -1
  203. package/Meshes/Node/Blocks/geometryReplaceColorBlock.js +2 -2
  204. package/Meshes/Node/Blocks/geometryReplaceColorBlock.js.map +1 -1
  205. package/Meshes/Node/Blocks/geometryRotate2dBlock.js +2 -2
  206. package/Meshes/Node/Blocks/geometryRotate2dBlock.js.map +1 -1
  207. package/Meshes/Node/Blocks/geometrySmoothStepBlock.js +3 -3
  208. package/Meshes/Node/Blocks/geometrySmoothStepBlock.js.map +1 -1
  209. package/Meshes/Node/Blocks/geometryStepBlock.js +2 -2
  210. package/Meshes/Node/Blocks/geometryStepBlock.js.map +1 -1
  211. package/Meshes/Node/nodeGeometry.js +1 -1
  212. package/Meshes/Node/nodeGeometry.js.map +1 -1
  213. package/Meshes/Node/nodeGeometryBlock.d.ts +3 -1
  214. package/Meshes/Node/nodeGeometryBlock.js +2 -1
  215. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  216. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +10 -2
  217. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  218. package/Meshes/abstractMesh.d.ts +5 -3
  219. package/Meshes/abstractMesh.js +9 -7
  220. package/Meshes/abstractMesh.js.map +1 -1
  221. package/Meshes/subMesh.d.ts +5 -3
  222. package/Meshes/subMesh.js +9 -7
  223. package/Meshes/subMesh.js.map +1 -1
  224. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  225. package/Misc/dds.d.ts +1 -1
  226. package/Misc/dds.js.map +1 -1
  227. package/Misc/environmentTextureTools.js.map +1 -1
  228. package/Misc/observable.d.ts +1 -3
  229. package/Misc/observable.js +9 -7
  230. package/Misc/observable.js.map +1 -1
  231. package/Misc/screenshotTools.js.map +1 -1
  232. package/Misc/snapshotRenderingHelper.js +3 -0
  233. package/Misc/snapshotRenderingHelper.js.map +1 -1
  234. package/Misc/textureTools.js.map +1 -1
  235. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  236. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
  237. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  238. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  239. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  240. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  241. package/PostProcesses/blurPostProcess.js.map +1 -1
  242. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  243. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  244. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  245. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  246. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  247. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  248. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  249. package/PostProcesses/grainPostProcess.js.map +1 -1
  250. package/PostProcesses/highlightsPostProcess.d.ts +1 -1
  251. package/PostProcesses/highlightsPostProcess.js +1 -1
  252. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  253. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  254. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  255. package/PostProcesses/passPostProcess.js.map +1 -1
  256. package/PostProcesses/postProcess.d.ts +1 -1
  257. package/PostProcesses/postProcess.js.map +1 -1
  258. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  259. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  260. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  261. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  262. package/PostProcesses/tonemapPostProcess.d.ts +1 -1
  263. package/PostProcesses/tonemapPostProcess.js +1 -1
  264. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  265. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  266. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +1 -1
  267. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  268. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  269. package/Rendering/prePassRenderer.js.map +1 -1
  270. package/ShadersWGSL/pbr.fragment.js +4 -3
  271. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  272. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { createPipelineContext, createRawShaderProgram, createShaderProgram, _finalizePipelineContext, _preparePipelineContext, _setProgram, _executeWhenRenderingStateIsCompiled, getStateObject, _createShaderProgram, deleteStateObject, } from "./thinEngine.functions.js";
1
+ import { createPipelineContext, createRawShaderProgram, createShaderProgram, _finalizePipelineContext, _preparePipelineContext, _setProgram, _executeWhenRenderingStateIsCompiled, getStateObject, _createShaderProgram, deleteStateObject, _isRenderingStateCompiled, } from "./thinEngine.functions.js";
2
2
  import { IsWrapper } from "../Materials/drawWrapper.functions.js";
3
3
  import { Logger } from "../Misc/logger.js";
4
4
  import { IsWindowObjectExist } from "../Misc/domManagement.js";
@@ -9,7 +9,7 @@ import { GetExponentOfTwo } from "../Misc/tools.functions.js";
9
9
  import { AbstractEngine } from "./abstractEngine.js";
10
10
 
11
11
  import { WebGLHardwareTexture } from "./WebGL/webGLHardwareTexture.js";
12
- import { InternalTexture } from "../Materials/Textures/internalTexture.js";
12
+ import { InternalTexture, IsDepthTexture, HasStencilAspect } from "../Materials/Textures/internalTexture.js";
13
13
  import { Effect } from "../Materials/effect.js";
14
14
  import { _ConcatenateShader, _getGlobalDefines } from "./abstractEngine.functions.js";
15
15
  import { resetCachedPipeline } from "../Materials/effect.functions.js";
@@ -365,6 +365,7 @@ export class ThinEngine extends AbstractEngine {
365
365
  textureMaxLevel: this._webGLVersion > 1,
366
366
  texture2DArrayMaxLayerCount: this._webGLVersion > 1 ? this._gl.getParameter(this._gl.MAX_ARRAY_TEXTURE_LAYERS) : 128,
367
367
  disableMorphTargetTexture: false,
368
+ textureNorm16: this._gl.getExtension("EXT_texture_norm16") ? true : false,
368
369
  };
369
370
  this._caps.supportFloatTexturesResolve = this._caps.colorBufferFloat;
370
371
  this._caps.rg11b10ufColorRenderable = this._caps.colorBufferFloat;
@@ -409,6 +410,16 @@ export class ThinEngine extends AbstractEngine {
409
410
  this._caps.textureFloatRender = this._caps.textureFloat && this._canRenderToFloatFramebuffer() ? true : false;
410
411
  this._caps.textureHalfFloatLinearFiltering =
411
412
  this._webGLVersion > 1 || (this._caps.textureHalfFloat && this._gl.getExtension("OES_texture_half_float_linear")) ? true : false;
413
+ if (this._caps.textureNorm16) {
414
+ this._gl.R16_EXT = 0x822a;
415
+ this._gl.RG16_EXT = 0x822c;
416
+ this._gl.RGB16_EXT = 0x8054;
417
+ this._gl.RGBA16_EXT = 0x805b;
418
+ this._gl.R16_SNORM_EXT = 0x8f98;
419
+ this._gl.RG16_SNORM_EXT = 0x8f99;
420
+ this._gl.RGB16_SNORM_EXT = 0x8f9a;
421
+ this._gl.RGBA16_SNORM_EXT = 0x8f9b;
422
+ }
412
423
  // Compressed formats
413
424
  if (this._caps.astc) {
414
425
  this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;
@@ -885,20 +896,21 @@ export class ThinEngine extends AbstractEngine {
885
896
  unBindFramebuffer(texture, disableGenerateMipMaps = false, onBeforeUnbind) {
886
897
  const webglRTWrapper = texture;
887
898
  this._currentRenderTarget = null;
888
- // If MSAA, we need to bitblt back to main texture
889
- const gl = this._gl;
890
- if (webglRTWrapper._MSAAFramebuffer) {
899
+ if (!webglRTWrapper.disableAutomaticMSAAResolve) {
891
900
  if (texture.isMulti) {
892
- // This texture is part of a MRT texture, we need to treat all attachments
893
- this.unBindMultiColorAttachmentFramebuffer(texture, disableGenerateMipMaps, onBeforeUnbind);
894
- return;
901
+ this.resolveMultiFramebuffer(texture);
902
+ }
903
+ else {
904
+ this.resolveFramebuffer(texture);
895
905
  }
896
- gl.bindFramebuffer(gl.READ_FRAMEBUFFER, webglRTWrapper._MSAAFramebuffer);
897
- gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, webglRTWrapper._framebuffer);
898
- gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, gl.COLOR_BUFFER_BIT, gl.NEAREST);
899
906
  }
900
- if (texture.texture?.generateMipMaps && !disableGenerateMipMaps && !texture.isCube) {
901
- this.generateMipmaps(texture.texture);
907
+ if (!disableGenerateMipMaps) {
908
+ if (texture.isMulti) {
909
+ this.generateMipMapsMultiFramebuffer(texture);
910
+ }
911
+ else {
912
+ this.generateMipMapsFramebuffer(texture);
913
+ }
902
914
  }
903
915
  if (onBeforeUnbind) {
904
916
  if (webglRTWrapper._MSAAFramebuffer) {
@@ -909,6 +921,33 @@ export class ThinEngine extends AbstractEngine {
909
921
  }
910
922
  this._bindUnboundFramebuffer(null);
911
923
  }
924
+ /**
925
+ * Generates mipmaps for the texture of the (single) render target
926
+ * @param texture The render target containing the texture to generate the mipmaps for
927
+ */
928
+ generateMipMapsFramebuffer(texture) {
929
+ if (!texture.isMulti && texture.texture?.generateMipMaps && !texture.isCube) {
930
+ this.generateMipmaps(texture.texture);
931
+ }
932
+ }
933
+ /**
934
+ * Resolves the MSAA texture of the (single) render target into its non-MSAA version.
935
+ * Note that if "texture" is not a MSAA render target, no resolve is performed.
936
+ * @param texture The render target texture containing the MSAA textures to resolve
937
+ */
938
+ resolveFramebuffer(texture) {
939
+ const rtWrapper = texture;
940
+ const gl = this._gl;
941
+ if (!rtWrapper._MSAAFramebuffer || rtWrapper.isMulti) {
942
+ return;
943
+ }
944
+ let bufferBits = rtWrapper.resolveMSAAColors ? gl.COLOR_BUFFER_BIT : 0;
945
+ bufferBits |= rtWrapper._generateDepthBuffer && rtWrapper.resolveMSAADepth ? gl.DEPTH_BUFFER_BIT : 0;
946
+ bufferBits |= rtWrapper._generateStencilBuffer && rtWrapper.resolveMSAAStencil ? gl.STENCIL_BUFFER_BIT : 0;
947
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, rtWrapper._MSAAFramebuffer);
948
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, rtWrapper._framebuffer);
949
+ gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, bufferBits, gl.NEAREST);
950
+ }
912
951
  /**
913
952
  * Force a webGL flush (ie. a flush of all waiting webGL commands)
914
953
  */
@@ -1666,15 +1705,10 @@ export class ThinEngine extends AbstractEngine {
1666
1705
  * @internal
1667
1706
  */
1668
1707
  _isRenderingStateCompiled(pipelineContext) {
1669
- const webGLPipelineContext = pipelineContext;
1670
- if (this._isDisposed || webGLPipelineContext._isDisposed) {
1708
+ if (this._isDisposed) {
1671
1709
  return false;
1672
1710
  }
1673
- if (this._gl.getProgramParameter(webGLPipelineContext.program, this._caps.parallelShaderCompile.COMPLETION_STATUS_KHR)) {
1674
- this._finalizePipelineContext(webGLPipelineContext);
1675
- return true;
1676
- }
1677
- return false;
1711
+ return _isRenderingStateCompiled(pipelineContext, this._gl, this.validateShaderPrograms);
1678
1712
  }
1679
1713
  /**
1680
1714
  * @internal
@@ -2286,20 +2320,26 @@ export class ThinEngine extends AbstractEngine {
2286
2320
  */
2287
2321
  _createInternalTexture(size, options, delayGPUTextureCreation = true, source = 0 /* InternalTextureSource.Unknown */) {
2288
2322
  let generateMipMaps = false;
2323
+ let createMipMaps = false;
2289
2324
  let type = 0;
2290
2325
  let samplingMode = 3;
2291
2326
  let format = 5;
2292
2327
  let useSRGBBuffer = false;
2293
2328
  let samples = 1;
2294
2329
  let label;
2330
+ let createMSAATexture = false;
2331
+ let comparisonFunction = 0;
2295
2332
  if (options !== undefined && typeof options === "object") {
2296
2333
  generateMipMaps = !!options.generateMipMaps;
2334
+ createMipMaps = !!options.createMipMaps;
2297
2335
  type = options.type === undefined ? 0 : options.type;
2298
2336
  samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;
2299
2337
  format = options.format === undefined ? 5 : options.format;
2300
2338
  useSRGBBuffer = options.useSRGBBuffer === undefined ? false : options.useSRGBBuffer;
2301
2339
  samples = options.samples ?? 1;
2302
2340
  label = options.label;
2341
+ createMSAATexture = !!options.createMSAATexture;
2342
+ comparisonFunction = options.comparisonFunction || 0;
2303
2343
  }
2304
2344
  else {
2305
2345
  generateMipMaps = !!options;
@@ -2317,17 +2357,21 @@ export class ThinEngine extends AbstractEngine {
2317
2357
  type = 0;
2318
2358
  Logger.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE");
2319
2359
  }
2360
+ const isDepthTexture = IsDepthTexture(format);
2361
+ const hasStencil = HasStencilAspect(format);
2320
2362
  const gl = this._gl;
2321
2363
  const texture = new InternalTexture(this, source);
2322
2364
  const width = size.width || size;
2323
2365
  const height = size.height || size;
2324
2366
  const depth = size.depth || 0;
2325
2367
  const layers = size.layers || 0;
2326
- const filters = this._getSamplingParameters(samplingMode, generateMipMaps);
2368
+ const filters = this._getSamplingParameters(samplingMode, (generateMipMaps || createMipMaps) && !isDepthTexture);
2327
2369
  const target = layers !== 0 ? gl.TEXTURE_2D_ARRAY : depth !== 0 ? gl.TEXTURE_3D : gl.TEXTURE_2D;
2328
- const sizedFormat = this._getRGBABufferInternalSizedFormat(type, format, useSRGBBuffer);
2329
- const internalFormat = this._getInternalFormat(format);
2330
- const textureType = this._getWebGLTextureType(type);
2370
+ const sizedFormat = isDepthTexture
2371
+ ? this._getInternalFormatFromDepthTextureFormat(format, true, hasStencil)
2372
+ : this._getRGBABufferInternalSizedFormat(type, format, useSRGBBuffer);
2373
+ const internalFormat = isDepthTexture ? (hasStencil ? gl.DEPTH_STENCIL : gl.DEPTH_COMPONENT) : this._getInternalFormat(format);
2374
+ const textureType = isDepthTexture ? this._getWebGLTextureTypeFromDepthTextureFormat(format) : this._getWebGLTextureType(type);
2331
2375
  // Bind
2332
2376
  this._bindTextureDirectly(target, texture);
2333
2377
  if (layers !== 0) {
@@ -2345,8 +2389,18 @@ export class ThinEngine extends AbstractEngine {
2345
2389
  gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, filters.min);
2346
2390
  gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
2347
2391
  gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
2392
+ if (isDepthTexture && this.webGLVersion > 1) {
2393
+ if (comparisonFunction === 0) {
2394
+ gl.texParameteri(target, gl.TEXTURE_COMPARE_FUNC, 515);
2395
+ gl.texParameteri(target, gl.TEXTURE_COMPARE_MODE, gl.NONE);
2396
+ }
2397
+ else {
2398
+ gl.texParameteri(target, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);
2399
+ gl.texParameteri(target, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);
2400
+ }
2401
+ }
2348
2402
  // MipMaps
2349
- if (generateMipMaps) {
2403
+ if (generateMipMaps || createMipMaps) {
2350
2404
  this._gl.generateMipmap(target);
2351
2405
  }
2352
2406
  this._bindTextureDirectly(target, null);
@@ -2355,7 +2409,7 @@ export class ThinEngine extends AbstractEngine {
2355
2409
  texture.baseHeight = height;
2356
2410
  texture.width = width;
2357
2411
  texture.height = height;
2358
- texture.depth = layers;
2412
+ texture.depth = layers || depth;
2359
2413
  texture.isReady = true;
2360
2414
  texture.samples = samples;
2361
2415
  texture.generateMipMaps = generateMipMaps;
@@ -2363,7 +2417,26 @@ export class ThinEngine extends AbstractEngine {
2363
2417
  texture.type = type;
2364
2418
  texture.format = format;
2365
2419
  texture.label = label;
2420
+ texture.comparisonFunction = comparisonFunction;
2366
2421
  this._internalTexturesCache.push(texture);
2422
+ if (createMSAATexture) {
2423
+ let renderBuffer = null;
2424
+ if (IsDepthTexture(texture.format)) {
2425
+ renderBuffer = this._setupFramebufferDepthAttachments(HasStencilAspect(texture.format), texture.format !== 19, texture.width, texture.height, samples, texture.format, true);
2426
+ }
2427
+ else {
2428
+ renderBuffer = this._createRenderBuffer(texture.width, texture.height, samples, -1 /* not used */, this._getRGBABufferInternalSizedFormat(texture.type, texture.format, texture._useSRGBBuffer), -1 /* attachment */);
2429
+ }
2430
+ if (!renderBuffer) {
2431
+ throw new Error("Unable to create render buffer");
2432
+ }
2433
+ texture._autoMSAAManagement = true;
2434
+ let hardwareTexture = texture._hardwareTexture;
2435
+ if (!hardwareTexture) {
2436
+ hardwareTexture = texture._hardwareTexture = this._createHardwareTexture();
2437
+ }
2438
+ hardwareTexture.addMSAARenderBuffer(renderBuffer);
2439
+ }
2367
2440
  return texture;
2368
2441
  }
2369
2442
  /**
@@ -2759,22 +2832,42 @@ export class ThinEngine extends AbstractEngine {
2759
2832
  }
2760
2833
  return internalFormat;
2761
2834
  }
2835
+ _getWebGLTextureTypeFromDepthTextureFormat(textureFormat) {
2836
+ const gl = this._gl;
2837
+ let type = gl.UNSIGNED_INT;
2838
+ if (textureFormat === 15) {
2839
+ type = gl.UNSIGNED_SHORT;
2840
+ }
2841
+ else if (textureFormat === 17 || textureFormat === 13) {
2842
+ type = gl.UNSIGNED_INT_24_8;
2843
+ }
2844
+ else if (textureFormat === 14) {
2845
+ type = gl.FLOAT;
2846
+ }
2847
+ else if (textureFormat === 18) {
2848
+ type = gl.FLOAT_32_UNSIGNED_INT_24_8_REV;
2849
+ }
2850
+ else if (textureFormat === 19) {
2851
+ type = gl.UNSIGNED_BYTE;
2852
+ }
2853
+ return type;
2854
+ }
2762
2855
  /**
2763
2856
  * @internal
2764
2857
  */
2765
- _setupFramebufferDepthAttachments(generateStencilBuffer, generateDepthBuffer, width, height, samples = 1, depthTextureFormat) {
2858
+ _setupFramebufferDepthAttachments(generateStencilBuffer, generateDepthBuffer, width, height, samples = 1, depthTextureFormat, dontBindRenderBufferToFrameBuffer = false) {
2766
2859
  const gl = this._gl;
2767
2860
  depthTextureFormat = depthTextureFormat ?? (generateStencilBuffer ? 13 : 14);
2768
2861
  const internalFormat = this._getInternalFormatFromDepthTextureFormat(depthTextureFormat, generateDepthBuffer, generateStencilBuffer);
2769
2862
  // Create the depth/stencil buffer
2770
2863
  if (generateStencilBuffer && generateDepthBuffer) {
2771
- return this._createRenderBuffer(width, height, samples, gl.DEPTH_STENCIL, internalFormat, gl.DEPTH_STENCIL_ATTACHMENT);
2864
+ return this._createRenderBuffer(width, height, samples, gl.DEPTH_STENCIL, internalFormat, dontBindRenderBufferToFrameBuffer ? -1 : gl.DEPTH_STENCIL_ATTACHMENT);
2772
2865
  }
2773
2866
  if (generateDepthBuffer) {
2774
- return this._createRenderBuffer(width, height, samples, internalFormat, internalFormat, gl.DEPTH_ATTACHMENT);
2867
+ return this._createRenderBuffer(width, height, samples, internalFormat, internalFormat, dontBindRenderBufferToFrameBuffer ? -1 : gl.DEPTH_ATTACHMENT);
2775
2868
  }
2776
2869
  if (generateStencilBuffer) {
2777
- return this._createRenderBuffer(width, height, samples, internalFormat, internalFormat, gl.STENCIL_ATTACHMENT);
2870
+ return this._createRenderBuffer(width, height, samples, internalFormat, internalFormat, dontBindRenderBufferToFrameBuffer ? -1 : gl.STENCIL_ATTACHMENT);
2778
2871
  }
2779
2872
  return null;
2780
2873
  }
@@ -2795,7 +2888,9 @@ export class ThinEngine extends AbstractEngine {
2795
2888
  else {
2796
2889
  gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);
2797
2890
  }
2798
- gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, renderBuffer);
2891
+ if (attachment !== -1) {
2892
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, renderBuffer);
2893
+ }
2799
2894
  if (unbindBuffer) {
2800
2895
  gl.bindRenderbuffer(gl.RENDERBUFFER, null);
2801
2896
  }
@@ -3123,7 +3218,7 @@ export class ThinEngine extends AbstractEngine {
3123
3218
  const keys = Object.keys(this._compiledEffects);
3124
3219
  for (const name of keys) {
3125
3220
  const effect = this._compiledEffects[name];
3126
- effect.dispose();
3221
+ effect.dispose(true);
3127
3222
  }
3128
3223
  this._compiledEffects = {};
3129
3224
  }
@@ -3311,15 +3406,23 @@ export class ThinEngine extends AbstractEngine {
3311
3406
  internalFormat = this._gl.LUMINANCE_ALPHA;
3312
3407
  break;
3313
3408
  case 6:
3409
+ case 33322:
3410
+ case 36760:
3314
3411
  internalFormat = this._gl.RED;
3315
3412
  break;
3316
3413
  case 7:
3414
+ case 33324:
3415
+ case 36761:
3317
3416
  internalFormat = this._gl.RG;
3318
3417
  break;
3319
3418
  case 4:
3419
+ case 32852:
3420
+ case 36762:
3320
3421
  internalFormat = useSRGBBuffer ? this._glSRGBExtensionValues.SRGB : this._gl.RGB;
3321
3422
  break;
3322
3423
  case 5:
3424
+ case 32859:
3425
+ case 36763:
3323
3426
  internalFormat = useSRGBBuffer ? this._glSRGBExtensionValues.SRGB8_ALPHA8 : this._gl.RGBA;
3324
3427
  break;
3325
3428
  }
@@ -3411,6 +3514,14 @@ export class ThinEngine extends AbstractEngine {
3411
3514
  switch (format) {
3412
3515
  case 8:
3413
3516
  return this._gl.R16I;
3517
+ case 36760:
3518
+ return this._gl.R16_SNORM_EXT;
3519
+ case 36761:
3520
+ return this._gl.RG16_SNORM_EXT;
3521
+ case 36762:
3522
+ return this._gl.RGB16_SNORM_EXT;
3523
+ case 36763:
3524
+ return this._gl.RGBA16_SNORM_EXT;
3414
3525
  case 9:
3415
3526
  return this._gl.RG16I;
3416
3527
  case 10:
@@ -3424,6 +3535,14 @@ export class ThinEngine extends AbstractEngine {
3424
3535
  switch (format) {
3425
3536
  case 8:
3426
3537
  return this._gl.R16UI;
3538
+ case 33322:
3539
+ return this._gl.R16_EXT;
3540
+ case 33324:
3541
+ return this._gl.RG16_EXT;
3542
+ case 32852:
3543
+ return this._gl.RGB16_EXT;
3544
+ case 32859:
3545
+ return this._gl.RGBA16_EXT;
3427
3546
  case 9:
3428
3547
  return this._gl.RG16UI;
3429
3548
  case 10: