@babylonjs/core 5.0.0-beta.2 → 5.0.0-beta.6

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 (692) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +5 -1
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Audio/analyser.d.ts +2 -1
  5. package/Audio/analyser.js +5 -0
  6. package/Audio/analyser.js.map +1 -1
  7. package/Audio/audioSceneComponent.d.ts +1 -1
  8. package/Audio/audioSceneComponent.js +5 -0
  9. package/Audio/audioSceneComponent.js.map +1 -1
  10. package/Audio/sound.d.ts +1 -1
  11. package/Audio/sound.js +8 -1
  12. package/Audio/sound.js.map +1 -1
  13. package/Audio/soundTrack.d.ts +2 -1
  14. package/Audio/soundTrack.js +5 -0
  15. package/Audio/soundTrack.js.map +1 -1
  16. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  17. package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
  18. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  19. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  20. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  21. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  22. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  23. package/Bones/bone.d.ts +2 -1
  24. package/Bones/bone.js +28 -18
  25. package/Bones/bone.js.map +1 -1
  26. package/Bones/skeleton.js +3 -3
  27. package/Bones/skeleton.js.map +1 -1
  28. package/Buffers/buffer.d.ts +4 -0
  29. package/Buffers/buffer.js +13 -3
  30. package/Buffers/buffer.js.map +1 -1
  31. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
  32. package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
  33. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  34. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  35. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  36. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
  37. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  38. package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
  39. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  40. package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
  41. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  42. package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
  43. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  44. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
  45. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  46. package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
  47. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  48. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
  49. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  50. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
  51. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  52. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
  53. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  54. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
  55. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  56. package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
  57. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  58. package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
  59. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  60. package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
  61. package/Cameras/VR/vrExperienceHelper.js +1 -0
  62. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  63. package/Cameras/VR/webVRCamera.d.ts +2 -1
  64. package/Cameras/VR/webVRCamera.js +3 -2
  65. package/Cameras/VR/webVRCamera.js.map +1 -1
  66. package/Cameras/arcRotateCamera.d.ts +1 -1
  67. package/Cameras/arcRotateCamera.js.map +1 -1
  68. package/Cameras/camera.d.ts +1 -1
  69. package/Cameras/camera.js +1 -1
  70. package/Cameras/camera.js.map +1 -1
  71. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  72. package/Cameras/deviceOrientationCamera.js.map +1 -1
  73. package/Cameras/flyCamera.d.ts +1 -1
  74. package/Cameras/flyCamera.js.map +1 -1
  75. package/Cameras/followCamera.d.ts +1 -1
  76. package/Cameras/followCamera.js.map +1 -1
  77. package/Cameras/freeCamera.d.ts +1 -1
  78. package/Cameras/freeCamera.js.map +1 -1
  79. package/Cameras/gamepadCamera.d.ts +1 -1
  80. package/Cameras/gamepadCamera.js.map +1 -1
  81. package/Cameras/targetCamera.d.ts +1 -1
  82. package/Cameras/targetCamera.js.map +1 -1
  83. package/Cameras/touchCamera.d.ts +1 -1
  84. package/Cameras/touchCamera.js.map +1 -1
  85. package/Cameras/universalCamera.d.ts +1 -1
  86. package/Cameras/universalCamera.js.map +1 -1
  87. package/Cameras/virtualJoysticksCamera.d.ts +1 -1
  88. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  89. package/Collisions/collider.d.ts +1 -1
  90. package/Collisions/collider.js +48 -2
  91. package/Collisions/collider.js.map +1 -1
  92. package/Compute/computeEffect.js +2 -2
  93. package/Compute/computeEffect.js.map +1 -1
  94. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
  95. package/Culling/Octrees/octreeSceneComponent.js +5 -0
  96. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  97. package/Culling/ray.d.ts +6 -4
  98. package/Culling/ray.js +33 -11
  99. package/Culling/ray.js.map +1 -1
  100. package/Debug/axesViewer.d.ts +2 -1
  101. package/Debug/axesViewer.js +6 -0
  102. package/Debug/axesViewer.js.map +1 -1
  103. package/Debug/debugLayer.d.ts +1 -1
  104. package/Debug/debugLayer.js +6 -2
  105. package/Debug/debugLayer.js.map +1 -1
  106. package/Debug/physicsViewer.d.ts +1 -1
  107. package/Debug/physicsViewer.js +3 -0
  108. package/Debug/physicsViewer.js.map +1 -1
  109. package/DeviceInput/Helpers/eventFactory.d.ts +1 -1
  110. package/DeviceInput/Helpers/eventFactory.js +1 -1
  111. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  112. package/DeviceInput/InputDevices/deviceEnums.d.ts +52 -1
  113. package/DeviceInput/InputDevices/deviceEnums.js +52 -0
  114. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  115. package/DeviceInput/InputDevices/deviceSource.d.ts +35 -0
  116. package/DeviceInput/InputDevices/deviceSource.js +38 -0
  117. package/DeviceInput/InputDevices/deviceSource.js.map +1 -0
  118. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +14 -72
  119. package/DeviceInput/InputDevices/deviceSourceManager.js +10 -180
  120. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  121. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  122. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  123. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.d.ts +1 -5
  124. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.js +0 -0
  125. package/DeviceInput/InputDevices/inputInterfaces.js.map +1 -0
  126. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +46 -0
  127. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +144 -0
  128. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -0
  129. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.d.ts +3 -7
  130. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.js +9 -15
  131. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -0
  132. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.d.ts +11 -15
  133. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.js +116 -95
  134. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -0
  135. package/DeviceInput/index.d.ts +1 -5
  136. package/DeviceInput/index.js +1 -5
  137. package/DeviceInput/index.js.map +1 -1
  138. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  139. package/Engines/Extensions/engine.cubeTexture.js +5 -2
  140. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  141. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  142. package/Engines/Extensions/engine.multiview.js +4 -1
  143. package/Engines/Extensions/engine.multiview.js.map +1 -1
  144. package/Engines/Native/nativeInterfaces.d.ts +3 -2
  145. package/Engines/Native/nativeInterfaces.js.map +1 -1
  146. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  147. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  148. package/Engines/Processors/shaderCodeInliner.js +13 -13
  149. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  150. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  151. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  152. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -7
  153. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  154. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  155. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  156. package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -0
  157. package/Engines/WebGPU/webgpuCacheSampler.js +23 -2
  158. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  159. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  160. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  161. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  162. package/Engines/WebGPU/webgpuDrawContext.js +3 -3
  163. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  164. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -1
  165. package/Engines/WebGPU/webgpuHardwareTexture.js +0 -3
  166. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  167. package/Engines/WebGPU/webgpuPipelineContext.d.ts +0 -8
  168. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  169. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  170. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  171. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  172. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  173. package/Engines/WebGPU/webgpuTextureHelper.d.ts +0 -1
  174. package/Engines/WebGPU/webgpuTextureHelper.js +8 -30
  175. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  176. package/Engines/engine.d.ts +3 -7
  177. package/Engines/engine.js +2 -6
  178. package/Engines/engine.js.map +1 -1
  179. package/Engines/engineCapabilities.d.ts +4 -0
  180. package/Engines/engineCapabilities.js.map +1 -1
  181. package/Engines/nativeEngine.d.ts +1 -0
  182. package/Engines/nativeEngine.js +39 -12
  183. package/Engines/nativeEngine.js.map +1 -1
  184. package/Engines/nullEngine.js +3 -1
  185. package/Engines/nullEngine.js.map +1 -1
  186. package/Engines/thinEngine.d.ts +11 -2
  187. package/Engines/thinEngine.js +34 -21
  188. package/Engines/thinEngine.js.map +1 -1
  189. package/Engines/webgpuEngine.d.ts +3 -7
  190. package/Engines/webgpuEngine.js +12 -22
  191. package/Engines/webgpuEngine.js.map +1 -1
  192. package/Gamepads/Controllers/daydreamController.js +1 -1
  193. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  194. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  195. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  196. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  197. package/Gamepads/Controllers/webVRController.js +1 -0
  198. package/Gamepads/Controllers/webVRController.js.map +1 -1
  199. package/Gamepads/gamepadManager.js +1 -1
  200. package/Gamepads/gamepadManager.js.map +1 -1
  201. package/Gizmos/gizmoManager.d.ts +2 -0
  202. package/Gizmos/gizmoManager.js +28 -24
  203. package/Gizmos/gizmoManager.js.map +1 -1
  204. package/Helpers/sceneHelpers.d.ts +1 -0
  205. package/Helpers/sceneHelpers.js.map +1 -1
  206. package/Inputs/scene.inputManager.d.ts +2 -2
  207. package/Inputs/scene.inputManager.js +10 -9
  208. package/Inputs/scene.inputManager.js.map +1 -1
  209. package/Instrumentation/sceneInstrumentation.js +2 -2
  210. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  211. package/Layers/effectLayer.d.ts +1 -1
  212. package/Layers/effectLayer.js +1 -1
  213. package/Layers/effectLayer.js.map +1 -1
  214. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  215. package/Layers/effectLayerSceneComponent.js +7 -3
  216. package/Layers/effectLayerSceneComponent.js.map +1 -1
  217. package/Layers/glowLayer.d.ts +1 -1
  218. package/Layers/glowLayer.js.map +1 -1
  219. package/Layers/highlightLayer.d.ts +1 -1
  220. package/Layers/highlightLayer.js +2 -1
  221. package/Layers/highlightLayer.js.map +1 -1
  222. package/Layers/layer.d.ts +2 -2
  223. package/Layers/layer.js.map +1 -1
  224. package/Layers/layerSceneComponent.d.ts +1 -1
  225. package/Layers/layerSceneComponent.js +7 -3
  226. package/Layers/layerSceneComponent.js.map +1 -1
  227. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  228. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  229. package/Lights/Shadows/shadowGenerator.js +2 -2
  230. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  231. package/Loading/Plugins/babylonFileLoader.js +115 -29
  232. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  233. package/Loading/loadingScreen.js +8 -8
  234. package/Loading/loadingScreen.js.map +1 -1
  235. package/Loading/sceneLoader.js +3 -3
  236. package/Loading/sceneLoader.js.map +1 -1
  237. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  238. package/Materials/Background/backgroundMaterial.js.map +1 -1
  239. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  240. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  241. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  242. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  243. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  245. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  247. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  249. package/Materials/Node/Blocks/Dual/index.js +1 -0
  250. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  251. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  252. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  254. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  256. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  258. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  260. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  262. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  264. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  266. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  268. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  270. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  272. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  273. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  274. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  275. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  276. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  277. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  278. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  280. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  281. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  282. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  283. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  284. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  285. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  286. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  287. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  288. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  289. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  290. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  291. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  292. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  293. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  294. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  295. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  296. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  297. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  298. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  299. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  300. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  301. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  302. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  303. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  304. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  305. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  306. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  307. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  308. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  309. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  310. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  311. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  312. package/Materials/Node/Blocks/addBlock.js +1 -1
  313. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  314. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  315. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  316. package/Materials/Node/Blocks/clampBlock.js +3 -3
  317. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  318. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  319. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  320. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  321. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  322. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  323. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  324. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  325. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  326. package/Materials/Node/Blocks/crossBlock.js +1 -1
  327. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  328. package/Materials/Node/Blocks/customBlock.js +1 -1
  329. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  330. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  331. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  332. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  333. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  334. package/Materials/Node/Blocks/divideBlock.js +1 -1
  335. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  336. package/Materials/Node/Blocks/dotBlock.js +1 -1
  337. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  338. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  339. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  340. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  341. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  342. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  343. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  344. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  345. package/Materials/Node/Blocks/index.d.ts +1 -0
  346. package/Materials/Node/Blocks/index.js +1 -0
  347. package/Materials/Node/Blocks/index.js.map +1 -1
  348. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  349. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  350. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  351. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  352. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  353. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  354. package/Materials/Node/Blocks/maxBlock.js +1 -1
  355. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  356. package/Materials/Node/Blocks/minBlock.js +1 -1
  357. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  358. package/Materials/Node/Blocks/modBlock.js +1 -1
  359. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  360. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  361. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  362. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  363. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  364. package/Materials/Node/Blocks/negateBlock.js +1 -1
  365. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  366. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  367. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  368. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  369. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  370. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  371. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  372. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  373. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  374. package/Materials/Node/Blocks/powBlock.js +1 -1
  375. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  376. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  377. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  378. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  379. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  380. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  381. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  382. package/Materials/Node/Blocks/refractBlock.js +1 -1
  383. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  384. package/Materials/Node/Blocks/remapBlock.js +3 -3
  385. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  386. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  387. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  388. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  389. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  390. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  391. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  392. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  393. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  394. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  395. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  396. package/Materials/Node/Blocks/stepBlock.js +1 -1
  397. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  398. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  399. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  400. package/Materials/Node/Blocks/transformBlock.js +13 -13
  401. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  402. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  403. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  404. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  405. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  406. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  407. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  408. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  409. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  410. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  411. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  412. package/Materials/Node/Blocks/waveBlock.js +3 -3
  413. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  414. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  415. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  416. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  417. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  418. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  419. package/Materials/Node/nodeMaterial.d.ts +4 -0
  420. package/Materials/Node/nodeMaterial.js +22 -11
  421. package/Materials/Node/nodeMaterial.js.map +1 -1
  422. package/Materials/Node/nodeMaterialBlock.js +12 -12
  423. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  424. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  425. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  426. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  427. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  428. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  429. package/Materials/PBR/pbrBaseMaterial.js +4 -3
  430. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  431. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  432. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  433. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  434. package/Materials/PBR/pbrMaterial.js +2 -3
  435. package/Materials/PBR/pbrMaterial.js.map +1 -1
  436. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  437. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  438. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  439. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  440. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  441. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  442. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  443. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  444. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  445. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  446. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  447. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  448. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  449. package/Materials/Textures/baseTexture.d.ts +1 -1
  450. package/Materials/Textures/baseTexture.js.map +1 -1
  451. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  452. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  453. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  454. package/Materials/Textures/mirrorTexture.js +7 -3
  455. package/Materials/Textures/mirrorTexture.js.map +1 -1
  456. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  457. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  458. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  459. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  460. package/Materials/Textures/refractionTexture.d.ts +1 -1
  461. package/Materials/Textures/refractionTexture.js +2 -2
  462. package/Materials/Textures/refractionTexture.js.map +1 -1
  463. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  464. package/Materials/Textures/renderTargetTexture.js +2 -2
  465. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  466. package/Materials/Textures/texture.d.ts +1 -1
  467. package/Materials/Textures/texture.js.map +1 -1
  468. package/Materials/Textures/videoTexture.js +1 -0
  469. package/Materials/Textures/videoTexture.js.map +1 -1
  470. package/Materials/effect.js +3 -3
  471. package/Materials/effect.js.map +1 -1
  472. package/Materials/material.d.ts +3 -1
  473. package/Materials/material.js +11 -3
  474. package/Materials/material.js.map +1 -1
  475. package/Materials/materialHelper.js +4 -1
  476. package/Materials/materialHelper.js.map +1 -1
  477. package/Materials/materialPluginManager.js +3 -3
  478. package/Materials/materialPluginManager.js.map +1 -1
  479. package/Materials/multiMaterial.d.ts +3 -1
  480. package/Materials/multiMaterial.js +13 -11
  481. package/Materials/multiMaterial.js.map +1 -1
  482. package/Materials/pushMaterial.d.ts +1 -1
  483. package/Materials/pushMaterial.js.map +1 -1
  484. package/Materials/shaderMaterial.js +8 -4
  485. package/Materials/shaderMaterial.js.map +1 -1
  486. package/Materials/shadowDepthWrapper.d.ts +1 -1
  487. package/Materials/shadowDepthWrapper.js +3 -3
  488. package/Materials/shadowDepthWrapper.js.map +1 -1
  489. package/Materials/standardMaterial.d.ts +2 -6
  490. package/Materials/standardMaterial.js +5 -10
  491. package/Materials/standardMaterial.js.map +1 -1
  492. package/Maths/math.path.d.ts +1 -0
  493. package/Maths/math.path.js +1 -0
  494. package/Maths/math.path.js.map +1 -1
  495. package/Maths/math.size.js +1 -1
  496. package/Maths/math.size.js.map +1 -1
  497. package/Maths/math.vector.d.ts +5 -2
  498. package/Maths/math.vector.js +35 -32
  499. package/Maths/math.vector.js.map +1 -1
  500. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  501. package/Meshes/Builders/cylinderBuilder.js +1 -1
  502. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  503. package/Meshes/Builders/geodesicBuilder.d.ts +1 -0
  504. package/Meshes/Builders/geodesicBuilder.js +1 -0
  505. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  506. package/Meshes/Builders/goldbergBuilder.d.ts +1 -0
  507. package/Meshes/Builders/goldbergBuilder.js +1 -0
  508. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  509. package/Meshes/Builders/linesBuilder.js.map +1 -1
  510. package/Meshes/Builders/tiledBoxBuilder.d.ts +30 -11
  511. package/Meshes/Builders/tiledBoxBuilder.js +30 -11
  512. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  513. package/Meshes/Builders/tiledPlaneBuilder.d.ts +21 -16
  514. package/Meshes/Builders/tiledPlaneBuilder.js +21 -16
  515. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  516. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  517. package/Meshes/Compression/dracoCompression.js +23 -7
  518. package/Meshes/Compression/dracoCompression.js.map +1 -1
  519. package/Meshes/abstractMesh.d.ts +6 -0
  520. package/Meshes/abstractMesh.js +18 -2
  521. package/Meshes/abstractMesh.js.map +1 -1
  522. package/Meshes/geometry.d.ts +1 -1
  523. package/Meshes/geometry.js +7 -3
  524. package/Meshes/geometry.js.map +1 -1
  525. package/Meshes/groundMesh.d.ts +1 -1
  526. package/Meshes/groundMesh.js.map +1 -1
  527. package/Meshes/mesh.js +21 -6
  528. package/Meshes/mesh.js.map +1 -1
  529. package/Meshes/mesh.lts.d.ts +1 -1
  530. package/Meshes/mesh.lts.js.map +1 -1
  531. package/Meshes/mesh.vertexData.d.ts +1 -1
  532. package/Meshes/mesh.vertexData.js +2 -2
  533. package/Meshes/mesh.vertexData.js.map +1 -1
  534. package/Meshes/polygonMesh.js +2 -2
  535. package/Meshes/polygonMesh.js.map +1 -1
  536. package/Meshes/subMesh.js +1 -2
  537. package/Meshes/subMesh.js.map +1 -1
  538. package/Meshes/subMesh.project.js +1 -2
  539. package/Meshes/subMesh.project.js.map +1 -1
  540. package/Meshes/thinInstanceMesh.js +5 -0
  541. package/Meshes/thinInstanceMesh.js.map +1 -1
  542. package/Meshes/trailMesh.d.ts +1 -1
  543. package/Meshes/trailMesh.js.map +1 -1
  544. package/Meshes/transformNode.js +40 -13
  545. package/Meshes/transformNode.js.map +1 -1
  546. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  547. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  548. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  549. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -19
  550. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  551. package/Misc/assetsManager.d.ts +2 -1
  552. package/Misc/assetsManager.js +15 -1
  553. package/Misc/assetsManager.js.map +1 -1
  554. package/Misc/basis.js +1 -1
  555. package/Misc/basis.js.map +1 -1
  556. package/Misc/brdfTextureTools.js +4 -1
  557. package/Misc/brdfTextureTools.js.map +1 -1
  558. package/Misc/dds.js +7 -0
  559. package/Misc/dds.js.map +1 -1
  560. package/Misc/devTools.js +1 -1
  561. package/Misc/devTools.js.map +1 -1
  562. package/Misc/environmentTextureTools.js +2 -2
  563. package/Misc/environmentTextureTools.js.map +1 -1
  564. package/Misc/fileTools.js +4 -4
  565. package/Misc/fileTools.js.map +1 -1
  566. package/Misc/index.d.ts +1 -0
  567. package/Misc/index.js +1 -0
  568. package/Misc/index.js.map +1 -1
  569. package/Misc/khronosTextureContainer2.js +4 -3
  570. package/Misc/khronosTextureContainer2.js.map +1 -1
  571. package/Misc/reflector.js +6 -6
  572. package/Misc/reflector.js.map +1 -1
  573. package/Misc/tools.js +15 -13
  574. package/Misc/tools.js.map +1 -1
  575. package/Misc/uniqueIdGenerator.js +1 -1
  576. package/Misc/uniqueIdGenerator.js.map +1 -1
  577. package/Offline/database.js +1 -1
  578. package/Offline/database.js.map +1 -1
  579. package/Particles/baseParticleSystem.d.ts +4 -1
  580. package/Particles/baseParticleSystem.js +20 -5
  581. package/Particles/baseParticleSystem.js.map +1 -1
  582. package/Particles/gpuParticleSystem.js +2 -1
  583. package/Particles/gpuParticleSystem.js.map +1 -1
  584. package/Particles/particleHelper.js +2 -2
  585. package/Particles/particleHelper.js.map +1 -1
  586. package/Physics/Plugins/ammoJSPlugin.d.ts +5 -1
  587. package/Physics/Plugins/ammoJSPlugin.js +16 -11
  588. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  589. package/Physics/physicsEngine.d.ts +1 -0
  590. package/Physics/physicsEngine.js +3 -1
  591. package/Physics/physicsEngine.js.map +1 -1
  592. package/Physics/physicsImpostor.d.ts +2 -2
  593. package/Physics/physicsImpostor.js.map +1 -1
  594. package/PostProcesses/blurPostProcess.js +5 -5
  595. package/PostProcesses/blurPostProcess.js.map +1 -1
  596. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  597. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  598. package/PostProcesses/postProcess.js +1 -1
  599. package/PostProcesses/postProcess.js.map +1 -1
  600. package/PostProcesses/postProcessManager.js +2 -2
  601. package/PostProcesses/postProcessManager.js.map +1 -1
  602. package/Probes/reflectionProbe.js +2 -2
  603. package/Probes/reflectionProbe.js.map +1 -1
  604. package/Rendering/depthPeelingRenderer.js +3 -3
  605. package/Rendering/depthPeelingRenderer.js.map +1 -1
  606. package/Rendering/geometryBufferRenderer.js +8 -8
  607. package/Rendering/geometryBufferRenderer.js.map +1 -1
  608. package/Rendering/outlineRenderer.js +1 -1
  609. package/Rendering/outlineRenderer.js.map +1 -1
  610. package/Rendering/utilityLayerRenderer.js +4 -0
  611. package/Rendering/utilityLayerRenderer.js.map +1 -1
  612. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  613. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  614. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  615. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  616. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  617. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  618. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  619. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  620. package/Shaders/color.fragment.js +1 -1
  621. package/Shaders/color.fragment.js.map +1 -1
  622. package/Shaders/color.vertex.js +1 -1
  623. package/Shaders/color.vertex.js.map +1 -1
  624. package/Shaders/default.fragment.js +1 -1
  625. package/Shaders/default.fragment.js.map +1 -1
  626. package/Shaders/default.vertex.js +1 -1
  627. package/Shaders/default.vertex.js.map +1 -1
  628. package/Shaders/pbr.vertex.js +1 -1
  629. package/Shaders/pbr.vertex.js.map +1 -1
  630. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  631. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  632. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  633. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  634. package/Sprites/spriteManager.js +9 -10
  635. package/Sprites/spriteManager.js.map +1 -1
  636. package/Sprites/spriteMap.js +2 -2
  637. package/Sprites/spriteMap.js.map +1 -1
  638. package/Sprites/spriteRenderer.js +1 -1
  639. package/Sprites/spriteRenderer.js.map +1 -1
  640. package/XR/features/WebXRControllerPointerSelection.js +15 -9
  641. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  642. package/XR/features/WebXRDOMOverlay.js +1 -1
  643. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  644. package/XR/features/WebXRHandTracking.js +30 -30
  645. package/XR/features/WebXRHandTracking.js.map +1 -1
  646. package/XR/features/WebXRImageTracking.js +2 -2
  647. package/XR/features/WebXRImageTracking.js.map +1 -1
  648. package/XR/features/WebXRLayers.d.ts +28 -5
  649. package/XR/features/WebXRLayers.js +54 -20
  650. package/XR/features/WebXRLayers.js.map +1 -1
  651. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  652. package/XR/features/WebXRNearInteraction.js +201 -40
  653. package/XR/features/WebXRNearInteraction.js.map +1 -1
  654. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  655. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  656. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  657. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  658. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  659. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  660. package/XR/webXRCamera.js +17 -4
  661. package/XR/webXRCamera.js.map +1 -1
  662. package/XR/webXRDefaultExperience.js +3 -0
  663. package/XR/webXRDefaultExperience.js.map +1 -1
  664. package/XR/webXREnterExitUI.js +2 -2
  665. package/XR/webXREnterExitUI.js.map +1 -1
  666. package/XR/webXRExperienceHelper.js +3 -2
  667. package/XR/webXRExperienceHelper.js.map +1 -1
  668. package/XR/webXRFeaturesManager.js +6 -6
  669. package/XR/webXRFeaturesManager.js.map +1 -1
  670. package/XR/webXRInputSource.js +3 -3
  671. package/XR/webXRInputSource.js.map +1 -1
  672. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  673. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  674. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  675. package/XR/webXRSessionManager.d.ts +1 -0
  676. package/XR/webXRSessionManager.js +6 -1
  677. package/XR/webXRSessionManager.js.map +1 -1
  678. package/assetContainer.d.ts +1 -1
  679. package/assetContainer.js +4 -0
  680. package/assetContainer.js.map +1 -1
  681. package/node.d.ts +1 -1
  682. package/node.js.map +1 -1
  683. package/package.json +22 -13
  684. package/scene.d.ts +5 -2
  685. package/scene.js +31 -5
  686. package/scene.js.map +1 -1
  687. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +0 -1
  688. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +0 -1
  689. package/DeviceInput/Interfaces/inputInterfaces.js.map +0 -1
  690. package/DeviceInput/deviceInputSystem.d.ts +0 -60
  691. package/DeviceInput/deviceInputSystem.js +0 -84
  692. package/DeviceInput/deviceInputSystem.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webDeviceInputSystem.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/InputDevices/webDeviceInputSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../../Engines/engine\";\r\nimport { IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { DomManagement } from \"../../Misc/domManagement\";\r\nimport { Observer } from \"../../Misc/observable\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceEventFactory } from \"../Helpers/eventFactory\";\r\nimport { DeviceType, PointerInput } from \"./deviceEnums\";\r\nimport { IDeviceEvent, IDeviceInputSystem } from \"./inputInterfaces\";\r\n\r\nconst MAX_KEYCODES = 255;\r\nconst MAX_POINTER_INPUTS = Object.keys(PointerInput).length / 2;\r\n\r\n/** @hidden */\r\nexport class WebDeviceInputSystem implements IDeviceInputSystem {\r\n /** onDeviceConnected property */\r\n public set onDeviceConnected(callback: (deviceType: DeviceType, deviceSlot: number) => void) {\r\n this._onDeviceConnected = callback;\r\n\r\n // Iterate through each active device and rerun new callback\r\n for (let deviceType = 0; deviceType < this._inputs.length; deviceType++) {\r\n const inputs = this._inputs[deviceType];\r\n if (inputs) {\r\n for (const deviceSlotKey in inputs) {\r\n const deviceSlot = +deviceSlotKey;\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n this._onDeviceConnected(deviceType, deviceSlot);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public get onDeviceConnected(): (deviceType: DeviceType, deviceSlot: number) => void {\r\n return this._onDeviceConnected;\r\n }\r\n\r\n public onDeviceDisconnected: (deviceType: DeviceType, deviceSlot: number) => void;\r\n public onInputChanged: (deviceEvent: IDeviceEvent) => void;\r\n\r\n // Private Members\r\n private _inputs: Array<{ [deviceSlot: number]: Array<number> }> = [];\r\n private _gamepads: Array<DeviceType>;\r\n private _keyboardActive: boolean = false;\r\n private _pointerActive: boolean = false;\r\n private _elementToAttachTo: HTMLElement;\r\n private readonly _engine: Engine;\r\n private readonly _usingSafari: boolean = Tools.IsSafari();\r\n\r\n private _onDeviceConnected: (deviceType: DeviceType, deviceSlot: number) => void;\r\n\r\n private _keyboardDownEvent = (evt: any) => { };\r\n private _keyboardUpEvent = (evt: any) => { };\r\n private _keyboardBlurEvent = (evt: any) => { };\r\n\r\n private _pointerMoveEvent = (evt: any) => { };\r\n private _pointerDownEvent = (evt: any) => { };\r\n private _pointerUpEvent = (evt: any) => { };\r\n private _pointerWheelEvent = (evt: any) => { };\r\n private _pointerBlurEvent = (evt: any) => { };\r\n private _wheelEventName: string;\r\n\r\n private _mouseId = -1;\r\n private readonly _isUsingFirefox = DomManagement.IsNavigatorAvailable() && navigator.userAgent && navigator.userAgent.indexOf(\"Firefox\") !== -1;\r\n\r\n // Array to store active Pointer ID values; prevents issues with negative pointerIds\r\n private _activeTouchIds: Array<number>;\r\n private _maxTouchPoints: number = 0;\r\n\r\n private _pointerInputClearObserver: Nullable<Observer<Engine>> = null;\r\n\r\n private _gamepadConnectedEvent = (evt: any) => { };\r\n private _gamepadDisconnectedEvent = (evt: any) => { };\r\n\r\n private _eventPrefix: string;\r\n\r\n constructor(engine: Engine) {\r\n this._eventPrefix = Tools.GetPointerPrefix(engine);\r\n this._engine = engine;\r\n\r\n this.onDeviceConnected = (deviceType: DeviceType, deviceSlot: number) => { };\r\n this.onDeviceDisconnected = (deviceType: DeviceType, deviceSlot: number) => { };\r\n this.onInputChanged = (deviceEvent: IDeviceEvent) => { };\r\n\r\n this._configureEvents();\r\n }\r\n\r\n // Public functions\r\n /**\r\n * Checks for current device input value, given an id and input index. Throws exception if requested device not initialized.\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @returns Current value of input\r\n */\r\n public pollInput(deviceType: DeviceType, deviceSlot: number, inputIndex: number): number {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (!device) {\r\n throw `Unable to find device ${DeviceType[deviceType]}`;\r\n }\r\n\r\n if (deviceType >= DeviceType.DualShock && deviceType <= DeviceType.DualSense && navigator.getGamepads) {\r\n this._updateDevice(deviceType, deviceSlot, inputIndex);\r\n }\r\n\r\n const currentValue = device[inputIndex];\r\n if (currentValue === undefined) {\r\n throw `Unable to find input ${inputIndex} for device ${DeviceType[deviceType]} in slot ${deviceSlot}`;\r\n }\r\n\r\n return currentValue;\r\n }\r\n\r\n /**\r\n * Check for a specific device in the DeviceInputSystem\r\n * @param deviceType Type of device to check for\r\n * @returns bool with status of device's existence\r\n */\r\n public isDeviceAvailable(deviceType: DeviceType): boolean {\r\n return (this._inputs[deviceType] !== undefined);\r\n }\r\n\r\n /**\r\n * Dispose of all the eventlisteners\r\n */\r\n public dispose(): void {\r\n // Observables\r\n this.onDeviceConnected = () => { };\r\n this.onDeviceDisconnected = () => { };\r\n this.onInputChanged = () => { };\r\n\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n\r\n // Gamepad Events\r\n window.removeEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.removeEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n }\r\n\r\n /**\r\n * Configures events to work with an engine's active element\r\n */\r\n private _configureEvents(): void {\r\n const inputElement = this._engine.getInputElement();\r\n if (inputElement && this._elementToAttachTo !== inputElement) {\r\n // If the engine's input element has changed, unregister events from previous element\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n }\r\n\r\n this._elementToAttachTo = inputElement;\r\n // Set tab index for the inputElement to the engine's canvasTabIndex, if and only if the element's tab index is -1\r\n this._elementToAttachTo.tabIndex = (this._elementToAttachTo.tabIndex !== -1) ? this._elementToAttachTo.tabIndex : this._engine.canvasTabIndex;\r\n this._handleKeyActions();\r\n this._handlePointerActions();\r\n this._handleGamepadActions();\r\n\r\n // Check for devices that are already connected but aren't registered. Currently, only checks for gamepads and mouse\r\n this._checkForConnectedDevices();\r\n }\r\n }\r\n\r\n /**\r\n * Checks for existing connections to devices and register them, if necessary\r\n * Currently handles gamepads and mouse\r\n */\r\n private _checkForConnectedDevices(): void {\r\n if (navigator.getGamepads) {\r\n const gamepads = navigator.getGamepads();\r\n\r\n for (const gamepad of gamepads) {\r\n if (gamepad) {\r\n this._addGamePad(gamepad);\r\n }\r\n }\r\n }\r\n\r\n // If the device in use has mouse capabilities, pre-register mouse\r\n if (matchMedia('(pointer:fine)').matches) {\r\n // This will provide a dummy value for the cursor position and is expected to be overriden when the first mouse event happens.\r\n // There isn't any good way to get the current position outside of a pointer event so that's why this was done.\r\n this._addPointerDevice(DeviceType.Mouse, 0, 0, 0);\r\n }\r\n }\r\n\r\n // Private functions\r\n /**\r\n * Add a gamepad to the DeviceInputSystem\r\n * @param gamepad A single DOM Gamepad object\r\n */\r\n private _addGamePad(gamepad: any): void {\r\n const deviceType = this._getGamepadDeviceType(gamepad.id);\r\n const deviceSlot = gamepad.index;\r\n\r\n this._gamepads = this._gamepads || new Array<DeviceType>(gamepad.index + 1);\r\n this._registerDevice(deviceType, deviceSlot, gamepad.buttons.length + gamepad.axes.length);\r\n\r\n this._gamepads[deviceSlot] = deviceType;\r\n }\r\n\r\n /**\r\n * Add pointer device to DeviceInputSystem\r\n * @param deviceType Type of Pointer to add\r\n * @param deviceSlot Pointer ID (0 for mouse, pointerId for Touch)\r\n * @param currentX Current X at point of adding\r\n * @param currentY Current Y at point of adding\r\n */\r\n private _addPointerDevice(deviceType: DeviceType, deviceSlot: number, currentX: number, currentY: number): void {\r\n if (!this._pointerActive) {\r\n this._pointerActive = true;\r\n }\r\n this._registerDevice(deviceType, deviceSlot, MAX_POINTER_INPUTS);\r\n const pointer = this._inputs[deviceType][deviceSlot]; /* initialize our pointer position immediately after registration */\r\n pointer[0] = currentX;\r\n pointer[1] = currentY;\r\n }\r\n\r\n /**\r\n * Add device and inputs to device array\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param numberOfInputs Number of input entries to create for given device\r\n */\r\n private _registerDevice(deviceType: DeviceType, deviceSlot: number, numberOfInputs: number): void {\r\n if (deviceSlot === undefined) {\r\n throw `Unable to register device ${DeviceType[deviceType]} to undefined slot.`;\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n const device = new Array<number>(numberOfInputs);\r\n\r\n for (let i = 0; i < numberOfInputs; i++) {\r\n device[i] = 0; /* set device input as unpressed */\r\n }\r\n\r\n this._inputs[deviceType][deviceSlot] = device;\r\n this.onDeviceConnected(deviceType, deviceSlot);\r\n }\r\n }\r\n\r\n /**\r\n * Given a specific device name, remove that device from the device map\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n */\r\n private _unregisterDevice(deviceType: DeviceType, deviceSlot: number): void {\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n delete this._inputs[deviceType][deviceSlot];\r\n this.onDeviceDisconnected(deviceType, deviceSlot);\r\n }\r\n }\r\n\r\n /**\r\n * Handle all actions that come from keyboard interaction\r\n */\r\n private _handleKeyActions(): void {\r\n this._keyboardDownEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 0;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardUpEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 1;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardBlurEvent = ((evt) => {\r\n if (this._keyboardActive) {\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n\r\n for (let i = 0; i < kbKey.length; i++) {\r\n if (kbKey[i] !== 0) {\r\n kbKey[i] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Keyboard, 0, i, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i;\r\n deviceEvent.currentState = 0;\r\n deviceEvent.previousState = 1;\r\n this.onInputChanged(deviceEvent);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.addEventListener(\"keyup\", this._keyboardUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._keyboardBlurEvent);\r\n }\r\n\r\n /**\r\n * Handle all actions that come from pointer interaction\r\n */\r\n private _handlePointerActions(): void {\r\n this._maxTouchPoints = (DomManagement.IsNavigatorAvailable() && navigator.maxTouchPoints) || 0;\r\n if (!this._activeTouchIds) {\r\n this._activeTouchIds = new Array<number>(this._maxTouchPoints);\r\n }\r\n\r\n for (let i = 0; i < this._maxTouchPoints; i++) {\r\n this._activeTouchIds[i] = -1;\r\n }\r\n\r\n this._pointerMoveEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousDeltaHorizontal = pointer[PointerInput.DeltaHorizontal];\r\n const previousDeltaVertical = pointer[PointerInput.DeltaVertical];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[PointerInput.DeltaHorizontal] = evt.movementX;\r\n pointer[PointerInput.DeltaVertical] = evt.movementY;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n // The browser might use a move event in case\r\n // of simultaneous mouse buttons click for instance. So\r\n // in this case we stil need to propagate it.\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (pointer[PointerInput.DeltaHorizontal] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaHorizontal;\r\n deviceEvent.previousState = previousDeltaHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaHorizontal];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (pointer[PointerInput.DeltaVertical] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaVertical;\r\n deviceEvent.previousState = previousDeltaVertical;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaVertical];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n // Lets Propagate the event for move with same position.\r\n if (!this._usingSafari && evt.button !== -1) {\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = pointer[evt.button + 2];\r\n pointer[evt.button + 2] = (pointer[evt.button + 2] ? 0 : 1); // Reverse state of button if evt.button has value\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n this.onInputChanged(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._pointerDownEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n let deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : evt.pointerId;\r\n\r\n if (deviceType === DeviceType.Touch) {\r\n const idx = this._activeTouchIds.indexOf(-1);\r\n\r\n if (idx >= 0) {\r\n deviceSlot = idx;\r\n this._activeTouchIds[idx] = evt.pointerId;\r\n }\r\n else {\r\n // We can't find an open slot to store new pointer so just return (can only support max number of touches)\r\n Tools.Warn(`Max number of touches exceeded. Ignoring touches in excess of ${this._maxTouchPoints}`);\r\n return;\r\n }\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n else if (deviceType === DeviceType.Touch) {\r\n this.onDeviceConnected(deviceType, deviceSlot);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n if (deviceType === DeviceType.Mouse) { // Mouse; Among supported browsers, value is either 1 or 0 for mouse\r\n if (this._mouseId === -1) {\r\n if (evt.pointerId === undefined) { // If there is no pointerId (eg. manually dispatched MouseEvent)\r\n this._mouseId = this._isUsingFirefox ? 0 : 1;\r\n }\r\n else {\r\n this._mouseId = evt.pointerId;\r\n }\r\n }\r\n\r\n if (!document.pointerLockElement && this._elementToAttachTo.hasPointerCapture) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(this._mouseId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n else { // Touch; Since touches are dynamically assigned, only set capture if we have an id\r\n if (evt.pointerId && !document.pointerLockElement && this._elementToAttachTo.hasPointerCapture) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(evt.pointerId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n // NOTE: The +2 used here to is because PointerInput has the same value progression for its mouse buttons as PointerEvent.button\r\n // However, we have our X and Y values front-loaded to group together the touch inputs but not break this progression\r\n // EG. ([X, Y, Left-click], Middle-click, etc...)\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[deviceEvent.inputIndex];\r\n this.onInputChanged(deviceEvent);\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._pointerUpEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n if (deviceType === DeviceType.Touch) {\r\n if (deviceSlot === -1) {\r\n return;\r\n }\r\n else {\r\n this._activeTouchIds[deviceSlot] = -1;\r\n }\r\n }\r\n\r\n const pointer = this._inputs[deviceType]?.[deviceSlot];\r\n if (pointer && pointer[evt.button + 2] !== 0) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChanged(deviceEvent);\r\n }\r\n\r\n // NOTE: The +2 used here to is because PointerInput has the same value progression for its mouse buttons as PointerEvent.button\r\n // However, we have our X and Y values front-loaded to group together the touch inputs but not break this progression\r\n // EG. ([X, Y, Left-click], Middle-click, etc...)\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[deviceEvent.inputIndex];\r\n\r\n if (deviceType === DeviceType.Mouse && this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture?.(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n else if (evt.pointerId && this._elementToAttachTo.hasPointerCapture?.(evt.pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(evt.pointerId);\r\n }\r\n\r\n this.onInputChanged(deviceEvent);\r\n\r\n if (deviceType === DeviceType.Touch) {\r\n this.onDeviceDisconnected(deviceType, deviceSlot);\r\n }\r\n }\r\n });\r\n\r\n // Set Wheel Event Name, code originally from scene.inputManager\r\n this._wheelEventName = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\r\n (<any>document).onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\r\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\r\n\r\n // Code originally in scene.inputManager.ts\r\n // Chrome reports warning in console if wheel listener doesn't set an explicit passive option.\r\n // IE11 only supports captureEvent:boolean, not options:object, and it defaults to false.\r\n // Feature detection technique copied from: https://github.com/github/eventlistener-polyfill (MIT license)\r\n let passiveSupported = false;\r\n const noop = function () { };\r\n\r\n try {\r\n const options: object = {\r\n passive: {\r\n get: function () {\r\n passiveSupported = true;\r\n }\r\n }\r\n };\r\n\r\n this._elementToAttachTo.addEventListener(\"test\", noop, options);\r\n this._elementToAttachTo.removeEventListener(\"test\", noop, options);\r\n }\r\n catch (e) {\r\n /* */\r\n }\r\n\r\n this._pointerBlurEvent = ((evt) => {\r\n // Handle mouse buttons\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n\r\n if (this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture?.(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n\r\n for (let i = 0; i <= PointerInput.BrowserForward; i++) {\r\n if (pointer[i + 2] === 1) {\r\n pointer[i + 2] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Mouse, 0, i + 2, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Mouse;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i + 2;\r\n deviceEvent.currentState = pointer[i + 2];\r\n deviceEvent.previousState = 1;\r\n this.onInputChanged(deviceEvent);\r\n }\r\n }\r\n }\r\n\r\n // Handle Active Touches\r\n if (this.isDeviceAvailable(DeviceType.Touch)) {\r\n const pointer = this._inputs[DeviceType.Touch];\r\n\r\n for (let deviceSlot = 0; deviceSlot < this._activeTouchIds.length; deviceSlot++) {\r\n const pointerId = this._activeTouchIds[deviceSlot];\r\n\r\n if (this._elementToAttachTo.hasPointerCapture?.(pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(pointerId);\r\n }\r\n\r\n if (pointerId !== -1 && pointer[deviceSlot]?.[PointerInput.LeftClick] === 1) {\r\n pointer[deviceSlot][PointerInput.LeftClick] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Touch, deviceSlot, PointerInput.LeftClick, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Touch;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n deviceEvent.inputIndex = PointerInput.LeftClick;\r\n deviceEvent.currentState = pointer[deviceSlot][PointerInput.LeftClick];\r\n deviceEvent.previousState = 1;\r\n this.onInputChanged(deviceEvent);\r\n\r\n this._activeTouchIds[deviceSlot] = -1;\r\n this.onDeviceDisconnected(DeviceType.Touch, deviceSlot);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._pointerWheelEvent = ((evt) => {\r\n const deviceType = DeviceType.Mouse;\r\n const deviceSlot = 0;\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = [];\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._pointerActive = true;\r\n this._registerDevice(deviceType, deviceSlot, MAX_POINTER_INPUTS);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n let previousWheelScrollX = pointer[PointerInput.MouseWheelX];\r\n let previousWheelScrollY = pointer[PointerInput.MouseWheelY];\r\n let previousWheelScrollZ = pointer[PointerInput.MouseWheelZ];\r\n\r\n pointer[PointerInput.MouseWheelX] = evt.deltaX || 0;\r\n pointer[PointerInput.MouseWheelY] = evt.deltaY || evt.wheelDelta || 0;\r\n pointer[PointerInput.MouseWheelZ] = evt.deltaZ || 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (pointer[PointerInput.MouseWheelX] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelX;\r\n deviceEvent.previousState = previousWheelScrollX;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelX];\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelY] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelY;\r\n deviceEvent.previousState = previousWheelScrollY;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelY];\r\n this.onInputChanged(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelZ] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelZ;\r\n deviceEvent.previousState = previousWheelScrollZ;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelZ];\r\n this.onInputChanged(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._pointerBlurEvent);\r\n this._elementToAttachTo.addEventListener(this._wheelEventName, this._pointerWheelEvent, passiveSupported ? { passive: false } : false);\r\n\r\n // Since there's no up or down event for mouse wheel or delta x/y, clear mouse values at end of frame\r\n this._pointerInputClearObserver = this._engine.onEndFrameObservable.add(() => {\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n pointer[PointerInput.MouseWheelX] = 0;\r\n pointer[PointerInput.MouseWheelY] = 0;\r\n pointer[PointerInput.MouseWheelZ] = 0;\r\n pointer[PointerInput.DeltaHorizontal] = 0;\r\n pointer[PointerInput.DeltaVertical] = 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle all actions that come from gamepad interaction\r\n */\r\n private _handleGamepadActions(): void {\r\n this._gamepadConnectedEvent = ((evt: any) => {\r\n this._addGamePad(evt.gamepad);\r\n });\r\n\r\n this._gamepadDisconnectedEvent = ((evt: any) => {\r\n if (this._gamepads) {\r\n const deviceType = this._getGamepadDeviceType(evt.gamepad.id);\r\n const deviceSlot = evt.gamepad.index;\r\n\r\n this._unregisterDevice(deviceType, deviceSlot);\r\n delete this._gamepads[deviceSlot];\r\n }\r\n });\r\n\r\n window.addEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.addEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n\r\n /**\r\n * Update all non-event based devices with each frame\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n */\r\n private _updateDevice(deviceType: DeviceType, deviceSlot: number, inputIndex: number): void {\r\n // Gamepads\r\n const gp = navigator.getGamepads()[deviceSlot];\r\n\r\n if (gp && deviceType === this._gamepads[deviceSlot]) {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (inputIndex >= gp.buttons.length) {\r\n device[inputIndex] = gp.axes[inputIndex - gp.buttons.length].valueOf();\r\n }\r\n else {\r\n device[inputIndex] = gp.buttons[inputIndex].value;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets DeviceType from the device name\r\n * @param deviceName Name of Device from DeviceInputSystem\r\n * @returns DeviceType enum value\r\n */\r\n private _getGamepadDeviceType(deviceName: string): DeviceType {\r\n if (deviceName.indexOf(\"054c\") !== -1) { // DualShock 4 Gamepad\r\n return (deviceName.indexOf(\"0ce6\") !== -1 ? DeviceType.DualSense : DeviceType.DualShock);\r\n }\r\n else if (deviceName.indexOf(\"Xbox One\") !== -1 || deviceName.search(\"Xbox 360\") !== -1 || deviceName.search(\"xinput\") !== -1) { // Xbox Gamepad\r\n return DeviceType.Xbox;\r\n }\r\n else if (deviceName.indexOf(\"057e\") !== -1) { // Switch Gamepad\r\n return DeviceType.Switch;\r\n }\r\n\r\n return DeviceType.Generic;\r\n }\r\n\r\n /**\r\n * Get DeviceType from a given pointer/mouse/touch event.\r\n * @param evt PointerEvent to evaluate\r\n * @returns DeviceType interpreted from event\r\n */\r\n private _getPointerType(evt: any): DeviceType {\r\n let deviceType = DeviceType.Mouse;\r\n\r\n if (evt.pointerType === \"touch\" || evt.pointerType === \"pen\" || evt.touches) {\r\n deviceType = DeviceType.Touch;\r\n }\r\n\r\n return deviceType;\r\n }\r\n\r\n /**\r\n * Remove events from active input element\r\n */\r\n private _removeEvents(): void {\r\n // Blur Events\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._keyboardBlurEvent);\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._pointerBlurEvent);\r\n\r\n // Keyboard Events\r\n this._elementToAttachTo.removeEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.removeEventListener(\"keyup\", this._keyboardUpEvent);\r\n\r\n // Pointer Events\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.removeEventListener(this._wheelEventName, this._pointerWheelEvent);\r\n\r\n if (this._pointerInputClearObserver) {\r\n this._engine.onEndFrameObservable.remove(this._pointerInputClearObserver);\r\n }\r\n }\r\n}\r\n"]}
@@ -1,8 +1,4 @@
1
- export * from "./deviceInputSystem";
2
1
  export * from "./InputDevices/deviceEnums";
3
2
  export * from "./InputDevices/deviceTypes";
4
- export * from "./Helpers/eventFactory";
5
- export * from "./Implementations/nativeDeviceInputSystem";
6
- export * from "./Implementations/webDeviceInputSystem";
7
- import "./InputDevices/deviceSourceManager";
3
+ export * from "./InputDevices/deviceSource";
8
4
  export * from "./InputDevices/deviceSourceManager";
@@ -1,9 +1,5 @@
1
- export * from "./deviceInputSystem.js";
2
1
  export * from "./InputDevices/deviceEnums.js";
3
2
  export * from "./InputDevices/deviceTypes.js";
4
- export * from "./Helpers/eventFactory.js";
5
- export * from "./Implementations/nativeDeviceInputSystem.js";
6
- export * from "./Implementations/webDeviceInputSystem.js";
7
- import "./InputDevices/deviceSourceManager.js";
3
+ export * from "./InputDevices/deviceSource.js";
8
4
  export * from "./InputDevices/deviceSourceManager.js";
9
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sourceES6/core/DeviceInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AAEvD,OAAO,oCAAoC,CAAC;AAC5C,cAAc,oCAAoC,CAAC","sourcesContent":["export * from \"./deviceInputSystem\";\r\nexport * from \"./InputDevices/deviceEnums\";\r\nexport * from \"./InputDevices/deviceTypes\";\r\n\r\nexport * from \"./Helpers/eventFactory\";\r\nexport * from \"./Implementations/nativeDeviceInputSystem\";\r\nexport * from \"./Implementations/webDeviceInputSystem\";\r\n\r\nimport \"./InputDevices/deviceSourceManager\";\r\nexport * from \"./InputDevices/deviceSourceManager\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../sourceES6/core/DeviceInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC","sourcesContent":["export * from \"./InputDevices/deviceEnums\";\r\nexport * from \"./InputDevices/deviceTypes\";\r\nexport * from \"./InputDevices/deviceSource\";\r\nexport * from \"./InputDevices/deviceSourceManager\";\r\n"]}
@@ -75,6 +75,6 @@ declare module "../../Engines/thinEngine" {
75
75
  /**
76
76
  * @hidden
77
77
  */
78
- _setCubeMapTextureParams(texture: InternalTexture, loadMipmap: boolean): void;
78
+ _setCubeMapTextureParams(texture: InternalTexture, loadMipmap: boolean, maxLevel?: number): void;
79
79
  }
80
80
  }
@@ -88,13 +88,16 @@ ThinEngine.prototype._partialLoadImg = function (url, index, loadedImages, scene
88
88
  scene._addPendingData(tokenPendingData);
89
89
  }
90
90
  };
91
- ThinEngine.prototype._setCubeMapTextureParams = function (texture, loadMipmap) {
91
+ ThinEngine.prototype._setCubeMapTextureParams = function (texture, loadMipmap, maxLevel) {
92
92
  var gl = this._gl;
93
93
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
94
94
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, loadMipmap ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);
95
95
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
96
96
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
97
97
  texture.samplingMode = loadMipmap ? 3 : 2;
98
+ if (loadMipmap && this.getCaps().textureMaxLevel && maxLevel > 0) {
99
+ gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAX_LEVEL, maxLevel);
100
+ }
98
101
  this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);
99
102
  };
100
103
  ThinEngine.prototype.createCubeTextureBase = function (rootUrl, scene, files, noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, fallback, beforeLoadCubeDataCallback, imageHandler, useSRGBBuffer) {
@@ -142,7 +145,7 @@ ThinEngine.prototype.createCubeTextureBase = function (rootUrl, scene, files, no
142
145
  }
143
146
  else {
144
147
  // fall back to the original url if the transformed url fails to load
145
- Logger.Warn("Failed to load " + rootUrl + ", falling back to the " + originalRootUrl);
148
+ Logger.Warn("Failed to load ".concat(rootUrl, ", falling back to the ").concat(originalRootUrl));
146
149
  _this.createCubeTextureBase(originalRootUrl, scene, files, !!noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, texture, beforeLoadCubeDataCallback, imageHandler, useSRGBBuffer);
147
150
  }
148
151
  };
@@ -1 +1 @@
1
- {"version":3,"file":"engine.cubeTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Extensions/engine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { InternalTexture, InternalTextureSource } from '../../Materials/Textures/internalTexture';\r\nimport { Logger } from '../../Misc/logger';\r\nimport { Nullable } from '../../types';\r\nimport { Scene } from '../../scene';\r\nimport { IInternalTextureLoader } from '../../Materials/Textures/internalTextureLoader';\r\nimport { LoadImage } from '../../Misc/fileTools';\r\nimport { RandomGUID } from '../../Misc/guid';\r\nimport { IWebRequest } from '../../Misc/interfaces/iWebRequest';\r\n\r\nimport { DepthTextureCreationOptions } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Creates a depth stencil cube texture.\r\n * This is only available in WebGL 2.\r\n * @param size The size of face edge in the cube texture.\r\n * @param options The options defining the cube texture.\r\n * @param rtWrapper The render target wrapper for which the depth/stencil texture must be created\r\n * @returns The cube texture\r\n */\r\n _createDepthStencilCubeTexture(size: number, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param fallback defines texture to use while falling back when (compressed) texture file not found.\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean | undefined,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number, fallback: Nullable<InternalTexture>, loaderOptions: any, useSRGBBuffer: boolean): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number): InternalTexture;\r\n\r\n /** @hidden */\r\n createCubeTextureBase(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number, fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>, imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>, useSRGBBuffer: boolean): InternalTexture;\r\n\r\n /** @hidden */\r\n _partialLoadFile(url: string, index: number, loadedFiles: ArrayBuffer[], onfinish: (files: ArrayBuffer[]) => void, onErrorCallBack: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @hidden */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @hidden */\r\n _cascadeLoadImgs(scene: Nullable<Scene>, texture: InternalTexture, onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, files: string[], onError: Nullable<(message?: string, exception?: any) => void>, mimeType?: string): void;\r\n\r\n /** @hidden */\r\n _partialLoadImg(url: string, index: number, loadedImages: HTMLImageElement[] | ImageBitmap[], scene: Nullable<Scene>, texture: InternalTexture, onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, onErrorCallBack: Nullable<(message?: string, exception?: any) => void>, mimeType?: string): void;\r\n\r\n /**\r\n * @hidden\r\n */\r\n _setCubeMapTextureParams(texture: InternalTexture, loadMipmap: boolean): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype._createDepthStencilCubeTexture = function (size: number, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture {\r\n var internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n internalTexture.isCube = true;\r\n\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"Depth cube texture is not supported by WebGL 1.\");\r\n return internalTexture;\r\n }\r\n\r\n var internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n ...options\r\n };\r\n\r\n var gl = this._gl;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, internalTexture, true);\r\n\r\n this._setupDepthStencilTexture(internalTexture, size, internalOptions.generateStencil, internalOptions.bilinearFiltering, internalOptions.comparisonFunction);\r\n\r\n rtWrapper._depthStencilTexture = internalTexture;\r\n rtWrapper._depthStencilTextureWithStencil = internalOptions.generateStencil;\r\n\r\n // Create the depth/stencil buffer\r\n for (var face = 0; face < 6; face++) {\r\n if (internalOptions.generateStencil) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, gl.DEPTH24_STENCIL8, size, size, 0, gl.DEPTH_STENCIL, gl.UNSIGNED_INT_24_8, null);\r\n }\r\n else {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, gl.DEPTH_COMPONENT24, size, size, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, null);\r\n }\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nThinEngine.prototype._partialLoadFile = function (url: string, index: number, loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void, onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null): void {\r\n var onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nThinEngine.prototype._cascadeLoadFiles = function (scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void> = null): void {\r\n var loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nThinEngine.prototype._cascadeLoadImgs = function (scene: Nullable<Scene>, texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, files: string[], onError: Nullable<(message?: string, exception?: any) => void> = null, mimeType?: string) {\r\n\r\n var loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nThinEngine.prototype._partialLoadImg = function (url: string, index: number, loadedImages: HTMLImageElement[] | ImageBitmap[], scene: Nullable<Scene>, texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null, mimeType?: string) {\r\n\r\n var tokenPendingData = RandomGUID();\r\n\r\n var onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene._removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene._removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene._addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nThinEngine.prototype._setCubeMapTextureParams = function (texture: InternalTexture, loadMipmap: boolean): void {\r\n var gl = this._gl;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, loadMipmap ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n texture.samplingMode = loadMipmap ? 3 : 2;\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n};\r\n\r\nThinEngine.prototype.createCubeTextureBase = function (rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap?: boolean, onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null, format?: number, forcedExtension: any = null, createPolynomials: boolean = false, lodScale: number = 0, lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null, beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null, useSRGBBuffer = false): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.webGLVersion > 1 || this.isWebGPU || !!noMipmap);\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const lastDot = rootUrl.lastIndexOf('.');\r\n const extension = forcedExtension ? forcedExtension : (lastDot > -1 ? rootUrl.substring(lastDot).toLowerCase() : \"\");\r\n\r\n let loader: Nullable<IInternalTextureLoader> = null;\r\n for (let availableLoader of ThinEngine._TextureLoaders) {\r\n if (availableLoader.canLoad(extension)) {\r\n loader = availableLoader;\r\n break;\r\n }\r\n }\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(originalRootUrl, scene, files, !!noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, texture, beforeLoadCubeDataCallback, imageHandler, useSRGBBuffer);\r\n }\r\n };\r\n\r\n if (loader) {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader!.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n }\r\n else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n }\r\n else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n }\r\n else {\r\n if (!files) {\r\n throw new Error(\"Cannot load cubemap because files were not defined\");\r\n }\r\n\r\n this._cascadeLoadImgs(scene, texture, (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n }, files, onError);\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n\r\nThinEngine.prototype.createCubeTexture = function (rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap?: boolean, onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null, format?: number, forcedExtension: any = null, createPolynomials: boolean = false, lodScale: number = 0, lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null, loaderOptions?: any, useSRGBBuffer = false): InternalTexture {\r\n const gl = this._gl;\r\n\r\n return this.createCubeTextureBase(\r\n rootUrl, scene, files, !!noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, fallback,\r\n (texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, texture, true),\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n const width = this.needPOTTextures ? ThinEngine.GetExponentOfTwo(imgs[0].width, this._caps.maxCubemapTextureSize) : imgs[0].width;\r\n const height = width;\r\n\r\n const faces = [\r\n gl.TEXTURE_CUBE_MAP_POSITIVE_X, gl.TEXTURE_CUBE_MAP_POSITIVE_Y, gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\r\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X, gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n ];\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, texture, true);\r\n this._unpackFlipY(false);\r\n\r\n const internalFormat = format ? this._getInternalFormat(format, texture._useSRGBBuffer) : (texture._useSRGBBuffer ? gl.SRGB8_ALPHA8 : gl.RGBA);\r\n let texelFormat = format ? this._getInternalFormat(format) : gl.RGBA;\r\n\r\n if (texture._useSRGBBuffer && this.webGLVersion === 1) {\r\n texelFormat = internalFormat;\r\n }\r\n\r\n for (var index = 0; index < faces.length; index++) {\r\n if (imgs[index].width !== width || imgs[index].height !== height) {\r\n\r\n this._prepareWorkingCanvas();\r\n\r\n if (!this._workingCanvas || !this._workingContext) {\r\n Logger.Warn(\"Cannot create canvas to resize texture.\");\r\n return;\r\n }\r\n this._workingCanvas.width = width;\r\n this._workingCanvas.height = height;\r\n\r\n this._workingContext.drawImage(imgs[index], 0, 0, imgs[index].width, imgs[index].height, 0, 0, width, height);\r\n gl.texImage2D(faces[index], 0, internalFormat, texelFormat, gl.UNSIGNED_BYTE, this._workingCanvas as TexImageSource);\r\n } else {\r\n gl.texImage2D(faces[index], 0, internalFormat, texelFormat, gl.UNSIGNED_BYTE, imgs[index]);\r\n }\r\n }\r\n\r\n if (!noMipmap) {\r\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\r\n }\r\n\r\n this._setCubeMapTextureParams(texture, !noMipmap);\r\n\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n if (format) {\r\n texture.format = format;\r\n }\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }, !!useSRGBBuffer\r\n );\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.cubeTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Extensions/engine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { InternalTexture, InternalTextureSource } from '../../Materials/Textures/internalTexture';\r\nimport { Logger } from '../../Misc/logger';\r\nimport { Nullable } from '../../types';\r\nimport { Scene } from '../../scene';\r\nimport { IInternalTextureLoader } from '../../Materials/Textures/internalTextureLoader';\r\nimport { LoadImage } from '../../Misc/fileTools';\r\nimport { RandomGUID } from '../../Misc/guid';\r\nimport { IWebRequest } from '../../Misc/interfaces/iWebRequest';\r\n\r\nimport { DepthTextureCreationOptions } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Creates a depth stencil cube texture.\r\n * This is only available in WebGL 2.\r\n * @param size The size of face edge in the cube texture.\r\n * @param options The options defining the cube texture.\r\n * @param rtWrapper The render target wrapper for which the depth/stencil texture must be created\r\n * @returns The cube texture\r\n */\r\n _createDepthStencilCubeTexture(size: number, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param fallback defines texture to use while falling back when (compressed) texture file not found.\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean | undefined,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number, fallback: Nullable<InternalTexture>, loaderOptions: any, useSRGBBuffer: boolean): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any): InternalTexture;\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n createCubeTexture(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number): InternalTexture;\r\n\r\n /** @hidden */\r\n createCubeTextureBase(rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>, onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined, forcedExtension: any, createPolynomials: boolean, lodScale: number, lodOffset: number, fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>, imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>, useSRGBBuffer: boolean): InternalTexture;\r\n\r\n /** @hidden */\r\n _partialLoadFile(url: string, index: number, loadedFiles: ArrayBuffer[], onfinish: (files: ArrayBuffer[]) => void, onErrorCallBack: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @hidden */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @hidden */\r\n _cascadeLoadImgs(scene: Nullable<Scene>, texture: InternalTexture, onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, files: string[], onError: Nullable<(message?: string, exception?: any) => void>, mimeType?: string): void;\r\n\r\n /** @hidden */\r\n _partialLoadImg(url: string, index: number, loadedImages: HTMLImageElement[] | ImageBitmap[], scene: Nullable<Scene>, texture: InternalTexture, onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, onErrorCallBack: Nullable<(message?: string, exception?: any) => void>, mimeType?: string): void;\r\n\r\n /**\r\n * @hidden\r\n */\r\n _setCubeMapTextureParams(texture: InternalTexture, loadMipmap: boolean, maxLevel?: number): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype._createDepthStencilCubeTexture = function (size: number, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture {\r\n var internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n internalTexture.isCube = true;\r\n\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"Depth cube texture is not supported by WebGL 1.\");\r\n return internalTexture;\r\n }\r\n\r\n var internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n ...options\r\n };\r\n\r\n var gl = this._gl;\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, internalTexture, true);\r\n\r\n this._setupDepthStencilTexture(internalTexture, size, internalOptions.generateStencil, internalOptions.bilinearFiltering, internalOptions.comparisonFunction);\r\n\r\n rtWrapper._depthStencilTexture = internalTexture;\r\n rtWrapper._depthStencilTextureWithStencil = internalOptions.generateStencil;\r\n\r\n // Create the depth/stencil buffer\r\n for (var face = 0; face < 6; face++) {\r\n if (internalOptions.generateStencil) {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, gl.DEPTH24_STENCIL8, size, size, 0, gl.DEPTH_STENCIL, gl.UNSIGNED_INT_24_8, null);\r\n }\r\n else {\r\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, gl.DEPTH_COMPONENT24, size, size, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, null);\r\n }\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nThinEngine.prototype._partialLoadFile = function (url: string, index: number, loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void, onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null): void {\r\n var onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nThinEngine.prototype._cascadeLoadFiles = function (scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void> = null): void {\r\n var loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nThinEngine.prototype._cascadeLoadImgs = function (scene: Nullable<Scene>, texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, files: string[], onError: Nullable<(message?: string, exception?: any) => void> = null, mimeType?: string) {\r\n\r\n var loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nThinEngine.prototype._partialLoadImg = function (url: string, index: number, loadedImages: HTMLImageElement[] | ImageBitmap[], scene: Nullable<Scene>, texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>, onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null, mimeType?: string) {\r\n\r\n var tokenPendingData = RandomGUID();\r\n\r\n var onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene._removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene._removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene._addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nThinEngine.prototype._setCubeMapTextureParams = function (texture: InternalTexture, loadMipmap: boolean, maxLevel: number): void {\r\n var gl = this._gl;\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, loadMipmap ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n texture.samplingMode = loadMipmap ? 3 : 2;\r\n\r\n if (loadMipmap && this.getCaps().textureMaxLevel && maxLevel > 0) {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAX_LEVEL, maxLevel);\r\n }\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, null);\r\n};\r\n\r\nThinEngine.prototype.createCubeTextureBase = function (rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap?: boolean, onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null, format?: number, forcedExtension: any = null, createPolynomials: boolean = false, lodScale: number = 0, lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null, beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null, useSRGBBuffer = false): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.webGLVersion > 1 || this.isWebGPU || !!noMipmap);\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const lastDot = rootUrl.lastIndexOf('.');\r\n const extension = forcedExtension ? forcedExtension : (lastDot > -1 ? rootUrl.substring(lastDot).toLowerCase() : \"\");\r\n\r\n let loader: Nullable<IInternalTextureLoader> = null;\r\n for (let availableLoader of ThinEngine._TextureLoaders) {\r\n if (availableLoader.canLoad(extension)) {\r\n loader = availableLoader;\r\n break;\r\n }\r\n }\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(originalRootUrl, scene, files, !!noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, texture, beforeLoadCubeDataCallback, imageHandler, useSRGBBuffer);\r\n }\r\n };\r\n\r\n if (loader) {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader!.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n }\r\n else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n }\r\n else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n }\r\n else {\r\n if (!files) {\r\n throw new Error(\"Cannot load cubemap because files were not defined\");\r\n }\r\n\r\n this._cascadeLoadImgs(scene, texture, (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n }, files, onError);\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n\r\nThinEngine.prototype.createCubeTexture = function (rootUrl: string, scene: Nullable<Scene>, files: Nullable<string[]>, noMipmap?: boolean, onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null, format?: number, forcedExtension: any = null, createPolynomials: boolean = false, lodScale: number = 0, lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null, loaderOptions?: any, useSRGBBuffer = false): InternalTexture {\r\n const gl = this._gl;\r\n\r\n return this.createCubeTextureBase(\r\n rootUrl, scene, files, !!noMipmap, onLoad, onError, format, forcedExtension, createPolynomials, lodScale, lodOffset, fallback,\r\n (texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, texture, true),\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n const width = this.needPOTTextures ? ThinEngine.GetExponentOfTwo(imgs[0].width, this._caps.maxCubemapTextureSize) : imgs[0].width;\r\n const height = width;\r\n\r\n const faces = [\r\n gl.TEXTURE_CUBE_MAP_POSITIVE_X, gl.TEXTURE_CUBE_MAP_POSITIVE_Y, gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\r\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X, gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n ];\r\n\r\n this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, texture, true);\r\n this._unpackFlipY(false);\r\n\r\n const internalFormat = format ? this._getInternalFormat(format, texture._useSRGBBuffer) : (texture._useSRGBBuffer ? gl.SRGB8_ALPHA8 : gl.RGBA);\r\n let texelFormat = format ? this._getInternalFormat(format) : gl.RGBA;\r\n\r\n if (texture._useSRGBBuffer && this.webGLVersion === 1) {\r\n texelFormat = internalFormat;\r\n }\r\n\r\n for (var index = 0; index < faces.length; index++) {\r\n if (imgs[index].width !== width || imgs[index].height !== height) {\r\n\r\n this._prepareWorkingCanvas();\r\n\r\n if (!this._workingCanvas || !this._workingContext) {\r\n Logger.Warn(\"Cannot create canvas to resize texture.\");\r\n return;\r\n }\r\n this._workingCanvas.width = width;\r\n this._workingCanvas.height = height;\r\n\r\n this._workingContext.drawImage(imgs[index], 0, 0, imgs[index].width, imgs[index].height, 0, 0, width, height);\r\n gl.texImage2D(faces[index], 0, internalFormat, texelFormat, gl.UNSIGNED_BYTE, this._workingCanvas as TexImageSource);\r\n } else {\r\n gl.texImage2D(faces[index], 0, internalFormat, texelFormat, gl.UNSIGNED_BYTE, imgs[index]);\r\n }\r\n }\r\n\r\n if (!noMipmap) {\r\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP);\r\n }\r\n\r\n this._setCubeMapTextureParams(texture, !noMipmap);\r\n\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n if (format) {\r\n texture.format = format;\r\n }\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }, !!useSRGBBuffer\r\n );\r\n};\r\n"]}
@@ -32,6 +32,11 @@ declare module "../../Cameras/camera" {
32
32
  * 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)
33
33
  */
34
34
  _multiviewTexture: Nullable<RenderTargetTexture>;
35
+ /**
36
+ * @hidden
37
+ * For WebXR cameras that are rendering to multiview texture arrays.
38
+ */
39
+ _renderingMultiview: boolean;
35
40
  /**
36
41
  * @hidden
37
42
  * ensures the multiview texture of the camera exists and has the specified width/height
@@ -16,14 +16,16 @@ Engine.prototype.createMultiviewRenderTargetTexture = function (width, height) {
16
16
  var internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);
17
17
  internalTexture.width = width;
18
18
  internalTexture.height = height;
19
+ internalTexture.isMultiview = true;
19
20
  rtWrapper._colorTextureArray = gl.createTexture();
20
21
  gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._colorTextureArray);
21
22
  gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);
22
23
  rtWrapper._depthStencilTextureArray = gl.createTexture();
23
24
  gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._depthStencilTextureArray);
24
- gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.DEPTH32F_STENCIL8, width, height, 2);
25
+ gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.DEPTH24_STENCIL8, width, height, 2);
25
26
  internalTexture.isReady = true;
26
27
  rtWrapper.setTextures(internalTexture);
28
+ rtWrapper._depthStencilTexture = internalTexture;
27
29
  return rtWrapper;
28
30
  };
29
31
  Engine.prototype.bindMultiviewFramebuffer = function (_multiviewTexture) {
@@ -64,6 +66,7 @@ function createMultiviewUbo(engine, name) {
64
66
  ubo.addUniform("view", 16);
65
67
  ubo.addUniform("projection", 16);
66
68
  ubo.addUniform("viewPosition", 4);
69
+ ubo.addUniform("vEyePosition", 4);
67
70
  return ubo;
68
71
  }
69
72
  var currentCreateSceneUniformBuffer = Scene.prototype.createSceneUniformBuffer;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../sourceES6/core/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 { Nullable } from '../../types';\r\nimport { 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 { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport { 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): 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\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number) {\r\n var 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 var internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n\r\n rtWrapper._colorTextureArray = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._colorTextureArray);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);\r\n\r\n rtWrapper._depthStencilTextureArray = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._depthStencilTextureArray);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, (gl as any).DEPTH32F_STENCIL8, width, height, 2);\r\n\r\n internalTexture.isReady = true;\r\n\r\n rtWrapper.setTextures(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 var gl: any = this._gl;\r\n var 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(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, multiviewTexture.samples, 0, 2);\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\ndeclare module \"../../Cameras/camera\" {\r\n export interface Camera {\r\n /**\r\n * @hidden\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 * @hidden\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 * @hidden\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 /** @hidden */\r\n _transformMatrixR: Matrix;\r\n /** @hidden */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @hidden */\r\n _createMultiviewUbo(): void;\r\n /** @hidden */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @hidden */\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(\"viewPosition\", 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 (var index = 0; index < camera._rigCameras.length; index++) {\r\n var 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};"]}
1
+ {"version":3,"file":"engine.multiview.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Extensions/engine.multiview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGlG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAsBnD,MAAM,CAAC,SAAS,CAAC,kCAAkC,GAAG,UAAU,KAAa,EAAE,MAAc;IACzF,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IAElB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE;QAC3B,MAAM,4BAA4B,CAAC;KACtC;IAED,IAAM,SAAS,GAAG,IAAI,CAAC,kCAAkC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAA6B,CAAC;IAEvH,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAEhD,IAAI,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrF,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC;IAC9B,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;IAChC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC;IAEnC,SAAS,CAAC,kBAAkB,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IAClD,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACjE,EAAU,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAE7E,SAAS,CAAC,yBAAyB,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACzD,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACxE,EAAU,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAG,EAAU,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjG,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;IAE/B,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACvC,SAAS,CAAC,oBAAoB,GAAG,eAAe,CAAC;IAEjD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,wBAAwB,GAAG,UAAU,iBAAsC;IACxF,IAAM,gBAAgB,GAAG,iBAA6C,CAAC;IAEvE,IAAI,EAAE,GAAQ,IAAI,CAAC,GAAG,CAAC;IACvB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC;IAErE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9E,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,gBAAgB,CAAC,yBAAyB,EAAE;QACnF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE;YAChC,GAAG,CAAC,yCAAyC,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjK,GAAG,CAAC,yCAAyC,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAClL;aAAM;YACH,GAAG,CAAC,8BAA8B,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5H,GAAG,CAAC,8BAA8B,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7I;KACJ;SAAM;QACH,MAAM,gCAAgC,CAAC;KAC1C;AACL,CAAC,CAAC;AA+BF,MAAM,CAAC,SAAS,CAAC,yBAAyB,GAAG,KAAK,CAAC;AAEnD,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAE1C,MAAM,CAAC,SAAS,CAAC,+BAA+B,GAAG,UAAU,KAAa,EAAE,MAAc;IACtF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACzG;SAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,IAAI,MAAM,EAAE;QAC/G,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KACzG;AACL,CAAC,CAAC;AAiBF,SAAS,kBAAkB,CAAC,MAAc,EAAE,IAAa;IACrD,IAAM,GAAG,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAClC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACf,CAAC;AAED,IAAM,+BAA+B,GAAG,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAEjF,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAClD,KAAK,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC1C,KAAK,CAAC,SAAS,CAAC,mBAAmB,GAAG;IAClC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACtF,CAAC,CAAC;AACF,KAAK,CAAC,SAAS,CAAC,wBAAwB,GAAG,UAAU,IAAa;IAC9D,IAAI,IAAI,CAAC,kBAAkB,EAAE;QACzB,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;KACrD;IACD,OAAO,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC,CAAC;AACF,KAAK,CAAC,SAAS,CAAC,mBAAmB,GAAG,UAAU,KAAc,EAAE,WAAoB;IAChF,IAAI,KAAK,IAAI,WAAW,EAAE;QACtB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC5D;IAED,IAAI,KAAK,IAAI,WAAW,EAAE;QACtB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mDAAmD;KAChI;IAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC9E;AACL,CAAC,CAAC;AACF,KAAK,CAAC,SAAS,CAAC,4BAA4B,GAAG,UAAU,MAAc;IACnE,0EAA0E;IAC1E,+EAA+E;IAC/E,wGAAwG;IAExG,gCAAgC;IAChC,MAAM,CAAC,+BAA+B,CAClC,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAC7J,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CACnK,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;IACD,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAEjC,8DAA8D;IAC9D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC5D,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;SAC7E;KACJ;AACL,CAAC,CAAC","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 { Nullable } from '../../types';\r\nimport { 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 { WebGLRenderTargetWrapper } from \"../WebGL/webGLRenderTargetWrapper\";\r\nimport { 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): 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\r\nEngine.prototype.createMultiviewRenderTargetTexture = function (width: number, height: number) {\r\n var 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 var 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 rtWrapper._colorTextureArray = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._colorTextureArray);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, width, height, 2);\r\n\r\n rtWrapper._depthStencilTextureArray = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D_ARRAY, rtWrapper._depthStencilTextureArray);\r\n (gl as any).texStorage3D(gl.TEXTURE_2D_ARRAY, 1, (gl as any).DEPTH24_STENCIL8, width, height, 2);\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 var gl: any = this._gl;\r\n var 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(gl.DRAW_FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, multiviewTexture._depthStencilTextureArray, 0, multiviewTexture.samples, 0, 2);\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\ndeclare module \"../../Cameras/camera\" {\r\n export interface Camera {\r\n /**\r\n * @hidden\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 * @hidden\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 * @hidden\r\n * For WebXR cameras that are rendering to multiview texture arrays.\r\n */\r\n _renderingMultiview: boolean;\r\n\r\n /**\r\n * @hidden\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 /** @hidden */\r\n _transformMatrixR: Matrix;\r\n /** @hidden */\r\n _multiviewSceneUbo: Nullable<UniformBuffer>;\r\n /** @hidden */\r\n _createMultiviewUbo(): void;\r\n /** @hidden */\r\n _updateMultiviewUbo(viewR?: Matrix, projectionR?: Matrix): void;\r\n /** @hidden */\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(\"viewPosition\", 4);\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 (var index = 0; index < camera._rigCameras.length; index++) {\r\n var 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};"]}
@@ -1,4 +1,4 @@
1
- import { INativeInput } from "../../DeviceInput/Interfaces/inputInterfaces";
1
+ import { INativeInput } from "../../DeviceInput/InputDevices/inputInterfaces";
2
2
  import { InternalTexture } from "../../Materials/Textures/internalTexture";
3
3
  import { Nullable } from "../../types";
4
4
  import { ICanvas, IImage } from "../ICanvas";
@@ -12,7 +12,7 @@ export interface INativeEngine {
12
12
  recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;
13
13
  updateDynamicIndexBuffer(buffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number, startIndex: number): void;
14
14
  createVertexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, dynamic: boolean): NativeData;
15
- recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;
15
+ recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean, instanceDivisor: number): void;
16
16
  updateDynamicVertexBuffer(vertexBuffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number): void;
17
17
  createProgram(vertexShader: string, fragmentShader: string): any;
18
18
  getUniforms(shaderProgram: any, uniformsNames: string[]): WebGLUniformLocation[];
@@ -20,6 +20,7 @@ export interface INativeEngine {
20
20
  createTexture(): WebGLTexture;
21
21
  loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
22
22
  loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;
23
+ loadRawTexture2DArray(texture: WebGLTexture, data: Nullable<ArrayBufferView>, width: number, height: number, depth: number, format: number, generateMipMaps: boolean, invertY: boolean): void;
23
24
  loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
24
25
  loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
25
26
  getTextureWidth(texture: WebGLTexture): number;
@@ -1 +1 @@
1
- {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"","sourcesContent":["import { INativeInput } from \"../../DeviceInput/Interfaces/inputInterfaces\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICanvas, IImage } from \"../ICanvas\";\r\nimport { NativeData, NativeDataStream } from \"./nativeDataStream\";\r\n\r\n/** @hidden */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(buffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): any;\r\n getUniforms(shaderProgram: any, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: any, attributeNames: string[]): number[];\r\n\r\n createTexture(): WebGLTexture;\r\n loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: WebGLTexture): number;\r\n getTextureHeight(texture: WebGLTexture): number;\r\n copyTexture(desination: Nullable<WebGLTexture>, source: Nullable<WebGLTexture>): void;\r\n deleteTexture(texture: Nullable<WebGLTexture>): void;\r\n\r\n createImageBitmap(data: ArrayBufferView): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(texture: WebGLTexture, width: number, height: number, format: number, generateStencilBuffer: boolean, generateDepthBuffer: boolean, generateMips: boolean): WebGLFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n getHardwareScalingLevel(): number;\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new(): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new(): INativeCamera;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new(): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new(): IImage;\r\n}\r\n\r\n/** @hidden */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: INativeInput;\r\n new(): INativeInput;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new(requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INative {\r\n Engine: INativeEngineConstructor;\r\n Camera: INativeCameraConstructor;\r\n Canvas: INativeCanvasConstructor;\r\n Image: INativeImageConstructor;\r\n XMLHttpRequest: any; // TODO: how to do this?\r\n DeviceInputSystem: IDeviceInputSystemConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n}\r\n"]}
1
+ {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"","sourcesContent":["import { INativeInput } from \"../../DeviceInput/InputDevices/inputInterfaces\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICanvas, IImage } from \"../ICanvas\";\r\nimport { NativeData, NativeDataStream } from \"./nativeDataStream\";\r\n\r\n/** @hidden */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(buffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean, instanceDivisor: number): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): any;\r\n getUniforms(shaderProgram: any, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: any, attributeNames: string[]): number[];\r\n\r\n createTexture(): WebGLTexture;\r\n loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadRawTexture2DArray(texture: WebGLTexture, data: Nullable<ArrayBufferView>, width: number, height: number, depth: number, format: number, generateMipMaps: boolean, invertY: boolean): void;\r\n loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: WebGLTexture): number;\r\n getTextureHeight(texture: WebGLTexture): number;\r\n copyTexture(desination: Nullable<WebGLTexture>, source: Nullable<WebGLTexture>): void;\r\n deleteTexture(texture: Nullable<WebGLTexture>): void;\r\n\r\n createImageBitmap(data: ArrayBufferView): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(texture: WebGLTexture, width: number, height: number, format: number, generateStencilBuffer: boolean, generateDepthBuffer: boolean, generateMips: boolean): WebGLFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n getHardwareScalingLevel(): number;\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new(): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new(): INativeCamera;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new(): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new(): IImage;\r\n}\r\n\r\n/** @hidden */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: INativeInput;\r\n new(): INativeInput;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new(requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INative {\r\n Engine: INativeEngineConstructor;\r\n Camera: INativeCameraConstructor;\r\n Canvas: INativeCanvasConstructor;\r\n Image: INativeImageConstructor;\r\n XMLHttpRequest: any; // TODO: how to do this?\r\n DeviceInputSystem: IDeviceInputSystemConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n}\r\n"]}
@@ -15,7 +15,7 @@ var ShaderDefineExpression = /** @class */ (function () {
15
15
  else {
16
16
  var v1 = stack[stack.length - 1], v2 = stack[stack.length - 2];
17
17
  stack.length -= 2;
18
- stack.push("(" + v2 + c + v1 + ")");
18
+ stack.push("(".concat(v2).concat(c).concat(v1, ")"));
19
19
  }
20
20
  }
21
21
  return stack[stack.length - 1];