@babylonjs/core 6.33.2 → 6.34.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/Animations/animation.js +1 -1
  2. package/Animations/animation.js.map +1 -1
  3. package/Buffers/storageBuffer.d.ts +2 -1
  4. package/Buffers/storageBuffer.js +3 -2
  5. package/Buffers/storageBuffer.js.map +1 -1
  6. package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
  7. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  8. package/Cameras/Inputs/followCameraPointersInput.js +28 -9
  9. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  10. package/Cameras/arcRotateCamera.js +1 -1
  11. package/Cameras/arcRotateCamera.js.map +1 -1
  12. package/Cameras/followCameraInputsManager.js +2 -1
  13. package/Cameras/followCameraInputsManager.js.map +1 -1
  14. package/Debug/skeletonViewer.js +2 -1
  15. package/Debug/skeletonViewer.js.map +1 -1
  16. package/Engines/Extensions/engine.alpha.js +8 -116
  17. package/Engines/Extensions/engine.alpha.js.map +1 -1
  18. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  19. package/Engines/Extensions/engine.cubeTexture.js +11 -213
  20. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  21. package/Engines/Extensions/engine.dynamicBuffer.js +5 -42
  22. package/Engines/Extensions/engine.dynamicBuffer.js.map +1 -1
  23. package/Engines/Extensions/engine.dynamicTexture.d.ts +1 -1
  24. package/Engines/Extensions/engine.dynamicTexture.js +5 -47
  25. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  26. package/Engines/Extensions/engine.multiRender.js +11 -341
  27. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  28. package/Engines/Extensions/engine.multiview.js +6 -57
  29. package/Engines/Extensions/engine.multiview.js.map +1 -1
  30. package/Engines/Extensions/engine.query.d.ts +8 -2
  31. package/Engines/Extensions/engine.query.js +44 -152
  32. package/Engines/Extensions/engine.query.js.map +1 -1
  33. package/Engines/Extensions/engine.rawTexture.d.ts +1 -1
  34. package/Engines/Extensions/engine.rawTexture.js +20 -361
  35. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  36. package/Engines/Extensions/engine.readTexture.js +6 -112
  37. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  38. package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
  39. package/Engines/Extensions/engine.renderTarget.js +8 -173
  40. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  41. package/Engines/Extensions/engine.renderTargetCube.js +4 -55
  42. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  43. package/Engines/Extensions/engine.storageBuffer.d.ts +2 -1
  44. package/Engines/Extensions/engine.storageBuffer.js.map +1 -1
  45. package/Engines/Extensions/engine.textureSelector.js +11 -52
  46. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  47. package/Engines/Extensions/engine.transformFeedback.js +10 -11
  48. package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
  49. package/Engines/Extensions/engine.uniformBuffer.js +9 -59
  50. package/Engines/Extensions/engine.uniformBuffer.js.map +1 -1
  51. package/Engines/Extensions/engine.videoTexture.js +4 -54
  52. package/Engines/Extensions/engine.videoTexture.js.map +1 -1
  53. package/Engines/Extensions/engine.views.d.ts +2 -24
  54. package/Engines/Extensions/engine.views.js +17 -136
  55. package/Engines/Extensions/engine.views.js.map +1 -1
  56. package/Engines/Processors/shaderCodeInliner.js +15 -14
  57. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/engine.computeShader.js +3 -2
  59. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  60. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +14 -5
  61. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  62. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  63. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  64. package/Engines/WebGPU/webgpuTintWASM.js +3 -2
  65. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  66. package/Engines/engine.d.ts +15 -64
  67. package/Engines/engine.js +322 -773
  68. package/Engines/engine.js.map +1 -1
  69. package/Engines/nativeEngine.d.ts +1 -1
  70. package/Engines/nativeEngine.js.map +1 -1
  71. package/Engines/nullEngine.d.ts +1 -1
  72. package/Engines/nullEngine.js.map +1 -1
  73. package/Engines/thinEngine.d.ts +160 -151
  74. package/Engines/thinEngine.js +712 -3281
  75. package/Engines/thinEngine.js.map +1 -1
  76. package/Engines/webgpuEngine.d.ts +5 -8
  77. package/Engines/webgpuEngine.js +143 -112
  78. package/Engines/webgpuEngine.js.map +1 -1
  79. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +2 -1
  80. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  81. package/FlowGraph/flowGraphBlock.js +1 -21
  82. package/FlowGraph/flowGraphBlock.js.map +1 -1
  83. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -0
  84. package/FlowGraph/flowGraphExecutionBlock.js +20 -0
  85. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  86. package/Gizmos/axisScaleGizmo.d.ts +1 -0
  87. package/Gizmos/axisScaleGizmo.js +12 -0
  88. package/Gizmos/axisScaleGizmo.js.map +1 -1
  89. package/Gizmos/lightGizmo.js +2 -1
  90. package/Gizmos/lightGizmo.js.map +1 -1
  91. package/Gizmos/rotationGizmo.js +1 -1
  92. package/Gizmos/rotationGizmo.js.map +1 -1
  93. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  94. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  95. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
  96. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  97. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
  98. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  99. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
  100. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  101. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
  102. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  103. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
  104. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
  106. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  107. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
  108. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  109. package/Materials/Node/nodeMaterial.js +9 -8
  110. package/Materials/Node/nodeMaterial.js.map +1 -1
  111. package/Materials/Node/nodeMaterialBlock.js +2 -1
  112. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  113. package/Materials/drawWrapper.js +3 -2
  114. package/Materials/drawWrapper.js.map +1 -1
  115. package/Materials/effect.js +2 -1
  116. package/Materials/effect.js.map +1 -1
  117. package/Materials/material.js +2 -1
  118. package/Materials/material.js.map +1 -1
  119. package/Materials/uniformBuffer.d.ts +4 -1
  120. package/Materials/uniformBuffer.js +5 -2
  121. package/Materials/uniformBuffer.js.map +1 -1
  122. package/Meshes/Node/nodeGeometryBlock.js +2 -1
  123. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  124. package/Meshes/abstractMesh.js +3 -1
  125. package/Meshes/abstractMesh.js.map +1 -1
  126. package/Misc/assetsManager.js +2 -2
  127. package/Misc/assetsManager.js.map +1 -1
  128. package/Misc/dds.d.ts +2 -0
  129. package/Misc/dds.js +27 -23
  130. package/Misc/dds.js.map +1 -1
  131. package/Misc/logger.d.ts +3 -3
  132. package/Misc/logger.js +8 -4
  133. package/Misc/logger.js.map +1 -1
  134. package/Misc/sceneSerializer.js +2 -1
  135. package/Misc/sceneSerializer.js.map +1 -1
  136. package/Navigation/Plugins/recastJSPlugin.js +2 -2
  137. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  138. package/Physics/v2/Plugins/havokPlugin.js +1 -1
  139. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  140. package/Physics/v2/index.d.ts +1 -0
  141. package/Physics/v2/index.js +1 -0
  142. package/Physics/v2/index.js.map +1 -1
  143. package/Physics/v2/ragdoll.d.ts +107 -0
  144. package/Physics/v2/ragdoll.js +228 -0
  145. package/Physics/v2/ragdoll.js.map +1 -0
  146. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
  147. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  148. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
  149. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  150. package/PostProcesses/index.d.ts +1 -1
  151. package/PostProcesses/index.js +1 -1
  152. package/PostProcesses/index.js.map +1 -1
  153. package/PostProcesses/passPostProcess.d.ts +1 -0
  154. package/PostProcesses/passPostProcess.js +6 -2
  155. package/PostProcesses/passPostProcess.js.map +1 -1
  156. package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
  157. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  158. package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
  159. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  160. package/Rendering/depthPeelingRenderer.js +2 -1
  161. package/Rendering/depthPeelingRenderer.js.map +1 -1
  162. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +3 -2
  163. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  164. package/XR/features/WebXRControllerPhysics.js +2 -2
  165. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  166. package/XR/features/WebXRMeshDetector.js +2 -1
  167. package/XR/features/WebXRMeshDetector.js.map +1 -1
  168. package/XR/features/WebXRWalkingLocomotion.js +1 -1
  169. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  170. package/XR/webXRExperienceHelper.js +2 -2
  171. package/XR/webXRExperienceHelper.js.map +1 -1
  172. package/assetContainer.js +2 -2
  173. package/assetContainer.js.map +1 -1
  174. package/esm/Engines/Extensions/alpha/alpha.base.d.ts +34 -0
  175. package/esm/Engines/Extensions/alpha/alpha.base.js +2 -0
  176. package/esm/Engines/Extensions/alpha/alpha.base.js.map +1 -0
  177. package/esm/Engines/Extensions/computeShaders/computeShaders.base.d.ts +87 -0
  178. package/esm/Engines/Extensions/computeShaders/computeShaders.base.js +12 -0
  179. package/esm/Engines/Extensions/computeShaders/computeShaders.base.js.map +1 -0
  180. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.d.ts +79 -0
  181. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.js +2 -0
  182. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.js.map +1 -0
  183. package/esm/Engines/Extensions/debugging/debugging.base.d.ts +11 -0
  184. package/esm/Engines/Extensions/debugging/debugging.base.js +2 -0
  185. package/esm/Engines/Extensions/debugging/debugging.base.js.map +1 -0
  186. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.d.ts +20 -0
  187. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.js +2 -0
  188. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.js.map +1 -0
  189. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.d.ts +26 -0
  190. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.js +2 -0
  191. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.js.map +1 -0
  192. package/esm/Engines/Extensions/engine.extensions.d.ts +67 -0
  193. package/esm/Engines/Extensions/engine.extensions.js +49 -0
  194. package/esm/Engines/Extensions/engine.extensions.js.map +1 -0
  195. package/esm/Engines/Extensions/externalTexture/externalTexture.base.d.ts +16 -0
  196. package/esm/Engines/Extensions/externalTexture/externalTexture.base.js +2 -0
  197. package/esm/Engines/Extensions/externalTexture/externalTexture.base.js.map +1 -0
  198. package/esm/Engines/Extensions/multiRender/multiRender.base.d.ts +54 -0
  199. package/esm/Engines/Extensions/multiRender/multiRender.base.js +2 -0
  200. package/esm/Engines/Extensions/multiRender/multiRender.base.js.map +1 -0
  201. package/esm/Engines/Extensions/multiview/multiview.base.d.ts +67 -0
  202. package/esm/Engines/Extensions/multiview/multiview.base.js +79 -0
  203. package/esm/Engines/Extensions/multiview/multiview.base.js.map +1 -0
  204. package/esm/Engines/Extensions/query/query.base.d.ts +164 -0
  205. package/esm/Engines/Extensions/query/query.base.js +168 -0
  206. package/esm/Engines/Extensions/query/query.base.js.map +1 -0
  207. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.d.ts +187 -0
  208. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.js +2 -0
  209. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.js.map +1 -0
  210. package/esm/Engines/Extensions/readTexture/readTexture.base.d.ts +9 -0
  211. package/esm/Engines/Extensions/readTexture/readTexture.base.js +2 -0
  212. package/esm/Engines/Extensions/readTexture/readTexture.base.js.map +1 -0
  213. package/esm/Engines/Extensions/renderTarget/renderTarget.base.d.ts +35 -0
  214. package/esm/Engines/Extensions/renderTarget/renderTarget.base.js +2 -0
  215. package/esm/Engines/Extensions/renderTarget/renderTarget.base.js.map +1 -0
  216. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.d.ts +12 -0
  217. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.js +2 -0
  218. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.js.map +1 -0
  219. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.d.ts +36 -0
  220. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.js +2 -0
  221. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.js.map +1 -0
  222. package/esm/Engines/Extensions/textureSampler/textureSampler.base.d.ts +11 -0
  223. package/esm/Engines/Extensions/textureSampler/textureSampler.base.js +2 -0
  224. package/esm/Engines/Extensions/textureSampler/textureSampler.base.js.map +1 -0
  225. package/esm/Engines/Extensions/textureSelector/textureSelector.base.d.ts +50 -0
  226. package/esm/Engines/Extensions/textureSelector/textureSelector.base.js +53 -0
  227. package/esm/Engines/Extensions/textureSelector/textureSelector.base.js.map +1 -0
  228. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.d.ts +42 -0
  229. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.js +2 -0
  230. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.js.map +1 -0
  231. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.d.ts +48 -0
  232. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.js +2 -0
  233. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.js.map +1 -0
  234. package/esm/Engines/Extensions/videoTexture/videoTexture.base.d.ts +13 -0
  235. package/esm/Engines/Extensions/videoTexture/videoTexture.base.js +2 -0
  236. package/esm/Engines/Extensions/videoTexture/videoTexture.base.js.map +1 -0
  237. package/esm/Engines/Extensions/views/views.base.d.ts +85 -0
  238. package/esm/Engines/Extensions/views/views.base.js +33 -0
  239. package/esm/Engines/Extensions/views/views.base.js.map +1 -0
  240. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.d.ts +8 -0
  241. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.js +137 -0
  242. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.js.map +1 -0
  243. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.d.ts +11 -0
  244. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.js +251 -0
  245. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.js.map +1 -0
  246. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.d.ts +5 -0
  247. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.js +55 -0
  248. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.js.map +1 -0
  249. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.d.ts +5 -0
  250. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.js +65 -0
  251. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.js.map +1 -0
  252. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.d.ts +10 -0
  253. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.js +375 -0
  254. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.js.map +1 -0
  255. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.d.ts +6 -0
  256. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.js +77 -0
  257. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.js.map +1 -0
  258. package/esm/Engines/WebGL/Extensions/query/query.webgl.d.ts +21 -0
  259. package/esm/Engines/WebGL/Extensions/query/query.webgl.js +220 -0
  260. package/esm/Engines/WebGL/Extensions/query/query.webgl.js.map +1 -0
  261. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.d.ts +15 -0
  262. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.js +392 -0
  263. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.js.map +1 -0
  264. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.d.ts +17 -0
  265. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.js +133 -0
  266. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.js.map +1 -0
  267. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.d.ts +8 -0
  268. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.js +199 -0
  269. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.js.map +1 -0
  270. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.d.ts +2 -0
  271. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.js +62 -0
  272. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.js.map +1 -0
  273. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.d.ts +5 -0
  274. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.js +28 -0
  275. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.js.map +1 -0
  276. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.d.ts +11 -0
  277. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.js +45 -0
  278. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.js.map +1 -0
  279. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.d.ts +9 -0
  280. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.js +78 -0
  281. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.js.map +1 -0
  282. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.d.ts +4 -0
  283. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.js +67 -0
  284. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.js.map +1 -0
  285. package/esm/Engines/WebGL/Extensions/views/views.webgl.d.ts +18 -0
  286. package/esm/Engines/WebGL/Extensions/views/views.webgl.js +152 -0
  287. package/esm/Engines/WebGL/Extensions/views/views.webgl.js.map +1 -0
  288. package/esm/Engines/WebGL/engine.adapterHelpers.d.ts +43 -0
  289. package/esm/Engines/WebGL/engine.adapterHelpers.js +107 -0
  290. package/esm/Engines/WebGL/engine.adapterHelpers.js.map +1 -0
  291. package/esm/Engines/WebGL/engine.webgl.d.ts +1030 -0
  292. package/esm/Engines/WebGL/engine.webgl.js +4083 -0
  293. package/esm/Engines/WebGL/engine.webgl.js.map +1 -0
  294. package/esm/Engines/WebGPU/engine.adapterHelpers.d.ts +7 -0
  295. package/esm/Engines/WebGPU/engine.adapterHelpers.js +20 -0
  296. package/esm/Engines/WebGPU/engine.adapterHelpers.js.map +1 -0
  297. package/esm/Engines/WebGPU/engine.webgpu.constants.d.ts +391 -0
  298. package/esm/Engines/WebGPU/engine.webgpu.constants.js +2 -0
  299. package/esm/Engines/WebGPU/engine.webgpu.constants.js.map +1 -0
  300. package/esm/Engines/WebGPU/engine.webgpu.d.ts +277 -0
  301. package/esm/Engines/WebGPU/engine.webgpu.js +1281 -0
  302. package/esm/Engines/WebGPU/engine.webgpu.js.map +1 -0
  303. package/esm/Engines/engine.adapters.d.ts +32 -0
  304. package/esm/Engines/engine.adapters.js +27 -0
  305. package/esm/Engines/engine.adapters.js.map +1 -0
  306. package/esm/Engines/engine.base.d.ts +807 -0
  307. package/esm/Engines/engine.base.js +1235 -0
  308. package/esm/Engines/engine.base.js.map +1 -0
  309. package/esm/Engines/engine.constants.d.ts +735 -0
  310. package/esm/Engines/engine.constants.js +3 -0
  311. package/esm/Engines/engine.constants.js.map +1 -0
  312. package/esm/Engines/engine.extendable.d.ts +180 -0
  313. package/esm/Engines/engine.extendable.js +477 -0
  314. package/esm/Engines/engine.extendable.js.map +1 -0
  315. package/esm/Engines/engine.interfaces.d.ts +16 -0
  316. package/esm/Engines/engine.interfaces.js +9 -0
  317. package/esm/Engines/engine.interfaces.js.map +1 -0
  318. package/esm/Engines/engine.static.d.ts +215 -0
  319. package/esm/Engines/engine.static.js +345 -0
  320. package/esm/Engines/engine.static.js.map +1 -0
  321. package/esm/Engines/engine.tools.d.ts +20 -0
  322. package/esm/Engines/engine.tools.js +33 -0
  323. package/esm/Engines/engine.tools.js.map +1 -0
  324. package/esm/Engines/public.d.ts +1 -0
  325. package/esm/Engines/public.js +2 -0
  326. package/esm/Engines/public.js.map +1 -0
  327. package/esm/Engines/runtimeEnvironment.d.ts +37 -0
  328. package/esm/Engines/runtimeEnvironment.js +56 -0
  329. package/esm/Engines/runtimeEnvironment.js.map +1 -0
  330. package/package.json +2 -1
  331. package/scene.js +1 -1
  332. package/scene.js.map +1 -1
@@ -1,356 +1,26 @@
1
- import { InternalTexture, InternalTextureSource } from "../../Materials/Textures/internalTexture.js";
2
- import { Logger } from "../../Misc/logger.js";
3
-
4
- import { ThinEngine } from "../thinEngine.js";
1
+ import * as extension from "../../esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.js";
2
+ import { ThinEngine } from "../../Engines/thinEngine.js";
3
+ import { loadExtension } from "../../esm/Engines/Extensions/engine.extensions.js";
5
4
  ThinEngine.prototype.restoreSingleAttachment = function () {
6
- const gl = this._gl;
7
- this.bindAttachments([gl.BACK]);
5
+ extension.restoreSingleAttachment(this._engineState);
8
6
  };
9
7
  ThinEngine.prototype.restoreSingleAttachmentForRenderTarget = function () {
10
- const gl = this._gl;
11
- this.bindAttachments([gl.COLOR_ATTACHMENT0]);
8
+ extension.restoreSingleAttachmentForRenderTarget(this._engineState);
12
9
  };
13
10
  ThinEngine.prototype.buildTextureLayout = function (textureStatus) {
14
- const gl = this._gl;
15
- const result = [];
16
- for (let i = 0; i < textureStatus.length; i++) {
17
- if (textureStatus[i]) {
18
- result.push(gl["COLOR_ATTACHMENT" + i]);
19
- }
20
- else {
21
- result.push(gl.NONE);
22
- }
23
- }
24
- return result;
11
+ return extension.buildTextureLayout(this._engineState, textureStatus);
25
12
  };
26
13
  ThinEngine.prototype.bindAttachments = function (attachments) {
27
- const gl = this._gl;
28
- gl.drawBuffers(attachments);
14
+ extension.bindAttachments(this._engineState, attachments);
29
15
  };
30
16
  ThinEngine.prototype.unBindMultiColorAttachmentFramebuffer = function (rtWrapper, disableGenerateMipMaps = false, onBeforeUnbind) {
31
- this._currentRenderTarget = null;
32
- // If MSAA, we need to bitblt back to main texture
33
- const gl = this._gl;
34
- const attachments = rtWrapper._attachments;
35
- const count = attachments.length;
36
- if (rtWrapper._MSAAFramebuffer) {
37
- gl.bindFramebuffer(gl.READ_FRAMEBUFFER, rtWrapper._MSAAFramebuffer);
38
- gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, rtWrapper._framebuffer);
39
- for (let i = 0; i < count; i++) {
40
- const texture = rtWrapper.textures[i];
41
- for (let j = 0; j < count; j++) {
42
- attachments[j] = gl.NONE;
43
- }
44
- attachments[i] = gl[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + i : "COLOR_ATTACHMENT" + i + "_WEBGL"];
45
- gl.readBuffer(attachments[i]);
46
- gl.drawBuffers(attachments);
47
- gl.blitFramebuffer(0, 0, texture.width, texture.height, 0, 0, texture.width, texture.height, gl.COLOR_BUFFER_BIT, gl.NEAREST);
48
- }
49
- for (let i = 0; i < count; i++) {
50
- attachments[i] = gl[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + i : "COLOR_ATTACHMENT" + i + "_WEBGL"];
51
- }
52
- gl.drawBuffers(attachments);
53
- }
54
- for (let i = 0; i < count; i++) {
55
- const texture = rtWrapper.textures[i];
56
- if ((texture === null || texture === void 0 ? void 0 : texture.generateMipMaps) && !disableGenerateMipMaps && !texture.isCube) {
57
- this._bindTextureDirectly(gl.TEXTURE_2D, texture, true);
58
- gl.generateMipmap(gl.TEXTURE_2D);
59
- this._bindTextureDirectly(gl.TEXTURE_2D, null);
60
- }
61
- }
62
- if (onBeforeUnbind) {
63
- if (rtWrapper._MSAAFramebuffer) {
64
- // Bind the correct framebuffer
65
- this._bindUnboundFramebuffer(rtWrapper._framebuffer);
66
- }
67
- onBeforeUnbind();
68
- }
69
- this._bindUnboundFramebuffer(null);
17
+ extension.unBindMultiColorAttachmentFramebuffer(this._engineState, rtWrapper, disableGenerateMipMaps, onBeforeUnbind);
70
18
  };
71
19
  ThinEngine.prototype.createMultipleRenderTarget = function (size, options, initializeBuffers = true) {
72
- var _a;
73
- let generateMipMaps = false;
74
- let generateDepthBuffer = true;
75
- let generateStencilBuffer = false;
76
- let generateDepthTexture = false;
77
- let depthTextureFormat = 15;
78
- let textureCount = 1;
79
- const defaultType = 0;
80
- const defaultSamplingMode = 3;
81
- const defaultUseSRGBBuffer = false;
82
- const defaultFormat = 5;
83
- const defaultTarget = 3553;
84
- let types = [];
85
- let samplingModes = [];
86
- let useSRGBBuffers = [];
87
- let formats = [];
88
- let targets = [];
89
- let faceIndex = [];
90
- let layerIndex = [];
91
- let layers = [];
92
- const rtWrapper = this._createHardwareRenderTargetWrapper(true, false, size);
93
- if (options !== undefined) {
94
- generateMipMaps = options.generateMipMaps === undefined ? false : options.generateMipMaps;
95
- generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;
96
- generateStencilBuffer = options.generateStencilBuffer === undefined ? false : options.generateStencilBuffer;
97
- generateDepthTexture = options.generateDepthTexture === undefined ? false : options.generateDepthTexture;
98
- textureCount = options.textureCount || 1;
99
- if (options.types) {
100
- types = options.types;
101
- }
102
- if (options.samplingModes) {
103
- samplingModes = options.samplingModes;
104
- }
105
- if (options.useSRGBBuffers) {
106
- useSRGBBuffers = options.useSRGBBuffers;
107
- }
108
- if (options.formats) {
109
- formats = options.formats;
110
- }
111
- if (options.targetTypes) {
112
- targets = options.targetTypes;
113
- }
114
- if (options.faceIndex) {
115
- faceIndex = options.faceIndex;
116
- }
117
- if (options.layerIndex) {
118
- layerIndex = options.layerIndex;
119
- }
120
- if (options.layerCounts) {
121
- layers = options.layerCounts;
122
- }
123
- if (this.webGLVersion > 1 &&
124
- (options.depthTextureFormat === 13 ||
125
- options.depthTextureFormat === 17 ||
126
- options.depthTextureFormat === 16 ||
127
- options.depthTextureFormat === 14 ||
128
- options.depthTextureFormat === 18)) {
129
- depthTextureFormat = options.depthTextureFormat;
130
- }
131
- }
132
- const gl = this._gl;
133
- // Create the framebuffer
134
- const framebuffer = gl.createFramebuffer();
135
- this._bindUnboundFramebuffer(framebuffer);
136
- const width = size.width || size;
137
- const height = size.height || size;
138
- const textures = [];
139
- const attachments = [];
140
- const useStencilTexture = this.webGLVersion > 1 &&
141
- generateDepthTexture &&
142
- (options.depthTextureFormat === 13 ||
143
- options.depthTextureFormat === 17 ||
144
- options.depthTextureFormat === 18);
145
- const depthStencilBuffer = this._setupFramebufferDepthAttachments(!useStencilTexture && generateStencilBuffer, !generateDepthTexture && generateDepthBuffer, width, height);
146
- rtWrapper._framebuffer = framebuffer;
147
- rtWrapper._depthStencilBuffer = depthStencilBuffer;
148
- rtWrapper._generateDepthBuffer = !generateDepthTexture && generateDepthBuffer;
149
- rtWrapper._generateStencilBuffer = !useStencilTexture && generateStencilBuffer;
150
- rtWrapper._attachments = attachments;
151
- for (let i = 0; i < textureCount; i++) {
152
- let samplingMode = samplingModes[i] || defaultSamplingMode;
153
- let type = types[i] || defaultType;
154
- let useSRGBBuffer = useSRGBBuffers[i] || defaultUseSRGBBuffer;
155
- const format = formats[i] || defaultFormat;
156
- const target = targets[i] || defaultTarget;
157
- const layerCount = (_a = layers[i]) !== null && _a !== void 0 ? _a : 1;
158
- if (type === 1 && !this._caps.textureFloatLinearFiltering) {
159
- // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE
160
- samplingMode = 1;
161
- }
162
- else if (type === 2 && !this._caps.textureHalfFloatLinearFiltering) {
163
- // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE
164
- samplingMode = 1;
165
- }
166
- const filters = this._getSamplingParameters(samplingMode, generateMipMaps);
167
- if (type === 1 && !this._caps.textureFloat) {
168
- type = 0;
169
- Logger.Warn("Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type");
170
- }
171
- useSRGBBuffer = useSRGBBuffer && this._caps.supportSRGBBuffers && (this.webGLVersion > 1 || this.isWebGPU);
172
- const isWebGL2 = this.webGLVersion > 1;
173
- const attachment = gl[isWebGL2 ? "COLOR_ATTACHMENT" + i : "COLOR_ATTACHMENT" + i + "_WEBGL"];
174
- attachments.push(attachment);
175
- if (target === -1) {
176
- continue;
177
- }
178
- const texture = new InternalTexture(this, InternalTextureSource.MultiRenderTarget);
179
- textures[i] = texture;
180
- gl.activeTexture(gl["TEXTURE" + i]);
181
- gl.bindTexture(target, texture._hardwareTexture.underlyingResource);
182
- gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, filters.mag);
183
- gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, filters.min);
184
- gl.texParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
185
- gl.texParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
186
- const internalSizedFormat = this._getRGBABufferInternalSizedFormat(type, format, useSRGBBuffer);
187
- const internalFormat = this._getInternalFormat(format);
188
- const webGLTextureType = this._getWebGLTextureType(type);
189
- if (isWebGL2 && (target === 35866 || target === 32879)) {
190
- if (target === 35866) {
191
- texture.is2DArray = true;
192
- }
193
- else {
194
- texture.is3D = true;
195
- }
196
- texture.baseDepth = texture.depth = layerCount;
197
- gl.texImage3D(target, 0, internalSizedFormat, width, height, layerCount, 0, internalFormat, webGLTextureType, null);
198
- }
199
- else if (target === 34067) {
200
- // We have to generate all faces to complete the framebuffer
201
- for (let i = 0; i < 6; i++) {
202
- gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);
203
- }
204
- texture.isCube = true;
205
- }
206
- else {
207
- gl.texImage2D(gl.TEXTURE_2D, 0, internalSizedFormat, width, height, 0, internalFormat, webGLTextureType, null);
208
- }
209
- if (generateMipMaps) {
210
- gl.generateMipmap(target);
211
- }
212
- // Unbind
213
- this._bindTextureDirectly(target, null);
214
- texture.baseWidth = width;
215
- texture.baseHeight = height;
216
- texture.width = width;
217
- texture.height = height;
218
- texture.isReady = true;
219
- texture.samples = 1;
220
- texture.generateMipMaps = generateMipMaps;
221
- texture.samplingMode = samplingMode;
222
- texture.type = type;
223
- texture._useSRGBBuffer = useSRGBBuffer;
224
- texture.format = format;
225
- this._internalTexturesCache.push(texture);
226
- }
227
- if (generateDepthTexture && this._caps.depthTextureExtension) {
228
- // Depth texture
229
- const depthTexture = new InternalTexture(this, InternalTextureSource.Depth);
230
- let depthTextureType = 5;
231
- let glDepthTextureInternalFormat = gl.DEPTH_COMPONENT16;
232
- let glDepthTextureFormat = gl.DEPTH_COMPONENT;
233
- let glDepthTextureType = gl.UNSIGNED_SHORT;
234
- let glDepthTextureAttachment = gl.DEPTH_ATTACHMENT;
235
- if (this.webGLVersion < 2) {
236
- glDepthTextureInternalFormat = gl.DEPTH_COMPONENT;
237
- }
238
- else {
239
- if (depthTextureFormat === 14) {
240
- depthTextureType = 1;
241
- glDepthTextureType = gl.FLOAT;
242
- glDepthTextureInternalFormat = gl.DEPTH_COMPONENT32F;
243
- }
244
- else if (depthTextureFormat === 18) {
245
- depthTextureType = 0;
246
- glDepthTextureType = gl.FLOAT_32_UNSIGNED_INT_24_8_REV;
247
- glDepthTextureInternalFormat = gl.DEPTH32F_STENCIL8;
248
- glDepthTextureFormat = gl.DEPTH_STENCIL;
249
- glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;
250
- }
251
- else if (depthTextureFormat === 16) {
252
- depthTextureType = 0;
253
- glDepthTextureType = gl.UNSIGNED_INT;
254
- glDepthTextureInternalFormat = gl.DEPTH_COMPONENT24;
255
- glDepthTextureAttachment = gl.DEPTH_ATTACHMENT;
256
- }
257
- else if (depthTextureFormat === 13 || depthTextureFormat === 17) {
258
- depthTextureType = 12;
259
- glDepthTextureType = gl.UNSIGNED_INT_24_8;
260
- glDepthTextureInternalFormat = gl.DEPTH24_STENCIL8;
261
- glDepthTextureFormat = gl.DEPTH_STENCIL;
262
- glDepthTextureAttachment = gl.DEPTH_STENCIL_ATTACHMENT;
263
- }
264
- }
265
- gl.activeTexture(gl.TEXTURE0);
266
- gl.bindTexture(gl.TEXTURE_2D, depthTexture._hardwareTexture.underlyingResource);
267
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
268
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
269
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
270
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
271
- gl.texImage2D(gl.TEXTURE_2D, 0, glDepthTextureInternalFormat, width, height, 0, glDepthTextureFormat, glDepthTextureType, null);
272
- gl.framebufferTexture2D(gl.FRAMEBUFFER, glDepthTextureAttachment, gl.TEXTURE_2D, depthTexture._hardwareTexture.underlyingResource, 0);
273
- depthTexture.baseWidth = width;
274
- depthTexture.baseHeight = height;
275
- depthTexture.width = width;
276
- depthTexture.height = height;
277
- depthTexture.isReady = true;
278
- depthTexture.samples = 1;
279
- depthTexture.generateMipMaps = generateMipMaps;
280
- depthTexture.samplingMode = 1;
281
- depthTexture.format = depthTextureFormat;
282
- depthTexture.type = depthTextureType;
283
- textures[textureCount] = depthTexture;
284
- this._internalTexturesCache.push(depthTexture);
285
- }
286
- rtWrapper.setTextures(textures);
287
- if (initializeBuffers) {
288
- gl.drawBuffers(attachments);
289
- }
290
- this._bindUnboundFramebuffer(null);
291
- rtWrapper.setLayerAndFaceIndices(layerIndex, faceIndex);
292
- this.resetTextureCache();
293
- return rtWrapper;
20
+ return extension.createMultipleRenderTarget(this._engineState, size, options, initializeBuffers);
294
21
  };
295
22
  ThinEngine.prototype.updateMultipleRenderTargetTextureSampleCount = function (rtWrapper, samples, initializeBuffers = true) {
296
- if (this.webGLVersion < 2 || !rtWrapper || !rtWrapper.texture) {
297
- return 1;
298
- }
299
- if (rtWrapper.samples === samples) {
300
- return samples;
301
- }
302
- const count = rtWrapper._attachments.length;
303
- if (count === 0) {
304
- return 1;
305
- }
306
- const gl = this._gl;
307
- samples = Math.min(samples, this.getCaps().maxMSAASamples);
308
- // Dispose previous render buffers
309
- const useDepthStencil = !!rtWrapper._depthStencilBuffer;
310
- if (useDepthStencil) {
311
- gl.deleteRenderbuffer(rtWrapper._depthStencilBuffer);
312
- rtWrapper._depthStencilBuffer = null;
313
- }
314
- if (rtWrapper._MSAAFramebuffer) {
315
- gl.deleteFramebuffer(rtWrapper._MSAAFramebuffer);
316
- rtWrapper._MSAAFramebuffer = null;
317
- }
318
- if (samples > 1 && typeof gl.renderbufferStorageMultisample === "function") {
319
- const framebuffer = gl.createFramebuffer();
320
- if (!framebuffer) {
321
- throw new Error("Unable to create multi sampled framebuffer");
322
- }
323
- rtWrapper._MSAAFramebuffer = framebuffer;
324
- this._bindUnboundFramebuffer(framebuffer);
325
- const attachments = [];
326
- for (let i = 0; i < count; i++) {
327
- const texture = rtWrapper.textures[i];
328
- const hardwareTexture = texture._hardwareTexture;
329
- hardwareTexture.releaseMSAARenderBuffers();
330
- }
331
- for (let i = 0; i < count; i++) {
332
- const texture = rtWrapper.textures[i];
333
- const hardwareTexture = texture._hardwareTexture;
334
- const attachment = gl[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + i : "COLOR_ATTACHMENT" + i + "_WEBGL"];
335
- const colorRenderbuffer = this._createRenderBuffer(texture.width, texture.height, samples, -1 /* not used */, this._getRGBABufferInternalSizedFormat(texture.type, texture.format, texture._useSRGBBuffer), attachment);
336
- if (!colorRenderbuffer) {
337
- throw new Error("Unable to create multi sampled framebuffer");
338
- }
339
- hardwareTexture.addMSAARenderBuffer(colorRenderbuffer);
340
- texture.samples = samples;
341
- attachments.push(attachment);
342
- }
343
- if (initializeBuffers) {
344
- gl.drawBuffers(attachments);
345
- }
346
- }
347
- else {
348
- this._bindUnboundFramebuffer(rtWrapper._framebuffer);
349
- }
350
- if (useDepthStencil) {
351
- rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(rtWrapper._generateStencilBuffer, rtWrapper._generateDepthBuffer, rtWrapper.texture.width, rtWrapper.texture.height, samples);
352
- }
353
- this._bindUnboundFramebuffer(null);
354
- return samples;
23
+ return extension.updateMultipleRenderTargetTextureSampleCount(this._engineState, rtWrapper, samples, initializeBuffers);
355
24
  };
25
+ loadExtension(3 /* EngineExtensions.MULTI_RENDER */, extension);
356
26
  //# 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/thinEngine\" {\r\n export interface ThinEngine {\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 * 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 MSAA, we need to bitblt back to main texture\r\n const gl = this._gl;\r\n\r\n const attachments = rtWrapper._attachments!;\r\n const count = attachments.length;\r\n\r\n if (rtWrapper._MSAAFramebuffer) {\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, gl.COLOR_BUFFER_BIT, 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\r\n for (let i = 0; i < count; i++) {\r\n const texture = rtWrapper.textures![i];\r\n if (texture?.generateMipMaps && !disableGenerateMipMaps && !texture.isCube) {\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 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 = Constants.TEXTUREFORMAT_DEPTH16;\r\n let textureCount = 1;\r\n\r\n const defaultType = Constants.TEXTURETYPE_UNSIGNED_INT;\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\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\r\n if (options.types) {\r\n types = options.types;\r\n }\r\n if (options.samplingModes) {\r\n samplingModes = options.samplingModes;\r\n }\r\n if (options.useSRGBBuffers) {\r\n useSRGBBuffers = options.useSRGBBuffers;\r\n }\r\n if (options.formats) {\r\n formats = options.formats;\r\n }\r\n if (options.targetTypes) {\r\n targets = options.targetTypes;\r\n }\r\n if (options.faceIndex) {\r\n faceIndex = options.faceIndex;\r\n }\r\n if (options.layerIndex) {\r\n layerIndex = options.layerIndex;\r\n }\r\n if (options.layerCounts) {\r\n layers = options.layerCounts;\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 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 generateDepthTexture &&\r\n (options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 ||\r\n options.depthTextureFormat === Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8);\r\n const depthStencilBuffer = this._setupFramebufferDepthAttachments(!useStencilTexture && generateStencilBuffer, !generateDepthTexture && generateDepthBuffer, width, height);\r\n\r\n rtWrapper._framebuffer = framebuffer;\r\n rtWrapper._depthStencilBuffer = depthStencilBuffer;\r\n rtWrapper._generateDepthBuffer = !generateDepthTexture && generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = !useStencilTexture && generateStencilBuffer;\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_INT;\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) {\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\r\n this._internalTexturesCache.push(texture);\r\n }\r\n\r\n if (generateDepthTexture && this._caps.depthTextureExtension) {\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_INT;\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_INT;\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 gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, depthTexture._hardwareTexture!.underlyingResource);\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 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\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 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 || !rtWrapper.texture) {\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 count = rtWrapper._attachments!.length;\r\n\r\n if (count === 0) {\r\n return 1;\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 const useDepthStencil = !!rtWrapper._depthStencilBuffer;\r\n if (useDepthStencil) {\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 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\r\n hardwareTexture.releaseMSAARenderBuffers();\r\n }\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 if (useDepthStencil) {\r\n rtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper._generateDepthBuffer,\r\n rtWrapper.texture.width,\r\n rtWrapper.texture.height,\r\n samples\r\n );\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n\r\n return samples;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.multiRender.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiRender.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,4EAAwE;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAoB,aAAa,EAAE,0DAAsD;AA+DhG,UAAU,CAAC,SAAS,CAAC,uBAAuB,GAAG;IAC3C,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,sCAAsC,GAAG;IAC1D,SAAS,CAAC,sCAAsC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,kBAAkB,GAAG,UAAU,aAAwB;IACxE,OAAO,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,WAAqB;IAClE,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,qCAAqC,GAAG,UACzD,SAAmC,EACnC,yBAAkC,KAAK,EACvC,cAA2B;IAE3B,SAAS,CAAC,qCAAqC,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,cAAc,CAAC,CAAC;AAC1H,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,0BAA0B,GAAG,UAAU,IAAiB,EAAE,OAAkC,EAAE,oBAA6B,IAAI;IAChJ,OAAO,SAAS,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,UAAU,CAAC,SAAS,CAAC,4CAA4C,GAAG,UAChE,SAA6C,EAC7C,OAAe,EACf,oBAA6B,IAAI;IAEjC,OAAO,SAAS,CAAC,4CAA4C,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC5H,CAAC,CAAC;AAEF,aAAa,wCAAgC,SAAS,CAAC,CAAC","sourcesContent":["import type { IMultiRenderTargetOptions } from \"../../Materials/Textures/multiRenderTarget\";\r\nimport type { Nullable } from \"../../types\";\r\nimport * as extension from \"core/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl\";\r\nimport { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { EngineExtensions, loadExtension } from \"core/esm/Engines/Extensions/engine.extensions\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\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 * 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 extension.restoreSingleAttachment(this._engineState);\r\n};\r\n\r\nThinEngine.prototype.restoreSingleAttachmentForRenderTarget = function (): void {\r\n extension.restoreSingleAttachmentForRenderTarget(this._engineState);\r\n};\r\n\r\nThinEngine.prototype.buildTextureLayout = function (textureStatus: boolean[]): number[] {\r\n return extension.buildTextureLayout(this._engineState, textureStatus);\r\n};\r\n\r\nThinEngine.prototype.bindAttachments = function (attachments: number[]): void {\r\n extension.bindAttachments(this._engineState, 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 extension.unBindMultiColorAttachmentFramebuffer(this._engineState, rtWrapper, disableGenerateMipMaps, onBeforeUnbind);\r\n};\r\n\r\nThinEngine.prototype.createMultipleRenderTarget = function (size: TextureSize, options: IMultiRenderTargetOptions, initializeBuffers: boolean = true): RenderTargetWrapper {\r\n return extension.createMultipleRenderTarget(this._engineState, size, options, initializeBuffers);\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 return extension.updateMultipleRenderTargetTextureSampleCount(this._engineState, rtWrapper, samples, initializeBuffers);\r\n};\r\n\r\nloadExtension(EngineExtensions.MULTI_RENDER, extension);\r\n"]}
@@ -1,73 +1,22 @@
1
1
  import { Camera } from "../../Cameras/camera.js";
2
2
  import { Engine } from "../../Engines/engine.js";
3
+ import * as extension from "../../esm/Engines/WebGL/Extensions/multiview/multiview.webgl.js";
4
+ import { loadExtension } from "../../esm/Engines/Extensions/engine.extensions.js";
3
5
  import { Scene } from "../../scene.js";
4
- import { InternalTexture, InternalTextureSource } from "../../Materials/Textures/internalTexture.js";
5
6
  import { Matrix, TmpVectors } from "../../Maths/math.vector.js";
6
7
  import { UniformBuffer } from "../../Materials/uniformBuffer.js";
7
8
  import { MultiviewRenderTarget } from "../../Materials/Textures/MultiviewRenderTarget.js";
8
9
  import { Frustum } from "../../Maths/math.frustum.js";
9
10
  Engine.prototype.createMultiviewRenderTargetTexture = function (width, height, colorTexture, depthStencilTexture) {
10
- const gl = this._gl;
11
- if (!this.getCaps().multiview) {
12
- throw "Multiview is not supported";
13
- }
14
- const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, { width, height });
15
- rtWrapper._framebuffer = gl.createFramebuffer();
16
- const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);
17
- internalTexture.width = width;
18
- internalTexture.height = height;
19
- internalTexture.isMultiview = true;
20
- if (!colorTexture) {
21
- colorTexture = gl.createTexture();
22
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, colorTexture);
23
- gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);
24
- }
25
- rtWrapper._colorTextureArray = colorTexture;
26
- if (!depthStencilTexture) {
27
- depthStencilTexture = gl.createTexture();
28
- gl.bindTexture(gl.TEXTURE_2D_ARRAY, depthStencilTexture);
29
- gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.DEPTH24_STENCIL8, width, height, 2);
30
- }
31
- rtWrapper._depthStencilTextureArray = depthStencilTexture;
32
- internalTexture.isReady = true;
33
- rtWrapper.setTextures(internalTexture);
34
- rtWrapper._depthStencilTexture = internalTexture;
35
- return rtWrapper;
11
+ return extension.createMultiviewRenderTargetTexture(this._engineState, width, height, colorTexture, depthStencilTexture);
36
12
  };
37
13
  Engine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture) {
38
- const multiviewTexture = _multiviewTexture;
39
- const gl = this._gl;
40
- const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;
41
- this.bindFramebuffer(multiviewTexture, undefined, undefined, undefined, true);
42
- gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, multiviewTexture._framebuffer);
43
- if (multiviewTexture._colorTextureArray && multiviewTexture._depthStencilTextureArray) {
44
- if (this.getCaps().oculusMultiview) {
45
- ext.framebufferTextureMultisampleMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, multiviewTexture.samples, 0, 2);
46
- ext.framebufferTextureMultisampleMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, multiviewTexture.samples, 0, 2);
47
- }
48
- else {
49
- ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, 0, 2);
50
- ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, 0, 2);
51
- }
52
- }
53
- else {
54
- throw "Invalid multiview frame buffer";
55
- }
14
+ extension.bindMultiviewFramebuffer(this._engineState, _multiviewTexture);
56
15
  };
57
16
  Engine.prototype.bindSpaceWarpFramebuffer = function (_spaceWarpTexture) {
58
- const spaceWarpTexture = _spaceWarpTexture;
59
- const gl = this._gl;
60
- const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;
61
- this.bindFramebuffer(spaceWarpTexture, undefined, undefined, undefined, true);
62
- gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, spaceWarpTexture._framebuffer);
63
- if (spaceWarpTexture._colorTextureArray && spaceWarpTexture._depthStencilTextureArray) {
64
- ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, spaceWarpTexture._colorTextureArray, 0, 0, 2);
65
- ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, spaceWarpTexture._depthStencilTextureArray, 0, 0, 2);
66
- }
67
- else {
68
- throw new Error("Invalid Space Warp framebuffer");
69
- }
17
+ extension.bindSpaceWarpFramebuffer(this._engineState, _spaceWarpTexture);
70
18
  };
19
+ loadExtension(10 /* EngineExtensions.MULTIVIEW */, extension);
71
20
  Camera.prototype._useMultiviewToSingleView = false;
72
21
  Camera.prototype._multiviewTexture = null;
73
22
  Camera.prototype._resizeOrCreateMultiviewTexture = function (width, height) {
@@ -1 +1 @@
1
- {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiview.ts"],"names":[],"mappings":"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","sourcesContent":["import { Camera } from \"../../Cameras/camera\";\r\nimport { Engine } from \"../../Engines/engine\";\r\nimport { Scene } from \"../../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MultiviewRenderTarget } from \"../../Materials/Textures/MultiviewRenderTarget\";\r\nimport { Frustum } from \"../../Maths/math.frustum\";\r\nimport type { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n export interface Engine {\r\n /**\r\n * Creates a new multiview render target\r\n * @param width defines the width of the texture\r\n * @param height defines the height of the texture\r\n * @returns the created multiview render target wrapper\r\n */\r\n createMultiviewRenderTargetTexture(width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture): RenderTargetWrapper;\r\n\r\n /**\r\n * Binds a multiview render target wrapper to be drawn to\r\n * @param multiviewTexture render target wrapper to bind\r\n */\r\n bindMultiviewFramebuffer(multiviewTexture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Binds a Space Warp render target wrapper to be drawn to\r\n * @param spaceWarpTexture render target wrapper to bind\r\n */\r\n bindSpaceWarpFramebuffer(spaceWarpTexture: RenderTargetWrapper): void;\r\n }\r\n}\r\n\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture) {\r\n const gl = this._gl;\r\n\r\n if (!this.getCaps().multiview) {\r\n throw \"Multiview is not supported\";\r\n }\r\n\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, { width, height }) as WebGLRenderTargetWrapper;\r\n\r\n rtWrapper._framebuffer = gl.createFramebuffer();\r\n\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isMultiview = true;\r\n\r\n if (!colorTexture) {\r\n colorTexture = gl.createTexture() as WebGLTexture;\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, colorTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);\r\n }\r\n\r\n rtWrapper._colorTextureArray = colorTexture;\r\n\r\n if (!depthStencilTexture) {\r\n depthStencilTexture = gl.createTexture() as WebGLTexture;\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, depthStencilTexture);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, (gl as any).DEPTH24_STENCIL8, width, height, 2);\r\n }\r\n\r\n rtWrapper._depthStencilTextureArray = depthStencilTexture;\r\n\r\n internalTexture.isReady = true;\r\n\r\n rtWrapper.setTextures(internalTexture);\r\n rtWrapper._depthStencilTexture = internalTexture;\r\n\r\n return rtWrapper;\r\n};\r\n\r\nEngine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture: RenderTargetWrapper) {\r\n const multiviewTexture = _multiviewTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(multiviewTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, multiviewTexture._framebuffer);\r\n if (multiviewTexture._colorTextureArray && multiviewTexture._depthStencilTextureArray) {\r\n if (this.getCaps().oculusMultiview) {\r\n ext.framebufferTextureMultisampleMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, multiviewTexture.samples, 0, 2);\r\n ext.framebufferTextureMultisampleMultiviewOVR(\r\n gl.DRAW_FRAMEBUFFER,\r\n gl.DEPTH_STENCIL_ATTACHMENT,\r\n multiviewTexture._depthStencilTextureArray,\r\n 0,\r\n multiviewTexture.samples,\r\n 0,\r\n 2\r\n );\r\n } else {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, multiviewTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, 0, 2);\r\n }\r\n } else {\r\n throw \"Invalid multiview frame buffer\";\r\n }\r\n};\r\n\r\nEngine.prototype.bindSpaceWarpFramebuffer = function (_spaceWarpTexture: RenderTargetWrapper) {\r\n const spaceWarpTexture = _spaceWarpTexture as WebGLRenderTargetWrapper;\r\n\r\n const gl: any = this._gl;\r\n const ext = this.getCaps().oculusMultiview || this.getCaps().multiview;\r\n\r\n this.bindFramebuffer(spaceWarpTexture, undefined, undefined, undefined, true);\r\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, spaceWarpTexture._framebuffer);\r\n if (spaceWarpTexture._colorTextureArray && spaceWarpTexture._depthStencilTextureArray) {\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, spaceWarpTexture._colorTextureArray, 0, 0, 2);\r\n ext.framebufferTextureMultiviewOVR(gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, spaceWarpTexture._depthStencilTextureArray, 0, 0, 2);\r\n } else {\r\n throw new Error(\"Invalid Space Warp framebuffer\");\r\n }\r\n};\r\n\r\ndeclare module \"../../Cameras/camera\" {\r\n export interface Camera {\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _useMultiviewToSingleView: boolean;\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _multiviewTexture: Nullable<RenderTargetTexture>;\r\n\r\n /**\r\n * @internal\r\n * For WebXR cameras that are rendering to multiview texture arrays.\r\n */\r\n _renderingMultiview: boolean;\r\n\r\n /**\r\n * @internal\r\n * ensures the multiview texture of the camera exists and has the specified width/height\r\n * @param width height to set on the multiview texture\r\n * @param height width to set on the multiview texture\r\n */\r\n _resizeOrCreateMultiviewTexture(width: number, height: number): void;\r\n }\r\n}\r\n\r\nCamera.prototype._useMultiviewToSingleView = false;\r\n\r\nCamera.prototype._multiviewTexture = null;\r\n\r\nCamera.prototype._resizeOrCreateMultiviewTexture = function (width: number, height: number) {\r\n if (!this._multiviewTexture) {\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n } else if (this._multiviewTexture.getRenderWidth() != width || this._multiviewTexture.getRenderHeight() != height) {\r\n this._multiviewTexture.dispose();\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n }\r\n};\r\n\r\ndeclare module \"../../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _transformMatrixR: Matrix;\r\n /** @internal */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @internal */\r\n _createMultiviewUbo(): void;\r\n /** @internal */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @internal */\r\n _renderMultiviewToSingleView(camera: Camera): void;\r\n }\r\n}\r\n\r\nfunction createMultiviewUbo(engine: Engine, name?: string) {\r\n const ubo = new UniformBuffer(engine, undefined, true, name);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.addUniform(\"view\", 16);\r\n ubo.addUniform(\"projection\", 16);\r\n ubo.addUniform(\"vEyePosition\", 4);\r\n return ubo;\r\n}\r\n\r\nconst currentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;\r\n\r\nScene.prototype._transformMatrixR = Matrix.Zero();\r\nScene.prototype._multiviewSceneUbo = null;\r\nScene.prototype._createMultiviewUbo = function () {\r\n this._multiviewSceneUbo = createMultiviewUbo(this.getEngine(), \"scene_multiview\");\r\n};\r\nScene.prototype.createSceneUniformBuffer = function (name?: string): UniformBuffer {\r\n if (this._multiviewSceneUbo) {\r\n return createMultiviewUbo(this.getEngine(), name);\r\n }\r\n return currentCreateSceneUniformBuffer.bind(this)(name);\r\n};\r\nScene.prototype._updateMultiviewUbo = function (viewR?: Matrix, projectionR?: Matrix) {\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, this._transformMatrixR);\r\n }\r\n\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, TmpVectors.Matrix[0]);\r\n Frustum.GetRightPlaneToRef(TmpVectors.Matrix[0], this._frustumPlanes[3]); // Replace right plane by second camera right plane\r\n }\r\n\r\n if (this._multiviewSceneUbo) {\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjection\", this.getTransformMatrix());\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjectionR\", this._transformMatrixR);\r\n this._multiviewSceneUbo.updateMatrix(\"view\", this._viewMatrix);\r\n this._multiviewSceneUbo.updateMatrix(\"projection\", this._projectionMatrix);\r\n }\r\n};\r\nScene.prototype._renderMultiviewToSingleView = function (camera: Camera) {\r\n // Multiview is only able to be displayed directly for API's such as webXR\r\n // This displays a multiview image by rendering to the multiview image and then\r\n // copying the result into the sub cameras instead of rendering them and proceeding as normal from there\r\n\r\n // Render to a multiview texture\r\n camera._resizeOrCreateMultiviewTexture(\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.width > 0 ? camera._rigPostProcess.width : this.getEngine().getRenderWidth(true),\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.height > 0 ? camera._rigPostProcess.height : this.getEngine().getRenderHeight(true)\r\n );\r\n if (!this._multiviewSceneUbo) {\r\n this._createMultiviewUbo();\r\n }\r\n camera.outputRenderTarget = camera._multiviewTexture;\r\n this._renderForCamera(camera);\r\n camera.outputRenderTarget = null;\r\n\r\n // Consume the multiview texture through a shader for each eye\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const engine = this.getEngine();\r\n this._activeCamera = camera._rigCameras[index];\r\n engine.setViewport(this._activeCamera.viewport);\r\n if (this.postProcessManager) {\r\n this.postProcessManager._prepareFrame();\r\n this.postProcessManager._finalizeFrame(this._activeCamera.isIntermediate);\r\n }\r\n }\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.multiview.ts"],"names":[],"mappings":"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","sourcesContent":["import { Camera } from \"../../Cameras/camera\";\r\nimport { Engine } from \"../../Engines/engine\";\r\nimport * as extension from \"core/esm/Engines/WebGL/Extensions/multiview/multiview.webgl\";\r\nimport { EngineExtensions, loadExtension } from \"core/esm/Engines/Extensions/engine.extensions\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MultiviewRenderTarget } from \"../../Materials/Textures/MultiviewRenderTarget\";\r\nimport { Frustum } from \"../../Maths/math.frustum\";\r\nimport type { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n export interface Engine {\r\n /**\r\n * Creates a new multiview render target\r\n * @param width defines the width of the texture\r\n * @param height defines the height of the texture\r\n * @returns the created multiview render target wrapper\r\n */\r\n createMultiviewRenderTargetTexture(width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture): RenderTargetWrapper;\r\n\r\n /**\r\n * Binds a multiview render target wrapper to be drawn to\r\n * @param multiviewTexture render target wrapper to bind\r\n */\r\n bindMultiviewFramebuffer(multiviewTexture: RenderTargetWrapper): void;\r\n\r\n /**\r\n * Binds a Space Warp render target wrapper to be drawn to\r\n * @param spaceWarpTexture render target wrapper to bind\r\n */\r\n bindSpaceWarpFramebuffer(spaceWarpTexture: RenderTargetWrapper): void;\r\n }\r\n}\r\n\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number, colorTexture?: WebGLTexture, depthStencilTexture?: WebGLTexture) {\r\n return extension.createMultiviewRenderTargetTexture(this._engineState, width, height, colorTexture, depthStencilTexture);\r\n};\r\n\r\nEngine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture: RenderTargetWrapper) {\r\n extension.bindMultiviewFramebuffer(this._engineState, _multiviewTexture);\r\n};\r\n\r\nEngine.prototype.bindSpaceWarpFramebuffer = function (_spaceWarpTexture: RenderTargetWrapper) {\r\n extension.bindSpaceWarpFramebuffer(this._engineState, _spaceWarpTexture);\r\n};\r\n\r\nloadExtension(EngineExtensions.MULTIVIEW, extension);\r\n\r\ndeclare module \"../../Cameras/camera\" {\r\n export interface Camera {\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _useMultiviewToSingleView: boolean;\r\n /**\r\n * @internal\r\n * For cameras that cannot use multiview images to display directly. (e.g. webVR camera will render to multiview texture, then copy to each eye texture and go from there)\r\n */\r\n _multiviewTexture: Nullable<RenderTargetTexture>;\r\n\r\n /**\r\n * @internal\r\n * For WebXR cameras that are rendering to multiview texture arrays.\r\n */\r\n _renderingMultiview: boolean;\r\n\r\n /**\r\n * @internal\r\n * ensures the multiview texture of the camera exists and has the specified width/height\r\n * @param width height to set on the multiview texture\r\n * @param height width to set on the multiview texture\r\n */\r\n _resizeOrCreateMultiviewTexture(width: number, height: number): void;\r\n }\r\n}\r\n\r\nCamera.prototype._useMultiviewToSingleView = false;\r\n\r\nCamera.prototype._multiviewTexture = null;\r\n\r\nCamera.prototype._resizeOrCreateMultiviewTexture = function (width: number, height: number) {\r\n if (!this._multiviewTexture) {\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n } else if (this._multiviewTexture.getRenderWidth() != width || this._multiviewTexture.getRenderHeight() != height) {\r\n this._multiviewTexture.dispose();\r\n this._multiviewTexture = new MultiviewRenderTarget(this.getScene(), { width: width, height: height });\r\n }\r\n};\r\n\r\ndeclare module \"../../scene\" {\r\n export interface Scene {\r\n /** @internal */\r\n _transformMatrixR: Matrix;\r\n /** @internal */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @internal */\r\n _createMultiviewUbo(): void;\r\n /** @internal */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @internal */\r\n _renderMultiviewToSingleView(camera: Camera): void;\r\n }\r\n}\r\n\r\nfunction createMultiviewUbo(engine: Engine, name?: string) {\r\n const ubo = new UniformBuffer(engine, undefined, true, name);\r\n ubo.addUniform(\"viewProjection\", 16);\r\n ubo.addUniform(\"viewProjectionR\", 16);\r\n ubo.addUniform(\"view\", 16);\r\n ubo.addUniform(\"projection\", 16);\r\n ubo.addUniform(\"vEyePosition\", 4);\r\n return ubo;\r\n}\r\n\r\nconst currentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;\r\n\r\nScene.prototype._transformMatrixR = Matrix.Zero();\r\nScene.prototype._multiviewSceneUbo = null;\r\nScene.prototype._createMultiviewUbo = function () {\r\n this._multiviewSceneUbo = createMultiviewUbo(this.getEngine(), \"scene_multiview\");\r\n};\r\nScene.prototype.createSceneUniformBuffer = function (name?: string): UniformBuffer {\r\n if (this._multiviewSceneUbo) {\r\n return createMultiviewUbo(this.getEngine(), name);\r\n }\r\n return currentCreateSceneUniformBuffer.bind(this)(name);\r\n};\r\nScene.prototype._updateMultiviewUbo = function (viewR?: Matrix, projectionR?: Matrix) {\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, this._transformMatrixR);\r\n }\r\n\r\n if (viewR && projectionR) {\r\n viewR.multiplyToRef(projectionR, TmpVectors.Matrix[0]);\r\n Frustum.GetRightPlaneToRef(TmpVectors.Matrix[0], this._frustumPlanes[3]); // Replace right plane by second camera right plane\r\n }\r\n\r\n if (this._multiviewSceneUbo) {\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjection\", this.getTransformMatrix());\r\n this._multiviewSceneUbo.updateMatrix(\"viewProjectionR\", this._transformMatrixR);\r\n this._multiviewSceneUbo.updateMatrix(\"view\", this._viewMatrix);\r\n this._multiviewSceneUbo.updateMatrix(\"projection\", this._projectionMatrix);\r\n }\r\n};\r\nScene.prototype._renderMultiviewToSingleView = function (camera: Camera) {\r\n // Multiview is only able to be displayed directly for API's such as webXR\r\n // This displays a multiview image by rendering to the multiview image and then\r\n // copying the result into the sub cameras instead of rendering them and proceeding as normal from there\r\n\r\n // Render to a multiview texture\r\n camera._resizeOrCreateMultiviewTexture(\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.width > 0 ? camera._rigPostProcess.width : this.getEngine().getRenderWidth(true),\r\n camera._rigPostProcess && camera._rigPostProcess && camera._rigPostProcess.height > 0 ? camera._rigPostProcess.height : this.getEngine().getRenderHeight(true)\r\n );\r\n if (!this._multiviewSceneUbo) {\r\n this._createMultiviewUbo();\r\n }\r\n camera.outputRenderTarget = camera._multiviewTexture;\r\n this._renderForCamera(camera);\r\n camera.outputRenderTarget = null;\r\n\r\n // Consume the multiview texture through a shader for each eye\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const engine = this.getEngine();\r\n this._activeCamera = camera._rigCameras[index];\r\n engine.setViewport(this._activeCamera.viewport);\r\n if (this.postProcessManager) {\r\n this.postProcessManager._prepareFrame();\r\n this.postProcessManager._finalizeFrame(this._activeCamera.isIntermediate);\r\n }\r\n }\r\n};\r\n"]}