excalibur 0.25.2 → 0.25.3

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 (446) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/build/dist/Actions/Action/Blink.js +51 -0
  3. package/build/dist/Actions/Action/Blink.js.map +1 -0
  4. package/build/dist/Actions/Action/CallMethod.js +21 -0
  5. package/build/dist/Actions/Action/CallMethod.js.map +1 -0
  6. package/build/dist/Actions/Action/Delay.js +25 -0
  7. package/build/dist/Actions/Action/Delay.js.map +1 -0
  8. package/build/dist/Actions/Action/Die.js +22 -0
  9. package/build/dist/Actions/Action/Die.js.map +1 -0
  10. package/build/dist/Actions/Action/EaseTo.js +69 -0
  11. package/build/dist/Actions/Action/EaseTo.js.map +1 -0
  12. package/build/dist/Actions/Action/Fade.js +46 -0
  13. package/build/dist/Actions/Action/Fade.js.map +1 -0
  14. package/build/dist/Actions/Action/Follow.js +55 -0
  15. package/build/dist/Actions/Action/Follow.js.map +1 -0
  16. package/build/dist/Actions/Action/Meet.js +52 -0
  17. package/build/dist/Actions/Action/Meet.js.map +1 -0
  18. package/build/dist/Actions/Action/MoveBy.js +47 -0
  19. package/build/dist/Actions/Action/MoveBy.js.map +1 -0
  20. package/build/dist/Actions/Action/MoveTo.js +40 -0
  21. package/build/dist/Actions/Action/MoveTo.js.map +1 -0
  22. package/build/dist/Actions/Action/Repeat.js +31 -0
  23. package/build/dist/Actions/Action/Repeat.js.map +1 -0
  24. package/build/dist/Actions/Action/RepeatForever.js +37 -0
  25. package/build/dist/Actions/Action/RepeatForever.js.map +1 -0
  26. package/build/dist/Actions/Action/RotateBy.js +91 -0
  27. package/build/dist/Actions/Action/RotateBy.js.map +1 -0
  28. package/build/dist/Actions/Action/RotateTo.js +90 -0
  29. package/build/dist/Actions/Action/RotateTo.js.map +1 -0
  30. package/build/dist/Actions/Action/ScaleBy.js +45 -0
  31. package/build/dist/Actions/Action/ScaleBy.js.map +1 -0
  32. package/build/dist/Actions/Action/ScaleTo.js +56 -0
  33. package/build/dist/Actions/Action/ScaleTo.js.map +1 -0
  34. package/build/dist/Actions/Action.js +2 -0
  35. package/build/dist/Actions/Action.js.map +1 -0
  36. package/build/dist/Actions/ActionContext.js +305 -0
  37. package/build/dist/Actions/ActionContext.js.map +1 -0
  38. package/build/dist/Actions/ActionQueue.js +87 -0
  39. package/build/dist/Actions/ActionQueue.js.map +1 -0
  40. package/build/dist/Actions/Actionable.js +2 -0
  41. package/build/dist/Actions/Actionable.js.map +1 -0
  42. package/build/dist/Actions/ActionsComponent.js +198 -0
  43. package/build/dist/Actions/ActionsComponent.js.map +1 -0
  44. package/build/dist/Actions/ActionsSystem.js +18 -0
  45. package/build/dist/Actions/ActionsSystem.js.map +1 -0
  46. package/build/dist/Actions/Index.js +22 -0
  47. package/build/dist/Actions/Index.js.map +1 -0
  48. package/build/dist/Actions/RotationType.js +27 -0
  49. package/build/dist/Actions/RotationType.js.map +1 -0
  50. package/build/dist/Actor.js +831 -0
  51. package/build/dist/Actor.js.map +1 -0
  52. package/build/dist/Camera.js +663 -0
  53. package/build/dist/Camera.js.map +1 -0
  54. package/build/dist/Class.js +48 -0
  55. package/build/dist/Class.js.map +1 -0
  56. package/build/dist/Collision/BodyComponent.js +351 -0
  57. package/build/dist/Collision/BodyComponent.js.map +1 -0
  58. package/build/dist/Collision/BoundingBox.js +361 -0
  59. package/build/dist/Collision/BoundingBox.js.map +1 -0
  60. package/build/dist/Collision/ColliderComponent.js +198 -0
  61. package/build/dist/Collision/ColliderComponent.js.map +1 -0
  62. package/build/dist/Collision/Colliders/CircleCollider.js +264 -0
  63. package/build/dist/Collision/Colliders/CircleCollider.js.map +1 -0
  64. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js +211 -0
  65. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js.map +1 -0
  66. package/build/dist/Collision/Colliders/Collider.js +26 -0
  67. package/build/dist/Collision/Colliders/Collider.js.map +1 -0
  68. package/build/dist/Collision/Colliders/CollisionJumpTable.js +301 -0
  69. package/build/dist/Collision/Colliders/CollisionJumpTable.js.map +1 -0
  70. package/build/dist/Collision/Colliders/CompositeCollider.js +232 -0
  71. package/build/dist/Collision/Colliders/CompositeCollider.js.map +1 -0
  72. package/build/dist/Collision/Colliders/EdgeCollider.js +253 -0
  73. package/build/dist/Collision/Colliders/EdgeCollider.js.map +1 -0
  74. package/build/dist/Collision/Colliders/PolygonCollider.js +389 -0
  75. package/build/dist/Collision/Colliders/PolygonCollider.js.map +1 -0
  76. package/build/dist/Collision/Colliders/SeparatingAxis.js +67 -0
  77. package/build/dist/Collision/Colliders/SeparatingAxis.js.map +1 -0
  78. package/build/dist/Collision/Colliders/Shape.js +102 -0
  79. package/build/dist/Collision/Colliders/Shape.js.map +1 -0
  80. package/build/dist/Collision/CollisionSystem.js +116 -0
  81. package/build/dist/Collision/CollisionSystem.js.map +1 -0
  82. package/build/dist/Collision/CollisionType.js +33 -0
  83. package/build/dist/Collision/CollisionType.js.map +1 -0
  84. package/build/dist/Collision/Detection/CollisionContact.js +46 -0
  85. package/build/dist/Collision/Detection/CollisionContact.js.map +1 -0
  86. package/build/dist/Collision/Detection/CollisionProcessor.js +2 -0
  87. package/build/dist/Collision/Detection/CollisionProcessor.js.map +1 -0
  88. package/build/dist/Collision/Detection/DynamicTree.js +442 -0
  89. package/build/dist/Collision/Detection/DynamicTree.js.map +1 -0
  90. package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js +211 -0
  91. package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js.map +1 -0
  92. package/build/dist/Collision/Detection/Pair.js +92 -0
  93. package/build/dist/Collision/Detection/Pair.js.map +1 -0
  94. package/build/dist/Collision/Group/CollisionGroup.js +114 -0
  95. package/build/dist/Collision/Group/CollisionGroup.js.map +1 -0
  96. package/build/dist/Collision/Group/CollisionGroupManager.js +52 -0
  97. package/build/dist/Collision/Group/CollisionGroupManager.js.map +1 -0
  98. package/build/dist/Collision/Index.js +29 -0
  99. package/build/dist/Collision/Index.js.map +1 -0
  100. package/build/dist/Collision/Integrator.js +11 -0
  101. package/build/dist/Collision/Integrator.js.map +1 -0
  102. package/build/dist/Collision/MotionSystem.js +42 -0
  103. package/build/dist/Collision/MotionSystem.js.map +1 -0
  104. package/build/dist/Collision/Physics.js +163 -0
  105. package/build/dist/Collision/Physics.js.map +1 -0
  106. package/build/dist/Collision/Side.js +51 -0
  107. package/build/dist/Collision/Side.js.map +1 -0
  108. package/build/dist/Collision/Solver/ArcadeSolver.js +101 -0
  109. package/build/dist/Collision/Solver/ArcadeSolver.js.map +1 -0
  110. package/build/dist/Collision/Solver/ContactConstraintPoint.js +83 -0
  111. package/build/dist/Collision/Solver/ContactConstraintPoint.js.map +1 -0
  112. package/build/dist/Collision/Solver/RealisticSolver.js +248 -0
  113. package/build/dist/Collision/Solver/RealisticSolver.js.map +1 -0
  114. package/build/dist/Collision/Solver/Solver.js +37 -0
  115. package/build/dist/Collision/Solver/Solver.js.map +1 -0
  116. package/build/dist/Color.js +461 -0
  117. package/build/dist/Color.js.map +1 -0
  118. package/build/dist/Configurable.js +32 -0
  119. package/build/dist/Configurable.js.map +1 -0
  120. package/build/dist/Debug/Debug.js +375 -0
  121. package/build/dist/Debug/Debug.js.map +1 -0
  122. package/build/dist/Debug/DebugFlags.js +40 -0
  123. package/build/dist/Debug/DebugFlags.js.map +1 -0
  124. package/build/dist/Debug/DebugSystem.js +251 -0
  125. package/build/dist/Debug/DebugSystem.js.map +1 -0
  126. package/build/dist/Debug/index.js +4 -0
  127. package/build/dist/Debug/index.js.map +1 -0
  128. package/build/dist/Deprecated.js +2 -0
  129. package/build/dist/Deprecated.js.map +1 -0
  130. package/build/dist/Drawing/Animation.js +294 -0
  131. package/build/dist/Drawing/Animation.js.map +1 -0
  132. package/build/dist/Drawing/CanvasDrawComponent.js +16 -0
  133. package/build/dist/Drawing/CanvasDrawComponent.js.map +1 -0
  134. package/build/dist/Drawing/CanvasDrawingSystem.js +95 -0
  135. package/build/dist/Drawing/CanvasDrawingSystem.js.map +1 -0
  136. package/build/dist/Drawing/Index.js +10 -0
  137. package/build/dist/Drawing/Index.js.map +1 -0
  138. package/build/dist/Drawing/Polygon.js +139 -0
  139. package/build/dist/Drawing/Polygon.js.map +1 -0
  140. package/build/dist/Drawing/Sprite.js +355 -0
  141. package/build/dist/Drawing/Sprite.js.map +1 -0
  142. package/build/dist/Drawing/SpriteEffects.js +246 -0
  143. package/build/dist/Drawing/SpriteEffects.js.map +1 -0
  144. package/build/dist/Drawing/SpriteSheet.js +413 -0
  145. package/build/dist/Drawing/SpriteSheet.js.map +1 -0
  146. package/build/dist/Drawing/Texture.js +69 -0
  147. package/build/dist/Drawing/Texture.js.map +1 -0
  148. package/build/dist/Engine.d.ts +4 -1
  149. package/build/dist/Engine.js +985 -0
  150. package/build/dist/Engine.js.map +1 -0
  151. package/build/dist/EntityComponentSystem/Component.js +65 -0
  152. package/build/dist/EntityComponentSystem/Component.js.map +1 -0
  153. package/build/dist/EntityComponentSystem/Components/MotionComponent.js +33 -0
  154. package/build/dist/EntityComponentSystem/Components/MotionComponent.js.map +1 -0
  155. package/build/dist/EntityComponentSystem/Components/TransformComponent.js +249 -0
  156. package/build/dist/EntityComponentSystem/Components/TransformComponent.js.map +1 -0
  157. package/build/dist/EntityComponentSystem/Entity.js +452 -0
  158. package/build/dist/EntityComponentSystem/Entity.js.map +1 -0
  159. package/build/dist/EntityComponentSystem/EntityManager.js +128 -0
  160. package/build/dist/EntityComponentSystem/EntityManager.js.map +1 -0
  161. package/build/dist/EntityComponentSystem/Query.js +91 -0
  162. package/build/dist/EntityComponentSystem/Query.js.map +1 -0
  163. package/build/dist/EntityComponentSystem/QueryManager.js +90 -0
  164. package/build/dist/EntityComponentSystem/QueryManager.js.map +1 -0
  165. package/build/dist/EntityComponentSystem/System.js +76 -0
  166. package/build/dist/EntityComponentSystem/System.js.map +1 -0
  167. package/build/dist/EntityComponentSystem/SystemManager.js +102 -0
  168. package/build/dist/EntityComponentSystem/SystemManager.js.map +1 -0
  169. package/build/dist/EntityComponentSystem/Util.js +5 -0
  170. package/build/dist/EntityComponentSystem/Util.js.map +1 -0
  171. package/build/dist/EntityComponentSystem/World.js +55 -0
  172. package/build/dist/EntityComponentSystem/World.js.map +1 -0
  173. package/build/dist/EntityComponentSystem/index.js +11 -0
  174. package/build/dist/EntityComponentSystem/index.js.map +1 -0
  175. package/build/dist/EventDispatcher.js +114 -0
  176. package/build/dist/EventDispatcher.js.map +1 -0
  177. package/build/dist/Events/ExEvent.js +12 -0
  178. package/build/dist/Events/ExEvent.js.map +1 -0
  179. package/build/dist/Events/MediaEvents.js +75 -0
  180. package/build/dist/Events/MediaEvents.js.map +1 -0
  181. package/build/dist/Events/PointerEvents.js +52 -0
  182. package/build/dist/Events/PointerEvents.js.map +1 -0
  183. package/build/dist/Events.js +497 -0
  184. package/build/dist/Events.js.map +1 -0
  185. package/build/dist/Flags.js +90 -0
  186. package/build/dist/Flags.js.map +1 -0
  187. package/build/dist/Graphics/Animation.js +310 -0
  188. package/build/dist/Graphics/Animation.js.map +1 -0
  189. package/build/dist/Graphics/Canvas.js +38 -0
  190. package/build/dist/Graphics/Canvas.js.map +1 -0
  191. package/build/dist/Graphics/Circle.js +47 -0
  192. package/build/dist/Graphics/Circle.js.map +1 -0
  193. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js +2 -0
  194. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js.map +1 -0
  195. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js +207 -0
  196. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js.map +1 -0
  197. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js +331 -0
  198. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js.map +1 -0
  199. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js +160 -0
  200. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js.map +1 -0
  201. package/build/dist/Graphics/Context/debug-text.js +47 -0
  202. package/build/dist/Graphics/Context/debug-text.js.map +1 -0
  203. package/build/dist/Graphics/Context/image-renderer/image-renderer.js +209 -0
  204. package/build/dist/Graphics/Context/image-renderer/image-renderer.js.map +1 -0
  205. package/build/dist/Graphics/Context/line-renderer/line-renderer.js +87 -0
  206. package/build/dist/Graphics/Context/line-renderer/line-renderer.js.map +1 -0
  207. package/build/dist/Graphics/Context/point-renderer/point-renderer.js +82 -0
  208. package/build/dist/Graphics/Context/point-renderer/point-renderer.js.map +1 -0
  209. package/build/dist/Graphics/Context/quad-index-buffer.js +69 -0
  210. package/build/dist/Graphics/Context/quad-index-buffer.js.map +1 -0
  211. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js +272 -0
  212. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js.map +1 -0
  213. package/build/dist/Graphics/Context/render-source.js +16 -0
  214. package/build/dist/Graphics/Context/render-source.js.map +1 -0
  215. package/build/dist/Graphics/Context/render-target.js +65 -0
  216. package/build/dist/Graphics/Context/render-target.js.map +1 -0
  217. package/build/dist/Graphics/Context/renderer.js +2 -0
  218. package/build/dist/Graphics/Context/renderer.js.map +1 -0
  219. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js +53 -0
  220. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js.map +1 -0
  221. package/build/dist/Graphics/Context/shader.js +236 -0
  222. package/build/dist/Graphics/Context/shader.js.map +1 -0
  223. package/build/dist/Graphics/Context/state-stack.js +27 -0
  224. package/build/dist/Graphics/Context/state-stack.js.map +1 -0
  225. package/build/dist/Graphics/Context/texture-loader.d.ts +8 -0
  226. package/build/dist/Graphics/Context/texture-loader.js +121 -0
  227. package/build/dist/Graphics/Context/texture-loader.js.map +1 -0
  228. package/build/dist/Graphics/Context/transform-stack.js +30 -0
  229. package/build/dist/Graphics/Context/transform-stack.js.map +1 -0
  230. package/build/dist/Graphics/Context/vertex-buffer.js +45 -0
  231. package/build/dist/Graphics/Context/vertex-buffer.js.map +1 -0
  232. package/build/dist/Graphics/Context/vertex-layout.js +93 -0
  233. package/build/dist/Graphics/Context/vertex-layout.js.map +1 -0
  234. package/build/dist/Graphics/Context/webgl-adapter.js +19 -0
  235. package/build/dist/Graphics/Context/webgl-adapter.js.map +1 -0
  236. package/build/dist/Graphics/Context/webgl-util.js +105 -0
  237. package/build/dist/Graphics/Context/webgl-util.js.map +1 -0
  238. package/build/dist/Graphics/DebugGraphicsComponent.js +15 -0
  239. package/build/dist/Graphics/DebugGraphicsComponent.js.map +1 -0
  240. package/build/dist/Graphics/Filtering.js +17 -0
  241. package/build/dist/Graphics/Filtering.js.map +1 -0
  242. package/build/dist/Graphics/Font.js +293 -0
  243. package/build/dist/Graphics/Font.js.map +1 -0
  244. package/build/dist/Graphics/FontCommon.js +109 -0
  245. package/build/dist/Graphics/FontCommon.js.map +1 -0
  246. package/build/dist/Graphics/Graphic.js +200 -0
  247. package/build/dist/Graphics/Graphic.js.map +1 -0
  248. package/build/dist/Graphics/GraphicsComponent.js +290 -0
  249. package/build/dist/Graphics/GraphicsComponent.js.map +1 -0
  250. package/build/dist/Graphics/GraphicsDiagnostics.js +9 -0
  251. package/build/dist/Graphics/GraphicsDiagnostics.js.map +1 -0
  252. package/build/dist/Graphics/GraphicsGroup.js +69 -0
  253. package/build/dist/Graphics/GraphicsGroup.js.map +1 -0
  254. package/build/dist/Graphics/GraphicsSystem.js +153 -0
  255. package/build/dist/Graphics/GraphicsSystem.js.map +1 -0
  256. package/build/dist/Graphics/ImageSource.js +116 -0
  257. package/build/dist/Graphics/ImageSource.js.map +1 -0
  258. package/build/dist/Graphics/Polygon.js +59 -0
  259. package/build/dist/Graphics/Polygon.js.map +1 -0
  260. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js +7 -0
  261. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js.map +1 -0
  262. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js +52 -0
  263. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js.map +1 -0
  264. package/build/dist/Graphics/PostProcessor/PostProcessor.js +2 -0
  265. package/build/dist/Graphics/PostProcessor/PostProcessor.js.map +1 -0
  266. package/build/dist/Graphics/PostProcessor/ScreenShader.js +56 -0
  267. package/build/dist/Graphics/PostProcessor/ScreenShader.js.map +1 -0
  268. package/build/dist/Graphics/Raster.js +207 -0
  269. package/build/dist/Graphics/Raster.js.map +1 -0
  270. package/build/dist/Graphics/Rectangle.js +29 -0
  271. package/build/dist/Graphics/Rectangle.js.map +1 -0
  272. package/build/dist/Graphics/Sprite.js +103 -0
  273. package/build/dist/Graphics/Sprite.js.map +1 -0
  274. package/build/dist/Graphics/SpriteFont.js +120 -0
  275. package/build/dist/Graphics/SpriteFont.js.map +1 -0
  276. package/build/dist/Graphics/SpriteSheet.js +115 -0
  277. package/build/dist/Graphics/SpriteSheet.js.map +1 -0
  278. package/build/dist/Graphics/Text.js +94 -0
  279. package/build/dist/Graphics/Text.js.map +1 -0
  280. package/build/dist/Graphics/index.js +42 -0
  281. package/build/dist/Graphics/index.js.map +1 -0
  282. package/build/dist/Id.js +8 -0
  283. package/build/dist/Id.js.map +1 -0
  284. package/build/dist/Input/CapturePointerConfig.js +5 -0
  285. package/build/dist/Input/CapturePointerConfig.js.map +1 -0
  286. package/build/dist/Input/EngineInput.js +2 -0
  287. package/build/dist/Input/EngineInput.js.map +1 -0
  288. package/build/dist/Input/Gamepad.js +358 -0
  289. package/build/dist/Input/Gamepad.js.map +1 -0
  290. package/build/dist/Input/Index.js +22 -0
  291. package/build/dist/Input/Index.js.map +1 -0
  292. package/build/dist/Input/Keyboard.js +267 -0
  293. package/build/dist/Input/Keyboard.js.map +1 -0
  294. package/build/dist/Input/NativePointerButton.js +12 -0
  295. package/build/dist/Input/NativePointerButton.js.map +1 -0
  296. package/build/dist/Input/PointerAbstraction.js +41 -0
  297. package/build/dist/Input/PointerAbstraction.js.map +1 -0
  298. package/build/dist/Input/PointerButton.js +12 -0
  299. package/build/dist/Input/PointerButton.js.map +1 -0
  300. package/build/dist/Input/PointerComponent.js +28 -0
  301. package/build/dist/Input/PointerComponent.js.map +1 -0
  302. package/build/dist/Input/PointerEvent.js +25 -0
  303. package/build/dist/Input/PointerEvent.js.map +1 -0
  304. package/build/dist/Input/PointerEventReceiver.js +414 -0
  305. package/build/dist/Input/PointerEventReceiver.js.map +1 -0
  306. package/build/dist/Input/PointerScope.js +16 -0
  307. package/build/dist/Input/PointerScope.js.map +1 -0
  308. package/build/dist/Input/PointerSystem.js +217 -0
  309. package/build/dist/Input/PointerSystem.js.map +1 -0
  310. package/build/dist/Input/PointerType.js +11 -0
  311. package/build/dist/Input/PointerType.js.map +1 -0
  312. package/build/dist/Input/WheelDeltaMode.js +7 -0
  313. package/build/dist/Input/WheelDeltaMode.js.map +1 -0
  314. package/build/dist/Input/WheelEvent.js +21 -0
  315. package/build/dist/Input/WheelEvent.js.map +1 -0
  316. package/build/dist/Interfaces/Audio.js +2 -0
  317. package/build/dist/Interfaces/Audio.js.map +1 -0
  318. package/build/dist/Interfaces/AudioImplementation.js +11 -0
  319. package/build/dist/Interfaces/AudioImplementation.js.map +1 -0
  320. package/build/dist/Interfaces/Clonable.js +2 -0
  321. package/build/dist/Interfaces/Clonable.js.map +1 -0
  322. package/build/dist/Interfaces/Drawable.js +2 -0
  323. package/build/dist/Interfaces/Drawable.js.map +1 -0
  324. package/build/dist/Interfaces/Evented.js +2 -0
  325. package/build/dist/Interfaces/Evented.js.map +1 -0
  326. package/build/dist/Interfaces/Index.js +10 -0
  327. package/build/dist/Interfaces/Index.js.map +1 -0
  328. package/build/dist/Interfaces/LifecycleEvents.js +51 -0
  329. package/build/dist/Interfaces/LifecycleEvents.js.map +1 -0
  330. package/build/dist/Interfaces/Loadable.js +2 -0
  331. package/build/dist/Interfaces/Loadable.js.map +1 -0
  332. package/build/dist/Interfaces/PointerEventHandlers.js +2 -0
  333. package/build/dist/Interfaces/PointerEventHandlers.js.map +1 -0
  334. package/build/dist/Interfaces/Trait.js +2 -0
  335. package/build/dist/Interfaces/Trait.js.map +1 -0
  336. package/build/dist/Label.js +273 -0
  337. package/build/dist/Label.js.map +1 -0
  338. package/build/dist/Loader.js +367 -0
  339. package/build/dist/Loader.js.map +1 -0
  340. package/build/dist/Math/Index.js +10 -0
  341. package/build/dist/Math/Index.js.map +1 -0
  342. package/build/dist/Math/Random.js +239 -0
  343. package/build/dist/Math/Random.js.map +1 -0
  344. package/build/dist/Math/global-coordinates.js +30 -0
  345. package/build/dist/Math/global-coordinates.js.map +1 -0
  346. package/build/dist/Math/line.js +194 -0
  347. package/build/dist/Math/line.js.map +1 -0
  348. package/build/dist/Math/matrix.js +446 -0
  349. package/build/dist/Math/matrix.js.map +1 -0
  350. package/build/dist/Math/projection.js +24 -0
  351. package/build/dist/Math/projection.js.map +1 -0
  352. package/build/dist/Math/ray.js +52 -0
  353. package/build/dist/Math/ray.js.map +1 -0
  354. package/build/dist/Math/util.js +82 -0
  355. package/build/dist/Math/util.js.map +1 -0
  356. package/build/dist/Math/vector-view.js +25 -0
  357. package/build/dist/Math/vector-view.js.map +1 -0
  358. package/build/dist/Math/vector.js +326 -0
  359. package/build/dist/Math/vector.js.map +1 -0
  360. package/build/dist/Particles.js +449 -0
  361. package/build/dist/Particles.js.map +1 -0
  362. package/build/dist/Polyfill.js +56 -0
  363. package/build/dist/Polyfill.js.map +1 -0
  364. package/build/dist/Promises.js +205 -0
  365. package/build/dist/Promises.js.map +1 -0
  366. package/build/dist/Resources/Gif.js +479 -0
  367. package/build/dist/Resources/Gif.js.map +1 -0
  368. package/build/dist/Resources/Index.js +4 -0
  369. package/build/dist/Resources/Index.js.map +1 -0
  370. package/build/dist/Resources/Resource.js +74 -0
  371. package/build/dist/Resources/Resource.js.map +1 -0
  372. package/build/dist/Resources/Sound/AudioContext.js +16 -0
  373. package/build/dist/Resources/Sound/AudioContext.js.map +1 -0
  374. package/build/dist/Resources/Sound/Index.js +4 -0
  375. package/build/dist/Resources/Sound/Index.js.map +1 -0
  376. package/build/dist/Resources/Sound/Sound.js +240 -0
  377. package/build/dist/Resources/Sound/Sound.js.map +1 -0
  378. package/build/dist/Resources/Sound/WebAudioInstance.js +160 -0
  379. package/build/dist/Resources/Sound/WebAudioInstance.js.map +1 -0
  380. package/build/dist/Scene.js +458 -0
  381. package/build/dist/Scene.js.map +1 -0
  382. package/build/dist/Screen.js +634 -0
  383. package/build/dist/Screen.js.map +1 -0
  384. package/build/dist/ScreenElement.js +29 -0
  385. package/build/dist/ScreenElement.js.map +1 -0
  386. package/build/dist/TileMap.js +488 -0
  387. package/build/dist/TileMap.js.map +1 -0
  388. package/build/dist/Timer.js +198 -0
  389. package/build/dist/Timer.js.map +1 -0
  390. package/build/dist/Traits/Index.js +5 -0
  391. package/build/dist/Traits/Index.js.map +1 -0
  392. package/build/dist/Traits/OffscreenCulling.js +35 -0
  393. package/build/dist/Traits/OffscreenCulling.js.map +1 -0
  394. package/build/dist/Trigger.js +113 -0
  395. package/build/dist/Trigger.js.map +1 -0
  396. package/build/dist/Util/Actors.js +19 -0
  397. package/build/dist/Util/Actors.js.map +1 -0
  398. package/build/dist/Util/Browser.js +66 -0
  399. package/build/dist/Util/Browser.js.map +1 -0
  400. package/build/dist/Util/Clock.js +219 -0
  401. package/build/dist/Util/Clock.js.map +1 -0
  402. package/build/dist/Util/CullingBox.js +104 -0
  403. package/build/dist/Util/CullingBox.js.map +1 -0
  404. package/build/dist/Util/Decorators.js +78 -0
  405. package/build/dist/Util/Decorators.js.map +1 -0
  406. package/build/dist/Util/Detector.js +167 -0
  407. package/build/dist/Util/Detector.js.map +1 -0
  408. package/build/dist/Util/DrawUtil.js +117 -0
  409. package/build/dist/Util/DrawUtil.js.map +1 -0
  410. package/build/dist/Util/EasingFunctions.js +118 -0
  411. package/build/dist/Util/EasingFunctions.js.map +1 -0
  412. package/build/dist/Util/Fps.js +47 -0
  413. package/build/dist/Util/Fps.js.map +1 -0
  414. package/build/dist/Util/Index.js +7 -0
  415. package/build/dist/Util/Index.js.map +1 -0
  416. package/build/dist/Util/Log.js +195 -0
  417. package/build/dist/Util/Log.js.map +1 -0
  418. package/build/dist/Util/Observable.js +60 -0
  419. package/build/dist/Util/Observable.js.map +1 -0
  420. package/build/dist/Util/Pool.js +66 -0
  421. package/build/dist/Util/Pool.js.map +1 -0
  422. package/build/dist/Util/SortedList.js +261 -0
  423. package/build/dist/Util/SortedList.js.map +1 -0
  424. package/build/dist/Util/Sound.js +22 -0
  425. package/build/dist/Util/Sound.js.map +1 -0
  426. package/build/dist/Util/Util.js +294 -0
  427. package/build/dist/Util/Util.js.map +1 -0
  428. package/build/dist/Util/Watch.js +67 -0
  429. package/build/dist/Util/Watch.js.map +1 -0
  430. package/build/dist/Util/WebAudio.js +62 -0
  431. package/build/dist/Util/WebAudio.js.map +1 -0
  432. package/build/dist/excalibur.js +101 -22
  433. package/build/dist/excalibur.js.map +1 -1
  434. package/build/dist/excalibur.min.js +1 -1
  435. package/build/dist/excalibur.min.js.LICENSE.txt +1 -1
  436. package/build/dist/excalibur.min.js.map +1 -1
  437. package/build/dist/index.js +74 -0
  438. package/build/dist/index.js.map +1 -0
  439. package/build/esm/Engine.d.ts +4 -1
  440. package/build/esm/Graphics/Context/texture-loader.d.ts +8 -0
  441. package/build/esm/excalibur.js +101 -22
  442. package/build/esm/excalibur.js.map +1 -1
  443. package/build/esm/excalibur.min.js +1 -1
  444. package/build/esm/excalibur.min.js.LICENSE.txt +1 -1
  445. package/build/esm/excalibur.min.js.map +1 -1
  446. package/package.json +23 -22
@@ -0,0 +1,236 @@
1
+ import { ExcaliburWebGLContextAccessor } from './webgl-adapter';
2
+ import { getAttributeComponentSize, getAttributePointerType } from './webgl-util';
3
+ export class Shader {
4
+ /**
5
+ * Create a shader program in excalibur
6
+ * @param options specify shader vertex and fragment source
7
+ */
8
+ constructor(options) {
9
+ this._gl = ExcaliburWebGLContextAccessor.gl;
10
+ this.uniforms = {};
11
+ this.attributes = {};
12
+ this._compiled = false;
13
+ const { vertexSource, fragmentSource } = options;
14
+ this.vertexSource = vertexSource;
15
+ this.fragmentSource = fragmentSource;
16
+ }
17
+ get compiled() {
18
+ return this._compiled;
19
+ }
20
+ /**
21
+ * Binds the shader program
22
+ */
23
+ use() {
24
+ const gl = this._gl;
25
+ gl.useProgram(this.program);
26
+ Shader._ACTIVE_SHADER_INSTANCE = this;
27
+ }
28
+ isCurrentlyBound() {
29
+ return Shader._ACTIVE_SHADER_INSTANCE === this;
30
+ }
31
+ /**
32
+ * Compile the current shader against a webgl context
33
+ */
34
+ compile() {
35
+ const gl = this._gl;
36
+ const vertexShader = this._compileShader(gl, this.vertexSource, gl.VERTEX_SHADER);
37
+ const fragmentShader = this._compileShader(gl, this.fragmentSource, gl.FRAGMENT_SHADER);
38
+ this.program = this._createProgram(gl, vertexShader, fragmentShader);
39
+ const attributes = this.getAttributes();
40
+ for (const attribute of attributes) {
41
+ this.attributes[attribute.name] = attribute;
42
+ }
43
+ const uniforms = this.getUniforms();
44
+ for (const uniform of uniforms) {
45
+ this.uniforms[uniform.name] = uniform;
46
+ }
47
+ this._compiled = true;
48
+ return this.program;
49
+ }
50
+ getUniforms() {
51
+ const gl = this._gl;
52
+ const uniformCount = gl.getProgramParameter(this.program, gl.ACTIVE_UNIFORMS);
53
+ const uniforms = [];
54
+ for (let i = 0; i < uniformCount; i++) {
55
+ const uniform = gl.getActiveUniform(this.program, i);
56
+ const uniformLocation = gl.getUniformLocation(this.program, uniform.name);
57
+ uniforms.push({
58
+ name: uniform.name,
59
+ glType: uniform.type,
60
+ location: uniformLocation
61
+ });
62
+ }
63
+ return uniforms;
64
+ }
65
+ getAttributes() {
66
+ const gl = this._gl;
67
+ const attributeCount = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);
68
+ const attributes = [];
69
+ for (let i = 0; i < attributeCount; i++) {
70
+ const attribute = gl.getActiveAttrib(this.program, i);
71
+ const attributeLocation = gl.getAttribLocation(this.program, attribute.name);
72
+ attributes.push({
73
+ name: attribute.name,
74
+ glType: getAttributePointerType(gl, attribute.type),
75
+ size: getAttributeComponentSize(gl, attribute.type),
76
+ location: attributeLocation,
77
+ normalized: false
78
+ });
79
+ }
80
+ return attributes;
81
+ }
82
+ /**
83
+ * Set a texture in a gpu texture slot
84
+ * @param slotNumber
85
+ * @param texture
86
+ */
87
+ setTexture(slotNumber, texture) {
88
+ const gl = this._gl;
89
+ gl.activeTexture(gl.TEXTURE0 + slotNumber);
90
+ gl.bindTexture(gl.TEXTURE_2D, texture);
91
+ }
92
+ /**
93
+ * Set an integer uniform for the current shader
94
+ *
95
+ * **Important** Must call ex.Shader.use() before setting a uniform!
96
+ *
97
+ * @param name
98
+ * @param value
99
+ */
100
+ setUniformInt(name, value) {
101
+ this.setUniform('uniform1i', name, ~~value);
102
+ }
103
+ /**
104
+ * Set an integer array uniform for the current shader
105
+ *
106
+ * **Important** Must call ex.Shader.use() before setting a uniform!
107
+ *
108
+ * @param name
109
+ * @param value
110
+ */
111
+ setUniformIntArray(name, value) {
112
+ this.setUniform('uniform1iv', name, value);
113
+ }
114
+ /**
115
+ * Set a boolean uniform for the current shader
116
+ *
117
+ * **Important** Must call ex.Shader.use() before setting a uniform!
118
+ *
119
+ * @param name
120
+ * @param value
121
+ */
122
+ setUniformBoolean(name, value) {
123
+ this.setUniform('uniform1i', name, value ? 1 : 0);
124
+ }
125
+ /**
126
+ * Set a float uniform for the current shader
127
+ *
128
+ * **Important** Must call ex.Shader.use() before setting a uniform!
129
+ *
130
+ * @param name
131
+ * @param value
132
+ */
133
+ setUniformFloat(name, value) {
134
+ this.setUniform('uniform1f', name, value);
135
+ }
136
+ /**
137
+ * Set a float array uniform for the current shader
138
+ *
139
+ * **Important** Must call ex.Shader.use() before setting a uniform!
140
+ *
141
+ * @param name
142
+ * @param value
143
+ */
144
+ setUniformFloatArray(name, value) {
145
+ this.setUniform('uniform1fv', name, value);
146
+ }
147
+ /**
148
+ * Set a [[Vector]] uniform for the current shader
149
+ *
150
+ * **Important** Must call ex.Shader.use() before setting a uniform!
151
+ *
152
+ * @param name
153
+ * @param value
154
+ */
155
+ setUniformFloatVector(name, value) {
156
+ this.setUniform('uniform2f', name, value.x, value.y);
157
+ }
158
+ /**
159
+ * Set an [[Matrix]] uniform for the current shader
160
+ *
161
+ * **Important** Must call ex.Shader.use() before setting a uniform!
162
+ *
163
+ * @param name
164
+ * @param value
165
+ */
166
+ setUniformMatrix(name, value) {
167
+ this.setUniform('uniformMatrix4fv', name, false, value.data);
168
+ }
169
+ /**
170
+ * Set any available uniform type in webgl
171
+ *
172
+ * For example setUniform('uniformMatrix2fv', 'u_my2x2_mat`, ...);
173
+ */
174
+ setUniform(uniformType, name, ...value) {
175
+ if (!this._compiled) {
176
+ throw Error(`Must compile shader before setting a uniform ${uniformType}:${name}`);
177
+ }
178
+ if (!this.isCurrentlyBound()) {
179
+ throw Error('Currently accessed shader instance is not the current active shader in WebGL,' +
180
+ ' must call `shader.use()` before setting uniforms');
181
+ }
182
+ const gl = this._gl;
183
+ const location = gl.getUniformLocation(this.program, name);
184
+ if (location) {
185
+ const args = [location, ...value];
186
+ this._gl[uniformType].apply(this._gl, args);
187
+ }
188
+ else {
189
+ throw Error(`Uniform ${uniformType}:${name} doesn\'t exist or is not used in the shader source code,` +
190
+ ' unused uniforms are optimized away by most browsers');
191
+ }
192
+ }
193
+ _createProgram(gl, vertexShader, fragmentShader) {
194
+ const program = gl.createProgram();
195
+ if (program === null) {
196
+ throw Error('Could not create graphics shader program');
197
+ }
198
+ // attach the shaders.
199
+ gl.attachShader(program, vertexShader);
200
+ gl.attachShader(program, fragmentShader);
201
+ // link the program.
202
+ gl.linkProgram(program);
203
+ const success = gl.getProgramParameter(program, gl.LINK_STATUS);
204
+ if (!success) {
205
+ throw Error(`Could not link the program: [${gl.getProgramInfoLog(program)}]`);
206
+ }
207
+ return program;
208
+ }
209
+ _compileShader(gl, source, type) {
210
+ const typeName = gl.VERTEX_SHADER === type ? 'vertex' : 'fragment';
211
+ const shader = gl.createShader(type);
212
+ if (shader === null) {
213
+ throw Error(`Could not build shader: [${source}]`);
214
+ }
215
+ gl.shaderSource(shader, source);
216
+ gl.compileShader(shader);
217
+ const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
218
+ if (!success) {
219
+ const errorInfo = gl.getShaderInfoLog(shader);
220
+ throw Error(`Could not compile ${typeName} shader:\n\n${errorInfo}${this._processSourceForError(source, errorInfo)}`);
221
+ }
222
+ return shader;
223
+ }
224
+ _processSourceForError(source, errorInfo) {
225
+ const lines = source.split('\n');
226
+ const errorLineStart = errorInfo.search(/\d:\d/);
227
+ const errorLineEnd = errorInfo.indexOf(' ', errorLineStart);
228
+ const [_, error2] = errorInfo.slice(errorLineStart, errorLineEnd).split(':').map(v => Number(v));
229
+ for (let i = 0; i < lines.length; i++) {
230
+ lines[i] = `${i + 1}: ${lines[i]}${error2 === (i + 1) ? ' <----- ERROR!' : ''}`;
231
+ }
232
+ return '\n\nSource:\n' + lines.join('\n');
233
+ }
234
+ }
235
+ Shader._ACTIVE_SHADER_INSTANCE = null;
236
+ //# sourceMappingURL=shader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/shader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAyElF,MAAM,OAAO,MAAM;IAcjB;;;OAGG;IACH,YAAY,OAAuB;QAhB3B,QAAG,GAA0B,6BAA6B,CAAC,EAAE,CAAC;QAE/D,aAAQ,GAAkD,EAAE,CAAC;QAC7D,eAAU,GAA0D,EAAE,CAAC;QACtE,cAAS,GAAG,KAAK,CAAC;QAaxB,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAZD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAYD;;OAEG;IACH,GAAG;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,gBAAgB;QACd,OAAO,MAAM,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;QAClF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAErE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;SAC7C;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;SACvC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,WAAW;QACT,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,MAAM,YAAY,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,eAAe,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,IAAI;gBACpB,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAC;SACJ;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,MAAM,cAAc,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAClF,MAAM,UAAU,GAAgC,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtD,MAAM,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7E,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,MAAM,EAAE,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;gBACnD,IAAI,EAAE,yBAAyB,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;gBACnD,QAAQ,EAAE,iBAAiB;gBAC3B,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;SACJ;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,UAAkB,EAAE,OAAqB;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;QAC3C,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,IAAY,EAAE,KAAa;QACvC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAY,EAAE,KAAe;QAC9C,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,IAAY,EAAE,KAAc;QAC5C,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,IAAY,EAAE,KAAa;QACzC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAY,EAAE,KAAe;QAChD,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,qBAAqB,CAAC,IAAY,EAAE,KAAa;QAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB,CAAC,IAAY,EAAE,KAAa;QAC1C,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAwC,WAAyB,EAAE,IAAY,EAAE,GAAG,KAAsC;QAClI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,KAAK,CAAC,gDAAgD,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC;SACpF;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC5B,MAAM,KAAK,CAAC,+EAA+E;gBAC3F,mDAAmD,CAAC,CAAC;SACtD;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE;YACZ,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC7C;aAAM;YACL,MAAM,KAAK,CAAC,WAAW,WAAW,IAAI,IAAI,2DAA2D;gBACrG,sDAAsD,CAAC,CAAC;SACzD;IACH,CAAC;IAEO,cAAc,CAAC,EAAyB,EAAE,YAAyB,EAAE,cAA2B;QACtG,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QAED,sBAAsB;QACtB,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACvC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEzC,oBAAoB;QACpB,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,KAAK,CAAC,gCAAgC,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC/E;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CAAC,EAAyB,EAAE,MAAc,EAAE,IAAY;QAC5E,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QACnE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,KAAK,CAAC,4BAA4B,MAAM,GAAG,CAAC,CAAC;SACpD;QAED,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC,qBAAqB,QAAQ,eAAe,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;SACvH;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,sBAAsB,CAAC,MAAc,EAAE,SAAiB;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,CAAA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SAC5E;QAED,OAAO,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;;AApQc,8BAAuB,GAAW,IAAI,CAAC"}
@@ -0,0 +1,27 @@
1
+ export class StateStack {
2
+ constructor() {
3
+ this._states = [];
4
+ this._currentState = this._getDefaultState();
5
+ }
6
+ _getDefaultState() {
7
+ return {
8
+ opacity: 1
9
+ };
10
+ }
11
+ _cloneState() {
12
+ return {
13
+ opacity: this._currentState.opacity
14
+ };
15
+ }
16
+ save() {
17
+ this._states.push(this._currentState);
18
+ this._currentState = this._cloneState();
19
+ }
20
+ restore() {
21
+ this._currentState = this._states.pop();
22
+ }
23
+ get current() {
24
+ return this._currentState;
25
+ }
26
+ }
27
+ //# sourceMappingURL=state-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-stack.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/state-stack.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAAvB;QACU,YAAO,GAAoC,EAAE,CAAC;QAC9C,kBAAa,GAAkC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IA0BjF,CAAC;IAxBS,gBAAgB;QACtB,OAAO;YACL,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;SACpC,CAAC;IACJ,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF"}
@@ -4,6 +4,7 @@ import { HTMLImageSource } from './ExcaliburGraphicsContext';
4
4
  * Manages loading image sources into webgl textures, a unique id is associated with all sources
5
5
  */
6
6
  export declare class TextureLoader {
7
+ private static _LOGGER;
7
8
  /**
8
9
  * Sets the default filtering for the Excalibur texture loader, default [[ImageFiltering.Blended]]
9
10
  */
@@ -12,6 +13,7 @@ export declare class TextureLoader {
12
13
  private static _POT_CTX;
13
14
  private static _GL;
14
15
  private static _TEXTURE_MAP;
16
+ private static _MAX_TEXTURE_SIZE;
15
17
  static register(context: WebGLRenderingContext): void;
16
18
  /**
17
19
  * Get the WebGL Texture from a source image
@@ -36,4 +38,10 @@ export declare class TextureLoader {
36
38
  * @param image
37
39
  */
38
40
  static toPowerOfTwoImage(image: HTMLImageSource): HTMLImageSource;
41
+ /**
42
+ * Takes an image and returns if it meets size criteria for hardware
43
+ * @param image
44
+ * @returns if the image will be supported at runtime
45
+ */
46
+ static checkImageSizeSupportedAndLog(image: HTMLImageSource): boolean;
39
47
  }
@@ -0,0 +1,121 @@
1
+ import { Logger } from '../../Util/Log';
2
+ import { ImageFiltering } from '../Filtering';
3
+ import { ensurePowerOfTwo, isPowerOfTwo } from './webgl-util';
4
+ /**
5
+ * Manages loading image sources into webgl textures, a unique id is associated with all sources
6
+ */
7
+ export class TextureLoader {
8
+ static register(context) {
9
+ TextureLoader._GL = context;
10
+ TextureLoader._MAX_TEXTURE_SIZE = context.getParameter(context.MAX_TEXTURE_SIZE);
11
+ }
12
+ /**
13
+ * Get the WebGL Texture from a source image
14
+ * @param image
15
+ */
16
+ static get(image) {
17
+ return TextureLoader._TEXTURE_MAP.get(image);
18
+ }
19
+ /**
20
+ * Returns whether a source image has been loaded as a texture
21
+ * @param image
22
+ */
23
+ static has(image) {
24
+ return TextureLoader._TEXTURE_MAP.has(image);
25
+ }
26
+ /**
27
+ * Loads a graphic into webgl and returns it's texture info, a webgl context must be previously registered
28
+ * @param image Source graphic
29
+ * @param filtering {ImageFiltering} The ImageFiltering mode to apply to the loaded texture
30
+ * @param forceUpdate Optionally force a texture to be reloaded, useful if the source graphic has changed
31
+ */
32
+ static load(image, filtering, forceUpdate = false) {
33
+ // Ignore loading if webgl is not registered
34
+ const gl = TextureLoader._GL;
35
+ if (!gl) {
36
+ return null;
37
+ }
38
+ let tex = null;
39
+ // If reuse the texture if it's from the same source
40
+ if (TextureLoader.has(image)) {
41
+ tex = TextureLoader.get(image);
42
+ }
43
+ // Update existing webgl texture and return early
44
+ if (tex) {
45
+ if (forceUpdate) {
46
+ gl.bindTexture(gl.TEXTURE_2D, tex);
47
+ const source = TextureLoader.toPowerOfTwoImage(image);
48
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
49
+ }
50
+ return tex;
51
+ }
52
+ // No texture exists create a new one
53
+ tex = gl.createTexture();
54
+ const source = TextureLoader.toPowerOfTwoImage(image);
55
+ TextureLoader.checkImageSizeSupportedAndLog(image);
56
+ gl.bindTexture(gl.TEXTURE_2D, tex);
57
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
58
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
59
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
60
+ // NEAREST for pixel art, LINEAR for hi-res
61
+ const filterMode = filtering !== null && filtering !== void 0 ? filtering : TextureLoader.filtering;
62
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);
63
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);
64
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
65
+ TextureLoader._TEXTURE_MAP.set(image, tex);
66
+ return tex;
67
+ }
68
+ /**
69
+ * Converts source images into power of two images, WebGL only supports POT images
70
+ * https://www.khronos.org/webgl/wiki/WebGL_and_OpenGL_Differences#Non-Power_of_Two_Texture_Support
71
+ * @param image
72
+ */
73
+ static toPowerOfTwoImage(image) {
74
+ const potCanvas = TextureLoader._POT_CANVAS;
75
+ const potCtx = TextureLoader._POT_CTX;
76
+ if (!isPowerOfTwo(image.width) || !isPowerOfTwo(image.height)) {
77
+ // Scale up the texture to the next highest power of two dimensions.
78
+ potCanvas.width = ensurePowerOfTwo(image.width);
79
+ potCanvas.height = ensurePowerOfTwo(image.height);
80
+ potCtx.imageSmoothingEnabled = false;
81
+ potCtx.clearRect(0, 0, potCanvas.width, potCanvas.height);
82
+ potCtx.drawImage(image, 0, 0, image.width, image.height);
83
+ image = potCanvas;
84
+ }
85
+ return image;
86
+ }
87
+ /**
88
+ * Takes an image and returns if it meets size criteria for hardware
89
+ * @param image
90
+ * @returns if the image will be supported at runtime
91
+ */
92
+ static checkImageSizeSupportedAndLog(image) {
93
+ var _a;
94
+ const originalSrc = (_a = image.dataset.originalSrc) !== null && _a !== void 0 ? _a : 'internal canvas bitmap';
95
+ if (image.width > TextureLoader._MAX_TEXTURE_SIZE || image.height > TextureLoader._MAX_TEXTURE_SIZE) {
96
+ TextureLoader._LOGGER.error(`The image [${originalSrc}] provided to Excalibur is too large for the device's maximum texture size of ` +
97
+ `(${TextureLoader._MAX_TEXTURE_SIZE}x${TextureLoader._MAX_TEXTURE_SIZE}) please resize to an image `
98
+ + `for excalibur to render properly.\n\nImages will likely render as black rectangles.\n\n` +
99
+ `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);
100
+ return false;
101
+ }
102
+ else if (image.width > 4096 || image.height > 4096) {
103
+ // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits
104
+ TextureLoader._LOGGER.warn(`The image [${originalSrc}] provided to excalibur is too large may not work on all mobile devices, ` +
105
+ `it is recommended you resize images to a maximum (4096x4096).\n\n` +
106
+ `Images will likely render as black rectangles on some mobile platforms.\n\n` +
107
+ `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);
108
+ }
109
+ return true;
110
+ }
111
+ }
112
+ TextureLoader._LOGGER = Logger.getInstance();
113
+ /**
114
+ * Sets the default filtering for the Excalibur texture loader, default [[ImageFiltering.Blended]]
115
+ */
116
+ TextureLoader.filtering = ImageFiltering.Blended;
117
+ TextureLoader._POT_CANVAS = document.createElement('canvas');
118
+ TextureLoader._POT_CTX = TextureLoader._POT_CANVAS.getContext('2d');
119
+ TextureLoader._TEXTURE_MAP = new Map();
120
+ TextureLoader._MAX_TEXTURE_SIZE = 0;
121
+ //# sourceMappingURL=texture-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texture-loader.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/texture-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Matrix } from '../../Math/matrix';
2
+ export class TransformStack {
3
+ constructor() {
4
+ this._transforms = [];
5
+ this._currentTransform = Matrix.identity();
6
+ }
7
+ save() {
8
+ this._transforms.push(this._currentTransform);
9
+ this._currentTransform = this._currentTransform.clone();
10
+ }
11
+ restore() {
12
+ this._currentTransform = this._transforms.pop();
13
+ }
14
+ translate(x, y) {
15
+ return this._currentTransform.translate(x, y);
16
+ }
17
+ rotate(angle) {
18
+ return this._currentTransform.rotate(angle);
19
+ }
20
+ scale(x, y) {
21
+ return this._currentTransform.scale(x, y);
22
+ }
23
+ set current(matrix) {
24
+ this._currentTransform = matrix;
25
+ }
26
+ get current() {
27
+ return this._currentTransform;
28
+ }
29
+ }
30
+ //# sourceMappingURL=transform-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-stack.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/transform-stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,cAAc;IAA3B;QACU,gBAAW,GAAa,EAAE,CAAC;QAC3B,sBAAiB,GAAW,MAAM,CAAC,QAAQ,EAAE,CAAC;IA8BxD,CAAC;IA5BQ,IAAI;QACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1D,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;IAEM,SAAS,CAAC,CAAS,EAAE,CAAS;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAW,OAAO,CAAC,MAAc;QAC/B,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;IAClC,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { ExcaliburWebGLContextAccessor } from './webgl-adapter';
2
+ /**
3
+ * Helper around vertex buffer to simplify creating and uploading geometry
4
+ *
5
+ * Under the hood uses Float32Array
6
+ */
7
+ export class VertexBuffer {
8
+ constructor(options) {
9
+ this._gl = ExcaliburWebGLContextAccessor.gl;
10
+ /**
11
+ * If the vertices never change switching 'static' can be more efficient on the gpu
12
+ *
13
+ * Default is 'dynamic'
14
+ */
15
+ this.type = 'dynamic';
16
+ const { size, type, data } = options;
17
+ this.buffer = this._gl.createBuffer();
18
+ if (!data && !size) {
19
+ throw Error('Must either provide data or a size to the VertexBuffer');
20
+ }
21
+ if (!data) {
22
+ this.bufferData = new Float32Array(size);
23
+ }
24
+ else {
25
+ this.bufferData = data;
26
+ }
27
+ this.type = type !== null && type !== void 0 ? type : this.type;
28
+ }
29
+ /**
30
+ * Bind this vertex buffer
31
+ */
32
+ bind() {
33
+ const gl = this._gl;
34
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
35
+ }
36
+ /**
37
+ * Upload vertex buffer geometry to the GPU
38
+ */
39
+ upload() {
40
+ const gl = this._gl;
41
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
42
+ gl.bufferData(gl.ARRAY_BUFFER, this.bufferData, this.type === 'static' ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW);
43
+ }
44
+ }
45
+ //# sourceMappingURL=vertex-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-buffer.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/vertex-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAsBhE;;;;GAIG;AACH,MAAM,OAAO,YAAY;IAmBvB,YAAY,OAA4B;QAlBhC,QAAG,GAA0B,6BAA6B,CAAC,EAAE,CAAC;QAWtE;;;;WAIG;QACI,SAAI,GAAyB,SAAS,CAAC;QAG5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,MAAM,KAAK,CAAC,wDAAwD,CAAC,CAAC;SACvE;QAED,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;SAC1C;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAC7G,CAAC;CACF"}
@@ -0,0 +1,93 @@
1
+ import { Logger } from '../..';
2
+ import { ExcaliburWebGLContextAccessor } from './webgl-adapter';
3
+ import { getGlTypeSizeBytes } from './webgl-util';
4
+ /**
5
+ * Helper around creating vertex attributes in a given [[VertexBuffer]], this is useful for describing
6
+ * the memory layout for your vertices inside a particular buffer
7
+ *
8
+ * Note: This helper assumes interleaved attributes in one [[VertexBuffer]], not many.
9
+ *
10
+ * Working with `gl.vertexAttribPointer` can be tricky, and this attempts to double check you
11
+ */
12
+ export class VertexLayout {
13
+ constructor(options) {
14
+ this._gl = ExcaliburWebGLContextAccessor.gl;
15
+ this._logger = Logger.getInstance();
16
+ this._layout = [];
17
+ this._attributes = [];
18
+ this._vertexTotalSizeBytes = 0;
19
+ const { shader, vertexBuffer, attributes } = options;
20
+ this._vertexBuffer = vertexBuffer;
21
+ this._attributes = attributes;
22
+ this._shader = shader;
23
+ this.initialize();
24
+ }
25
+ get vertexBuffer() {
26
+ return this._vertexBuffer;
27
+ }
28
+ get attributes() {
29
+ return this._attributes;
30
+ }
31
+ /**
32
+ * Total number of bytes that the vertex will take up
33
+ */
34
+ get totalVertexSizeBytes() {
35
+ return this._vertexTotalSizeBytes;
36
+ }
37
+ /**
38
+ * Layouts need shader locations and must be bound to a shader
39
+ */
40
+ initialize() {
41
+ if (!this._shader.compiled) {
42
+ throw Error('Shader not compiled, shader must be compiled before defining a vertex layout');
43
+ }
44
+ this._layout.length = 0;
45
+ const shaderAttributes = this._shader.attributes;
46
+ for (const attribute of this._attributes) {
47
+ const attrib = shaderAttributes[attribute[0]];
48
+ if (!attrib) {
49
+ throw Error(`The attribute named: ${attribute[0]} size ${attribute[1]}` +
50
+ ` not found in the shader source code:\n ${this._shader.vertexSource}`);
51
+ }
52
+ if (attrib.size !== attribute[1]) {
53
+ throw Error(`VertexLayout size definition for attribute: [${attribute[0]}, ${attribute[1]}],`
54
+ + ` doesnt match shader source size ${attrib.size}:\n ${this._shader.vertexSource}`);
55
+ }
56
+ this._layout.push(attrib);
57
+ }
58
+ // calc size
59
+ let componentsPerVertex = 0;
60
+ for (const vertAttribute of this._layout) {
61
+ const typeSize = getGlTypeSizeBytes(this._gl, vertAttribute.glType);
62
+ this._vertexTotalSizeBytes += typeSize * vertAttribute.size;
63
+ componentsPerVertex += vertAttribute.size;
64
+ }
65
+ if (this._vertexBuffer.bufferData.length % componentsPerVertex !== 0) {
66
+ this._logger.warn(`The vertex component size (${componentsPerVertex}) does divide evenly into the specified vertex buffer`
67
+ + ` (${this._vertexBuffer.bufferData.length})`);
68
+ }
69
+ }
70
+ /**
71
+ * Bind this layout with it's associated vertex buffer
72
+ *
73
+ * @param uploadBuffer Optionally indicate you wish to upload the buffer to the GPU associated with this layout
74
+ */
75
+ use(uploadBuffer = false) {
76
+ const gl = this._gl;
77
+ if (!this._shader.isCurrentlyBound()) {
78
+ throw Error('Shader associated with this vertex layout is not active! Call shader.use() before layout.use()');
79
+ }
80
+ this._vertexBuffer.bind();
81
+ if (uploadBuffer) {
82
+ this._vertexBuffer.upload();
83
+ }
84
+ let offset = 0;
85
+ // TODO switch to VAOs if the extension is
86
+ for (const vert of this._layout) {
87
+ gl.vertexAttribPointer(vert.location, vert.size, vert.glType, vert.normalized, this.totalVertexSizeBytes, offset);
88
+ gl.enableVertexAttribArray(vert.location);
89
+ offset += getGlTypeSizeBytes(gl, vert.glType) * vert.size;
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=vertex-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-layout.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/vertex-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAoBlD;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IAevB,YAAY,OAA4B;QAdhC,QAAG,GAA0B,6BAA6B,CAAC,EAAE,CAAC;QAC9D,YAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAE/B,YAAO,GAAgC,EAAE,CAAC;QAC1C,gBAAW,GAAiD,EAAE,CAAC;QAkB/D,0BAAqB,GAAG,CAAC,CAAC;QAPhC,MAAM,EAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAC,GAAG,OAAO,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAdD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAWD;;OAEG;IACH,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1B,MAAM,KAAK,CAAC,8EAA8E,CAAC,CAAC;SAC7F;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACjD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,KAAK,CAAC,wBAAwB,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE;oBACvE,2CAA2C,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;aACzE;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;gBAChC,MAAM,KAAK,CAAC,gDAAgD,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI;sBAC5F,oCAAoC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;aACrF;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;QAED,YAAY;QACZ,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE;YACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,qBAAqB,IAAI,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;YAC5D,mBAAmB,IAAI,aAAa,CAAC,IAAI,CAAC;SAC3C;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,mBAAmB,KAAK,CAAC,EAAE;YACpE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,mBAAmB,wDAAwD;kBAC1H,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;SAChD;IACH,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,YAAY,GAAG,KAAK;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE;YACpC,MAAM,KAAK,CAAC,gGAAgG,CAAC,CAAC;SAC/G;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;SAC7B;QACD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,0CAA0C;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;YAClH,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,IAAI,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;SAC3D;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Must be accessed after Engine construction time to ensure the context has been created
3
+ */
4
+ export class ExcaliburWebGLContextAccessor {
5
+ static clear() {
6
+ ExcaliburWebGLContextAccessor._GL = null;
7
+ }
8
+ static register(gl) {
9
+ ExcaliburWebGLContextAccessor._GL = gl;
10
+ }
11
+ // current webgl context
12
+ static get gl() {
13
+ if (!ExcaliburWebGLContextAccessor._GL) {
14
+ throw Error('Attempted gl access before init');
15
+ }
16
+ return ExcaliburWebGLContextAccessor._GL;
17
+ }
18
+ }
19
+ //# sourceMappingURL=webgl-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-adapter.js","sourceRoot":"","sources":["../../../../src/engine/Graphics/Context/webgl-adapter.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,MAAM,OAAO,6BAA6B;IAEjC,MAAM,CAAC,KAAK;QACjB,6BAA6B,CAAC,GAAG,GAAG,IAAI,CAAC;IAC3C,CAAC;IACM,MAAM,CAAC,QAAQ,CAAC,EAAyB;QAC9C,6BAA6B,CAAC,GAAG,GAAG,EAAE,CAAC;IACzC,CAAC;IACD,wBAAwB;IACjB,MAAM,KAAK,EAAE;QAClB,IAAI,CAAC,6BAA6B,CAAC,GAAG,EAAE;YACtC,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;SAChD;QACD,OAAO,6BAA6B,CAAC,GAAG,CAAC;IAC3C,CAAC;CACF"}