@codexo/exojs 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/README.md +141 -0
  3. package/dist/esm/audio/AbstractMedia.d.ts +45 -0
  4. package/dist/esm/audio/AbstractMedia.js +103 -0
  5. package/dist/esm/audio/AbstractMedia.js.map +1 -0
  6. package/dist/esm/audio/AudioAnalyser.d.ts +30 -0
  7. package/dist/esm/audio/AudioAnalyser.js +92 -0
  8. package/dist/esm/audio/AudioAnalyser.js.map +1 -0
  9. package/dist/esm/audio/Media.d.ts +25 -0
  10. package/dist/esm/audio/Music.d.ts +20 -0
  11. package/dist/esm/audio/Music.js +119 -0
  12. package/dist/esm/audio/Music.js.map +1 -0
  13. package/dist/esm/audio/Sound.d.ts +56 -0
  14. package/dist/esm/audio/Sound.js +394 -0
  15. package/dist/esm/audio/Sound.js.map +1 -0
  16. package/dist/esm/audio/audio-context.d.ts +11 -0
  17. package/dist/esm/audio/audio-context.js +115 -0
  18. package/dist/esm/audio/audio-context.js.map +1 -0
  19. package/dist/esm/audio/index.d.ts +6 -0
  20. package/dist/esm/core/Application.d.ts +76 -0
  21. package/dist/esm/core/Application.js +206 -0
  22. package/dist/esm/core/Application.js.map +1 -0
  23. package/dist/esm/core/Bounds.d.ts +19 -0
  24. package/dist/esm/core/Bounds.js +59 -0
  25. package/dist/esm/core/Bounds.js.map +1 -0
  26. package/dist/esm/core/Clock.d.ts +18 -0
  27. package/dist/esm/core/Clock.js +68 -0
  28. package/dist/esm/core/Clock.js.map +1 -0
  29. package/dist/esm/core/Color.d.ts +176 -0
  30. package/dist/esm/core/Color.js +265 -0
  31. package/dist/esm/core/Color.js.map +1 -0
  32. package/dist/esm/core/Quadtree.d.ts +20 -0
  33. package/dist/esm/core/Quadtree.js +86 -0
  34. package/dist/esm/core/Quadtree.js.map +1 -0
  35. package/dist/esm/core/Scene.d.ts +83 -0
  36. package/dist/esm/core/Scene.js +81 -0
  37. package/dist/esm/core/Scene.js.map +1 -0
  38. package/dist/esm/core/SceneManager.d.ts +66 -0
  39. package/dist/esm/core/SceneManager.js +396 -0
  40. package/dist/esm/core/SceneManager.js.map +1 -0
  41. package/dist/esm/core/SceneNode.d.ts +58 -0
  42. package/dist/esm/core/SceneNode.js +174 -0
  43. package/dist/esm/core/SceneNode.js.map +1 -0
  44. package/dist/esm/core/Signal.d.ts +18 -0
  45. package/dist/esm/core/Signal.js +63 -0
  46. package/dist/esm/core/Signal.js.map +1 -0
  47. package/dist/esm/core/Time.d.ts +38 -0
  48. package/dist/esm/core/Time.js +107 -0
  49. package/dist/esm/core/Time.js.map +1 -0
  50. package/dist/esm/core/Timer.d.ts +12 -0
  51. package/dist/esm/core/Timer.js +34 -0
  52. package/dist/esm/core/Timer.js.map +1 -0
  53. package/dist/esm/core/index.d.ts +13 -0
  54. package/dist/esm/core/types.d.ts +29 -0
  55. package/dist/esm/core/utils.d.ts +22 -0
  56. package/dist/esm/core/utils.js +136 -0
  57. package/dist/esm/core/utils.js.map +1 -0
  58. package/dist/esm/index.d.ts +8 -0
  59. package/dist/esm/index.js +135 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +5 -0
  62. package/dist/esm/input/ArcadeStickGamepadMapping.js +29 -0
  63. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -0
  64. package/dist/esm/input/GameCubeGamepadMapping.d.ts +5 -0
  65. package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
  66. package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -0
  67. package/dist/esm/input/Gamepad.d.ts +45 -0
  68. package/dist/esm/input/Gamepad.js +154 -0
  69. package/dist/esm/input/Gamepad.js.map +1 -0
  70. package/dist/esm/input/GamepadChannels.d.ts +39 -0
  71. package/dist/esm/input/GamepadChannels.js +45 -0
  72. package/dist/esm/input/GamepadChannels.js.map +1 -0
  73. package/dist/esm/input/GamepadControl.d.ts +15 -0
  74. package/dist/esm/input/GamepadControl.js +29 -0
  75. package/dist/esm/input/GamepadControl.js.map +1 -0
  76. package/dist/esm/input/GamepadDefinitions.d.ts +31 -0
  77. package/dist/esm/input/GamepadDefinitions.js +175 -0
  78. package/dist/esm/input/GamepadDefinitions.js.map +1 -0
  79. package/dist/esm/input/GamepadMapping.d.ts +23 -0
  80. package/dist/esm/input/GamepadMapping.js +32 -0
  81. package/dist/esm/input/GamepadMapping.js.map +1 -0
  82. package/dist/esm/input/GamepadPromptLayouts.d.ts +9 -0
  83. package/dist/esm/input/GamepadPromptLayouts.js +140 -0
  84. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -0
  85. package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +5 -0
  86. package/dist/esm/input/GenericDualAnalogGamepadMapping.js +53 -0
  87. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -0
  88. package/dist/esm/input/Input.d.ts +28 -0
  89. package/dist/esm/input/Input.js +68 -0
  90. package/dist/esm/input/Input.js.map +1 -0
  91. package/dist/esm/input/InputManager.d.ts +76 -0
  92. package/dist/esm/input/InputManager.js +346 -0
  93. package/dist/esm/input/InputManager.js.map +1 -0
  94. package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +5 -0
  95. package/dist/esm/input/JoyConLeftGamepadMapping.js +9 -0
  96. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -0
  97. package/dist/esm/input/JoyConRightGamepadMapping.d.ts +5 -0
  98. package/dist/esm/input/JoyConRightGamepadMapping.js +9 -0
  99. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -0
  100. package/dist/esm/input/PlayStationGamepadMapping.d.ts +5 -0
  101. package/dist/esm/input/PlayStationGamepadMapping.js +9 -0
  102. package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -0
  103. package/dist/esm/input/Pointer.d.ts +52 -0
  104. package/dist/esm/input/Pointer.js +127 -0
  105. package/dist/esm/input/Pointer.js.map +1 -0
  106. package/dist/esm/input/SteamControllerGamepadMapping.d.ts +5 -0
  107. package/dist/esm/input/SteamControllerGamepadMapping.js +9 -0
  108. package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -0
  109. package/dist/esm/input/SwitchProGamepadMapping.d.ts +5 -0
  110. package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
  111. package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -0
  112. package/dist/esm/input/XboxGamepadMapping.d.ts +5 -0
  113. package/dist/esm/input/XboxGamepadMapping.js +9 -0
  114. package/dist/esm/input/XboxGamepadMapping.js.map +1 -0
  115. package/dist/esm/input/index.d.ts +19 -0
  116. package/dist/esm/input/types.d.ts +111 -0
  117. package/dist/esm/input/types.js +117 -0
  118. package/dist/esm/input/types.js.map +1 -0
  119. package/dist/esm/math/AbstractVector.d.ts +33 -0
  120. package/dist/esm/math/AbstractVector.js +106 -0
  121. package/dist/esm/math/AbstractVector.js.map +1 -0
  122. package/dist/esm/math/Circle.d.ts +41 -0
  123. package/dist/esm/math/Circle.js +137 -0
  124. package/dist/esm/math/Circle.js.map +1 -0
  125. package/dist/esm/math/CircleLike.d.ts +5 -0
  126. package/dist/esm/math/Collision.d.ts +28 -0
  127. package/dist/esm/math/Collision.js +13 -0
  128. package/dist/esm/math/Collision.js.map +1 -0
  129. package/dist/esm/math/Ellipse.d.ts +37 -0
  130. package/dist/esm/math/Ellipse.js +112 -0
  131. package/dist/esm/math/Ellipse.js.map +1 -0
  132. package/dist/esm/math/EllipseLike.d.ts +6 -0
  133. package/dist/esm/math/Flags.d.ts +12 -0
  134. package/dist/esm/math/Flags.js +41 -0
  135. package/dist/esm/math/Flags.js.map +1 -0
  136. package/dist/esm/math/Interval.d.ts +16 -0
  137. package/dist/esm/math/Interval.js +45 -0
  138. package/dist/esm/math/Interval.js.map +1 -0
  139. package/dist/esm/math/Line.d.ts +36 -0
  140. package/dist/esm/math/Line.js +114 -0
  141. package/dist/esm/math/Line.js.map +1 -0
  142. package/dist/esm/math/LineLike.d.ts +6 -0
  143. package/dist/esm/math/Matrix.d.ts +32 -0
  144. package/dist/esm/math/Matrix.js +134 -0
  145. package/dist/esm/math/Matrix.js.map +1 -0
  146. package/dist/esm/math/ObservableSize.d.ts +16 -0
  147. package/dist/esm/math/ObservableSize.js +56 -0
  148. package/dist/esm/math/ObservableSize.js.map +1 -0
  149. package/dist/esm/math/ObservableVector.d.ts +21 -0
  150. package/dist/esm/math/ObservableVector.js +74 -0
  151. package/dist/esm/math/ObservableVector.js.map +1 -0
  152. package/dist/esm/math/PointLike.d.ts +4 -0
  153. package/dist/esm/math/PolarVector.d.ts +8 -0
  154. package/dist/esm/math/PolarVector.js +19 -0
  155. package/dist/esm/math/PolarVector.js.map +1 -0
  156. package/dist/esm/math/Polygon.d.ts +38 -0
  157. package/dist/esm/math/Polygon.js +163 -0
  158. package/dist/esm/math/Polygon.js.map +1 -0
  159. package/dist/esm/math/PolygonLike.d.ts +6 -0
  160. package/dist/esm/math/Random.d.ts +15 -0
  161. package/dist/esm/math/Random.js +72 -0
  162. package/dist/esm/math/Random.js.map +1 -0
  163. package/dist/esm/math/Rectangle.d.ts +48 -0
  164. package/dist/esm/math/Rectangle.js +208 -0
  165. package/dist/esm/math/Rectangle.js.map +1 -0
  166. package/dist/esm/math/RectangleLike.d.ts +6 -0
  167. package/dist/esm/math/Segment.d.ts +25 -0
  168. package/dist/esm/math/Segment.js +79 -0
  169. package/dist/esm/math/Segment.js.map +1 -0
  170. package/dist/esm/math/ShapeLike.d.ts +4 -0
  171. package/dist/esm/math/Size.d.ts +24 -0
  172. package/dist/esm/math/Size.js +71 -0
  173. package/dist/esm/math/Size.js.map +1 -0
  174. package/dist/esm/math/Transformable.d.ts +47 -0
  175. package/dist/esm/math/Transformable.js +140 -0
  176. package/dist/esm/math/Transformable.js.map +1 -0
  177. package/dist/esm/math/Vector.d.ts +28 -0
  178. package/dist/esm/math/Vector.js +80 -0
  179. package/dist/esm/math/Vector.js.map +1 -0
  180. package/dist/esm/math/collision-detection.d.ts +41 -0
  181. package/dist/esm/math/collision-detection.js +394 -0
  182. package/dist/esm/math/collision-detection.js.map +1 -0
  183. package/dist/esm/math/collision-primitives.d.ts +39 -0
  184. package/dist/esm/math/collision-primitives.js +164 -0
  185. package/dist/esm/math/collision-primitives.js.map +1 -0
  186. package/dist/esm/math/geometry.d.ts +8 -0
  187. package/dist/esm/math/geometry.js +195 -0
  188. package/dist/esm/math/geometry.js.map +1 -0
  189. package/dist/esm/math/index.d.ts +27 -0
  190. package/dist/esm/math/utils.d.ts +21 -0
  191. package/dist/esm/math/utils.js +60 -0
  192. package/dist/esm/math/utils.js.map +1 -0
  193. package/dist/esm/particles/Particle.d.ts +40 -0
  194. package/dist/esm/particles/Particle.js +106 -0
  195. package/dist/esm/particles/Particle.js.map +1 -0
  196. package/dist/esm/particles/ParticleProperties.d.ts +14 -0
  197. package/dist/esm/particles/ParticleSystem.d.ts +43 -0
  198. package/dist/esm/particles/ParticleSystem.js +186 -0
  199. package/dist/esm/particles/ParticleSystem.js.map +1 -0
  200. package/dist/esm/particles/affectors/ColorAffector.d.ts +17 -0
  201. package/dist/esm/particles/affectors/ColorAffector.js +42 -0
  202. package/dist/esm/particles/affectors/ColorAffector.js.map +1 -0
  203. package/dist/esm/particles/affectors/ForceAffector.d.ts +13 -0
  204. package/dist/esm/particles/affectors/ForceAffector.js +28 -0
  205. package/dist/esm/particles/affectors/ForceAffector.js.map +1 -0
  206. package/dist/esm/particles/affectors/ParticleAffector.d.ts +6 -0
  207. package/dist/esm/particles/affectors/ScaleAffector.d.ts +13 -0
  208. package/dist/esm/particles/affectors/ScaleAffector.js +28 -0
  209. package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -0
  210. package/dist/esm/particles/affectors/TorqueAffector.d.ts +12 -0
  211. package/dist/esm/particles/affectors/TorqueAffector.js +26 -0
  212. package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -0
  213. package/dist/esm/particles/emitters/ParticleEmitter.d.ts +6 -0
  214. package/dist/esm/particles/emitters/ParticleOptions.d.ts +46 -0
  215. package/dist/esm/particles/emitters/ParticleOptions.js +104 -0
  216. package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -0
  217. package/dist/esm/particles/emitters/UniversalEmitter.d.ts +17 -0
  218. package/dist/esm/particles/emitters/UniversalEmitter.js +45 -0
  219. package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -0
  220. package/dist/esm/particles/index.d.ts +11 -0
  221. package/dist/esm/physics/RapierPhysicsWorld.d.ts +136 -0
  222. package/dist/esm/physics/RapierPhysicsWorld.js +475 -0
  223. package/dist/esm/physics/RapierPhysicsWorld.js.map +1 -0
  224. package/dist/esm/physics/index.d.ts +1 -0
  225. package/dist/esm/rendering/CallbackRenderPass.d.ts +7 -0
  226. package/dist/esm/rendering/CallbackRenderPass.js +12 -0
  227. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -0
  228. package/dist/esm/rendering/Container.d.ts +36 -0
  229. package/dist/esm/rendering/Container.js +197 -0
  230. package/dist/esm/rendering/Container.js.map +1 -0
  231. package/dist/esm/rendering/Drawable.d.ts +16 -0
  232. package/dist/esm/rendering/Drawable.js +54 -0
  233. package/dist/esm/rendering/Drawable.js.map +1 -0
  234. package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
  235. package/dist/esm/rendering/RenderBackendType.js +8 -0
  236. package/dist/esm/rendering/RenderBackendType.js.map +1 -0
  237. package/dist/esm/rendering/RenderNode.d.ts +51 -0
  238. package/dist/esm/rendering/RenderNode.js +235 -0
  239. package/dist/esm/rendering/RenderNode.js.map +1 -0
  240. package/dist/esm/rendering/RenderPass.d.ts +4 -0
  241. package/dist/esm/rendering/RenderStats.d.ts +12 -0
  242. package/dist/esm/rendering/RenderStats.js +24 -0
  243. package/dist/esm/rendering/RenderStats.js.map +1 -0
  244. package/dist/esm/rendering/RenderTarget.d.ts +34 -0
  245. package/dist/esm/rendering/RenderTarget.js +109 -0
  246. package/dist/esm/rendering/RenderTarget.js.map +1 -0
  247. package/dist/esm/rendering/RenderTargetPass.d.ts +18 -0
  248. package/dist/esm/rendering/RenderTargetPass.js +31 -0
  249. package/dist/esm/rendering/RenderTargetPass.js.map +1 -0
  250. package/dist/esm/rendering/Renderer.d.ts +15 -0
  251. package/dist/esm/rendering/RendererRegistry.d.ts +43 -0
  252. package/dist/esm/rendering/RendererRegistry.js +86 -0
  253. package/dist/esm/rendering/RendererRegistry.js.map +1 -0
  254. package/dist/esm/rendering/SceneRenderRuntime.d.ts +29 -0
  255. package/dist/esm/rendering/View.d.ts +102 -0
  256. package/dist/esm/rendering/View.js +364 -0
  257. package/dist/esm/rendering/View.js.map +1 -0
  258. package/dist/esm/rendering/filters/BlurFilter.d.ts +20 -0
  259. package/dist/esm/rendering/filters/BlurFilter.js +68 -0
  260. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -0
  261. package/dist/esm/rendering/filters/ColorFilter.d.ts +12 -0
  262. package/dist/esm/rendering/filters/ColorFilter.js +42 -0
  263. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -0
  264. package/dist/esm/rendering/filters/Filter.d.ts +5 -0
  265. package/dist/esm/rendering/filters/Filter.js +5 -0
  266. package/dist/esm/rendering/filters/Filter.js.map +1 -0
  267. package/dist/esm/rendering/index.d.ts +52 -0
  268. package/dist/esm/rendering/primitives/CircleGeometry.d.ts +4 -0
  269. package/dist/esm/rendering/primitives/CircleGeometry.js +21 -0
  270. package/dist/esm/rendering/primitives/CircleGeometry.js.map +1 -0
  271. package/dist/esm/rendering/primitives/DrawableShape.d.ts +11 -0
  272. package/dist/esm/rendering/primitives/DrawableShape.js +21 -0
  273. package/dist/esm/rendering/primitives/DrawableShape.js.map +1 -0
  274. package/dist/esm/rendering/primitives/Geometry.d.ts +13 -0
  275. package/dist/esm/rendering/primitives/Geometry.js +16 -0
  276. package/dist/esm/rendering/primitives/Geometry.js.map +1 -0
  277. package/dist/esm/rendering/primitives/Graphics.d.ts +36 -0
  278. package/dist/esm/rendering/primitives/Graphics.js +208 -0
  279. package/dist/esm/rendering/primitives/Graphics.js.map +1 -0
  280. package/dist/esm/rendering/shader/Shader.d.ts +27 -0
  281. package/dist/esm/rendering/shader/Shader.js +63 -0
  282. package/dist/esm/rendering/shader/Shader.js.map +1 -0
  283. package/dist/esm/rendering/shader/ShaderAttribute.d.ts +9 -0
  284. package/dist/esm/rendering/shader/ShaderAttribute.js +21 -0
  285. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -0
  286. package/dist/esm/rendering/shader/ShaderUniform.d.ts +16 -0
  287. package/dist/esm/rendering/shader/ShaderUniform.js +38 -0
  288. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -0
  289. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +43 -0
  290. package/dist/esm/rendering/sprite/AnimatedSprite.js +177 -0
  291. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -0
  292. package/dist/esm/rendering/sprite/Sprite.d.ts +43 -0
  293. package/dist/esm/rendering/sprite/Sprite.js +169 -0
  294. package/dist/esm/rendering/sprite/Sprite.js.map +1 -0
  295. package/dist/esm/rendering/sprite/Spritesheet.d.ts +34 -0
  296. package/dist/esm/rendering/sprite/Spritesheet.js +88 -0
  297. package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -0
  298. package/dist/esm/rendering/text/Text.d.ts +26 -0
  299. package/dist/esm/rendering/text/Text.js +130 -0
  300. package/dist/esm/rendering/text/Text.js.map +1 -0
  301. package/dist/esm/rendering/text/TextStyle.d.ts +65 -0
  302. package/dist/esm/rendering/text/TextStyle.js +192 -0
  303. package/dist/esm/rendering/text/TextStyle.js.map +1 -0
  304. package/dist/esm/rendering/texture/RenderTexture.d.ts +36 -0
  305. package/dist/esm/rendering/texture/RenderTexture.js +123 -0
  306. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -0
  307. package/dist/esm/rendering/texture/Sampler.d.ts +29 -0
  308. package/dist/esm/rendering/texture/Sampler.js +76 -0
  309. package/dist/esm/rendering/texture/Sampler.js.map +1 -0
  310. package/dist/esm/rendering/texture/Texture.d.ts +52 -0
  311. package/dist/esm/rendering/texture/Texture.js +173 -0
  312. package/dist/esm/rendering/texture/Texture.js.map +1 -0
  313. package/dist/esm/rendering/types.d.ts +68 -0
  314. package/dist/esm/rendering/types.js +79 -0
  315. package/dist/esm/rendering/types.js.map +1 -0
  316. package/dist/esm/rendering/utils.d.ts +9 -0
  317. package/dist/esm/rendering/utils.js +39 -0
  318. package/dist/esm/rendering/utils.js.map +1 -0
  319. package/dist/esm/rendering/video/Video.d.ts +62 -0
  320. package/dist/esm/rendering/video/Video.js +293 -0
  321. package/dist/esm/rendering/video/Video.js.map +1 -0
  322. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +49 -0
  323. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +175 -0
  324. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -0
  325. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.d.ts +44 -0
  326. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js +57 -0
  327. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js.map +1 -0
  328. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +11 -0
  329. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +110 -0
  330. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -0
  331. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.d.ts +26 -0
  332. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js +217 -0
  333. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js.map +1 -0
  334. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +26 -0
  335. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +54 -0
  336. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -0
  337. package/dist/esm/rendering/webgl2/WebGl2RenderManager.d.ts +99 -0
  338. package/dist/esm/rendering/webgl2/WebGl2RenderManager.js +600 -0
  339. package/dist/esm/rendering/webgl2/WebGl2RenderManager.js.map +1 -0
  340. package/dist/esm/rendering/webgl2/WebGl2RendererRuntime.d.ts +15 -0
  341. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts +17 -0
  342. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +63 -0
  343. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -0
  344. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.d.ts +3 -0
  345. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +59 -0
  346. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -0
  347. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.d.ts +2 -0
  348. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.js +161 -0
  349. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.js.map +1 -0
  350. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +11 -0
  351. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +82 -0
  352. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -0
  353. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.d.ts +40 -0
  354. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js +69 -0
  355. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js.map +1 -0
  356. package/dist/esm/rendering/webgl2/glsl/particle.frag.js +4 -0
  357. package/dist/esm/rendering/webgl2/glsl/particle.frag.js.map +1 -0
  358. package/dist/esm/rendering/webgl2/glsl/particle.vert.js +4 -0
  359. package/dist/esm/rendering/webgl2/glsl/particle.vert.js.map +1 -0
  360. package/dist/esm/rendering/webgl2/glsl/primitive.frag.js +4 -0
  361. package/dist/esm/rendering/webgl2/glsl/primitive.frag.js.map +1 -0
  362. package/dist/esm/rendering/webgl2/glsl/primitive.vert.js +4 -0
  363. package/dist/esm/rendering/webgl2/glsl/primitive.vert.js.map +1 -0
  364. package/dist/esm/rendering/webgl2/glsl/sprite.frag.js +4 -0
  365. package/dist/esm/rendering/webgl2/glsl/sprite.frag.js.map +1 -0
  366. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +4 -0
  367. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js.map +1 -0
  368. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.d.ts +28 -0
  369. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js +50 -0
  370. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js.map +1 -0
  371. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts +6 -0
  372. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +79 -0
  373. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -0
  374. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +33 -0
  375. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +443 -0
  376. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -0
  377. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.d.ts +39 -0
  378. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js +489 -0
  379. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js.map +1 -0
  380. package/dist/esm/rendering/webgpu/WebGpuRenderManager.d.ts +111 -0
  381. package/dist/esm/rendering/webgpu/WebGpuRenderManager.js +777 -0
  382. package/dist/esm/rendering/webgpu/WebGpuRenderManager.js.map +1 -0
  383. package/dist/esm/rendering/webgpu/WebGpuRendererRuntime.d.ts +8 -0
  384. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +33 -0
  385. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +528 -0
  386. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -0
  387. package/dist/esm/resources/AbstractAssetFactory.d.ts +10 -0
  388. package/dist/esm/resources/AbstractAssetFactory.js +24 -0
  389. package/dist/esm/resources/AbstractAssetFactory.js.map +1 -0
  390. package/dist/esm/resources/AssetFactory.d.ts +6 -0
  391. package/dist/esm/resources/AssetManifest.d.ts +28 -0
  392. package/dist/esm/resources/AssetManifest.js +66 -0
  393. package/dist/esm/resources/AssetManifest.js.map +1 -0
  394. package/dist/esm/resources/CacheFirstStrategy.d.ts +5 -0
  395. package/dist/esm/resources/CacheFirstStrategy.js +34 -0
  396. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -0
  397. package/dist/esm/resources/CacheStore.d.ts +7 -0
  398. package/dist/esm/resources/CacheStrategy.d.ts +12 -0
  399. package/dist/esm/resources/Database.d.ts +13 -0
  400. package/dist/esm/resources/FactoryRegistry.d.ts +9 -0
  401. package/dist/esm/resources/FactoryRegistry.js +42 -0
  402. package/dist/esm/resources/FactoryRegistry.js.map +1 -0
  403. package/dist/esm/resources/IndexedDbDatabase.d.ts +21 -0
  404. package/dist/esm/resources/IndexedDbDatabase.js +143 -0
  405. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -0
  406. package/dist/esm/resources/IndexedDbStore.d.ts +16 -0
  407. package/dist/esm/resources/IndexedDbStore.js +32 -0
  408. package/dist/esm/resources/IndexedDbStore.js.map +1 -0
  409. package/dist/esm/resources/Loader.d.ts +88 -0
  410. package/dist/esm/resources/Loader.js +601 -0
  411. package/dist/esm/resources/Loader.js.map +1 -0
  412. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +5 -0
  413. package/dist/esm/resources/NetworkOnlyStrategy.js +12 -0
  414. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -0
  415. package/dist/esm/resources/factories/BinaryFactory.d.ts +6 -0
  416. package/dist/esm/resources/factories/BinaryFactory.js +14 -0
  417. package/dist/esm/resources/factories/BinaryFactory.js.map +1 -0
  418. package/dist/esm/resources/factories/FontFactory.d.ts +13 -0
  419. package/dist/esm/resources/factories/FontFactory.js +36 -0
  420. package/dist/esm/resources/factories/FontFactory.js.map +1 -0
  421. package/dist/esm/resources/factories/ImageFactory.d.ts +10 -0
  422. package/dist/esm/resources/factories/ImageFactory.js +35 -0
  423. package/dist/esm/resources/factories/ImageFactory.js.map +1 -0
  424. package/dist/esm/resources/factories/JsonFactory.d.ts +6 -0
  425. package/dist/esm/resources/factories/JsonFactory.js +14 -0
  426. package/dist/esm/resources/factories/JsonFactory.js.map +1 -0
  427. package/dist/esm/resources/factories/MusicFactory.d.ts +16 -0
  428. package/dist/esm/resources/factories/MusicFactory.js +37 -0
  429. package/dist/esm/resources/factories/MusicFactory.js.map +1 -0
  430. package/dist/esm/resources/factories/SoundFactory.d.ts +14 -0
  431. package/dist/esm/resources/factories/SoundFactory.js +22 -0
  432. package/dist/esm/resources/factories/SoundFactory.js.map +1 -0
  433. package/dist/esm/resources/factories/SvgFactory.d.ts +6 -0
  434. package/dist/esm/resources/factories/SvgFactory.js +34 -0
  435. package/dist/esm/resources/factories/SvgFactory.js.map +1 -0
  436. package/dist/esm/resources/factories/TextFactory.d.ts +6 -0
  437. package/dist/esm/resources/factories/TextFactory.js +14 -0
  438. package/dist/esm/resources/factories/TextFactory.js.map +1 -0
  439. package/dist/esm/resources/factories/TextureFactory.d.ts +13 -0
  440. package/dist/esm/resources/factories/TextureFactory.js +37 -0
  441. package/dist/esm/resources/factories/TextureFactory.js.map +1 -0
  442. package/dist/esm/resources/factories/VideoFactory.d.ts +18 -0
  443. package/dist/esm/resources/factories/VideoFactory.js +40 -0
  444. package/dist/esm/resources/factories/VideoFactory.js.map +1 -0
  445. package/dist/esm/resources/factories/VttFactory.d.ts +6 -0
  446. package/dist/esm/resources/factories/VttFactory.js +57 -0
  447. package/dist/esm/resources/factories/VttFactory.js.map +1 -0
  448. package/dist/esm/resources/factories/WasmFactory.d.ts +6 -0
  449. package/dist/esm/resources/factories/WasmFactory.js +14 -0
  450. package/dist/esm/resources/factories/WasmFactory.js.map +1 -0
  451. package/dist/esm/resources/index.d.ts +26 -0
  452. package/dist/esm/resources/tokens.d.ts +30 -0
  453. package/dist/esm/resources/tokens.js +33 -0
  454. package/dist/esm/resources/tokens.js.map +1 -0
  455. package/dist/esm/resources/utils.d.ts +1 -0
  456. package/dist/esm/resources/utils.js +129 -0
  457. package/dist/esm/resources/utils.js.map +1 -0
  458. package/dist/esm/vendor/webgl-debug.js +1160 -0
  459. package/dist/esm/vendor/webgl-debug.js.map +1 -0
  460. package/dist/exo.esm.js +17111 -0
  461. package/dist/exo.esm.js.map +1 -0
  462. package/dist/exo.esm.min.js +2 -0
  463. package/dist/exo.esm.min.js.map +1 -0
  464. package/dist/exo.global.js +17328 -0
  465. package/dist/exo.global.js.map +1 -0
  466. package/dist/exo.global.min.js +2 -0
  467. package/dist/exo.global.min.js.map +1 -0
  468. package/package.json +96 -0
@@ -0,0 +1,1160 @@
1
+ /*
2
+ ** Copyright (c) 2012 The Khronos Group Inc.
3
+ **
4
+ ** Permission is hereby granted, free of charge, to any person obtaining a
5
+ ** copy of this software and/or associated documentation files (the
6
+ ** "Materials"), to deal in the Materials without restriction, including
7
+ ** without limitation the rights to use, copy, modify, merge, publish,
8
+ ** distribute, sublicense, and/or sell copies of the Materials, and to
9
+ ** permit persons to whom the Materials are furnished to do so, subject to
10
+ ** the following conditions:
11
+ **
12
+ ** The above copyright notice and this permission notice shall be included
13
+ ** in all copies or substantial portions of the Materials.
14
+ **
15
+ ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22
+ */
23
+
24
+ // Various functions for helping debug WebGL apps.
25
+
26
+ const WebGLDebugUtils = function() {
27
+
28
+ /**
29
+ * Wrapped logging function.
30
+ * @param {string} msg Message to log.
31
+ */
32
+ var log = function(msg) {
33
+ if (window.console && window.console.log) {
34
+ window.console.log(msg);
35
+ }
36
+ };
37
+
38
+ /**
39
+ * Wrapped error logging function.
40
+ * @param {string} msg Message to log.
41
+ */
42
+ var error = function(msg) {
43
+ if (window.console && window.console.error) {
44
+ window.console.error(msg);
45
+ } else {
46
+ log(msg);
47
+ }
48
+ };
49
+
50
+
51
+ /**
52
+ * Which arguments are enums based on the number of arguments to the function.
53
+ * So
54
+ * 'texImage2D': {
55
+ * 9: { 0:true, 2:true, 6:true, 7:true },
56
+ * 6: { 0:true, 2:true, 3:true, 4:true },
57
+ * },
58
+ *
59
+ * means if there are 9 arguments then 6 and 7 are enums, if there are 6
60
+ * arguments 3 and 4 are enums
61
+ *
62
+ * @type {!Object.<number, !Object.<number, string>}
63
+ */
64
+ var glValidEnumContexts = {
65
+ // Generic setters and getters
66
+
67
+ 'enable': {1: { 0:true }},
68
+ 'disable': {1: { 0:true }},
69
+ 'getParameter': {1: { 0:true }},
70
+
71
+ // Rendering
72
+
73
+ 'drawArrays': {3:{ 0:true }},
74
+ 'drawElements': {4:{ 0:true, 2:true }},
75
+
76
+ // Shaders
77
+
78
+ 'createShader': {1: { 0:true }},
79
+ 'getShaderParameter': {2: { 1:true }},
80
+ 'getProgramParameter': {2: { 1:true }},
81
+ 'getShaderPrecisionFormat': {2: { 0: true, 1:true }},
82
+
83
+ // Vertex attributes
84
+
85
+ 'getVertexAttrib': {2: { 1:true }},
86
+ 'vertexAttribPointer': {6: { 2:true }},
87
+
88
+ // Textures
89
+
90
+ 'bindTexture': {2: { 0:true }},
91
+ 'activeTexture': {1: { 0:true }},
92
+ 'getTexParameter': {2: { 0:true, 1:true }},
93
+ 'texParameterf': {3: { 0:true, 1:true }},
94
+ 'texParameteri': {3: { 0:true, 1:true, 2:true }},
95
+ // texImage2D and texSubImage2D are defined below with WebGL 2 entrypoints
96
+ 'copyTexImage2D': {8: { 0:true, 2:true }},
97
+ 'copyTexSubImage2D': {8: { 0:true }},
98
+ 'generateMipmap': {1: { 0:true }},
99
+ // compressedTexImage2D and compressedTexSubImage2D are defined below with WebGL 2 entrypoints
100
+
101
+ // Buffer objects
102
+
103
+ 'bindBuffer': {2: { 0:true }},
104
+ // bufferData and bufferSubData are defined below with WebGL 2 entrypoints
105
+ 'getBufferParameter': {2: { 0:true, 1:true }},
106
+
107
+ // Renderbuffers and framebuffers
108
+
109
+ 'pixelStorei': {2: { 0:true, 1:true }},
110
+ // readPixels is defined below with WebGL 2 entrypoints
111
+ 'bindRenderbuffer': {2: { 0:true }},
112
+ 'bindFramebuffer': {2: { 0:true }},
113
+ 'checkFramebufferStatus': {1: { 0:true }},
114
+ 'framebufferRenderbuffer': {4: { 0:true, 1:true, 2:true }},
115
+ 'framebufferTexture2D': {5: { 0:true, 1:true, 2:true }},
116
+ 'getFramebufferAttachmentParameter': {3: { 0:true, 1:true, 2:true }},
117
+ 'getRenderbufferParameter': {2: { 0:true, 1:true }},
118
+ 'renderbufferStorage': {4: { 0:true, 1:true }},
119
+
120
+ // Frame buffer operations (clear, blend, depth test, stencil)
121
+
122
+ 'clear': {1: { 0: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }}},
123
+ 'depthFunc': {1: { 0:true }},
124
+ 'blendFunc': {2: { 0:true, 1:true }},
125
+ 'blendFuncSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},
126
+ 'blendEquation': {1: { 0:true }},
127
+ 'blendEquationSeparate': {2: { 0:true, 1:true }},
128
+ 'stencilFunc': {3: { 0:true }},
129
+ 'stencilFuncSeparate': {4: { 0:true, 1:true }},
130
+ 'stencilMaskSeparate': {2: { 0:true }},
131
+ 'stencilOp': {3: { 0:true, 1:true, 2:true }},
132
+ 'stencilOpSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},
133
+
134
+ // Culling
135
+
136
+ 'cullFace': {1: { 0:true }},
137
+ 'frontFace': {1: { 0:true }},
138
+
139
+ // ANGLE_instanced_arrays extension
140
+
141
+ 'drawArraysInstancedANGLE': {4: { 0:true }},
142
+ 'drawElementsInstancedANGLE': {5: { 0:true, 2:true }},
143
+
144
+ // EXT_blend_minmax extension
145
+
146
+ 'blendEquationEXT': {1: { 0:true }},
147
+
148
+ // WebGL 2 Buffer objects
149
+
150
+ 'bufferData': {
151
+ 3: { 0:true, 2:true }, // WebGL 1
152
+ 4: { 0:true, 2:true }, // WebGL 2
153
+ 5: { 0:true, 2:true } // WebGL 2
154
+ },
155
+ 'bufferSubData': {
156
+ 3: { 0:true }, // WebGL 1
157
+ 4: { 0:true }, // WebGL 2
158
+ 5: { 0:true } // WebGL 2
159
+ },
160
+ 'copyBufferSubData': {5: { 0:true, 1:true }},
161
+ 'getBufferSubData': {3: { 0:true }, 4: { 0:true }, 5: { 0:true }},
162
+
163
+ // WebGL 2 Framebuffer objects
164
+
165
+ 'blitFramebuffer': {10: { 8: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }, 9:true }},
166
+ 'framebufferTextureLayer': {5: { 0:true, 1:true }},
167
+ 'invalidateFramebuffer': {2: { 0:true }},
168
+ 'invalidateSubFramebuffer': {6: { 0:true }},
169
+ 'readBuffer': {1: { 0:true }},
170
+
171
+ // WebGL 2 Renderbuffer objects
172
+
173
+ 'getInternalformatParameter': {3: { 0:true, 1:true, 2:true }},
174
+ 'renderbufferStorageMultisample': {5: { 0:true, 2:true }},
175
+
176
+ // WebGL 2 Texture objects
177
+
178
+ 'texStorage2D': {5: { 0:true, 2:true }},
179
+ 'texStorage3D': {6: { 0:true, 2:true }},
180
+ 'texImage2D': {
181
+ 9: { 0:true, 2:true, 6:true, 7:true }, // WebGL 1 & 2
182
+ 6: { 0:true, 2:true, 3:true, 4:true }, // WebGL 1
183
+ 10: { 0:true, 2:true, 6:true, 7:true } // WebGL 2
184
+ },
185
+ 'texImage3D': {
186
+ 10: { 0:true, 2:true, 7:true, 8:true },
187
+ 11: { 0:true, 2:true, 7:true, 8:true }
188
+ },
189
+ 'texSubImage2D': {
190
+ 9: { 0:true, 6:true, 7:true }, // WebGL 1 & 2
191
+ 7: { 0:true, 4:true, 5:true }, // WebGL 1
192
+ 10: { 0:true, 6:true, 7:true } // WebGL 2
193
+ },
194
+ 'texSubImage3D': {
195
+ 11: { 0:true, 8:true, 9:true },
196
+ 12: { 0:true, 8:true, 9:true }
197
+ },
198
+ 'copyTexSubImage3D': {9: { 0:true }},
199
+ 'compressedTexImage2D': {
200
+ 7: { 0: true, 2:true }, // WebGL 1 & 2
201
+ 8: { 0: true, 2:true }, // WebGL 2
202
+ 9: { 0: true, 2:true } // WebGL 2
203
+ },
204
+ 'compressedTexImage3D': {
205
+ 8: { 0: true, 2:true },
206
+ 9: { 0: true, 2:true },
207
+ 10: { 0: true, 2:true }
208
+ },
209
+ 'compressedTexSubImage2D': {
210
+ 8: { 0: true, 6:true }, // WebGL 1 & 2
211
+ 9: { 0: true, 6:true }, // WebGL 2
212
+ 10: { 0: true, 6:true } // WebGL 2
213
+ },
214
+ 'compressedTexSubImage3D': {
215
+ 10: { 0: true, 8:true },
216
+ 11: { 0: true, 8:true },
217
+ 12: { 0: true, 8:true }
218
+ },
219
+
220
+ // WebGL 2 Vertex attribs
221
+
222
+ 'vertexAttribIPointer': {5: { 2:true }},
223
+
224
+ // WebGL 2 Writing to the drawing buffer
225
+
226
+ 'drawArraysInstanced': {4: { 0:true }},
227
+ 'drawElementsInstanced': {5: { 0:true, 2:true }},
228
+ 'drawRangeElements': {6: { 0:true, 4:true }},
229
+
230
+ // WebGL 2 Reading back pixels
231
+
232
+ 'readPixels': {
233
+ 7: { 4:true, 5:true }, // WebGL 1 & 2
234
+ 8: { 4:true, 5:true } // WebGL 2
235
+ },
236
+
237
+ // WebGL 2 Multiple Render Targets
238
+
239
+ 'clearBufferfv': {3: { 0:true }, 4: { 0:true }},
240
+ 'clearBufferiv': {3: { 0:true }, 4: { 0:true }},
241
+ 'clearBufferuiv': {3: { 0:true }, 4: { 0:true }},
242
+ 'clearBufferfi': {4: { 0:true }},
243
+
244
+ // WebGL 2 Query objects
245
+
246
+ 'beginQuery': {2: { 0:true }},
247
+ 'endQuery': {1: { 0:true }},
248
+ 'getQuery': {2: { 0:true, 1:true }},
249
+ 'getQueryParameter': {2: { 1:true }},
250
+
251
+ // WebGL 2 Sampler objects
252
+
253
+ 'samplerParameteri': {3: { 1:true, 2:true }},
254
+ 'samplerParameterf': {3: { 1:true }},
255
+ 'getSamplerParameter': {2: { 1:true }},
256
+
257
+ // WebGL 2 Sync objects
258
+
259
+ 'fenceSync': {2: { 0:true, 1: { 'enumBitwiseOr': [] } }},
260
+ 'clientWaitSync': {3: { 1: { 'enumBitwiseOr': ['SYNC_FLUSH_COMMANDS_BIT'] } }},
261
+ 'waitSync': {3: { 1: { 'enumBitwiseOr': [] } }},
262
+ 'getSyncParameter': {2: { 1:true }},
263
+
264
+ // WebGL 2 Transform Feedback
265
+
266
+ 'bindTransformFeedback': {2: { 0:true }},
267
+ 'beginTransformFeedback': {1: { 0:true }},
268
+ 'transformFeedbackVaryings': {3: { 2:true }},
269
+
270
+ // WebGL2 Uniform Buffer Objects and Transform Feedback Buffers
271
+
272
+ 'bindBufferBase': {3: { 0:true }},
273
+ 'bindBufferRange': {5: { 0:true }},
274
+ 'getIndexedParameter': {2: { 0:true }},
275
+ 'getActiveUniforms': {3: { 2:true }},
276
+ 'getActiveUniformBlockParameter': {3: { 2:true }}
277
+ };
278
+
279
+ /**
280
+ * Map of numbers to names.
281
+ * @type {Object}
282
+ */
283
+ var glEnums = null;
284
+
285
+ /**
286
+ * Map of names to numbers.
287
+ * @type {Object}
288
+ */
289
+ var enumStringToValue = null;
290
+
291
+ /**
292
+ * Initializes this module. Safe to call more than once.
293
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
294
+ * you have more than one context it doesn't matter which one
295
+ * you pass in, it is only used to pull out constants.
296
+ */
297
+ function init(ctx) {
298
+ if (glEnums == null) {
299
+ glEnums = { };
300
+ enumStringToValue = { };
301
+ for (var propertyName in ctx) {
302
+ if (typeof ctx[propertyName] == 'number') {
303
+ glEnums[ctx[propertyName]] = propertyName;
304
+ enumStringToValue[propertyName] = ctx[propertyName];
305
+ }
306
+ }
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Checks the utils have been initialized.
312
+ */
313
+ function checkInit() {
314
+ if (glEnums == null) {
315
+ throw 'WebGLDebugUtils.init(ctx) not called';
316
+ }
317
+ }
318
+
319
+ /**
320
+ * Returns true or false if value matches any WebGL enum
321
+ * @param {*} value Value to check if it might be an enum.
322
+ * @return {boolean} True if value matches one of the WebGL defined enums
323
+ */
324
+ function mightBeEnum(value) {
325
+ checkInit();
326
+ return (glEnums[value] !== undefined);
327
+ }
328
+
329
+ /**
330
+ * Gets an string version of an WebGL enum.
331
+ *
332
+ * Example:
333
+ * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
334
+ *
335
+ * @param {number} value Value to return an enum for
336
+ * @return {string} The string version of the enum.
337
+ */
338
+ function glEnumToString(value) {
339
+ checkInit();
340
+ var name = glEnums[value];
341
+ return (name !== undefined) ? ("gl." + name) :
342
+ ("/*UNKNOWN WebGL ENUM*/ 0x" + value.toString(16) + "");
343
+ }
344
+
345
+ /**
346
+ * Returns the string version of a WebGL argument.
347
+ * Attempts to convert enum arguments to strings.
348
+ * @param {string} functionName the name of the WebGL function.
349
+ * @param {number} numArgs the number of arguments passed to the function.
350
+ * @param {number} argumentIndx the index of the argument.
351
+ * @param {*} value The value of the argument.
352
+ * @return {string} The value as a string.
353
+ */
354
+ function glFunctionArgToString(functionName, numArgs, argumentIndex, value) {
355
+ var funcInfo = glValidEnumContexts[functionName];
356
+ if (funcInfo !== undefined) {
357
+ var funcInfo = funcInfo[numArgs];
358
+ if (funcInfo !== undefined) {
359
+ if (funcInfo[argumentIndex]) {
360
+ if (typeof funcInfo[argumentIndex] === 'object' &&
361
+ funcInfo[argumentIndex]['enumBitwiseOr'] !== undefined) {
362
+ var enums = funcInfo[argumentIndex]['enumBitwiseOr'];
363
+ var orResult = 0;
364
+ var orEnums = [];
365
+ for (var i = 0; i < enums.length; ++i) {
366
+ var enumValue = enumStringToValue[enums[i]];
367
+ if ((value & enumValue) !== 0) {
368
+ orResult |= enumValue;
369
+ orEnums.push(glEnumToString(enumValue));
370
+ }
371
+ }
372
+ if (orResult === value) {
373
+ return orEnums.join(' | ');
374
+ } else {
375
+ return glEnumToString(value);
376
+ }
377
+ } else {
378
+ return glEnumToString(value);
379
+ }
380
+ }
381
+ }
382
+ }
383
+ if (value === null) {
384
+ return "null";
385
+ } else if (value === undefined) {
386
+ return "undefined";
387
+ } else {
388
+ return value.toString();
389
+ }
390
+ }
391
+
392
+ /**
393
+ * Converts the arguments of a WebGL function to a string.
394
+ * Attempts to convert enum arguments to strings.
395
+ *
396
+ * @param {string} functionName the name of the WebGL function.
397
+ * @param {Array<*>} args The arguments.
398
+ * @return {string} The arguments as a string.
399
+ */
400
+ function glFunctionArgsToString(functionName, args) {
401
+ // apparently we can't do args.join(",");
402
+ var argStr = "";
403
+ var numArgs = args.length;
404
+ for (var ii = 0; ii < numArgs; ++ii) {
405
+ argStr += ((ii == 0) ? '' : ', ') +
406
+ glFunctionArgToString(functionName, numArgs, ii, args[ii]);
407
+ }
408
+ return argStr;
409
+ }
410
+
411
+ function makePropertyWrapper(wrapper, original, propertyName) {
412
+ //log("wrap prop: " + propertyName);
413
+ wrapper.__defineGetter__(propertyName, function() {
414
+ return original[propertyName];
415
+ });
416
+ // TODO(gmane): this needs to handle properties that take more than
417
+ // one value?
418
+ wrapper.__defineSetter__(propertyName, function(value) {
419
+ //log("set: " + propertyName);
420
+ original[propertyName] = value;
421
+ });
422
+ }
423
+
424
+ /**
425
+ * Given a WebGL context returns a wrapped context that calls
426
+ * gl.getError after every command and calls a function if the
427
+ * result is not gl.NO_ERROR.
428
+ *
429
+ * @param {!WebGLRenderingContext} ctx The webgl context to
430
+ * wrap.
431
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
432
+ * The function to call when gl.getError returns an
433
+ * error. If not specified the default function calls
434
+ * console.log with a message.
435
+ * @param {!function(funcName, args): void} opt_onFunc The
436
+ * function to call when each webgl function is called.
437
+ * You can use this to log all calls for example.
438
+ * @param {!WebGLRenderingContext} opt_err_ctx The webgl context
439
+ * to call getError on if different than ctx.
440
+ */
441
+ function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc, opt_err_ctx) {
442
+ opt_err_ctx = opt_err_ctx || ctx;
443
+ init(ctx);
444
+ opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
445
+ // apparently we can't do args.join(",");
446
+ var argStr = "";
447
+ var numArgs = args.length;
448
+ for (var ii = 0; ii < numArgs; ++ii) {
449
+ argStr += ((ii == 0) ? '' : ', ') +
450
+ glFunctionArgToString(functionName, numArgs, ii, args[ii]);
451
+ }
452
+ error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
453
+ "(" + argStr + ")");
454
+ };
455
+
456
+ // Holds booleans for each GL error so after we get the error ourselves
457
+ // we can still return it to the client app.
458
+ var glErrorShadow = { };
459
+
460
+ // Makes a function that calls a WebGL function and then calls getError.
461
+ function makeErrorWrapper(ctx, functionName) {
462
+ return function() {
463
+ if (opt_onFunc) {
464
+ opt_onFunc(functionName, arguments);
465
+ }
466
+ var result = ctx[functionName].apply(ctx, arguments);
467
+ var err = opt_err_ctx.getError();
468
+ if (err != 0) {
469
+ glErrorShadow[err] = true;
470
+ opt_onErrorFunc(err, functionName, arguments);
471
+ }
472
+ return result;
473
+ };
474
+ }
475
+
476
+ // Make a an object that has a copy of every property of the WebGL context
477
+ // but wraps all functions.
478
+ var wrapper = {};
479
+ for (var propertyName in ctx) {
480
+ if (typeof ctx[propertyName] == 'function') {
481
+ if (propertyName != 'getExtension') {
482
+ wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
483
+ } else {
484
+ var wrapped = makeErrorWrapper(ctx, propertyName);
485
+ wrapper[propertyName] = function () {
486
+ var result = wrapped.apply(ctx, arguments);
487
+ if (!result) {
488
+ return null;
489
+ }
490
+ return makeDebugContext(result, opt_onErrorFunc, opt_onFunc, opt_err_ctx);
491
+ };
492
+ }
493
+ } else {
494
+ makePropertyWrapper(wrapper, ctx, propertyName);
495
+ }
496
+ }
497
+
498
+ // Override the getError function with one that returns our saved results.
499
+ wrapper.getError = function() {
500
+ for (var err in glErrorShadow) {
501
+ if (glErrorShadow.hasOwnProperty(err)) {
502
+ if (glErrorShadow[err]) {
503
+ glErrorShadow[err] = false;
504
+ return err;
505
+ }
506
+ }
507
+ }
508
+ return ctx.NO_ERROR;
509
+ };
510
+
511
+ return wrapper;
512
+ }
513
+
514
+ function resetToInitialState(ctx) {
515
+ var isWebGL2RenderingContext = !!ctx.createTransformFeedback;
516
+
517
+ if (isWebGL2RenderingContext) {
518
+ ctx.bindVertexArray(null);
519
+ }
520
+
521
+ var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
522
+ var tmp = ctx.createBuffer();
523
+ ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
524
+ for (var ii = 0; ii < numAttribs; ++ii) {
525
+ ctx.disableVertexAttribArray(ii);
526
+ ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
527
+ ctx.vertexAttrib1f(ii, 0);
528
+ if (isWebGL2RenderingContext) {
529
+ ctx.vertexAttribDivisor(ii, 0);
530
+ }
531
+ }
532
+ ctx.deleteBuffer(tmp);
533
+
534
+ var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
535
+ for (var ii = 0; ii < numTextureUnits; ++ii) {
536
+ ctx.activeTexture(ctx.TEXTURE0 + ii);
537
+ ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
538
+ ctx.bindTexture(ctx.TEXTURE_2D, null);
539
+ if (isWebGL2RenderingContext) {
540
+ ctx.bindTexture(ctx.TEXTURE_2D_ARRAY, null);
541
+ ctx.bindTexture(ctx.TEXTURE_3D, null);
542
+ ctx.bindSampler(ii, null);
543
+ }
544
+ }
545
+
546
+ ctx.activeTexture(ctx.TEXTURE0);
547
+ ctx.useProgram(null);
548
+ ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
549
+ ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
550
+ ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
551
+ ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
552
+ ctx.disable(ctx.BLEND);
553
+ ctx.disable(ctx.CULL_FACE);
554
+ ctx.disable(ctx.DEPTH_TEST);
555
+ ctx.disable(ctx.DITHER);
556
+ ctx.disable(ctx.SCISSOR_TEST);
557
+ ctx.blendColor(0, 0, 0, 0);
558
+ ctx.blendEquation(ctx.FUNC_ADD);
559
+ ctx.blendFunc(ctx.ONE, ctx.ZERO);
560
+ ctx.clearColor(0, 0, 0, 0);
561
+ ctx.clearDepth(1);
562
+ ctx.clearStencil(-1);
563
+ ctx.colorMask(true, true, true, true);
564
+ ctx.cullFace(ctx.BACK);
565
+ ctx.depthFunc(ctx.LESS);
566
+ ctx.depthMask(true);
567
+ ctx.depthRange(0, 1);
568
+ ctx.frontFace(ctx.CCW);
569
+ ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
570
+ ctx.lineWidth(1);
571
+ ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
572
+ ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
573
+ ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
574
+ ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
575
+ // TODO: Delete this IF.
576
+ if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
577
+ ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
578
+ }
579
+ ctx.polygonOffset(0, 0);
580
+ ctx.sampleCoverage(1, false);
581
+ ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
582
+ ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
583
+ ctx.stencilMask(0xFFFFFFFF);
584
+ ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
585
+ ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
586
+ ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
587
+
588
+ if (isWebGL2RenderingContext) {
589
+ ctx.drawBuffers([ctx.BACK]);
590
+ ctx.readBuffer(ctx.BACK);
591
+ ctx.bindBuffer(ctx.COPY_READ_BUFFER, null);
592
+ ctx.bindBuffer(ctx.COPY_WRITE_BUFFER, null);
593
+ ctx.bindBuffer(ctx.PIXEL_PACK_BUFFER, null);
594
+ ctx.bindBuffer(ctx.PIXEL_UNPACK_BUFFER, null);
595
+ var numTransformFeedbacks = ctx.getParameter(ctx.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS);
596
+ for (var ii = 0; ii < numTransformFeedbacks; ++ii) {
597
+ ctx.bindBufferBase(ctx.TRANSFORM_FEEDBACK_BUFFER, ii, null);
598
+ }
599
+ var numUBOs = ctx.getParameter(ctx.MAX_UNIFORM_BUFFER_BINDINGS);
600
+ for (var ii = 0; ii < numUBOs; ++ii) {
601
+ ctx.bindBufferBase(ctx.UNIFORM_BUFFER, ii, null);
602
+ }
603
+ ctx.disable(ctx.RASTERIZER_DISCARD);
604
+ ctx.pixelStorei(ctx.UNPACK_IMAGE_HEIGHT, 0);
605
+ ctx.pixelStorei(ctx.UNPACK_SKIP_IMAGES, 0);
606
+ ctx.pixelStorei(ctx.UNPACK_ROW_LENGTH, 0);
607
+ ctx.pixelStorei(ctx.UNPACK_SKIP_ROWS, 0);
608
+ ctx.pixelStorei(ctx.UNPACK_SKIP_PIXELS, 0);
609
+ ctx.pixelStorei(ctx.PACK_ROW_LENGTH, 0);
610
+ ctx.pixelStorei(ctx.PACK_SKIP_ROWS, 0);
611
+ ctx.pixelStorei(ctx.PACK_SKIP_PIXELS, 0);
612
+ ctx.hint(ctx.FRAGMENT_SHADER_DERIVATIVE_HINT, ctx.DONT_CARE);
613
+ }
614
+
615
+ // TODO: This should NOT be needed but Firefox fails with 'hint'
616
+ while(ctx.getError());
617
+ }
618
+
619
+ function makeLostContextSimulatingCanvas(canvas) {
620
+ var unwrappedContext_;
621
+ var wrappedContext_;
622
+ var onLost_ = [];
623
+ var onRestored_ = [];
624
+ var wrappedContext_ = {};
625
+ var contextId_ = 1;
626
+ var contextLost_ = false;
627
+ var resourceDb_ = [];
628
+ var numCallsToLoseContext_ = 0;
629
+ var numCalls_ = 0;
630
+ var canRestore_ = false;
631
+ var restoreTimeout_ = 0;
632
+ var isWebGL2RenderingContext;
633
+
634
+ // Holds booleans for each GL error so can simulate errors.
635
+ var glErrorShadow_ = { };
636
+
637
+ canvas.getContext = function(f) {
638
+ return function() {
639
+ var ctx = f.apply(canvas, arguments);
640
+ // Did we get a context and is it a WebGL context?
641
+ if ((ctx instanceof WebGLRenderingContext) || (window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext))) {
642
+ if (ctx != unwrappedContext_) {
643
+ if (unwrappedContext_) {
644
+ throw "got different context"
645
+ }
646
+ isWebGL2RenderingContext = window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext);
647
+ unwrappedContext_ = ctx;
648
+ wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
649
+ }
650
+ return wrappedContext_;
651
+ }
652
+ return ctx;
653
+ }
654
+ }(canvas.getContext);
655
+
656
+ function wrapEvent(listener) {
657
+ if (typeof(listener) == "function") {
658
+ return listener;
659
+ } else {
660
+ return function(info) {
661
+ listener.handleEvent(info);
662
+ }
663
+ }
664
+ }
665
+
666
+ var addOnContextLostListener = function(listener) {
667
+ onLost_.push(wrapEvent(listener));
668
+ };
669
+
670
+ var addOnContextRestoredListener = function(listener) {
671
+ onRestored_.push(wrapEvent(listener));
672
+ };
673
+
674
+
675
+ function wrapAddEventListener(canvas) {
676
+ var f = canvas.addEventListener;
677
+ canvas.addEventListener = function(type, listener, bubble) {
678
+ switch (type) {
679
+ case 'webglcontextlost':
680
+ addOnContextLostListener(listener);
681
+ break;
682
+ case 'webglcontextrestored':
683
+ addOnContextRestoredListener(listener);
684
+ break;
685
+ default:
686
+ f.apply(canvas, arguments);
687
+ }
688
+ };
689
+ }
690
+
691
+ wrapAddEventListener(canvas);
692
+
693
+ canvas.loseContext = function() {
694
+ if (!contextLost_) {
695
+ contextLost_ = true;
696
+ numCallsToLoseContext_ = 0;
697
+ ++contextId_;
698
+ while (unwrappedContext_.getError());
699
+ clearErrors();
700
+ glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
701
+ var event = makeWebGLContextEvent("context lost");
702
+ var callbacks = onLost_.slice();
703
+ setTimeout(function() {
704
+ //log("numCallbacks:" + callbacks.length);
705
+ for (var ii = 0; ii < callbacks.length; ++ii) {
706
+ //log("calling callback:" + ii);
707
+ callbacks[ii](event);
708
+ }
709
+ if (restoreTimeout_ >= 0) {
710
+ setTimeout(function() {
711
+ canvas.restoreContext();
712
+ }, restoreTimeout_);
713
+ }
714
+ }, 0);
715
+ }
716
+ };
717
+
718
+ canvas.restoreContext = function() {
719
+ if (contextLost_) {
720
+ if (onRestored_.length) {
721
+ setTimeout(function() {
722
+ if (!canRestore_) {
723
+ throw "can not restore. webglcontestlost listener did not call event.preventDefault";
724
+ }
725
+ freeResources();
726
+ resetToInitialState(unwrappedContext_);
727
+ contextLost_ = false;
728
+ numCalls_ = 0;
729
+ canRestore_ = false;
730
+ var callbacks = onRestored_.slice();
731
+ var event = makeWebGLContextEvent("context restored");
732
+ for (var ii = 0; ii < callbacks.length; ++ii) {
733
+ callbacks[ii](event);
734
+ }
735
+ }, 0);
736
+ }
737
+ }
738
+ };
739
+
740
+ canvas.loseContextInNCalls = function(numCalls) {
741
+ if (contextLost_) {
742
+ throw "You can not ask a lost contet to be lost";
743
+ }
744
+ numCallsToLoseContext_ = numCalls_ + numCalls;
745
+ };
746
+
747
+ canvas.getNumCalls = function() {
748
+ return numCalls_;
749
+ };
750
+
751
+ canvas.setRestoreTimeout = function(timeout) {
752
+ restoreTimeout_ = timeout;
753
+ };
754
+
755
+ function clearErrors() {
756
+ var k = Object.keys(glErrorShadow_);
757
+ for (var ii = 0; ii < k.length; ++ii) {
758
+ delete glErrorShadow_[k[ii]];
759
+ }
760
+ }
761
+
762
+ function loseContextIfTime() {
763
+ ++numCalls_;
764
+ if (!contextLost_) {
765
+ if (numCallsToLoseContext_ == numCalls_) {
766
+ canvas.loseContext();
767
+ }
768
+ }
769
+ }
770
+
771
+ // Makes a function that simulates WebGL when out of context.
772
+ function makeLostContextFunctionWrapper(ctx, functionName) {
773
+ var f = ctx[functionName];
774
+ return function() {
775
+ // log("calling:" + functionName);
776
+ // Only call the functions if the context is not lost.
777
+ loseContextIfTime();
778
+ if (!contextLost_) {
779
+ //if (!checkResources(arguments)) {
780
+ // glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
781
+ // return;
782
+ //}
783
+ var result = f.apply(ctx, arguments);
784
+ return result;
785
+ }
786
+ };
787
+ }
788
+
789
+ function freeResources() {
790
+ for (var ii = 0; ii < resourceDb_.length; ++ii) {
791
+ var resource = resourceDb_[ii];
792
+ if (resource instanceof WebGLBuffer) {
793
+ unwrappedContext_.deleteBuffer(resource);
794
+ } else if (resource instanceof WebGLFramebuffer) {
795
+ unwrappedContext_.deleteFramebuffer(resource);
796
+ } else if (resource instanceof WebGLProgram) {
797
+ unwrappedContext_.deleteProgram(resource);
798
+ } else if (resource instanceof WebGLRenderbuffer) {
799
+ unwrappedContext_.deleteRenderbuffer(resource);
800
+ } else if (resource instanceof WebGLShader) {
801
+ unwrappedContext_.deleteShader(resource);
802
+ } else if (resource instanceof WebGLTexture) {
803
+ unwrappedContext_.deleteTexture(resource);
804
+ }
805
+ else if (isWebGL2RenderingContext) {
806
+ if (resource instanceof WebGLQuery) {
807
+ unwrappedContext_.deleteQuery(resource);
808
+ } else if (resource instanceof WebGLSampler) {
809
+ unwrappedContext_.deleteSampler(resource);
810
+ } else if (resource instanceof WebGLSync) {
811
+ unwrappedContext_.deleteSync(resource);
812
+ } else if (resource instanceof WebGLTransformFeedback) {
813
+ unwrappedContext_.deleteTransformFeedback(resource);
814
+ } else if (resource instanceof WebGLVertexArrayObject) {
815
+ unwrappedContext_.deleteVertexArray(resource);
816
+ }
817
+ }
818
+ }
819
+ }
820
+
821
+ function makeWebGLContextEvent(statusMessage) {
822
+ return {
823
+ statusMessage: statusMessage,
824
+ preventDefault: function() {
825
+ canRestore_ = true;
826
+ }
827
+ };
828
+ }
829
+
830
+ return canvas;
831
+
832
+ function makeLostContextSimulatingContext(ctx) {
833
+ // copy all functions and properties to wrapper
834
+ for (var propertyName in ctx) {
835
+ if (typeof ctx[propertyName] == 'function') {
836
+ wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
837
+ ctx, propertyName);
838
+ } else {
839
+ makePropertyWrapper(wrappedContext_, ctx, propertyName);
840
+ }
841
+ }
842
+
843
+ // Wrap a few functions specially.
844
+ wrappedContext_.getError = function() {
845
+ loseContextIfTime();
846
+ if (!contextLost_) {
847
+ var err;
848
+ while (err = unwrappedContext_.getError()) {
849
+ glErrorShadow_[err] = true;
850
+ }
851
+ }
852
+ for (var err in glErrorShadow_) {
853
+ if (glErrorShadow_[err]) {
854
+ delete glErrorShadow_[err];
855
+ return err;
856
+ }
857
+ }
858
+ return wrappedContext_.NO_ERROR;
859
+ };
860
+
861
+ var creationFunctions = [
862
+ "createBuffer",
863
+ "createFramebuffer",
864
+ "createProgram",
865
+ "createRenderbuffer",
866
+ "createShader",
867
+ "createTexture"
868
+ ];
869
+ if (isWebGL2RenderingContext) {
870
+ creationFunctions.push(
871
+ "createQuery",
872
+ "createSampler",
873
+ "fenceSync",
874
+ "createTransformFeedback",
875
+ "createVertexArray"
876
+ );
877
+ }
878
+ for (var ii = 0; ii < creationFunctions.length; ++ii) {
879
+ var functionName = creationFunctions[ii];
880
+ wrappedContext_[functionName] = function(f) {
881
+ return function() {
882
+ loseContextIfTime();
883
+ if (contextLost_) {
884
+ return null;
885
+ }
886
+ var obj = f.apply(ctx, arguments);
887
+ obj.__webglDebugContextLostId__ = contextId_;
888
+ resourceDb_.push(obj);
889
+ return obj;
890
+ };
891
+ }(ctx[functionName]);
892
+ }
893
+
894
+ var functionsThatShouldReturnNull = [
895
+ "getActiveAttrib",
896
+ "getActiveUniform",
897
+ "getBufferParameter",
898
+ "getContextAttributes",
899
+ "getAttachedShaders",
900
+ "getFramebufferAttachmentParameter",
901
+ "getParameter",
902
+ "getProgramParameter",
903
+ "getProgramInfoLog",
904
+ "getRenderbufferParameter",
905
+ "getShaderParameter",
906
+ "getShaderInfoLog",
907
+ "getShaderSource",
908
+ "getTexParameter",
909
+ "getUniform",
910
+ "getUniformLocation",
911
+ "getVertexAttrib"
912
+ ];
913
+ if (isWebGL2RenderingContext) {
914
+ functionsThatShouldReturnNull.push(
915
+ "getInternalformatParameter",
916
+ "getQuery",
917
+ "getQueryParameter",
918
+ "getSamplerParameter",
919
+ "getSyncParameter",
920
+ "getTransformFeedbackVarying",
921
+ "getIndexedParameter",
922
+ "getUniformIndices",
923
+ "getActiveUniforms",
924
+ "getActiveUniformBlockParameter",
925
+ "getActiveUniformBlockName"
926
+ );
927
+ }
928
+ for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
929
+ var functionName = functionsThatShouldReturnNull[ii];
930
+ wrappedContext_[functionName] = function(f) {
931
+ return function() {
932
+ loseContextIfTime();
933
+ if (contextLost_) {
934
+ return null;
935
+ }
936
+ return f.apply(ctx, arguments);
937
+ }
938
+ }(wrappedContext_[functionName]);
939
+ }
940
+
941
+ var isFunctions = [
942
+ "isBuffer",
943
+ "isEnabled",
944
+ "isFramebuffer",
945
+ "isProgram",
946
+ "isRenderbuffer",
947
+ "isShader",
948
+ "isTexture"
949
+ ];
950
+ if (isWebGL2RenderingContext) {
951
+ isFunctions.push(
952
+ "isQuery",
953
+ "isSampler",
954
+ "isSync",
955
+ "isTransformFeedback",
956
+ "isVertexArray"
957
+ );
958
+ }
959
+ for (var ii = 0; ii < isFunctions.length; ++ii) {
960
+ var functionName = isFunctions[ii];
961
+ wrappedContext_[functionName] = function(f) {
962
+ return function() {
963
+ loseContextIfTime();
964
+ if (contextLost_) {
965
+ return false;
966
+ }
967
+ return f.apply(ctx, arguments);
968
+ }
969
+ }(wrappedContext_[functionName]);
970
+ }
971
+
972
+ wrappedContext_.checkFramebufferStatus = function(f) {
973
+ return function() {
974
+ loseContextIfTime();
975
+ if (contextLost_) {
976
+ return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
977
+ }
978
+ return f.apply(ctx, arguments);
979
+ };
980
+ }(wrappedContext_.checkFramebufferStatus);
981
+
982
+ wrappedContext_.getAttribLocation = function(f) {
983
+ return function() {
984
+ loseContextIfTime();
985
+ if (contextLost_) {
986
+ return -1;
987
+ }
988
+ return f.apply(ctx, arguments);
989
+ };
990
+ }(wrappedContext_.getAttribLocation);
991
+
992
+ wrappedContext_.getVertexAttribOffset = function(f) {
993
+ return function() {
994
+ loseContextIfTime();
995
+ if (contextLost_) {
996
+ return 0;
997
+ }
998
+ return f.apply(ctx, arguments);
999
+ };
1000
+ }(wrappedContext_.getVertexAttribOffset);
1001
+
1002
+ wrappedContext_.isContextLost = function() {
1003
+ return contextLost_;
1004
+ };
1005
+
1006
+ if (isWebGL2RenderingContext) {
1007
+ wrappedContext_.getFragDataLocation = function(f) {
1008
+ return function() {
1009
+ loseContextIfTime();
1010
+ if (contextLost_) {
1011
+ return -1;
1012
+ }
1013
+ return f.apply(ctx, arguments);
1014
+ };
1015
+ }(wrappedContext_.getFragDataLocation);
1016
+
1017
+ wrappedContext_.clientWaitSync = function(f) {
1018
+ return function() {
1019
+ loseContextIfTime();
1020
+ if (contextLost_) {
1021
+ return wrappedContext_.WAIT_FAILED;
1022
+ }
1023
+ return f.apply(ctx, arguments);
1024
+ };
1025
+ }(wrappedContext_.clientWaitSync);
1026
+
1027
+ wrappedContext_.getUniformBlockIndex = function(f) {
1028
+ return function() {
1029
+ loseContextIfTime();
1030
+ if (contextLost_) {
1031
+ return wrappedContext_.INVALID_INDEX;
1032
+ }
1033
+ return f.apply(ctx, arguments);
1034
+ };
1035
+ }(wrappedContext_.getUniformBlockIndex);
1036
+ }
1037
+
1038
+ return wrappedContext_;
1039
+ }
1040
+ }
1041
+
1042
+ return {
1043
+ /**
1044
+ * Initializes this module. Safe to call more than once.
1045
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
1046
+ * you have more than one context it doesn't matter which one
1047
+ * you pass in, it is only used to pull out constants.
1048
+ */
1049
+ 'init': init,
1050
+
1051
+ /**
1052
+ * Returns true or false if value matches any WebGL enum
1053
+ * @param {*} value Value to check if it might be an enum.
1054
+ * @return {boolean} True if value matches one of the WebGL defined enums
1055
+ */
1056
+ 'mightBeEnum': mightBeEnum,
1057
+
1058
+ /**
1059
+ * Gets an string version of an WebGL enum.
1060
+ *
1061
+ * Example:
1062
+ * WebGLDebugUtil.init(ctx);
1063
+ * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
1064
+ *
1065
+ * @param {number} value Value to return an enum for
1066
+ * @return {string} The string version of the enum.
1067
+ */
1068
+ 'glEnumToString': glEnumToString,
1069
+
1070
+ /**
1071
+ * Converts the argument of a WebGL function to a string.
1072
+ * Attempts to convert enum arguments to strings.
1073
+ *
1074
+ * Example:
1075
+ * WebGLDebugUtil.init(ctx);
1076
+ * var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 2, 0, gl.TEXTURE_2D);
1077
+ *
1078
+ * would return 'TEXTURE_2D'
1079
+ *
1080
+ * @param {string} functionName the name of the WebGL function.
1081
+ * @param {number} numArgs The number of arguments
1082
+ * @param {number} argumentIndx the index of the argument.
1083
+ * @param {*} value The value of the argument.
1084
+ * @return {string} The value as a string.
1085
+ */
1086
+ 'glFunctionArgToString': glFunctionArgToString,
1087
+
1088
+ /**
1089
+ * Converts the arguments of a WebGL function to a string.
1090
+ * Attempts to convert enum arguments to strings.
1091
+ *
1092
+ * @param {string} functionName the name of the WebGL function.
1093
+ * @param {number} args The arguments.
1094
+ * @return {string} The arguments as a string.
1095
+ */
1096
+ 'glFunctionArgsToString': glFunctionArgsToString,
1097
+
1098
+ /**
1099
+ * Given a WebGL context returns a wrapped context that calls
1100
+ * gl.getError after every command and calls a function if the
1101
+ * result is not NO_ERROR.
1102
+ *
1103
+ * You can supply your own function if you want. For example, if you'd like
1104
+ * an exception thrown on any GL error you could do this
1105
+ *
1106
+ * function throwOnGLError(err, funcName, args) {
1107
+ * throw WebGLDebugUtils.glEnumToString(err) +
1108
+ * " was caused by call to " + funcName;
1109
+ * };
1110
+ *
1111
+ * ctx = WebGLDebugUtils.makeDebugContext(
1112
+ * canvas.getContext("webgl"), throwOnGLError);
1113
+ *
1114
+ * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
1115
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
1116
+ * to call when gl.getError returns an error. If not specified the default
1117
+ * function calls console.log with a message.
1118
+ * @param {!function(funcName, args): void} opt_onFunc The
1119
+ * function to call when each webgl function is called. You
1120
+ * can use this to log all calls for example.
1121
+ */
1122
+ 'makeDebugContext': makeDebugContext,
1123
+
1124
+ /**
1125
+ * Given a canvas element returns a wrapped canvas element that will
1126
+ * simulate lost context. The canvas returned adds the following functions.
1127
+ *
1128
+ * loseContext:
1129
+ * simulates a lost context event.
1130
+ *
1131
+ * restoreContext:
1132
+ * simulates the context being restored.
1133
+ *
1134
+ * lostContextInNCalls:
1135
+ * loses the context after N gl calls.
1136
+ *
1137
+ * getNumCalls:
1138
+ * tells you how many gl calls there have been so far.
1139
+ *
1140
+ * setRestoreTimeout:
1141
+ * sets the number of milliseconds until the context is restored
1142
+ * after it has been lost. Defaults to 0. Pass -1 to prevent
1143
+ * automatic restoring.
1144
+ *
1145
+ * @param {!Canvas} canvas The canvas element to wrap.
1146
+ */
1147
+ 'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
1148
+
1149
+ /**
1150
+ * Resets a context to the initial state.
1151
+ * @param {!WebGLRenderingContext} ctx The webgl context to
1152
+ * reset.
1153
+ */
1154
+ 'resetToInitialState': resetToInitialState
1155
+ };
1156
+
1157
+ }();
1158
+
1159
+ export { WebGLDebugUtils as default };
1160
+ //# sourceMappingURL=webgl-debug.js.map