@babylonjs/core 7.39.1 → 7.39.2

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 (159) hide show
  1. package/Cameras/arcRotateCamera.d.ts +1 -1
  2. package/Cameras/arcRotateCamera.js.map +1 -1
  3. package/Debug/directionalLightFrustumViewer.d.ts +2 -1
  4. package/Debug/directionalLightFrustumViewer.js +4 -3
  5. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  6. package/Engines/Extensions/engine.multiRender.js +1 -0
  7. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  8. package/Engines/abstractEngine.js +2 -2
  9. package/Engines/abstractEngine.js.map +1 -1
  10. package/Engines/constants.d.ts +8 -0
  11. package/Engines/constants.js +8 -0
  12. package/Engines/constants.js.map +1 -1
  13. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +3 -9
  14. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  15. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +3 -9
  16. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  17. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +3 -9
  18. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  19. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +5 -17
  20. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  21. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +5 -17
  22. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
  23. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +3 -9
  24. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  25. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +6 -1
  26. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +40 -20
  27. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  28. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +77 -0
  29. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +250 -0
  30. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -0
  31. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +57 -0
  32. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +169 -0
  33. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -0
  34. package/FrameGraph/Node/Blocks/Rendering/cullObjectsBlock.js +3 -9
  35. package/FrameGraph/Node/Blocks/Rendering/cullObjectsBlock.js.map +1 -1
  36. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +4 -13
  37. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  38. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +6 -0
  39. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +27 -0
  40. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
  41. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.d.ts +19 -0
  42. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +28 -0
  43. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -0
  44. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -9
  45. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  46. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +3 -9
  47. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  48. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js +2 -5
  49. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
  50. package/FrameGraph/Node/Blocks/executeBlock.d.ts +29 -0
  51. package/FrameGraph/Node/Blocks/executeBlock.js +43 -0
  52. package/FrameGraph/Node/Blocks/executeBlock.js.map +1 -0
  53. package/FrameGraph/Node/Blocks/index.d.ts +4 -0
  54. package/FrameGraph/Node/Blocks/index.js +4 -0
  55. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  56. package/FrameGraph/Node/Blocks/inputBlock.d.ts +7 -2
  57. package/FrameGraph/Node/Blocks/inputBlock.js +13 -0
  58. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  59. package/FrameGraph/Node/Blocks/resourceContainerBlock.d.ts +55 -0
  60. package/FrameGraph/Node/Blocks/resourceContainerBlock.js +97 -0
  61. package/FrameGraph/Node/Blocks/resourceContainerBlock.js.map +1 -0
  62. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +13 -10
  63. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +11 -4
  64. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  65. package/FrameGraph/Node/nodeRenderGraph.js +32 -4
  66. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  67. package/FrameGraph/Node/nodeRenderGraphBlock.d.ts +1 -0
  68. package/FrameGraph/Node/nodeRenderGraphBlock.js +11 -0
  69. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  70. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.d.ts +18 -0
  71. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +24 -0
  72. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
  73. package/FrameGraph/Passes/cullPass.d.ts +1 -1
  74. package/FrameGraph/Passes/cullPass.js.map +1 -1
  75. package/FrameGraph/Tasks/Misc/executeTask.d.ts +22 -0
  76. package/FrameGraph/Tasks/Misc/executeTask.js +28 -0
  77. package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -0
  78. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +72 -0
  79. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +183 -0
  80. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -0
  81. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +16 -5
  82. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +46 -0
  83. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  84. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +107 -0
  85. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +264 -0
  86. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -0
  87. package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -0
  88. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  89. package/FrameGraph/frameGraph.d.ts +9 -0
  90. package/FrameGraph/frameGraph.js +12 -3
  91. package/FrameGraph/frameGraph.js.map +1 -1
  92. package/FrameGraph/frameGraphTextureManager.js +4 -1
  93. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  94. package/FrameGraph/index.d.ts +5 -0
  95. package/FrameGraph/index.js +5 -0
  96. package/FrameGraph/index.js.map +1 -1
  97. package/Inputs/scene.inputManager.d.ts +1 -1
  98. package/Inputs/scene.inputManager.js +8 -1
  99. package/Inputs/scene.inputManager.js.map +1 -1
  100. package/Lights/Shadows/shadowGenerator.d.ts +1 -1
  101. package/Lights/Shadows/shadowGenerator.js +2 -7
  102. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  103. package/Lights/directionalLight.d.ts +5 -4
  104. package/Lights/directionalLight.js +7 -9
  105. package/Lights/directionalLight.js.map +1 -1
  106. package/Lights/shadowLight.d.ts +4 -4
  107. package/Lights/shadowLight.js +3 -2
  108. package/Lights/shadowLight.js.map +1 -1
  109. package/Lights/spotLight.d.ts +2 -2
  110. package/Lights/spotLight.js +3 -2
  111. package/Lights/spotLight.js.map +1 -1
  112. package/Loading/sceneLoader.d.ts +1 -1
  113. package/Loading/sceneLoader.js.map +1 -1
  114. package/Materials/GreasedLine/greasedLinePluginMaterial.js +1 -1
  115. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  116. package/Materials/PBR/pbrMetallicRoughnessMaterial.js +18 -6
  117. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  118. package/Materials/PBR/pbrSpecularGlossinessMaterial.js +18 -6
  119. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  120. package/Materials/Textures/renderTargetTexture.d.ts +2 -0
  121. package/Materials/Textures/renderTargetTexture.js +18 -8
  122. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  123. package/Materials/material.js +3 -1
  124. package/Materials/material.js.map +1 -1
  125. package/Materials/materialPluginBase.d.ts +4 -0
  126. package/Materials/materialPluginBase.js +4 -0
  127. package/Materials/materialPluginBase.js.map +1 -1
  128. package/Maths/math.color.js.map +1 -1
  129. package/Maths/math.vector.js.map +1 -1
  130. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  131. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  132. package/Meshes/lattice.material.d.ts +3 -8
  133. package/Meshes/lattice.material.js.map +1 -1
  134. package/Misc/copyTextureToTexture.js +1 -1
  135. package/Misc/copyTextureToTexture.js.map +1 -1
  136. package/Misc/filesInput.d.ts +3 -1
  137. package/Misc/filesInput.js +8 -4
  138. package/Misc/filesInput.js.map +1 -1
  139. package/PostProcesses/postProcess.d.ts +2 -2
  140. package/PostProcesses/postProcess.js +4 -4
  141. package/PostProcesses/postProcess.js.map +1 -1
  142. package/PostProcesses/postProcessManager.js +1 -1
  143. package/PostProcesses/postProcessManager.js.map +1 -1
  144. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
  145. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  146. package/Shaders/default.fragment.js +2 -1
  147. package/Shaders/default.fragment.js.map +1 -1
  148. package/Shaders/default.vertex.js +2 -1
  149. package/Shaders/default.vertex.js.map +1 -1
  150. package/Shaders/pbr.fragment.js +2 -1
  151. package/Shaders/pbr.fragment.js.map +1 -1
  152. package/Shaders/pbr.vertex.js +2 -1
  153. package/Shaders/pbr.vertex.js.map +1 -1
  154. package/XR/webXRCamera.js +3 -0
  155. package/XR/webXRCamera.js.map +1 -1
  156. package/package.json +1 -1
  157. package/scene.d.ts +7 -0
  158. package/scene.js +10 -1
  159. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"directionalLightFrustumViewer.js","sourceRoot":"","sources":["../../../../dev/core/src/Debug/directionalLightFrustumViewer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,OAAO,6BAA6B;IA+BtC;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY,CAAC,KAAa;QACjC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9D,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,IAAa;QAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,IAAa;QAC/B,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,KAAuB,EAAE,MAAc;QA9D3C,iBAAY,GAAY,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACxE,kBAAa,GAAY,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAKzE,kBAAa,GAAG,GAAG,CAAC;QAepB,eAAU,GAAG,IAAI,CAAC;QAkBlB,gBAAW,GAAG,IAAI,CAAC;QAwBvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACnD,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,IACI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAChD,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,qBAAqB;YACvD,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU;YACxC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAC1C,CAAC;YACC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAEvC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB;QAClL,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB;QAEhL,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEjD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QAEtH,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QACvG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QACvG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QACvG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAEvG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QAEtH,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;QACtG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;QACtG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;QACtG,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;QAEtG,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpJ,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAElJ,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhJ,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhJ,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhJ,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhJ,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAE/G,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAE9G,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAEhH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAE/G,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAE/G,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5C,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAES,eAAe;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAE3C,IAAI,CAAC,gBAAgB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5I,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5G,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAE1C,IAAI,CAAC,eAAe,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,QAAQ,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAEzC,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7F,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,SAAmB,EAAE,EAAE;YACnE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEjE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;YACrB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;YAEtC,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC;YAC1B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9B,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC;YAC5B,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;YAE3B,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YAEpC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;YACjC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;YAE7B,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAEpC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjE,SAAS,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChE,SAAS,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,SAAS,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClE,SAAS,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClE,SAAS,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9D,SAAS,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEtE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAES,oBAAoB;QAC1B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;CACJ","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { DirectionalLight } from \"../Lights/directionalLight\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../Maths/math.vector\";\r\nimport { CreateLines } from \"../Meshes/Builders/linesBuilder\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Scene } from \"../scene\";\r\n\r\n/**\r\n * Class used to render a debug view of the frustum for a directional light\r\n * @see https://playground.babylonjs.com/#7EFGSG#4\r\n * @since 5.0.0\r\n */\r\nexport class DirectionalLightFrustumViewer {\r\n private _scene: Scene;\r\n private _light: DirectionalLight;\r\n private _camera: Camera;\r\n private _inverseViewMatrix: Matrix;\r\n private _visible: boolean;\r\n\r\n private _rootNode: TransformNode;\r\n private _lightHelperFrustumMeshes: Mesh[];\r\n\r\n private _nearLinesPoints: Vector3[];\r\n private _farLinesPoints: Vector3[];\r\n private _trLinesPoints: Vector3[];\r\n private _brLinesPoints: Vector3[];\r\n private _tlLinesPoints: Vector3[];\r\n private _blLinesPoints: Vector3[];\r\n\r\n private _nearPlaneVertices: number[];\r\n private _farPlaneVertices: number[];\r\n private _rightPlaneVertices: number[];\r\n private _leftPlaneVertices: number[];\r\n private _topPlaneVertices: number[];\r\n private _bottomPlaneVertices: number[];\r\n\r\n private _oldPosition: Vector3 = new Vector3(Number.NaN, Number.NaN, Number.NaN);\r\n private _oldDirection: Vector3 = new Vector3(Number.NaN, Number.NaN, Number.NaN);\r\n private _oldAutoCalc: boolean;\r\n private _oldMinZ: number;\r\n private _oldMaxZ: number;\r\n\r\n private _transparency = 0.3;\r\n /**\r\n * Gets or sets the transparency of the frustum planes\r\n */\r\n public get transparency(): number {\r\n return this._transparency;\r\n }\r\n\r\n public set transparency(alpha: number) {\r\n this._transparency = alpha;\r\n for (let i = 6; i < 12; ++i) {\r\n this._lightHelperFrustumMeshes[i].material!.alpha = alpha;\r\n }\r\n }\r\n\r\n private _showLines = true;\r\n /**\r\n * true to display the edges of the frustum\r\n */\r\n public get showLines(): boolean {\r\n return this._showLines;\r\n }\r\n\r\n public set showLines(show: boolean) {\r\n if (this._showLines === show) {\r\n return;\r\n }\r\n this._showLines = show;\r\n for (let i = 0; i < 6; ++i) {\r\n this._lightHelperFrustumMeshes[i].setEnabled(show);\r\n }\r\n }\r\n\r\n private _showPlanes = true;\r\n /**\r\n * true to display the planes of the frustum\r\n */\r\n public get showPlanes(): boolean {\r\n return this._showPlanes;\r\n }\r\n\r\n public set showPlanes(show: boolean) {\r\n if (this._showPlanes === show) {\r\n return;\r\n }\r\n this._showPlanes = show;\r\n for (let i = 6; i < 12; ++i) {\r\n this._lightHelperFrustumMeshes[i].setEnabled(show);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new frustum viewer\r\n * @param light directional light to display the frustum for\r\n * @param camera camera used to retrieve the minZ / maxZ values if the shadowMinZ/shadowMaxZ values of the light are not setup\r\n */\r\n constructor(light: DirectionalLight, camera: Camera) {\r\n this._scene = light.getScene();\r\n this._light = light;\r\n this._camera = camera;\r\n this._inverseViewMatrix = Matrix.Identity();\r\n this._lightHelperFrustumMeshes = [];\r\n this._createGeometry();\r\n this.show();\r\n this.update();\r\n }\r\n\r\n /**\r\n * Shows the frustum\r\n */\r\n public show() {\r\n this._lightHelperFrustumMeshes.forEach((mesh, index) => {\r\n mesh.setEnabled((index < 6 && this._showLines) || (index >= 6 && this._showPlanes));\r\n });\r\n this._oldPosition.set(Number.NaN, Number.NaN, Number.NaN);\r\n this._visible = true;\r\n }\r\n\r\n /**\r\n * Hides the frustum\r\n */\r\n public hide() {\r\n this._lightHelperFrustumMeshes.forEach((mesh) => {\r\n mesh.setEnabled(false);\r\n });\r\n this._visible = false;\r\n }\r\n\r\n /**\r\n * Updates the frustum.\r\n * Call this method to update the frustum view if the light has changed position/direction\r\n */\r\n public update() {\r\n if (!this._visible) {\r\n return;\r\n }\r\n\r\n if (\r\n this._oldPosition.equals(this._light.position) &&\r\n this._oldDirection.equals(this._light.direction) &&\r\n this._oldAutoCalc === this._light.autoCalcShadowZBounds &&\r\n this._oldMinZ === this._light.shadowMinZ &&\r\n this._oldMaxZ === this._light.shadowMaxZ\r\n ) {\r\n return;\r\n }\r\n\r\n this._oldPosition.copyFrom(this._light.position);\r\n this._oldDirection.copyFrom(this._light.direction);\r\n this._oldAutoCalc = this._light.autoCalcShadowZBounds;\r\n this._oldMinZ = this._light.shadowMinZ;\r\n this._oldMaxZ = this._light.shadowMaxZ;\r\n\r\n TmpVectors.Vector3[0].set(this._light.orthoLeft, this._light.orthoBottom, this._light.shadowMinZ !== undefined ? this._light.shadowMinZ : this._camera.minZ); // min light extents\r\n TmpVectors.Vector3[1].set(this._light.orthoRight, this._light.orthoTop, this._light.shadowMaxZ !== undefined ? this._light.shadowMaxZ : this._camera.maxZ); // max light extents\r\n\r\n const invLightView = this._getInvertViewMatrix();\r\n\r\n TmpVectors.Vector3[2].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[0].z); // n1\r\n TmpVectors.Vector3[3].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[0].z); // n2\r\n TmpVectors.Vector3[4].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[0].z); // n3\r\n TmpVectors.Vector3[5].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[0].z); // n4\r\n\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[2], invLightView, TmpVectors.Vector3[2]); // near1\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[3], invLightView, TmpVectors.Vector3[3]); // near2\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[4], invLightView, TmpVectors.Vector3[4]); // near3\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[5], invLightView, TmpVectors.Vector3[5]); // near4\r\n\r\n TmpVectors.Vector3[6].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z); // f1\r\n TmpVectors.Vector3[7].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[1].z); // f2\r\n TmpVectors.Vector3[8].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[1].z); // f3\r\n TmpVectors.Vector3[9].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z); // f4\r\n\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[6], invLightView, TmpVectors.Vector3[6]); // far1\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[7], invLightView, TmpVectors.Vector3[7]); // far2\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[8], invLightView, TmpVectors.Vector3[8]); // far3\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[9], invLightView, TmpVectors.Vector3[9]); // far4\r\n\r\n CreateLines(\"nearlines\", { updatable: true, points: this._nearLinesPoints, instance: this._lightHelperFrustumMeshes[0] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"farlines\", { updatable: true, points: this._farLinesPoints, instance: this._lightHelperFrustumMeshes[1] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"trlines\", { updatable: true, points: this._trLinesPoints, instance: this._lightHelperFrustumMeshes[2] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"brlines\", { updatable: true, points: this._brLinesPoints, instance: this._lightHelperFrustumMeshes[3] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"tllines\", { updatable: true, points: this._tlLinesPoints, instance: this._lightHelperFrustumMeshes[4] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"bllines\", { updatable: true, points: this._blLinesPoints, instance: this._lightHelperFrustumMeshes[5] as LinesMesh }, this._scene);\r\n\r\n TmpVectors.Vector3[2].toArray(this._nearPlaneVertices, 0);\r\n TmpVectors.Vector3[3].toArray(this._nearPlaneVertices, 3);\r\n TmpVectors.Vector3[4].toArray(this._nearPlaneVertices, 6);\r\n TmpVectors.Vector3[5].toArray(this._nearPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[6].geometry?.updateVerticesDataDirectly(\"position\", this._nearPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[6].toArray(this._farPlaneVertices, 0);\r\n TmpVectors.Vector3[7].toArray(this._farPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._farPlaneVertices, 6);\r\n TmpVectors.Vector3[9].toArray(this._farPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[7].geometry?.updateVerticesDataDirectly(\"position\", this._farPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[2].toArray(this._rightPlaneVertices, 0);\r\n TmpVectors.Vector3[6].toArray(this._rightPlaneVertices, 3);\r\n TmpVectors.Vector3[7].toArray(this._rightPlaneVertices, 6);\r\n TmpVectors.Vector3[3].toArray(this._rightPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[8].geometry?.updateVerticesDataDirectly(\"position\", this._rightPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[5].toArray(this._leftPlaneVertices, 0);\r\n TmpVectors.Vector3[9].toArray(this._leftPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._leftPlaneVertices, 6);\r\n TmpVectors.Vector3[4].toArray(this._leftPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[9].geometry?.updateVerticesDataDirectly(\"position\", this._leftPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[2].toArray(this._topPlaneVertices, 0);\r\n TmpVectors.Vector3[6].toArray(this._topPlaneVertices, 3);\r\n TmpVectors.Vector3[9].toArray(this._topPlaneVertices, 6);\r\n TmpVectors.Vector3[5].toArray(this._topPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[10].geometry?.updateVerticesDataDirectly(\"position\", this._topPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[3].toArray(this._bottomPlaneVertices, 0);\r\n TmpVectors.Vector3[7].toArray(this._bottomPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._bottomPlaneVertices, 6);\r\n TmpVectors.Vector3[4].toArray(this._bottomPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[11].geometry?.updateVerticesDataDirectly(\"position\", this._bottomPlaneVertices, 0);\r\n }\r\n\r\n /**\r\n * Dispose of the class / remove the frustum view\r\n */\r\n public dispose() {\r\n this._lightHelperFrustumMeshes.forEach((mesh) => {\r\n mesh.material?.dispose();\r\n mesh.dispose();\r\n });\r\n this._rootNode.dispose();\r\n }\r\n\r\n protected _createGeometry() {\r\n this._rootNode = new TransformNode(\"directionalLightHelperRoot_\" + this._light.name, this._scene);\r\n this._rootNode.parent = this._light.parent;\r\n\r\n this._nearLinesPoints = [TmpVectors.Vector3[0], TmpVectors.Vector3[1], TmpVectors.Vector3[2], TmpVectors.Vector3[3], TmpVectors.Vector3[4]];\r\n const nearLines = CreateLines(\"nearlines\", { updatable: true, points: this._nearLinesPoints }, this._scene);\r\n nearLines.parent = this._rootNode;\r\n nearLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._farLinesPoints = [TmpVectors.Vector3[5], TmpVectors.Vector3[6], TmpVectors.Vector3[7], TmpVectors.Vector3[8], TmpVectors.Vector3[9]];\r\n const farLines = CreateLines(\"farlines\", { updatable: true, points: this._farLinesPoints }, this._scene);\r\n farLines.parent = this._rootNode;\r\n farLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._trLinesPoints = [TmpVectors.Vector3[10], TmpVectors.Vector3[11]];\r\n const trLines = CreateLines(\"trlines\", { updatable: true, points: this._trLinesPoints }, this._scene);\r\n trLines.parent = this._rootNode;\r\n trLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._brLinesPoints = [TmpVectors.Vector3[12], TmpVectors.Vector3[0]];\r\n const brLines = CreateLines(\"brlines\", { updatable: true, points: this._brLinesPoints }, this._scene);\r\n brLines.parent = this._rootNode;\r\n brLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._tlLinesPoints = [TmpVectors.Vector3[1], TmpVectors.Vector3[2]];\r\n const tlLines = CreateLines(\"tllines\", { updatable: true, points: this._tlLinesPoints }, this._scene);\r\n tlLines.parent = this._rootNode;\r\n tlLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._blLinesPoints = [TmpVectors.Vector3[3], TmpVectors.Vector3[4]];\r\n const blLines = CreateLines(\"bllines\", { updatable: true, points: this._blLinesPoints }, this._scene);\r\n blLines.parent = this._rootNode;\r\n blLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._lightHelperFrustumMeshes.push(nearLines, farLines, trLines, brLines, tlLines, blLines);\r\n\r\n const makePlane = (name: string, color: Color3, positions: number[]) => {\r\n const plane = new Mesh(name + \"plane\", this._scene);\r\n const mat = new StandardMaterial(name + \"PlaneMat\", this._scene);\r\n\r\n plane.material = mat;\r\n plane.parent = this._rootNode;\r\n plane.alwaysSelectAsActiveMesh = true;\r\n\r\n mat.emissiveColor = color;\r\n mat.alpha = this.transparency;\r\n mat.backFaceCulling = false;\r\n mat.disableLighting = true;\r\n\r\n const indices = [0, 1, 2, 0, 2, 3];\r\n\r\n const vertexData = new VertexData();\r\n\r\n vertexData.positions = positions;\r\n vertexData.indices = indices;\r\n\r\n vertexData.applyToMesh(plane, true);\r\n\r\n this._lightHelperFrustumMeshes.push(plane);\r\n };\r\n\r\n this._nearPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._farPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._rightPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._leftPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._topPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._bottomPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\n makePlane(\"near\", new Color3(1, 0, 0), this._nearPlaneVertices);\r\n makePlane(\"far\", new Color3(0.3, 0, 0), this._farPlaneVertices);\r\n makePlane(\"right\", new Color3(0, 1, 0), this._rightPlaneVertices);\r\n makePlane(\"left\", new Color3(0, 0.3, 0), this._leftPlaneVertices);\r\n makePlane(\"top\", new Color3(0, 0, 1), this._topPlaneVertices);\r\n makePlane(\"bottom\", new Color3(0, 0, 0.3), this._bottomPlaneVertices);\r\n\r\n this._nearLinesPoints[0] = TmpVectors.Vector3[2];\r\n this._nearLinesPoints[1] = TmpVectors.Vector3[3];\r\n this._nearLinesPoints[2] = TmpVectors.Vector3[4];\r\n this._nearLinesPoints[3] = TmpVectors.Vector3[5];\r\n this._nearLinesPoints[4] = TmpVectors.Vector3[2];\r\n\r\n this._farLinesPoints[0] = TmpVectors.Vector3[6];\r\n this._farLinesPoints[1] = TmpVectors.Vector3[7];\r\n this._farLinesPoints[2] = TmpVectors.Vector3[8];\r\n this._farLinesPoints[3] = TmpVectors.Vector3[9];\r\n this._farLinesPoints[4] = TmpVectors.Vector3[6];\r\n\r\n this._trLinesPoints[0] = TmpVectors.Vector3[2];\r\n this._trLinesPoints[1] = TmpVectors.Vector3[6];\r\n\r\n this._brLinesPoints[0] = TmpVectors.Vector3[3];\r\n this._brLinesPoints[1] = TmpVectors.Vector3[7];\r\n\r\n this._tlLinesPoints[0] = TmpVectors.Vector3[4];\r\n this._tlLinesPoints[1] = TmpVectors.Vector3[8];\r\n\r\n this._blLinesPoints[0] = TmpVectors.Vector3[5];\r\n this._blLinesPoints[1] = TmpVectors.Vector3[9];\r\n }\r\n\r\n protected _getInvertViewMatrix(): Matrix {\r\n Matrix.LookAtLHToRef(this._light.position, this._light.position.add(this._light.direction), Vector3.UpReadOnly, this._inverseViewMatrix);\r\n this._inverseViewMatrix.invertToRef(this._inverseViewMatrix);\r\n return this._inverseViewMatrix;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"directionalLightFrustumViewer.js","sourceRoot":"","sources":["../../../../dev/core/src/Debug/directionalLightFrustumViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { DirectionalLight } from \"../Lights/directionalLight\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../Maths/math.vector\";\r\nimport { CreateLines } from \"../Meshes/Builders/linesBuilder\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Class used to render a debug view of the frustum for a directional light\r\n * @see https://playground.babylonjs.com/#7EFGSG#4\r\n * @since 5.0.0\r\n */\r\nexport class DirectionalLightFrustumViewer {\r\n private _scene: Scene;\r\n private _light: DirectionalLight;\r\n private _camera: Nullable<Camera>;\r\n private _inverseViewMatrix: Matrix;\r\n private _visible: boolean;\r\n\r\n private _rootNode: TransformNode;\r\n private _lightHelperFrustumMeshes: Mesh[];\r\n\r\n private _nearLinesPoints: Vector3[];\r\n private _farLinesPoints: Vector3[];\r\n private _trLinesPoints: Vector3[];\r\n private _brLinesPoints: Vector3[];\r\n private _tlLinesPoints: Vector3[];\r\n private _blLinesPoints: Vector3[];\r\n\r\n private _nearPlaneVertices: number[];\r\n private _farPlaneVertices: number[];\r\n private _rightPlaneVertices: number[];\r\n private _leftPlaneVertices: number[];\r\n private _topPlaneVertices: number[];\r\n private _bottomPlaneVertices: number[];\r\n\r\n private _oldPosition: Vector3 = new Vector3(Number.NaN, Number.NaN, Number.NaN);\r\n private _oldDirection: Vector3 = new Vector3(Number.NaN, Number.NaN, Number.NaN);\r\n private _oldAutoCalc: boolean;\r\n private _oldMinZ: number;\r\n private _oldMaxZ: number;\r\n\r\n private _transparency = 0.3;\r\n /**\r\n * Gets or sets the transparency of the frustum planes\r\n */\r\n public get transparency(): number {\r\n return this._transparency;\r\n }\r\n\r\n public set transparency(alpha: number) {\r\n this._transparency = alpha;\r\n for (let i = 6; i < 12; ++i) {\r\n this._lightHelperFrustumMeshes[i].material!.alpha = alpha;\r\n }\r\n }\r\n\r\n private _showLines = true;\r\n /**\r\n * true to display the edges of the frustum\r\n */\r\n public get showLines(): boolean {\r\n return this._showLines;\r\n }\r\n\r\n public set showLines(show: boolean) {\r\n if (this._showLines === show) {\r\n return;\r\n }\r\n this._showLines = show;\r\n for (let i = 0; i < 6; ++i) {\r\n this._lightHelperFrustumMeshes[i].setEnabled(show);\r\n }\r\n }\r\n\r\n private _showPlanes = true;\r\n /**\r\n * true to display the planes of the frustum\r\n */\r\n public get showPlanes(): boolean {\r\n return this._showPlanes;\r\n }\r\n\r\n public set showPlanes(show: boolean) {\r\n if (this._showPlanes === show) {\r\n return;\r\n }\r\n this._showPlanes = show;\r\n for (let i = 6; i < 12; ++i) {\r\n this._lightHelperFrustumMeshes[i].setEnabled(show);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new frustum viewer\r\n * @param light directional light to display the frustum for\r\n * @param camera camera used to retrieve the minZ / maxZ values if the shadowMinZ/shadowMaxZ values of the light are not setup\r\n */\r\n constructor(light: DirectionalLight, camera: Nullable<Camera> = null) {\r\n this._scene = light.getScene();\r\n this._light = light;\r\n this._camera = camera;\r\n this._inverseViewMatrix = Matrix.Identity();\r\n this._lightHelperFrustumMeshes = [];\r\n this._createGeometry();\r\n this.show();\r\n this.update();\r\n }\r\n\r\n /**\r\n * Shows the frustum\r\n */\r\n public show() {\r\n this._lightHelperFrustumMeshes.forEach((mesh, index) => {\r\n mesh.setEnabled((index < 6 && this._showLines) || (index >= 6 && this._showPlanes));\r\n });\r\n this._oldPosition.set(Number.NaN, Number.NaN, Number.NaN);\r\n this._visible = true;\r\n }\r\n\r\n /**\r\n * Hides the frustum\r\n */\r\n public hide() {\r\n this._lightHelperFrustumMeshes.forEach((mesh) => {\r\n mesh.setEnabled(false);\r\n });\r\n this._visible = false;\r\n }\r\n\r\n /**\r\n * Updates the frustum.\r\n * Call this method to update the frustum view if the light has changed position/direction\r\n */\r\n public update() {\r\n if (!this._visible) {\r\n return;\r\n }\r\n\r\n if (\r\n this._oldPosition.equals(this._light.position) &&\r\n this._oldDirection.equals(this._light.direction) &&\r\n this._oldAutoCalc === this._light.autoCalcShadowZBounds &&\r\n this._oldMinZ === this._light.shadowMinZ &&\r\n this._oldMaxZ === this._light.shadowMaxZ\r\n ) {\r\n return;\r\n }\r\n\r\n this._oldPosition.copyFrom(this._light.position);\r\n this._oldDirection.copyFrom(this._light.direction);\r\n this._oldAutoCalc = this._light.autoCalcShadowZBounds;\r\n this._oldMinZ = this._light.shadowMinZ;\r\n this._oldMaxZ = this._light.shadowMaxZ;\r\n\r\n TmpVectors.Vector3[0].set(\r\n this._light.orthoLeft,\r\n this._light.orthoBottom,\r\n this._light.shadowMinZ !== undefined ? this._light.shadowMinZ : (this._camera?.minZ ?? Constants.ShadowMinZ)\r\n ); // min light extents\r\n TmpVectors.Vector3[1].set(\r\n this._light.orthoRight,\r\n this._light.orthoTop,\r\n this._light.shadowMaxZ !== undefined ? this._light.shadowMaxZ : (this._camera?.maxZ ?? Constants.ShadowMaxZ)\r\n ); // max light extents\r\n\r\n const invLightView = this._getInvertViewMatrix();\r\n\r\n TmpVectors.Vector3[2].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[0].z); // n1\r\n TmpVectors.Vector3[3].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[0].z); // n2\r\n TmpVectors.Vector3[4].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[0].z); // n3\r\n TmpVectors.Vector3[5].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[0].z); // n4\r\n\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[2], invLightView, TmpVectors.Vector3[2]); // near1\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[3], invLightView, TmpVectors.Vector3[3]); // near2\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[4], invLightView, TmpVectors.Vector3[4]); // near3\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[5], invLightView, TmpVectors.Vector3[5]); // near4\r\n\r\n TmpVectors.Vector3[6].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z); // f1\r\n TmpVectors.Vector3[7].copyFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[1].z); // f2\r\n TmpVectors.Vector3[8].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[0].y, TmpVectors.Vector3[1].z); // f3\r\n TmpVectors.Vector3[9].copyFromFloats(TmpVectors.Vector3[0].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z); // f4\r\n\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[6], invLightView, TmpVectors.Vector3[6]); // far1\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[7], invLightView, TmpVectors.Vector3[7]); // far2\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[8], invLightView, TmpVectors.Vector3[8]); // far3\r\n Vector3.TransformCoordinatesToRef(TmpVectors.Vector3[9], invLightView, TmpVectors.Vector3[9]); // far4\r\n\r\n CreateLines(\"nearlines\", { updatable: true, points: this._nearLinesPoints, instance: this._lightHelperFrustumMeshes[0] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"farlines\", { updatable: true, points: this._farLinesPoints, instance: this._lightHelperFrustumMeshes[1] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"trlines\", { updatable: true, points: this._trLinesPoints, instance: this._lightHelperFrustumMeshes[2] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"brlines\", { updatable: true, points: this._brLinesPoints, instance: this._lightHelperFrustumMeshes[3] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"tllines\", { updatable: true, points: this._tlLinesPoints, instance: this._lightHelperFrustumMeshes[4] as LinesMesh }, this._scene);\r\n\r\n CreateLines(\"bllines\", { updatable: true, points: this._blLinesPoints, instance: this._lightHelperFrustumMeshes[5] as LinesMesh }, this._scene);\r\n\r\n TmpVectors.Vector3[2].toArray(this._nearPlaneVertices, 0);\r\n TmpVectors.Vector3[3].toArray(this._nearPlaneVertices, 3);\r\n TmpVectors.Vector3[4].toArray(this._nearPlaneVertices, 6);\r\n TmpVectors.Vector3[5].toArray(this._nearPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[6].geometry?.updateVerticesDataDirectly(\"position\", this._nearPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[6].toArray(this._farPlaneVertices, 0);\r\n TmpVectors.Vector3[7].toArray(this._farPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._farPlaneVertices, 6);\r\n TmpVectors.Vector3[9].toArray(this._farPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[7].geometry?.updateVerticesDataDirectly(\"position\", this._farPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[2].toArray(this._rightPlaneVertices, 0);\r\n TmpVectors.Vector3[6].toArray(this._rightPlaneVertices, 3);\r\n TmpVectors.Vector3[7].toArray(this._rightPlaneVertices, 6);\r\n TmpVectors.Vector3[3].toArray(this._rightPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[8].geometry?.updateVerticesDataDirectly(\"position\", this._rightPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[5].toArray(this._leftPlaneVertices, 0);\r\n TmpVectors.Vector3[9].toArray(this._leftPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._leftPlaneVertices, 6);\r\n TmpVectors.Vector3[4].toArray(this._leftPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[9].geometry?.updateVerticesDataDirectly(\"position\", this._leftPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[2].toArray(this._topPlaneVertices, 0);\r\n TmpVectors.Vector3[6].toArray(this._topPlaneVertices, 3);\r\n TmpVectors.Vector3[9].toArray(this._topPlaneVertices, 6);\r\n TmpVectors.Vector3[5].toArray(this._topPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[10].geometry?.updateVerticesDataDirectly(\"position\", this._topPlaneVertices, 0);\r\n\r\n TmpVectors.Vector3[3].toArray(this._bottomPlaneVertices, 0);\r\n TmpVectors.Vector3[7].toArray(this._bottomPlaneVertices, 3);\r\n TmpVectors.Vector3[8].toArray(this._bottomPlaneVertices, 6);\r\n TmpVectors.Vector3[4].toArray(this._bottomPlaneVertices, 9);\r\n this._lightHelperFrustumMeshes[11].geometry?.updateVerticesDataDirectly(\"position\", this._bottomPlaneVertices, 0);\r\n }\r\n\r\n /**\r\n * Dispose of the class / remove the frustum view\r\n */\r\n public dispose() {\r\n this._lightHelperFrustumMeshes.forEach((mesh) => {\r\n mesh.material?.dispose();\r\n mesh.dispose();\r\n });\r\n this._rootNode.dispose();\r\n }\r\n\r\n protected _createGeometry() {\r\n this._rootNode = new TransformNode(\"directionalLightHelperRoot_\" + this._light.name, this._scene);\r\n this._rootNode.parent = this._light.parent;\r\n\r\n this._nearLinesPoints = [TmpVectors.Vector3[0], TmpVectors.Vector3[1], TmpVectors.Vector3[2], TmpVectors.Vector3[3], TmpVectors.Vector3[4]];\r\n const nearLines = CreateLines(\"nearlines\", { updatable: true, points: this._nearLinesPoints }, this._scene);\r\n nearLines.parent = this._rootNode;\r\n nearLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._farLinesPoints = [TmpVectors.Vector3[5], TmpVectors.Vector3[6], TmpVectors.Vector3[7], TmpVectors.Vector3[8], TmpVectors.Vector3[9]];\r\n const farLines = CreateLines(\"farlines\", { updatable: true, points: this._farLinesPoints }, this._scene);\r\n farLines.parent = this._rootNode;\r\n farLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._trLinesPoints = [TmpVectors.Vector3[10], TmpVectors.Vector3[11]];\r\n const trLines = CreateLines(\"trlines\", { updatable: true, points: this._trLinesPoints }, this._scene);\r\n trLines.parent = this._rootNode;\r\n trLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._brLinesPoints = [TmpVectors.Vector3[12], TmpVectors.Vector3[0]];\r\n const brLines = CreateLines(\"brlines\", { updatable: true, points: this._brLinesPoints }, this._scene);\r\n brLines.parent = this._rootNode;\r\n brLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._tlLinesPoints = [TmpVectors.Vector3[1], TmpVectors.Vector3[2]];\r\n const tlLines = CreateLines(\"tllines\", { updatable: true, points: this._tlLinesPoints }, this._scene);\r\n tlLines.parent = this._rootNode;\r\n tlLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._blLinesPoints = [TmpVectors.Vector3[3], TmpVectors.Vector3[4]];\r\n const blLines = CreateLines(\"bllines\", { updatable: true, points: this._blLinesPoints }, this._scene);\r\n blLines.parent = this._rootNode;\r\n blLines.alwaysSelectAsActiveMesh = true;\r\n\r\n this._lightHelperFrustumMeshes.push(nearLines, farLines, trLines, brLines, tlLines, blLines);\r\n\r\n const makePlane = (name: string, color: Color3, positions: number[]) => {\r\n const plane = new Mesh(name + \"plane\", this._scene);\r\n const mat = new StandardMaterial(name + \"PlaneMat\", this._scene);\r\n\r\n plane.material = mat;\r\n plane.parent = this._rootNode;\r\n plane.alwaysSelectAsActiveMesh = true;\r\n\r\n mat.emissiveColor = color;\r\n mat.alpha = this.transparency;\r\n mat.backFaceCulling = false;\r\n mat.disableLighting = true;\r\n\r\n const indices = [0, 1, 2, 0, 2, 3];\r\n\r\n const vertexData = new VertexData();\r\n\r\n vertexData.positions = positions;\r\n vertexData.indices = indices;\r\n\r\n vertexData.applyToMesh(plane, true);\r\n\r\n this._lightHelperFrustumMeshes.push(plane);\r\n };\r\n\r\n this._nearPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._farPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._rightPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._leftPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._topPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n this._bottomPlaneVertices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\n makePlane(\"near\", new Color3(1, 0, 0), this._nearPlaneVertices);\r\n makePlane(\"far\", new Color3(0.3, 0, 0), this._farPlaneVertices);\r\n makePlane(\"right\", new Color3(0, 1, 0), this._rightPlaneVertices);\r\n makePlane(\"left\", new Color3(0, 0.3, 0), this._leftPlaneVertices);\r\n makePlane(\"top\", new Color3(0, 0, 1), this._topPlaneVertices);\r\n makePlane(\"bottom\", new Color3(0, 0, 0.3), this._bottomPlaneVertices);\r\n\r\n this._nearLinesPoints[0] = TmpVectors.Vector3[2];\r\n this._nearLinesPoints[1] = TmpVectors.Vector3[3];\r\n this._nearLinesPoints[2] = TmpVectors.Vector3[4];\r\n this._nearLinesPoints[3] = TmpVectors.Vector3[5];\r\n this._nearLinesPoints[4] = TmpVectors.Vector3[2];\r\n\r\n this._farLinesPoints[0] = TmpVectors.Vector3[6];\r\n this._farLinesPoints[1] = TmpVectors.Vector3[7];\r\n this._farLinesPoints[2] = TmpVectors.Vector3[8];\r\n this._farLinesPoints[3] = TmpVectors.Vector3[9];\r\n this._farLinesPoints[4] = TmpVectors.Vector3[6];\r\n\r\n this._trLinesPoints[0] = TmpVectors.Vector3[2];\r\n this._trLinesPoints[1] = TmpVectors.Vector3[6];\r\n\r\n this._brLinesPoints[0] = TmpVectors.Vector3[3];\r\n this._brLinesPoints[1] = TmpVectors.Vector3[7];\r\n\r\n this._tlLinesPoints[0] = TmpVectors.Vector3[4];\r\n this._tlLinesPoints[1] = TmpVectors.Vector3[8];\r\n\r\n this._blLinesPoints[0] = TmpVectors.Vector3[5];\r\n this._blLinesPoints[1] = TmpVectors.Vector3[9];\r\n }\r\n\r\n protected _getInvertViewMatrix(): Matrix {\r\n Matrix.LookAtLHToRef(this._light.position, this._light.position.add(this._light.direction), Vector3.UpReadOnly, this._inverseViewMatrix);\r\n this._inverseViewMatrix.invertToRef(this._inverseViewMatrix);\r\n return this._inverseViewMatrix;\r\n }\r\n}\r\n"]}
@@ -378,5 +378,6 @@ ThinEngine.prototype.resolveMultiFramebuffer = function (texture) {
378
378
  attachments[i] = gl[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + i : "COLOR_ATTACHMENT" + i + "_WEBGL"];
379
379
  }
380
380
  gl.drawBuffers(attachments);
381
+ gl.bindFramebuffer(this._gl.FRAMEBUFFER, rtWrapper._MSAAFramebuffer);
381
382
  };
382
383
  //# sourceMappingURL=engine.multiRender.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.multiRender.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiRender.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IMultiRenderTargetOptions } from \"../../Materials/Textures/multiRenderTarget\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport { ThinEngine } from \"../thinEngine\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { WebGLHardwareTexture } from \"../WebGL/webGLHardwareTexture\";\r\nimport type { TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /**\r\n * Unbind a list of render target textures from the webGL context\r\n * This is used only when drawBuffer extension or webGL2 are active\r\n * @param rtWrapper defines the render target wrapper to unbind\r\n * @param disableGenerateMipMaps defines a boolean indicating that mipmaps must not be generated\r\n * @param onBeforeUnbind defines a function which will be called before the effective unbind\r\n */\r\n unBindMultiColorAttachmentFramebuffer(rtWrapper: RenderTargetWrapper, disableGenerateMipMaps: boolean, onBeforeUnbind?: () => void): void;\r\n\r\n /**\r\n * Create a multi render target texture\r\n * @see https://doc.babylonjs.com/setup/support/webGL2#multiple-render-target\r\n * @param size defines the size of the texture\r\n * @param options defines the creation options\r\n * @param initializeBuffers if set to true, the engine will make an initializing call of drawBuffers\r\n * @returns a new render target wrapper ready to render textures\r\n */\r\n createMultipleRenderTarget(size: TextureSize, options: IMultiRenderTargetOptions, initializeBuffers?: boolean): RenderTargetWrapper;\r\n\r\n /**\r\n * Update the sample count for a given multiple render target texture\r\n * @see https://doc.babylonjs.com/setup/support/webGL2#multisample-render-targets\r\n * @param rtWrapper defines the render target wrapper to update\r\n * @param samples defines the sample count to set\r\n * @param initializeBuffers if set to true, the engine will make an initializing call of drawBuffers\r\n * @returns the effective sample count (could be 0 if multisample render targets are not supported)\r\n */\r\n updateMultipleRenderTargetTextureSampleCount(rtWrapper: Nullable<RenderTargetWrapper>, samples: number, initializeBuffers?: boolean): number;\r\n\r\n /**\r\n * Generates mipmaps for the texture of the (multi) render target\r\n * @param texture The render target containing the textures to generate the mipmaps for\r\n */\r\n generateMipMapsMultiFramebuffer(texture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Resolves the MSAA textures of the (multi) render target into their non-MSAA version.\r\n * Note that if \"texture\" is not a MSAA render target, no resolve is performed.\r\n * @param texture The render target texture containing the MSAA textures to resolve\r\n */\r\n resolveMultiFramebuffer(texture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Select a subsets of attachments to draw to.\r\n * @param attachments gl attachments\r\n */\r\n bindAttachments(attachments: number[]): void;\r\n\r\n /**\r\n * Creates a layout object to draw/clear on specific textures in a MRT\r\n * @param textureStatus textureStatus[i] indicates if the i-th is active\r\n * @returns A layout to be fed to the engine, calling `bindAttachments`.\r\n */\r\n buildTextureLayout(textureStatus: boolean[]): number[];\r\n\r\n /**\r\n * Restores the webgl state to only draw on the main color attachment\r\n * when the frame buffer associated is the canvas frame buffer\r\n */\r\n restoreSingleAttachment(): void;\r\n\r\n /**\r\n * Restores the webgl state to only draw on the main color attachment\r\n * when the frame buffer associated is not the canvas frame buffer\r\n */\r\n restoreSingleAttachmentForRenderTarget(): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype.restoreSingleAttachment = function (): void {\r\n const gl = this._gl;\r\n\r\n this.bindAttachments([gl.BACK]);\r\n};\r\n\r\nThinEngine.prototype.restoreSingleAttachmentForRenderTarget = function (): void {\r\n const gl = this._gl;\r\n\r\n this.bindAttachments([gl.COLOR_ATTACHMENT0]);\r\n};\r\n\r\nThinEngine.prototype.buildTextureLayout = function (textureStatus: boolean[]): number[] {\r\n const gl = this._gl;\r\n\r\n const result = [];\r\n\r\n for (let i = 0; i < textureStatus.length; i++) {\r\n if (textureStatus[i]) {\r\n result.push((<any>gl)[\"COLOR_ATTACHMENT\" + i]);\r\n } else {\r\n result.push(gl.NONE);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nThinEngine.prototype.bindAttachments = function (attachments: number[]): void {\r\n const gl = this._gl;\r\n\r\n gl.drawBuffers(attachments);\r\n};\r\n\r\nThinEngine.prototype.unBindMultiColorAttachmentFramebuffer = function (\r\n rtWrapper: WebGLRenderTargetWrapper,\r\n disableGenerateMipMaps: boolean = false,\r\n onBeforeUnbind?: () => void\r\n): void {\r\n this._currentRenderTarget = null;\r\n\r\n if (!rtWrapper.disableAutomaticMSAAResolve) {\r\n this.resolveMultiFramebuffer(rtWrapper);\r\n }\r\n\r\n if (!disableGenerateMipMaps) {\r\n this.generateMipMapsMultiFramebuffer(rtWrapper);\r\n }\r\n\r\n if (onBeforeUnbind) {\r\n if (rtWrapper._MSAAFramebuffer) {\r\n // Bind the correct framebuffer\r\n this._bindUnboundFramebuffer(rtWrapper._framebuffer);\r\n }\r\n onBeforeUnbind();\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n};\r\n\r\nThinEngine.prototype.createMultipleRenderTarget = function (size: TextureSize, options: IMultiRenderTargetOptions, initializeBuffers: boolean = true): RenderTargetWrapper {\r\n let generateMipMaps = false;\r\n let generateDepthBuffer = true;\r\n let generateStencilBuffer = false;\r\n let generateDepthTexture = false;\r\n let depthTextureFormat: number | undefined = undefined;\r\n let textureCount = 1;\r\n let samples = 1;\r\n\r\n const defaultType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n const defaultSamplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n const defaultUseSRGBBuffer = false;\r\n const defaultFormat = Constants.TEXTUREFORMAT_RGBA;\r\n const defaultTarget = Constants.TEXTURE_2D;\r\n\r\n let types: number[] = [];\r\n let samplingModes: number[] = [];\r\n let useSRGBBuffers: boolean[] = [];\r\n let formats: number[] = [];\r\n let targets: number[] = [];\r\n let faceIndex: number[] = [];\r\n let layerIndex: number[] = [];\r\n let layers: number[] = [];\r\n let labels: string[] = [];\r\n let dontCreateTextures = false;\r\n\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(true, false, size) as WebGLRenderTargetWrapper;\r\n\r\n if (options !== undefined) {\r\n generateMipMaps = options.generateMipMaps === undefined ? false : options.generateMipMaps;\r\n generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n generateStencilBuffer = options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;\r\n generateDepthTexture = options.generateDepthTexture === undefined ? false : options.generateDepthTexture;\r\n textureCount = options.textureCount ?? 1;\r\n samples = options.samples ?? samples;\r\n types = options.types || types;\r\n samplingModes = options.samplingModes || samplingModes;\r\n useSRGBBuffers = options.useSRGBBuffers || useSRGBBuffers;\r\n formats = options.formats || formats;\r\n targets = options.targetTypes || targets;\r\n faceIndex = options.faceIndex || faceIndex;\r\n layerIndex = options.layerIndex || layerIndex;\r\n layers = options.layerCounts || layers;\r\n labels = options.labels || labels;\r\n dontCreateTextures = options.dontCreateTextures ?? false;\r\n\r\n if (\r\n this.webGLVersion > 1 &&\r\n (options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32_FLOAT ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8)\r\n ) {\r\n depthTextureFormat = options.depthTextureFormat;\r\n }\r\n }\r\n\r\n if (depthTextureFormat === undefined) {\r\n depthTextureFormat = generateStencilBuffer ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\r\n }\r\n\r\n const gl = this._gl;\r\n // Create the framebuffer\r\n const framebuffer = gl.createFramebuffer();\r\n this._bindUnboundFramebuffer(framebuffer);\r\n\r\n const width = (<{ width: number; height: number }>size).width ?? <number>size;\r\n const height = (<{ width: number; height: number }>size).height ?? <number>size;\r\n\r\n const textures: InternalTexture[] = [];\r\n const attachments: number[] = [];\r\n\r\n const useStencilTexture =\r\n this.webGLVersion > 1 &&\r\n (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 ||\r\n depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 ||\r\n depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8);\r\n\r\n rtWrapper.label = options?.label ?? \"MultiRenderTargetWrapper\";\r\n rtWrapper._framebuffer = framebuffer;\r\n rtWrapper._generateDepthBuffer = generateDepthTexture || generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = generateDepthTexture ? useStencilTexture : generateStencilBuffer;\r\n rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(rtWrapper._generateStencilBuffer, rtWrapper._generateDepthBuffer, width, height, 1, depthTextureFormat);\r\n rtWrapper._attachments = attachments;\r\n\r\n for (let i = 0; i < textureCount; i++) {\r\n let samplingMode = samplingModes[i] || defaultSamplingMode;\r\n let type = types[i] || defaultType;\r\n let useSRGBBuffer = useSRGBBuffers[i] || defaultUseSRGBBuffer;\r\n const format = formats[i] || defaultFormat;\r\n\r\n const target = targets[i] || defaultTarget;\r\n const layerCount = layers[i] ?? 1;\r\n\r\n if (type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloatLinearFiltering) {\r\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\r\n samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n } else if (type === Constants.TEXTURETYPE_HALF_FLOAT && !this._caps.textureHalfFloatLinearFiltering) {\r\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\r\n samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n }\r\n\r\n const filters = this._getSamplingParameters(samplingMode, generateMipMaps);\r\n if (type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloat) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n Logger.Warn(\"Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type\");\r\n }\r\n\r\n useSRGBBuffer = useSRGBBuffer && this._caps.supportSRGBBuffers && (this.webGLVersion > 1 || this.isWebGPU);\r\n\r\n const isWebGL2 = this.webGLVersion > 1;\r\n const attachment = (<any>gl)[isWebGL2 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n\r\n attachments.push(attachment);\r\n\r\n if (target === -1 || dontCreateTextures) {\r\n continue;\r\n }\r\n\r\n const texture = new InternalTexture(this, InternalTextureSource.MultiRenderTarget);\r\n textures[i] = texture;\r\n\r\n gl.activeTexture((<any>gl)[\"TEXTURE\" + i]);\r\n gl.bindTexture(target, texture._hardwareTexture!.underlyingResource);\r\n\r\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, filters.mag);\r\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, filters.min);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n const internalSizedFormat = this._getRGBABufferInternalSizedFormat(type, format, useSRGBBuffer);\r\n const internalFormat = this._getInternalFormat(format);\r\n const webGLTextureType = this._getWebGLTextureType(type);\r\n\r\n if (isWebGL2 && (target === Constants.TEXTURE_2D_ARRAY || target === Constants.TEXTURE_3D)) {\r\n if (target === Constants.TEXTURE_2D_ARRAY) {\r\n texture.is2DArray = true;\r\n } else {\r\n texture.is3D = true;\r\n }\r\n\r\n texture.baseDepth = texture.depth = layerCount;\r\n\r\n gl.texImage3D(target, 0, internalSizedFormat, width, height, layerCount, 0, internalFormat, webGLTextureType, null);\r\n } else if (target === Constants.TEXTURE_CUBE_MAP) {\r\n // We have to generate all faces to complete the framebuffer\r\n for (let i = 0; i < 6; i++) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);\r\n }\r\n texture.isCube = true;\r\n } else {\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);\r\n }\r\n\r\n if (generateMipMaps) {\r\n gl.generateMipmap(target);\r\n }\r\n\r\n // Unbind\r\n this._bindTextureDirectly(target, null);\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n texture.samples = 1;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.type = type;\r\n texture._useSRGBBuffer = useSRGBBuffer;\r\n texture.format = format;\r\n texture.label = labels[i] ?? rtWrapper.label + \"-Texture\" + i;\r\n\r\n this._internalTexturesCache.push(texture);\r\n }\r\n\r\n if (generateDepthTexture && this._caps.depthTextureExtension && !dontCreateTextures) {\r\n // Depth texture\r\n const depthTexture = new InternalTexture(this, InternalTextureSource.Depth);\r\n\r\n let depthTextureType = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n let glDepthTextureInternalFormat: GLenum = gl.DEPTH_COMPONENT16;\r\n let glDepthTextureFormat: GLenum = gl.DEPTH_COMPONENT;\r\n let glDepthTextureType: GLenum = gl.UNSIGNED_SHORT;\r\n let glDepthTextureAttachment: GLenum = gl.DEPTH_ATTACHMENT;\r\n if (this.webGLVersion < 2) {\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT;\r\n } else {\r\n if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32_FLOAT) {\r\n depthTextureType = Constants.TEXTURETYPE_FLOAT;\r\n glDepthTextureType = gl.FLOAT;\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT32F;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n glDepthTextureType = gl.FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n glDepthTextureInternalFormat = gl.DEPTH32F_STENCIL8;\r\n glDepthTextureFormat = gl.DEPTH_STENCIL;\r\n glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n glDepthTextureType = gl.UNSIGNED_INT;\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT24;\r\n glDepthTextureAttachment = gl.DEPTH_ATTACHMENT;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 || depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n glDepthTextureType = gl.UNSIGNED_INT_24_8;\r\n glDepthTextureInternalFormat = gl.DEPTH24_STENCIL8;\r\n glDepthTextureFormat = gl.DEPTH_STENCIL;\r\n glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\r\n }\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_2D, depthTexture, true);\r\n\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, glDepthTextureInternalFormat, width, height, 0, glDepthTextureFormat, glDepthTextureType, null);\r\n\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, glDepthTextureAttachment, gl.TEXTURE_2D, depthTexture._hardwareTexture!.underlyingResource, 0);\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_2D, null);\r\n\r\n rtWrapper._depthStencilTexture = depthTexture;\r\n rtWrapper._depthStencilTextureWithStencil = useStencilTexture;\r\n\r\n depthTexture.baseWidth = width;\r\n depthTexture.baseHeight = height;\r\n depthTexture.width = width;\r\n depthTexture.height = height;\r\n depthTexture.isReady = true;\r\n depthTexture.samples = 1;\r\n depthTexture.generateMipMaps = generateMipMaps;\r\n depthTexture.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n depthTexture.format = depthTextureFormat;\r\n depthTexture.type = depthTextureType;\r\n depthTexture.label = rtWrapper.label + \"-DepthStencil\";\r\n\r\n textures[textureCount] = depthTexture;\r\n this._internalTexturesCache.push(depthTexture);\r\n }\r\n rtWrapper.setTextures(textures);\r\n if (initializeBuffers) {\r\n gl.drawBuffers(attachments);\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n\r\n rtWrapper.setLayerAndFaceIndices(layerIndex, faceIndex);\r\n\r\n this.resetTextureCache();\r\n\r\n if (!dontCreateTextures) {\r\n this.updateMultipleRenderTargetTextureSampleCount(rtWrapper, samples, initializeBuffers);\r\n } else if (samples > 1) {\r\n const framebuffer = gl.createFramebuffer();\r\n\r\n if (!framebuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n rtWrapper._samples = samples;\r\n rtWrapper._MSAAFramebuffer = framebuffer;\r\n\r\n if (textureCount > 0 && initializeBuffers) {\r\n this._bindUnboundFramebuffer(framebuffer);\r\n gl.drawBuffers(attachments);\r\n this._bindUnboundFramebuffer(null);\r\n }\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nThinEngine.prototype.updateMultipleRenderTargetTextureSampleCount = function (\r\n rtWrapper: Nullable<WebGLRenderTargetWrapper>,\r\n samples: number,\r\n initializeBuffers: boolean = true\r\n): number {\r\n if (this.webGLVersion < 2 || !rtWrapper) {\r\n return 1;\r\n }\r\n\r\n if (rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n // Dispose previous render buffers\r\n if (rtWrapper._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(rtWrapper._depthStencilBuffer);\r\n rtWrapper._depthStencilBuffer = null;\r\n }\r\n\r\n if (rtWrapper._MSAAFramebuffer) {\r\n gl.deleteFramebuffer(rtWrapper._MSAAFramebuffer);\r\n rtWrapper._MSAAFramebuffer = null;\r\n }\r\n\r\n const count = rtWrapper._attachments!.length; // We do it this way instead of rtWrapper.textures.length to avoid taking into account the depth/stencil texture, in case it has been created\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n const hardwareTexture = texture._hardwareTexture as Nullable<WebGLHardwareTexture>;\r\n\r\n hardwareTexture?.releaseMSAARenderBuffers();\r\n }\r\n\r\n if (samples > 1 && typeof gl.renderbufferStorageMultisample === \"function\") {\r\n const framebuffer = gl.createFramebuffer();\r\n\r\n if (!framebuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n rtWrapper._MSAAFramebuffer = framebuffer;\r\n this._bindUnboundFramebuffer(framebuffer);\r\n\r\n const attachments = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n const hardwareTexture = texture._hardwareTexture as WebGLHardwareTexture;\r\n const attachment = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n\r\n const colorRenderbuffer = this._createRenderBuffer(\r\n texture.width,\r\n texture.height,\r\n samples,\r\n -1 /* not used */,\r\n this._getRGBABufferInternalSizedFormat(texture.type, texture.format, texture._useSRGBBuffer),\r\n attachment\r\n );\r\n\r\n if (!colorRenderbuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n hardwareTexture.addMSAARenderBuffer(colorRenderbuffer);\r\n texture.samples = samples;\r\n\r\n attachments.push(attachment);\r\n }\r\n if (initializeBuffers) {\r\n gl.drawBuffers(attachments);\r\n }\r\n } else {\r\n this._bindUnboundFramebuffer(rtWrapper._framebuffer);\r\n }\r\n\r\n const depthFormat = rtWrapper._depthStencilTexture ? rtWrapper._depthStencilTexture.format : undefined;\r\n\r\n rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper._generateDepthBuffer,\r\n rtWrapper.width,\r\n rtWrapper.height,\r\n samples,\r\n depthFormat\r\n );\r\n\r\n this._bindUnboundFramebuffer(null);\r\n\r\n rtWrapper._samples = samples;\r\n\r\n return samples;\r\n};\r\n\r\nThinEngine.prototype.generateMipMapsMultiFramebuffer = function (texture: RenderTargetWrapper): void {\r\n const rtWrapper = texture as WebGLRenderTargetWrapper;\r\n const gl = this._gl;\r\n\r\n if (!rtWrapper.isMulti) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < rtWrapper._attachments!.length; i++) {\r\n const texture = rtWrapper.textures![i];\r\n if (texture?.generateMipMaps && !texture?.isCube && !texture?.is3D) {\r\n this._bindTextureDirectly(gl.TEXTURE_2D, texture, true);\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n this._bindTextureDirectly(gl.TEXTURE_2D, null);\r\n }\r\n }\r\n};\r\n\r\nThinEngine.prototype.resolveMultiFramebuffer = function (texture: RenderTargetWrapper): void {\r\n const rtWrapper = texture as WebGLRenderTargetWrapper;\r\n const gl = this._gl;\r\n\r\n if (!rtWrapper._MSAAFramebuffer || !rtWrapper.isMulti) {\r\n return;\r\n }\r\n\r\n let bufferBits = rtWrapper.resolveMSAAColors ? gl.COLOR_BUFFER_BIT : 0;\r\n bufferBits |= rtWrapper._generateDepthBuffer && rtWrapper.resolveMSAADepth ? gl.DEPTH_BUFFER_BIT : 0;\r\n bufferBits |= rtWrapper._generateStencilBuffer && rtWrapper.resolveMSAAStencil ? gl.STENCIL_BUFFER_BIT : 0;\r\n\r\n const attachments = rtWrapper._attachments!;\r\n const count = attachments.length;\r\n\r\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, rtWrapper._MSAAFramebuffer);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, rtWrapper._framebuffer);\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n\r\n for (let j = 0; j < count; j++) {\r\n attachments[j] = gl.NONE;\r\n }\r\n\r\n attachments[i] = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n gl.readBuffer(attachments[i]);\r\n gl.drawBuffers(attachments);\r\n gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, bufferBits, gl.NEAREST);\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n attachments[i] = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n }\r\n\r\n gl.drawBuffers(attachments);\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.multiRender.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiRender.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport type { IMultiRenderTargetOptions } from \"../../Materials/Textures/multiRenderTarget\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../constants\";\r\nimport { ThinEngine } from \"../thinEngine\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { WebGLHardwareTexture } from \"../WebGL/webGLHardwareTexture\";\r\nimport type { TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /**\r\n * Unbind a list of render target textures from the webGL context\r\n * This is used only when drawBuffer extension or webGL2 are active\r\n * @param rtWrapper defines the render target wrapper to unbind\r\n * @param disableGenerateMipMaps defines a boolean indicating that mipmaps must not be generated\r\n * @param onBeforeUnbind defines a function which will be called before the effective unbind\r\n */\r\n unBindMultiColorAttachmentFramebuffer(rtWrapper: RenderTargetWrapper, disableGenerateMipMaps: boolean, onBeforeUnbind?: () => void): void;\r\n\r\n /**\r\n * Create a multi render target texture\r\n * @see https://doc.babylonjs.com/setup/support/webGL2#multiple-render-target\r\n * @param size defines the size of the texture\r\n * @param options defines the creation options\r\n * @param initializeBuffers if set to true, the engine will make an initializing call of drawBuffers\r\n * @returns a new render target wrapper ready to render textures\r\n */\r\n createMultipleRenderTarget(size: TextureSize, options: IMultiRenderTargetOptions, initializeBuffers?: boolean): RenderTargetWrapper;\r\n\r\n /**\r\n * Update the sample count for a given multiple render target texture\r\n * @see https://doc.babylonjs.com/setup/support/webGL2#multisample-render-targets\r\n * @param rtWrapper defines the render target wrapper to update\r\n * @param samples defines the sample count to set\r\n * @param initializeBuffers if set to true, the engine will make an initializing call of drawBuffers\r\n * @returns the effective sample count (could be 0 if multisample render targets are not supported)\r\n */\r\n updateMultipleRenderTargetTextureSampleCount(rtWrapper: Nullable<RenderTargetWrapper>, samples: number, initializeBuffers?: boolean): number;\r\n\r\n /**\r\n * Generates mipmaps for the texture of the (multi) render target\r\n * @param texture The render target containing the textures to generate the mipmaps for\r\n */\r\n generateMipMapsMultiFramebuffer(texture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Resolves the MSAA textures of the (multi) render target into their non-MSAA version.\r\n * Note that if \"texture\" is not a MSAA render target, no resolve is performed.\r\n * @param texture The render target texture containing the MSAA textures to resolve\r\n */\r\n resolveMultiFramebuffer(texture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Select a subsets of attachments to draw to.\r\n * @param attachments gl attachments\r\n */\r\n bindAttachments(attachments: number[]): void;\r\n\r\n /**\r\n * Creates a layout object to draw/clear on specific textures in a MRT\r\n * @param textureStatus textureStatus[i] indicates if the i-th is active\r\n * @returns A layout to be fed to the engine, calling `bindAttachments`.\r\n */\r\n buildTextureLayout(textureStatus: boolean[]): number[];\r\n\r\n /**\r\n * Restores the webgl state to only draw on the main color attachment\r\n * when the frame buffer associated is the canvas frame buffer\r\n */\r\n restoreSingleAttachment(): void;\r\n\r\n /**\r\n * Restores the webgl state to only draw on the main color attachment\r\n * when the frame buffer associated is not the canvas frame buffer\r\n */\r\n restoreSingleAttachmentForRenderTarget(): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype.restoreSingleAttachment = function (): void {\r\n const gl = this._gl;\r\n\r\n this.bindAttachments([gl.BACK]);\r\n};\r\n\r\nThinEngine.prototype.restoreSingleAttachmentForRenderTarget = function (): void {\r\n const gl = this._gl;\r\n\r\n this.bindAttachments([gl.COLOR_ATTACHMENT0]);\r\n};\r\n\r\nThinEngine.prototype.buildTextureLayout = function (textureStatus: boolean[]): number[] {\r\n const gl = this._gl;\r\n\r\n const result = [];\r\n\r\n for (let i = 0; i < textureStatus.length; i++) {\r\n if (textureStatus[i]) {\r\n result.push((<any>gl)[\"COLOR_ATTACHMENT\" + i]);\r\n } else {\r\n result.push(gl.NONE);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nThinEngine.prototype.bindAttachments = function (attachments: number[]): void {\r\n const gl = this._gl;\r\n\r\n gl.drawBuffers(attachments);\r\n};\r\n\r\nThinEngine.prototype.unBindMultiColorAttachmentFramebuffer = function (\r\n rtWrapper: WebGLRenderTargetWrapper,\r\n disableGenerateMipMaps: boolean = false,\r\n onBeforeUnbind?: () => void\r\n): void {\r\n this._currentRenderTarget = null;\r\n\r\n if (!rtWrapper.disableAutomaticMSAAResolve) {\r\n this.resolveMultiFramebuffer(rtWrapper);\r\n }\r\n\r\n if (!disableGenerateMipMaps) {\r\n this.generateMipMapsMultiFramebuffer(rtWrapper);\r\n }\r\n\r\n if (onBeforeUnbind) {\r\n if (rtWrapper._MSAAFramebuffer) {\r\n // Bind the correct framebuffer\r\n this._bindUnboundFramebuffer(rtWrapper._framebuffer);\r\n }\r\n onBeforeUnbind();\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n};\r\n\r\nThinEngine.prototype.createMultipleRenderTarget = function (size: TextureSize, options: IMultiRenderTargetOptions, initializeBuffers: boolean = true): RenderTargetWrapper {\r\n let generateMipMaps = false;\r\n let generateDepthBuffer = true;\r\n let generateStencilBuffer = false;\r\n let generateDepthTexture = false;\r\n let depthTextureFormat: number | undefined = undefined;\r\n let textureCount = 1;\r\n let samples = 1;\r\n\r\n const defaultType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n const defaultSamplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n const defaultUseSRGBBuffer = false;\r\n const defaultFormat = Constants.TEXTUREFORMAT_RGBA;\r\n const defaultTarget = Constants.TEXTURE_2D;\r\n\r\n let types: number[] = [];\r\n let samplingModes: number[] = [];\r\n let useSRGBBuffers: boolean[] = [];\r\n let formats: number[] = [];\r\n let targets: number[] = [];\r\n let faceIndex: number[] = [];\r\n let layerIndex: number[] = [];\r\n let layers: number[] = [];\r\n let labels: string[] = [];\r\n let dontCreateTextures = false;\r\n\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(true, false, size) as WebGLRenderTargetWrapper;\r\n\r\n if (options !== undefined) {\r\n generateMipMaps = options.generateMipMaps === undefined ? false : options.generateMipMaps;\r\n generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n generateStencilBuffer = options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;\r\n generateDepthTexture = options.generateDepthTexture === undefined ? false : options.generateDepthTexture;\r\n textureCount = options.textureCount ?? 1;\r\n samples = options.samples ?? samples;\r\n types = options.types || types;\r\n samplingModes = options.samplingModes || samplingModes;\r\n useSRGBBuffers = options.useSRGBBuffers || useSRGBBuffers;\r\n formats = options.formats || formats;\r\n targets = options.targetTypes || targets;\r\n faceIndex = options.faceIndex || faceIndex;\r\n layerIndex = options.layerIndex || layerIndex;\r\n layers = options.layerCounts || layers;\r\n labels = options.labels || labels;\r\n dontCreateTextures = options.dontCreateTextures ?? false;\r\n\r\n if (\r\n this.webGLVersion > 1 &&\r\n (options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32_FLOAT ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8)\r\n ) {\r\n depthTextureFormat = options.depthTextureFormat;\r\n }\r\n }\r\n\r\n if (depthTextureFormat === undefined) {\r\n depthTextureFormat = generateStencilBuffer ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\r\n }\r\n\r\n const gl = this._gl;\r\n // Create the framebuffer\r\n const framebuffer = gl.createFramebuffer();\r\n this._bindUnboundFramebuffer(framebuffer);\r\n\r\n const width = (<{ width: number; height: number }>size).width ?? <number>size;\r\n const height = (<{ width: number; height: number }>size).height ?? <number>size;\r\n\r\n const textures: InternalTexture[] = [];\r\n const attachments: number[] = [];\r\n\r\n const useStencilTexture =\r\n this.webGLVersion > 1 &&\r\n (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 ||\r\n depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 ||\r\n depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8);\r\n\r\n rtWrapper.label = options?.label ?? \"MultiRenderTargetWrapper\";\r\n rtWrapper._framebuffer = framebuffer;\r\n rtWrapper._generateDepthBuffer = generateDepthTexture || generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = generateDepthTexture ? useStencilTexture : generateStencilBuffer;\r\n rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(rtWrapper._generateStencilBuffer, rtWrapper._generateDepthBuffer, width, height, 1, depthTextureFormat);\r\n rtWrapper._attachments = attachments;\r\n\r\n for (let i = 0; i < textureCount; i++) {\r\n let samplingMode = samplingModes[i] || defaultSamplingMode;\r\n let type = types[i] || defaultType;\r\n let useSRGBBuffer = useSRGBBuffers[i] || defaultUseSRGBBuffer;\r\n const format = formats[i] || defaultFormat;\r\n\r\n const target = targets[i] || defaultTarget;\r\n const layerCount = layers[i] ?? 1;\r\n\r\n if (type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloatLinearFiltering) {\r\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\r\n samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n } else if (type === Constants.TEXTURETYPE_HALF_FLOAT && !this._caps.textureHalfFloatLinearFiltering) {\r\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\r\n samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n }\r\n\r\n const filters = this._getSamplingParameters(samplingMode, generateMipMaps);\r\n if (type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloat) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n Logger.Warn(\"Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type\");\r\n }\r\n\r\n useSRGBBuffer = useSRGBBuffer && this._caps.supportSRGBBuffers && (this.webGLVersion > 1 || this.isWebGPU);\r\n\r\n const isWebGL2 = this.webGLVersion > 1;\r\n const attachment = (<any>gl)[isWebGL2 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n\r\n attachments.push(attachment);\r\n\r\n if (target === -1 || dontCreateTextures) {\r\n continue;\r\n }\r\n\r\n const texture = new InternalTexture(this, InternalTextureSource.MultiRenderTarget);\r\n textures[i] = texture;\r\n\r\n gl.activeTexture((<any>gl)[\"TEXTURE\" + i]);\r\n gl.bindTexture(target, texture._hardwareTexture!.underlyingResource);\r\n\r\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, filters.mag);\r\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, filters.min);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n\r\n const internalSizedFormat = this._getRGBABufferInternalSizedFormat(type, format, useSRGBBuffer);\r\n const internalFormat = this._getInternalFormat(format);\r\n const webGLTextureType = this._getWebGLTextureType(type);\r\n\r\n if (isWebGL2 && (target === Constants.TEXTURE_2D_ARRAY || target === Constants.TEXTURE_3D)) {\r\n if (target === Constants.TEXTURE_2D_ARRAY) {\r\n texture.is2DArray = true;\r\n } else {\r\n texture.is3D = true;\r\n }\r\n\r\n texture.baseDepth = texture.depth = layerCount;\r\n\r\n gl.texImage3D(target, 0, internalSizedFormat, width, height, layerCount, 0, internalFormat, webGLTextureType, null);\r\n } else if (target === Constants.TEXTURE_CUBE_MAP) {\r\n // We have to generate all faces to complete the framebuffer\r\n for (let i = 0; i < 6; i++) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);\r\n }\r\n texture.isCube = true;\r\n } else {\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);\r\n }\r\n\r\n if (generateMipMaps) {\r\n gl.generateMipmap(target);\r\n }\r\n\r\n // Unbind\r\n this._bindTextureDirectly(target, null);\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n texture.samples = 1;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.type = type;\r\n texture._useSRGBBuffer = useSRGBBuffer;\r\n texture.format = format;\r\n texture.label = labels[i] ?? rtWrapper.label + \"-Texture\" + i;\r\n\r\n this._internalTexturesCache.push(texture);\r\n }\r\n\r\n if (generateDepthTexture && this._caps.depthTextureExtension && !dontCreateTextures) {\r\n // Depth texture\r\n const depthTexture = new InternalTexture(this, InternalTextureSource.Depth);\r\n\r\n let depthTextureType = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n let glDepthTextureInternalFormat: GLenum = gl.DEPTH_COMPONENT16;\r\n let glDepthTextureFormat: GLenum = gl.DEPTH_COMPONENT;\r\n let glDepthTextureType: GLenum = gl.UNSIGNED_SHORT;\r\n let glDepthTextureAttachment: GLenum = gl.DEPTH_ATTACHMENT;\r\n if (this.webGLVersion < 2) {\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT;\r\n } else {\r\n if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32_FLOAT) {\r\n depthTextureType = Constants.TEXTURETYPE_FLOAT;\r\n glDepthTextureType = gl.FLOAT;\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT32F;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n glDepthTextureType = gl.FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n glDepthTextureInternalFormat = gl.DEPTH32F_STENCIL8;\r\n glDepthTextureFormat = gl.DEPTH_STENCIL;\r\n glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n glDepthTextureType = gl.UNSIGNED_INT;\r\n glDepthTextureInternalFormat = gl.DEPTH_COMPONENT24;\r\n glDepthTextureAttachment = gl.DEPTH_ATTACHMENT;\r\n } else if (depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 || depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8) {\r\n depthTextureType = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n glDepthTextureType = gl.UNSIGNED_INT_24_8;\r\n glDepthTextureInternalFormat = gl.DEPTH24_STENCIL8;\r\n glDepthTextureFormat = gl.DEPTH_STENCIL;\r\n glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\r\n }\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_2D, depthTexture, true);\r\n\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, glDepthTextureInternalFormat, width, height, 0, glDepthTextureFormat, glDepthTextureType, null);\r\n\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, glDepthTextureAttachment, gl.TEXTURE_2D, depthTexture._hardwareTexture!.underlyingResource, 0);\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_2D, null);\r\n\r\n rtWrapper._depthStencilTexture = depthTexture;\r\n rtWrapper._depthStencilTextureWithStencil = useStencilTexture;\r\n\r\n depthTexture.baseWidth = width;\r\n depthTexture.baseHeight = height;\r\n depthTexture.width = width;\r\n depthTexture.height = height;\r\n depthTexture.isReady = true;\r\n depthTexture.samples = 1;\r\n depthTexture.generateMipMaps = generateMipMaps;\r\n depthTexture.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n depthTexture.format = depthTextureFormat;\r\n depthTexture.type = depthTextureType;\r\n depthTexture.label = rtWrapper.label + \"-DepthStencil\";\r\n\r\n textures[textureCount] = depthTexture;\r\n this._internalTexturesCache.push(depthTexture);\r\n }\r\n rtWrapper.setTextures(textures);\r\n if (initializeBuffers) {\r\n gl.drawBuffers(attachments);\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n\r\n rtWrapper.setLayerAndFaceIndices(layerIndex, faceIndex);\r\n\r\n this.resetTextureCache();\r\n\r\n if (!dontCreateTextures) {\r\n this.updateMultipleRenderTargetTextureSampleCount(rtWrapper, samples, initializeBuffers);\r\n } else if (samples > 1) {\r\n const framebuffer = gl.createFramebuffer();\r\n\r\n if (!framebuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n rtWrapper._samples = samples;\r\n rtWrapper._MSAAFramebuffer = framebuffer;\r\n\r\n if (textureCount > 0 && initializeBuffers) {\r\n this._bindUnboundFramebuffer(framebuffer);\r\n gl.drawBuffers(attachments);\r\n this._bindUnboundFramebuffer(null);\r\n }\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nThinEngine.prototype.updateMultipleRenderTargetTextureSampleCount = function (\r\n rtWrapper: Nullable<WebGLRenderTargetWrapper>,\r\n samples: number,\r\n initializeBuffers: boolean = true\r\n): number {\r\n if (this.webGLVersion < 2 || !rtWrapper) {\r\n return 1;\r\n }\r\n\r\n if (rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n // Dispose previous render buffers\r\n if (rtWrapper._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(rtWrapper._depthStencilBuffer);\r\n rtWrapper._depthStencilBuffer = null;\r\n }\r\n\r\n if (rtWrapper._MSAAFramebuffer) {\r\n gl.deleteFramebuffer(rtWrapper._MSAAFramebuffer);\r\n rtWrapper._MSAAFramebuffer = null;\r\n }\r\n\r\n const count = rtWrapper._attachments!.length; // We do it this way instead of rtWrapper.textures.length to avoid taking into account the depth/stencil texture, in case it has been created\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n const hardwareTexture = texture._hardwareTexture as Nullable<WebGLHardwareTexture>;\r\n\r\n hardwareTexture?.releaseMSAARenderBuffers();\r\n }\r\n\r\n if (samples > 1 && typeof gl.renderbufferStorageMultisample === \"function\") {\r\n const framebuffer = gl.createFramebuffer();\r\n\r\n if (!framebuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n rtWrapper._MSAAFramebuffer = framebuffer;\r\n this._bindUnboundFramebuffer(framebuffer);\r\n\r\n const attachments = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n const hardwareTexture = texture._hardwareTexture as WebGLHardwareTexture;\r\n const attachment = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n\r\n const colorRenderbuffer = this._createRenderBuffer(\r\n texture.width,\r\n texture.height,\r\n samples,\r\n -1 /* not used */,\r\n this._getRGBABufferInternalSizedFormat(texture.type, texture.format, texture._useSRGBBuffer),\r\n attachment\r\n );\r\n\r\n if (!colorRenderbuffer) {\r\n throw new Error(\"Unable to create multi sampled framebuffer\");\r\n }\r\n\r\n hardwareTexture.addMSAARenderBuffer(colorRenderbuffer);\r\n texture.samples = samples;\r\n\r\n attachments.push(attachment);\r\n }\r\n if (initializeBuffers) {\r\n gl.drawBuffers(attachments);\r\n }\r\n } else {\r\n this._bindUnboundFramebuffer(rtWrapper._framebuffer);\r\n }\r\n\r\n const depthFormat = rtWrapper._depthStencilTexture ? rtWrapper._depthStencilTexture.format : undefined;\r\n\r\n rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper._generateDepthBuffer,\r\n rtWrapper.width,\r\n rtWrapper.height,\r\n samples,\r\n depthFormat\r\n );\r\n\r\n this._bindUnboundFramebuffer(null);\r\n\r\n rtWrapper._samples = samples;\r\n\r\n return samples;\r\n};\r\n\r\nThinEngine.prototype.generateMipMapsMultiFramebuffer = function (texture: RenderTargetWrapper): void {\r\n const rtWrapper = texture as WebGLRenderTargetWrapper;\r\n const gl = this._gl;\r\n\r\n if (!rtWrapper.isMulti) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < rtWrapper._attachments!.length; i++) {\r\n const texture = rtWrapper.textures![i];\r\n if (texture?.generateMipMaps && !texture?.isCube && !texture?.is3D) {\r\n this._bindTextureDirectly(gl.TEXTURE_2D, texture, true);\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n this._bindTextureDirectly(gl.TEXTURE_2D, null);\r\n }\r\n }\r\n};\r\n\r\nThinEngine.prototype.resolveMultiFramebuffer = function (texture: RenderTargetWrapper): void {\r\n const rtWrapper = texture as WebGLRenderTargetWrapper;\r\n const gl = this._gl;\r\n\r\n if (!rtWrapper._MSAAFramebuffer || !rtWrapper.isMulti) {\r\n return;\r\n }\r\n\r\n let bufferBits = rtWrapper.resolveMSAAColors ? gl.COLOR_BUFFER_BIT : 0;\r\n bufferBits |= rtWrapper._generateDepthBuffer && rtWrapper.resolveMSAADepth ? gl.DEPTH_BUFFER_BIT : 0;\r\n bufferBits |= rtWrapper._generateStencilBuffer && rtWrapper.resolveMSAAStencil ? gl.STENCIL_BUFFER_BIT : 0;\r\n\r\n const attachments = rtWrapper._attachments!;\r\n const count = attachments.length;\r\n\r\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, rtWrapper._MSAAFramebuffer);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, rtWrapper._framebuffer);\r\n\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n\r\n for (let j = 0; j < count; j++) {\r\n attachments[j] = gl.NONE;\r\n }\r\n\r\n attachments[i] = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n gl.readBuffer(attachments[i]);\r\n gl.drawBuffers(attachments);\r\n gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, bufferBits, gl.NEAREST);\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n attachments[i] = (<any>gl)[this.webGLVersion > 1 ? \"COLOR_ATTACHMENT\" + i : \"COLOR_ATTACHMENT\" + i + \"_WEBGL\"];\r\n }\r\n\r\n gl.drawBuffers(attachments);\r\n gl.bindFramebuffer(this._gl.FRAMEBUFFER, rtWrapper._MSAAFramebuffer);\r\n};\r\n"]}
@@ -741,13 +741,13 @@ export class AbstractEngine {
741
741
  */
742
742
  // Not mixed with Version for tooling purpose.
743
743
  static get NpmPackage() {
744
- return "babylonjs@7.39.1";
744
+ return "babylonjs@7.39.2";
745
745
  }
746
746
  /**
747
747
  * Returns the current version of the framework
748
748
  */
749
749
  static get Version() {
750
- return "7.39.1";
750
+ return "7.39.2";
751
751
  }
752
752
  /**
753
753
  * Gets the HTML canvas attached with the current webGL context