@lightningjs/renderer 3.0.0-beta9 → 3.0.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 (566) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/AutosizeManager.d.ts +29 -0
  18. package/dist/src/core/AutosizeManager.js +169 -0
  19. package/dist/src/core/AutosizeManager.js.map +1 -0
  20. package/dist/src/core/Autosizer.d.ts +35 -0
  21. package/dist/src/core/Autosizer.js +196 -0
  22. package/dist/src/core/Autosizer.js.map +1 -0
  23. package/dist/src/core/CoreNode.d.ts +106 -58
  24. package/dist/src/core/CoreNode.js +524 -282
  25. package/dist/src/core/CoreNode.js.map +1 -1
  26. package/dist/src/core/CoreTextNode.d.ts +73 -88
  27. package/dist/src/core/CoreTextNode.js +375 -236
  28. package/dist/src/core/CoreTextNode.js.map +1 -1
  29. package/dist/src/core/CoreTextureManager.d.ts +19 -17
  30. package/dist/src/core/CoreTextureManager.js +52 -120
  31. package/dist/src/core/CoreTextureManager.js.map +1 -1
  32. package/dist/src/core/Stage.d.ts +63 -9
  33. package/dist/src/core/Stage.js +233 -133
  34. package/dist/src/core/Stage.js.map +1 -1
  35. package/dist/src/core/TextureError.d.ts +11 -0
  36. package/dist/src/core/TextureError.js +37 -0
  37. package/dist/src/core/TextureError.js.map +1 -0
  38. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  39. package/dist/src/core/TextureMemoryManager.js +80 -113
  40. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  41. package/dist/src/core/animations/Animation.d.ts +21 -0
  42. package/dist/src/core/animations/Animation.js +194 -0
  43. package/dist/src/core/animations/Animation.js.map +1 -0
  44. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  45. package/dist/src/core/animations/CoreAnimation.js +3 -3
  46. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  47. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  48. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  49. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  50. package/dist/src/core/animations/Playback.d.ts +64 -0
  51. package/dist/src/core/animations/Playback.js +169 -0
  52. package/dist/src/core/animations/Playback.js.map +1 -0
  53. package/dist/src/core/animations/Transition.d.ts +27 -0
  54. package/dist/src/core/animations/Transition.js +52 -0
  55. package/dist/src/core/animations/Transition.js.map +1 -0
  56. package/dist/src/core/animations/utils.d.ts +2 -0
  57. package/dist/src/core/animations/utils.js +136 -0
  58. package/dist/src/core/animations/utils.js.map +1 -0
  59. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  60. package/dist/src/core/lib/ImageWorker.js +30 -11
  61. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  62. package/dist/src/core/lib/WebGlContextWrapper.d.ts +22 -1
  63. package/dist/src/core/lib/WebGlContextWrapper.js +49 -3
  64. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  65. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  66. package/dist/src/core/lib/collectionUtils.js +72 -0
  67. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  68. package/dist/src/core/lib/colorCache.d.ts +1 -0
  69. package/dist/src/core/lib/colorCache.js +19 -0
  70. package/dist/src/core/lib/colorCache.js.map +1 -0
  71. package/dist/src/core/lib/colorParser.d.ts +21 -0
  72. package/dist/src/core/lib/colorParser.js +72 -0
  73. package/dist/src/core/lib/colorParser.js.map +1 -0
  74. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  75. package/dist/src/core/lib/textureCompression.js +320 -67
  76. package/dist/src/core/lib/textureCompression.js.map +1 -1
  77. package/dist/src/core/lib/utils.d.ts +6 -6
  78. package/dist/src/core/lib/utils.js +21 -65
  79. package/dist/src/core/lib/utils.js.map +1 -1
  80. package/dist/src/core/platform.d.ts +10 -0
  81. package/dist/src/core/platform.js +81 -0
  82. package/dist/src/core/platform.js.map +1 -0
  83. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  84. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  85. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  86. package/dist/src/core/platforms/Platform.d.ts +78 -12
  87. package/dist/src/core/platforms/Platform.js +18 -0
  88. package/dist/src/core/platforms/Platform.js.map +1 -1
  89. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  90. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  91. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  92. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  93. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  94. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  95. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  96. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  97. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  98. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  99. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  100. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  101. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  102. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  103. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  104. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  105. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  106. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  107. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  108. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  109. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  110. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  111. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  112. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  113. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  114. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  115. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  116. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  117. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  118. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  119. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  120. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  121. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  122. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  123. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  124. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  125. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  126. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  127. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  128. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  129. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  130. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  131. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  132. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  133. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  134. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  135. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  136. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  137. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  138. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  139. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  140. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  141. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  143. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  144. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  145. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  146. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  147. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  148. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  149. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  150. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  151. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  152. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  153. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  154. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  155. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  156. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  157. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  158. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  159. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  160. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  161. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  162. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  164. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  165. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  174. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  176. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  177. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  179. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  180. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  182. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  183. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  185. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  186. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  187. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  188. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  189. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  190. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  191. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  192. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  193. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  194. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  195. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  196. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  197. package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
  198. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  199. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  200. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  201. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  202. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +7 -7
  203. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +56 -37
  204. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  205. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  206. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  207. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  208. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  209. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  210. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  211. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  212. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  214. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  215. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  217. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  218. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  220. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  221. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  223. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  224. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  258. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  259. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
  260. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  261. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  262. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  263. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  264. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  265. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  266. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  267. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  268. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  269. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  270. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  271. package/dist/src/core/shaders/canvas/Border.js +64 -25
  272. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  273. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  274. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  276. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  278. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  280. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  281. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  282. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  283. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  284. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  285. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  286. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  287. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  288. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  289. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  290. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  291. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  292. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  293. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  294. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  295. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  296. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  297. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  298. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  299. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  300. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  301. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  302. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  303. package/dist/src/core/shaders/webgl/Border.js +138 -84
  304. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  305. package/dist/src/core/shaders/webgl/Default.js +46 -47
  306. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  307. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  308. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  309. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  311. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  312. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  313. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  314. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  315. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  316. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  317. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  318. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  319. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  320. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  321. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  322. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  323. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  324. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  325. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  326. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  327. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  329. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  330. package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
  331. package/dist/src/core/text-rendering/CanvasFont.js +111 -0
  332. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
  333. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  334. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  335. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  336. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  337. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  338. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  339. package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
  340. package/dist/src/core/text-rendering/CoreFont.js +48 -0
  341. package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
  342. package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
  343. package/dist/src/core/text-rendering/FontManager.js +42 -0
  344. package/dist/src/core/text-rendering/FontManager.js.map +1 -0
  345. package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
  346. package/dist/src/core/text-rendering/SdfFont.js +142 -0
  347. package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
  348. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  349. package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
  350. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  351. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  352. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  353. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  354. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  355. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  356. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  357. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  358. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  359. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  360. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  361. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  362. package/dist/src/core/text-rendering/Utils.js +84 -0
  363. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  364. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  365. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  366. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  367. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  368. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  369. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  370. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  371. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  372. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  373. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  377. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  378. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  379. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  380. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  381. package/dist/src/core/textures/ColorTexture.js +3 -4
  382. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  383. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  384. package/dist/src/core/textures/ImageTexture.js +46 -125
  385. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  386. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  387. package/dist/src/core/textures/NoiseTexture.js +8 -8
  388. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  389. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  390. package/dist/src/core/textures/RenderTexture.js +12 -12
  391. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  392. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  393. package/dist/src/core/textures/SubTexture.js +22 -40
  394. package/dist/src/core/textures/SubTexture.js.map +1 -1
  395. package/dist/src/core/textures/Texture.d.ts +74 -15
  396. package/dist/src/core/textures/Texture.js +131 -19
  397. package/dist/src/core/textures/Texture.js.map +1 -1
  398. package/dist/src/core/utils.d.ts +2 -1
  399. package/dist/src/core/utils.js +1 -1
  400. package/dist/src/core/utils.js.map +1 -1
  401. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  402. package/dist/src/main-api/DynamicShaderController.js +58 -0
  403. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  404. package/dist/src/main-api/Inspector.d.ts +129 -1
  405. package/dist/src/main-api/Inspector.js +462 -23
  406. package/dist/src/main-api/Inspector.js.map +1 -1
  407. package/dist/src/main-api/Renderer.d.ts +223 -41
  408. package/dist/src/main-api/Renderer.js +107 -62
  409. package/dist/src/main-api/Renderer.js.map +1 -1
  410. package/dist/src/main-api/ShaderController.d.ts +31 -0
  411. package/dist/src/main-api/ShaderController.js +37 -0
  412. package/dist/src/main-api/ShaderController.js.map +1 -0
  413. package/dist/src/utils.d.ts +0 -2
  414. package/dist/src/utils.js +0 -36
  415. package/dist/src/utils.js.map +1 -1
  416. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  417. package/dist/tsconfig.tsbuildinfo +1 -0
  418. package/exports/canvas-shaders.ts +28 -28
  419. package/exports/canvas.ts +45 -45
  420. package/exports/index.ts +90 -90
  421. package/exports/inspector.ts +24 -24
  422. package/exports/platform.ts +31 -0
  423. package/exports/utils.ts +50 -50
  424. package/exports/webgl-shaders.ts +28 -28
  425. package/exports/webgl.ts +52 -50
  426. package/package.json +16 -15
  427. package/src/common/CommonTypes.ts +163 -146
  428. package/src/common/EventEmitter.ts +77 -77
  429. package/src/common/IAnimationController.ts +92 -92
  430. package/src/common/IEventEmitter.ts +28 -28
  431. package/src/core/Autosizer.ts +224 -0
  432. package/src/core/CoreNode.test.ts +365 -202
  433. package/src/core/CoreNode.ts +2785 -2489
  434. package/src/core/CoreShaderManager.ts +188 -188
  435. package/src/core/CoreTextNode.test.ts +311 -0
  436. package/src/core/CoreTextNode.ts +598 -451
  437. package/src/core/CoreTextureManager.ts +484 -548
  438. package/src/core/Stage.ts +927 -800
  439. package/src/core/TextureError.ts +46 -0
  440. package/src/core/TextureMemoryManager.ts +418 -462
  441. package/src/core/animations/AnimationManager.ts +38 -38
  442. package/src/core/animations/CoreAnimation.ts +290 -291
  443. package/src/core/animations/CoreAnimationController.ts +169 -166
  444. package/src/core/lib/ContextSpy.ts +41 -41
  445. package/src/core/lib/Matrix3d.ts +244 -244
  446. package/src/core/lib/RenderCoords.ts +71 -71
  447. package/src/core/lib/collectionUtils.ts +83 -0
  448. package/src/core/lib/colorCache.ts +20 -0
  449. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  450. package/src/core/lib/utils.ts +337 -390
  451. package/src/core/platforms/GlContextWrapper.ts +291 -0
  452. package/src/core/platforms/Platform.ts +176 -77
  453. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1368
  454. package/src/core/platforms/web/WebPlatform.ts +306 -84
  455. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  456. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  457. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  458. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  459. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  460. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  461. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  462. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  463. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  464. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  465. package/src/core/platforms/web/lib/utils.ts +105 -0
  466. package/src/core/renderers/CoreContextTexture.ts +44 -43
  467. package/src/core/renderers/CoreRenderOp.ts +22 -22
  468. package/src/core/renderers/CoreRenderer.ts +71 -110
  469. package/src/core/renderers/CoreShaderNode.ts +202 -175
  470. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  471. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  472. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  473. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  474. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  475. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  476. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  477. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  478. package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
  479. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  480. package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -341
  481. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  482. package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
  483. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  484. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  485. package/src/core/shaders/canvas/Border.ts +132 -78
  486. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  487. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  488. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  489. package/src/core/shaders/canvas/Rounded.ts +55 -55
  490. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  491. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  492. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  493. package/src/core/shaders/canvas/Shadow.ts +54 -52
  494. package/src/core/shaders/canvas/utils/render.ts +160 -151
  495. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  496. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  497. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  498. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  499. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  500. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  501. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  502. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  503. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  504. package/src/core/shaders/utils.ts +46 -46
  505. package/src/core/shaders/webgl/Border.ts +169 -116
  506. package/src/core/shaders/webgl/Default.ts +88 -89
  507. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  508. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  509. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  510. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  511. package/src/core/shaders/webgl/Rounded.ts +115 -117
  512. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  513. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  514. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  515. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  516. package/src/core/shaders/webgl/Shadow.ts +121 -115
  517. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  518. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  519. package/src/core/text-rendering/SdfFontHandler.ts +584 -0
  520. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  521. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  522. package/src/core/text-rendering/TextRenderer.ts +444 -0
  523. package/src/core/text-rendering/Utils.ts +99 -0
  524. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  525. package/src/core/textures/ColorTexture.ts +104 -102
  526. package/src/core/textures/ImageTexture.ts +292 -418
  527. package/src/core/textures/NoiseTexture.ts +106 -104
  528. package/src/core/textures/RenderTexture.ts +87 -85
  529. package/src/core/textures/SubTexture.ts +184 -205
  530. package/src/core/textures/Texture.ts +524 -381
  531. package/src/core/utils.ts +229 -227
  532. package/src/env.d.ts +7 -7
  533. package/src/main-api/INode.ts +100 -100
  534. package/src/main-api/Inspector.ts +1278 -569
  535. package/src/main-api/Renderer.ts +1030 -818
  536. package/src/main-api/utils.ts +45 -45
  537. package/src/utils.ts +220 -267
  538. package/COPYING +0 -1
  539. package/src/core/lib/ImageWorker.ts +0 -286
  540. package/src/core/lib/textureCompression.ts +0 -152
  541. package/src/core/lib/validateImageBitmap.ts +0 -87
  542. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  543. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  544. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  545. package/src/core/text-rendering/TrFontManager.ts +0 -183
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  548. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  549. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  550. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  551. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  552. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  553. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  554. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  566. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -0,0 +1,1208 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2026 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { isWebGl2 } from '../../renderers/webgl/internal/WebGlUtils.js';
20
+ import { GlContextWrapper } from '../GlContextWrapper.js';
21
+ /**
22
+ * Optimized WebGL Context Wrapper
23
+ *
24
+ * @remarks
25
+ * This class contains the subset of the WebGLRenderingContext & WebGL2RenderingContext
26
+ * API that is used by the renderer. Select high volume WebGL methods include
27
+ * caching optimizations to avoid making WebGL calls if the state is already set
28
+ * to the desired value.
29
+ *
30
+ * While most methods contained are direct passthroughs to the WebGL context,
31
+ * some methods combine multiple WebGL calls into one for convenience, modify
32
+ * arguments to be more convenient, or are replaced by more specific methods.
33
+ *
34
+ * Not all methods are optimized. Only methods that are called frequently
35
+ * and/or have a high cost are optimized.
36
+ *
37
+ * A subset of GLenum constants are also exposed as properties on this class
38
+ * for convenience.
39
+ */
40
+ export class WebGlContextWrapper extends GlContextWrapper {
41
+ gl;
42
+ //#region Cached WebGL State
43
+ activeTextureUnit = 0;
44
+ texture2dUnits;
45
+ texture2dParams = new WeakMap();
46
+ scissorEnabled;
47
+ scissorX;
48
+ scissorY;
49
+ scissorWidth;
50
+ scissorHeight;
51
+ blendEnabled;
52
+ blendSrcRgb;
53
+ blendDstRgb;
54
+ blendSrcAlpha;
55
+ blendDstAlpha;
56
+ boundArrayBuffer;
57
+ boundElementArrayBuffer;
58
+ curProgram;
59
+ curUniformLocations = {};
60
+ //#endregion Cached WebGL State
61
+ //#region Canvas
62
+ canvas;
63
+ //#endregion Canvas
64
+ //#region WebGL Enums
65
+ MAX_RENDERBUFFER_SIZE;
66
+ MAX_TEXTURE_SIZE;
67
+ MAX_VIEWPORT_DIMS;
68
+ MAX_VERTEX_TEXTURE_IMAGE_UNITS;
69
+ MAX_TEXTURE_IMAGE_UNITS;
70
+ MAX_COMBINED_TEXTURE_IMAGE_UNITS;
71
+ MAX_VERTEX_ATTRIBS;
72
+ MAX_VARYING_VECTORS;
73
+ MAX_VERTEX_UNIFORM_VECTORS;
74
+ MAX_FRAGMENT_UNIFORM_VECTORS;
75
+ TEXTURE_MAG_FILTER;
76
+ TEXTURE_MIN_FILTER;
77
+ TEXTURE_WRAP_S;
78
+ TEXTURE_WRAP_T;
79
+ LINEAR;
80
+ LINEAR_MIPMAP_LINEAR;
81
+ CLAMP_TO_EDGE;
82
+ RGB;
83
+ RGBA;
84
+ UNSIGNED_BYTE;
85
+ UNPACK_PREMULTIPLY_ALPHA_WEBGL;
86
+ UNPACK_FLIP_Y_WEBGL;
87
+ FLOAT;
88
+ TRIANGLES;
89
+ UNSIGNED_SHORT;
90
+ ONE;
91
+ ONE_MINUS_SRC_ALPHA;
92
+ VERTEX_SHADER;
93
+ FRAGMENT_SHADER;
94
+ STATIC_DRAW;
95
+ COMPILE_STATUS;
96
+ LINK_STATUS;
97
+ DYNAMIC_DRAW;
98
+ COLOR_ATTACHMENT0;
99
+ INVALID_ENUM;
100
+ INVALID_OPERATION;
101
+ //#endregion WebGL Enums
102
+ constructor(gl) {
103
+ super();
104
+ this.gl = gl;
105
+ // The following code extracts the current state of the WebGL context
106
+ // to our local JavaScript cached version of it. This is so we can
107
+ // avoid making WebGL calls if we don't need to.
108
+ // We could assume that the WebGL context is in a default state, but
109
+ // in the future we may want to support restoring a broken WebGL context
110
+ // and this will help with that.
111
+ this.activeTextureUnit =
112
+ gl.getParameter(gl.ACTIVE_TEXTURE) - gl.TEXTURE0;
113
+ const maxTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
114
+ // save current texture units
115
+ this.texture2dUnits = new Array(maxTextureUnits)
116
+ .fill(undefined)
117
+ .map((_, i) => {
118
+ this.activeTexture(i);
119
+ return gl.getParameter(gl.TEXTURE_BINDING_2D);
120
+ });
121
+ // restore active texture unit
122
+ this.activeTexture(this.activeTextureUnit);
123
+ this.scissorEnabled = gl.isEnabled(gl.SCISSOR_TEST);
124
+ const scissorBox = gl.getParameter(gl.SCISSOR_BOX);
125
+ this.scissorX = scissorBox[0];
126
+ this.scissorY = scissorBox[1];
127
+ this.scissorWidth = scissorBox[2];
128
+ this.scissorHeight = scissorBox[3];
129
+ this.blendEnabled = gl.isEnabled(gl.BLEND);
130
+ this.blendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB);
131
+ this.blendDstRgb = gl.getParameter(gl.BLEND_DST_RGB);
132
+ this.blendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);
133
+ this.blendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);
134
+ this.boundArrayBuffer = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
135
+ this.boundElementArrayBuffer = gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING);
136
+ this.curProgram = gl.getParameter(gl.CURRENT_PROGRAM);
137
+ this.canvas = gl.canvas;
138
+ // Extract GLenums
139
+ this.MAX_RENDERBUFFER_SIZE = gl.MAX_RENDERBUFFER_SIZE;
140
+ this.MAX_TEXTURE_SIZE = gl.MAX_TEXTURE_SIZE;
141
+ this.MAX_VIEWPORT_DIMS = gl.MAX_VIEWPORT_DIMS;
142
+ this.MAX_VERTEX_TEXTURE_IMAGE_UNITS = gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
143
+ this.MAX_TEXTURE_IMAGE_UNITS = gl.MAX_TEXTURE_IMAGE_UNITS;
144
+ this.MAX_COMBINED_TEXTURE_IMAGE_UNITS = gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS;
145
+ this.MAX_VERTEX_ATTRIBS = gl.MAX_VERTEX_ATTRIBS;
146
+ this.MAX_VARYING_VECTORS = gl.MAX_VARYING_VECTORS;
147
+ this.MAX_VERTEX_UNIFORM_VECTORS = gl.MAX_VERTEX_UNIFORM_VECTORS;
148
+ this.MAX_FRAGMENT_UNIFORM_VECTORS = gl.MAX_FRAGMENT_UNIFORM_VECTORS;
149
+ this.TEXTURE_MAG_FILTER = gl.TEXTURE_MAG_FILTER;
150
+ this.TEXTURE_MIN_FILTER = gl.TEXTURE_MIN_FILTER;
151
+ this.TEXTURE_WRAP_S = gl.TEXTURE_WRAP_S;
152
+ this.TEXTURE_WRAP_T = gl.TEXTURE_WRAP_T;
153
+ this.LINEAR = gl.LINEAR;
154
+ this.LINEAR_MIPMAP_LINEAR = gl.LINEAR_MIPMAP_LINEAR;
155
+ this.CLAMP_TO_EDGE = gl.CLAMP_TO_EDGE;
156
+ this.RGB = gl.RGB;
157
+ this.RGBA = gl.RGBA;
158
+ this.UNSIGNED_BYTE = gl.UNSIGNED_BYTE;
159
+ this.UNPACK_PREMULTIPLY_ALPHA_WEBGL = gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
160
+ this.UNPACK_FLIP_Y_WEBGL = gl.UNPACK_FLIP_Y_WEBGL;
161
+ this.FLOAT = gl.FLOAT;
162
+ this.TRIANGLES = gl.TRIANGLES;
163
+ this.UNSIGNED_SHORT = gl.UNSIGNED_SHORT;
164
+ this.ONE = gl.ONE;
165
+ this.ONE_MINUS_SRC_ALPHA = gl.ONE_MINUS_SRC_ALPHA;
166
+ this.MAX_VERTEX_TEXTURE_IMAGE_UNITS = gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
167
+ this.TRIANGLES = gl.TRIANGLES;
168
+ this.UNSIGNED_SHORT = gl.UNSIGNED_SHORT;
169
+ this.VERTEX_SHADER = gl.VERTEX_SHADER;
170
+ this.FRAGMENT_SHADER = gl.FRAGMENT_SHADER;
171
+ this.STATIC_DRAW = gl.STATIC_DRAW;
172
+ this.COMPILE_STATUS = gl.COMPILE_STATUS;
173
+ this.LINK_STATUS = gl.LINK_STATUS;
174
+ this.DYNAMIC_DRAW = gl.DYNAMIC_DRAW;
175
+ this.COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;
176
+ this.INVALID_ENUM = gl.INVALID_ENUM;
177
+ this.INVALID_OPERATION = gl.INVALID_OPERATION;
178
+ }
179
+ /**
180
+ * Returns true if the WebGL context is WebGL2
181
+ *
182
+ * @returns
183
+ */
184
+ isWebGl2() {
185
+ return isWebGl2(this.gl);
186
+ }
187
+ /**
188
+ * ```
189
+ * gl.activeTexture(textureUnit + gl.TEXTURE0);
190
+ * ```
191
+ *
192
+ * @remarks
193
+ * **WebGL Difference**: `textureUnit` is based from 0, not `gl.TEXTURE0`.
194
+ *
195
+ * @param textureUnit
196
+ */
197
+ activeTexture(textureUnit) {
198
+ if (this.activeTextureUnit !== textureUnit) {
199
+ this.gl.activeTexture(textureUnit + this.gl.TEXTURE0);
200
+ this.activeTextureUnit = textureUnit;
201
+ }
202
+ }
203
+ /**
204
+ * ```
205
+ * gl.bindTexture(gl.TEXTURE_2D, texture);
206
+ * ```
207
+ * @remarks
208
+ * **WebGL Difference**: Bind target is always `gl.TEXTURE_2D`
209
+ *
210
+ * @param texture
211
+ */
212
+ bindTexture(texture) {
213
+ if (this.texture2dUnits[this.activeTextureUnit] === texture) {
214
+ return;
215
+ }
216
+ this.texture2dUnits[this.activeTextureUnit] = texture;
217
+ this.gl.bindTexture(this.gl.TEXTURE_2D, texture);
218
+ }
219
+ _getActiveTexture() {
220
+ return this.texture2dUnits[this.activeTextureUnit];
221
+ }
222
+ /**
223
+ * ```
224
+ * gl.texParameteri(gl.TEXTURE_2D, pname, param);
225
+ * ```
226
+ * @remarks
227
+ * **WebGL Difference**: Bind target is always `gl.TEXTURE_2D`
228
+ *
229
+ * @param pname
230
+ * @param param
231
+ * @returns
232
+ */
233
+ texParameteri(pname, param) {
234
+ const activeTexture = this._getActiveTexture();
235
+ if (!activeTexture) {
236
+ throw new Error('No active texture');
237
+ }
238
+ let textureParams = this.texture2dParams.get(activeTexture);
239
+ if (!textureParams) {
240
+ textureParams = {};
241
+ this.texture2dParams.set(activeTexture, textureParams);
242
+ }
243
+ if (textureParams[pname] === param) {
244
+ return;
245
+ }
246
+ textureParams[pname] = param;
247
+ this.gl.texParameteri(this.gl.TEXTURE_2D, pname, param);
248
+ }
249
+ texImage2D(level, internalFormat, widthOrFormat, heightOrType, borderOrSource, format, type, pixels) {
250
+ if (format) {
251
+ this.gl.texImage2D(this.gl.TEXTURE_2D, level, internalFormat, widthOrFormat, heightOrType, borderOrSource, format, type, pixels);
252
+ }
253
+ else {
254
+ this.gl.texImage2D(this.gl.TEXTURE_2D, level, internalFormat, widthOrFormat, heightOrType, borderOrSource);
255
+ }
256
+ }
257
+ /**
258
+ * ```
259
+ * gl.compressedTexImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, data);
260
+ * ```
261
+ *
262
+ * @remarks
263
+ * **WebGL Difference**: Bind target is always `gl.TEXTURE_2D`
264
+ */
265
+ compressedTexImage2D(level, internalformat, width, height, border, data) {
266
+ this.gl.compressedTexImage2D(this.gl.TEXTURE_2D, level, internalformat, width, height, border, data);
267
+ }
268
+ /**
269
+ * ```
270
+ * gl.pixelStorei(pname, param);
271
+ * ```
272
+ *
273
+ * @param pname
274
+ * @param param
275
+ */
276
+ pixelStorei(pname, param) {
277
+ this.gl.pixelStorei(pname, param);
278
+ }
279
+ /**
280
+ * ```
281
+ * gl.generateMipmap(gl.TEXTURE_2D);
282
+ * ```
283
+ *
284
+ * @remarks
285
+ * **WebGL Difference**: Bind target is always `gl.TEXTURE_2D`
286
+ */
287
+ generateMipmap() {
288
+ this.gl.generateMipmap(this.gl.TEXTURE_2D);
289
+ }
290
+ /**
291
+ * ```
292
+ * gl.createTexture();
293
+ * ```
294
+ *
295
+ * @returns
296
+ */
297
+ createTexture() {
298
+ return this.gl.createTexture();
299
+ }
300
+ /**
301
+ * ```
302
+ * gl.deleteTexture(texture);
303
+ * ```
304
+ *
305
+ * @param texture
306
+ */
307
+ deleteTexture(texture) {
308
+ if (texture) {
309
+ this.texture2dParams.delete(texture);
310
+ }
311
+ this.gl.deleteTexture(texture);
312
+ }
313
+ /**
314
+ * ```
315
+ * gl.deleteFramebuffer(framebuffer);
316
+ *
317
+ * @param framebuffer
318
+ */
319
+ deleteFramebuffer(framebuffer) {
320
+ this.gl.deleteFramebuffer(framebuffer);
321
+ }
322
+ /**
323
+ * ```
324
+ * gl.viewport(x, y, width, height);
325
+ * ```
326
+ */
327
+ viewport(x, y, width, height) {
328
+ this.gl.viewport(x, y, width, height);
329
+ }
330
+ /**
331
+ * ```
332
+ * gl.clearColor(red, green, blue, alpha);
333
+ * ```
334
+ *
335
+ * @param red
336
+ * @param green
337
+ * @param blue
338
+ * @param alpha
339
+ */
340
+ clearColor(red, green, blue, alpha) {
341
+ this.gl.clearColor(red, green, blue, alpha);
342
+ }
343
+ /**
344
+ * ```
345
+ * gl["enable"|"disable"](gl.SCISSOR_TEST);
346
+ * ```
347
+ * @param enable
348
+ */
349
+ setScissorTest(enable) {
350
+ if (enable === this.scissorEnabled) {
351
+ return;
352
+ }
353
+ if (enable) {
354
+ this.gl.enable(this.gl.SCISSOR_TEST);
355
+ }
356
+ else {
357
+ this.gl.disable(this.gl.SCISSOR_TEST);
358
+ }
359
+ this.scissorEnabled = enable;
360
+ }
361
+ /**
362
+ * ```
363
+ * gl.scissor(x, y, width, height);
364
+ * ```
365
+ *
366
+ * @param x
367
+ * @param y
368
+ * @param width
369
+ * @param height
370
+ */
371
+ scissor(x, y, width, height) {
372
+ if (x !== this.scissorX ||
373
+ y !== this.scissorY ||
374
+ width !== this.scissorWidth ||
375
+ height !== this.scissorHeight) {
376
+ this.gl.scissor(x, y, width, height);
377
+ this.scissorX = x;
378
+ this.scissorY = y;
379
+ this.scissorWidth = width;
380
+ this.scissorHeight = height;
381
+ }
382
+ }
383
+ /**
384
+ * ```
385
+ * gl["enable"|"disable"](gl.BLEND);
386
+ * ```
387
+ *
388
+ * @param blend
389
+ * @returns
390
+ */
391
+ setBlend(blend) {
392
+ if (blend === this.blendEnabled) {
393
+ return;
394
+ }
395
+ if (blend) {
396
+ this.gl.enable(this.gl.BLEND);
397
+ }
398
+ else {
399
+ this.gl.disable(this.gl.BLEND);
400
+ }
401
+ this.blendEnabled = blend;
402
+ }
403
+ /**
404
+ * ```
405
+ * gl.blendFunc(src, dst);
406
+ * ```
407
+ *
408
+ * @param src
409
+ * @param dst
410
+ */
411
+ blendFunc(src, dst) {
412
+ if (src !== this.blendSrcRgb ||
413
+ dst !== this.blendDstRgb ||
414
+ src !== this.blendSrcAlpha ||
415
+ dst !== this.blendDstAlpha) {
416
+ this.gl.blendFunc(src, dst);
417
+ this.blendSrcRgb = src;
418
+ this.blendDstRgb = dst;
419
+ this.blendSrcAlpha = src;
420
+ this.blendDstAlpha = dst;
421
+ }
422
+ }
423
+ /**
424
+ * ```
425
+ * gl.createBuffer();
426
+ * ```
427
+ *
428
+ * @returns
429
+ */
430
+ createBuffer() {
431
+ return this.gl.createBuffer();
432
+ }
433
+ /**
434
+ * ```
435
+ * gl.createFramebuffer();
436
+ * ```
437
+ * @returns
438
+ */
439
+ createFramebuffer() {
440
+ return this.gl.createFramebuffer();
441
+ }
442
+ /**
443
+ * ```
444
+ * gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
445
+ * ```
446
+ *
447
+ * @param framebuffer
448
+ */
449
+ bindFramebuffer(framebuffer) {
450
+ this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, framebuffer);
451
+ }
452
+ /**
453
+ * ```
454
+ * gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
455
+ * ```
456
+ * @remarks
457
+ * **WebGL Difference**: Bind target is always `gl.FRAMEBUFFER` and textarget is always `gl.TEXTURE_2D`
458
+ */
459
+ framebufferTexture2D(attachment, texture, level) {
460
+ const gl = this.gl;
461
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, texture, level);
462
+ }
463
+ /**
464
+ * ```
465
+ * gl.clear(gl.COLOR_BUFFER_BIT);
466
+ * ```
467
+ *
468
+ * @remarks
469
+ * **WebGL Difference**: Clear mask is always `gl.COLOR_BUFFER_BIT`
470
+ */
471
+ clear() {
472
+ this.gl.clear(this.gl.COLOR_BUFFER_BIT);
473
+ }
474
+ /**
475
+ * ```
476
+ * gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
477
+ * gl.bufferData(gl.ARRAY_BUFFER, data, usage);
478
+ * ```
479
+ *
480
+ * @remarks
481
+ * **WebGL Combo**: `gl.bindBuffer` and `gl.bufferData` are combined into one function.
482
+ *
483
+ * @param buffer
484
+ * @param data
485
+ * @param usage
486
+ */
487
+ arrayBufferData(buffer, data, usage) {
488
+ if (this.boundArrayBuffer !== buffer) {
489
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
490
+ this.boundArrayBuffer = buffer;
491
+ }
492
+ this.gl.bufferData(this.gl.ARRAY_BUFFER, data, usage);
493
+ }
494
+ /**
495
+ * ```
496
+ * gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
497
+ * gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, usage);
498
+ * ```
499
+ * @remarks
500
+ * **WebGL Combo**: `gl.bindBuffer` and `gl.bufferData` are combined into one function.
501
+ *
502
+ * @param buffer
503
+ * @param data
504
+ * @param usage
505
+ */
506
+ elementArrayBufferData(buffer, data, usage) {
507
+ if (this.boundElementArrayBuffer !== buffer) {
508
+ this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, buffer);
509
+ this.boundElementArrayBuffer = buffer;
510
+ }
511
+ this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, data, usage);
512
+ }
513
+ /**
514
+ * ```
515
+ * gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
516
+ * gl.vertexAttribPointer(index, size, type, normalized, stride, offset);
517
+ * ```
518
+ *
519
+ * @remarks
520
+ * **WebGL Combo**: `gl.bindBuffer` and `gl.vertexAttribPointer` are combined into one function.
521
+ *
522
+ * @param buffer
523
+ * @param index
524
+ * @param size
525
+ * @param type
526
+ * @param normalized
527
+ * @param stride
528
+ * @param offset
529
+ */
530
+ vertexAttribPointer(buffer, index, size, type, normalized, stride, offset) {
531
+ if (this.boundArrayBuffer !== buffer) {
532
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
533
+ this.boundArrayBuffer = buffer;
534
+ }
535
+ this.gl.vertexAttribPointer(index, size, type, normalized, stride, offset);
536
+ }
537
+ /**
538
+ * Returns object with Attribute names as key and numbers as location values
539
+ *
540
+ * @param program
541
+ * @returns object with numbers
542
+ */
543
+ getUniformLocations(program) {
544
+ const gl = this.gl;
545
+ const length = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
546
+ const result = {};
547
+ for (let i = 0; i < length; i++) {
548
+ const info = gl.getActiveUniform(program, i);
549
+ //remove bracket + value from uniform name;
550
+ let name = info.name.replace(/\[.*?\]/g, '');
551
+ result[name] = gl.getUniformLocation(program, name);
552
+ }
553
+ return result;
554
+ }
555
+ /**
556
+ * Returns object with Attribute names as key and numbers as location values
557
+ * @param program
558
+ * @returns object with numbers
559
+ */
560
+ getAttributeLocations(program) {
561
+ const gl = this.gl;
562
+ const length = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
563
+ const result = [];
564
+ for (let i = 0; i < length; i++) {
565
+ const { name } = gl.getActiveAttrib(program, i);
566
+ result[gl.getAttribLocation(program, name)] = name;
567
+ }
568
+ return result;
569
+ }
570
+ /**
571
+ * ```
572
+ * gl.useProgram(program);
573
+ * ```
574
+ *
575
+ * @param program
576
+ * @returns
577
+ */
578
+ useProgram(program, uniformLocations) {
579
+ if (this.curProgram === program) {
580
+ return;
581
+ }
582
+ this.gl.useProgram(program);
583
+ this.curProgram = program;
584
+ this.curUniformLocations = uniformLocations;
585
+ }
586
+ /**
587
+ * Sets the value of a single float uniform variable.
588
+ *
589
+ * @param location - The location of the uniform variable.
590
+ * @param v0 - The value to set.
591
+ */
592
+ uniform1f(location, v0) {
593
+ this.gl.uniform1f(this.curUniformLocations[location] || null, v0);
594
+ }
595
+ /**
596
+ * Sets the value of a float array uniform variable.
597
+ *
598
+ * @param location - The location of the uniform variable.
599
+ * @param value - The array of values to set.
600
+ */
601
+ uniform1fv(location, value) {
602
+ this.gl.uniform1fv(this.curUniformLocations[location] || null, value);
603
+ }
604
+ /**
605
+ * Sets the value of a single integer uniform variable.
606
+ *
607
+ * @param location - The location of the uniform variable.
608
+ * @param v0 - The value to set.
609
+ */
610
+ uniform1i(location, v0) {
611
+ this.gl.uniform1i(this.curUniformLocations[location] || null, v0);
612
+ }
613
+ /**
614
+ * Sets the value of an integer array uniform variable.
615
+ *
616
+ * @param location - The location of the uniform variable.
617
+ * @param value - The array of values to set.
618
+ */
619
+ uniform1iv(location, value) {
620
+ this.gl.uniform1iv(this.curUniformLocations[location] || null, value);
621
+ }
622
+ /**
623
+ * Sets the value of a vec2 uniform variable.
624
+ *
625
+ * @param location - The location of the uniform variable.
626
+ * @param v0 - The first component of the vector.
627
+ * @param v1 - The second component of the vector.
628
+ */
629
+ uniform2f(location, v0, v1) {
630
+ this.gl.uniform2f(this.curUniformLocations[location] || null, v0, v1);
631
+ }
632
+ /**
633
+ * Sets the value of a vec3 uniform variable.
634
+ *
635
+ * @param location - The location of the uniform variable.
636
+ * @param v - array of 4 numbers.
637
+ */
638
+ uniform2fa(location, value) {
639
+ this.gl.uniform2f(this.curUniformLocations[location] || null, value[0], value[1]);
640
+ }
641
+ /**
642
+ * Sets the value of a vec2 array uniform variable.
643
+ *
644
+ * @param location - The location of the uniform variable.
645
+ * @param value - The array of vec2 values to set.
646
+ */
647
+ uniform2fv(location, value) {
648
+ this.gl.uniform2fv(this.curUniformLocations[location] || null, value);
649
+ }
650
+ /**
651
+ * Sets the value of a ivec2 uniform variable.
652
+ *
653
+ * @param location - The location of the uniform variable.
654
+ * @param v0 - The first component of the vector.
655
+ * @param v1 - The second component of the vector.
656
+ */
657
+ uniform2i(location, v0, v1) {
658
+ this.gl.uniform2i(this.curUniformLocations[location] || null, v0, v1);
659
+ }
660
+ /**
661
+ * Sets the value of an ivec2 array uniform variable.
662
+ *
663
+ * @param location - The location of the uniform variable.
664
+ * @param value - The array of ivec2 values to set.
665
+ */
666
+ uniform2iv(location, value) {
667
+ this.gl.uniform2iv(this.curUniformLocations[location] || null, value);
668
+ }
669
+ /**
670
+ * Sets the value of a vec3 uniform variable.
671
+ *
672
+ * @param location - The location of the uniform variable.
673
+ * @param v0 - The first component of the vector.
674
+ * @param v1 - The second component of the vector.
675
+ * @param v2 - The third component of the vector.
676
+ */
677
+ uniform3f(location, v0, v1, v2) {
678
+ this.gl.uniform3f(this.curUniformLocations[location] || null, v0, v1, v2);
679
+ }
680
+ /**
681
+ * Sets the value of a vec3 uniform variable.
682
+ *
683
+ * @param location - The location of the uniform variable.
684
+ * @param v - array of 4 numbers.
685
+ */
686
+ uniform3fa(location, value) {
687
+ this.gl.uniform3f(this.curUniformLocations[location] || null, value[0], value[1], value[2]);
688
+ }
689
+ /**
690
+ * Sets the value of a vec3 array uniform variable.
691
+ *
692
+ * @param location - The location of the uniform variable.
693
+ * @param value - The array of vec3 values to set.
694
+ */
695
+ uniform3fv(location, value) {
696
+ this.gl.uniform3fv(this.curUniformLocations[location] || null, value);
697
+ }
698
+ /**
699
+ * Sets the value of a ivec3 uniform variable.
700
+ *
701
+ * @param location - The location of the uniform variable.
702
+ * @param v0 - The first component of the vector.
703
+ * @param v1 - The second component of the vector.
704
+ * @param v2 - The third component of the vector.
705
+ */
706
+ uniform3i(location, v0, v1, v2) {
707
+ this.gl.uniform3i(this.curUniformLocations[location] || null, v0, v1, v2);
708
+ }
709
+ /**
710
+ * Sets the value of an ivec3 array uniform variable.
711
+ *
712
+ * @param location - The location of the uniform variable.
713
+ * @param value - The array of ivec3 values to set.
714
+ */
715
+ uniform3iv(location, value) {
716
+ this.gl.uniform3iv(this.curUniformLocations[location] || null, value);
717
+ }
718
+ /**
719
+ * Sets the value of a vec4 uniform variable.
720
+ *
721
+ * @param location - The location of the uniform variable.
722
+ * @param v0 - The first component of the vector.
723
+ * @param v1 - The second component of the vector.
724
+ * @param v2 - The third component of the vector.
725
+ * @param v3 - The fourth component of the vector.
726
+ */
727
+ uniform4f(location, v0, v1, v2, v3) {
728
+ this.gl.uniform4f(this.curUniformLocations[location] || null, v0, v1, v2, v3);
729
+ }
730
+ /**
731
+ * Sets the value of a vec4 uniform variable.
732
+ *
733
+ * @param location - The location of the uniform variable.
734
+ * @param v - array of 4 numbers.
735
+ */
736
+ uniform4fa(location, value) {
737
+ this.gl.uniform4f(this.curUniformLocations[location] || null, value[0], value[1], value[2], value[3]);
738
+ }
739
+ /**
740
+ * Sets the value of a vec4 array uniform variable.
741
+ *
742
+ * @param location - The location of the uniform variable.
743
+ * @param value - The array of vec4 values to set.
744
+ */
745
+ uniform4fv(location, value) {
746
+ this.gl.uniform4fv(this.curUniformLocations[location] || null, value);
747
+ }
748
+ /**
749
+ * Sets the value of a ivec4 uniform variable.
750
+ *
751
+ * @param location - The location of the uniform variable.
752
+ * @param v0 - The first component of the vector.
753
+ * @param v1 - The second component of the vector.
754
+ * @param v2 - The third component of the vector.
755
+ * @param v3 - The fourth component of the vector.
756
+ */
757
+ uniform4i(location, v0, v1, v2, v3) {
758
+ this.gl.uniform4i(this.curUniformLocations[location] || null, v0, v1, v2, v3);
759
+ }
760
+ /**
761
+ * Sets the value of an ivec4 array uniform variable.
762
+ *
763
+ * @param location - The location of the uniform variable.
764
+ * @param value - The array of ivec4 values to set.
765
+ */
766
+ uniform4iv(location, value) {
767
+ this.gl.uniform4iv(this.curUniformLocations[location] || null, value);
768
+ }
769
+ /**
770
+ * Sets the value of a mat2 uniform variable.
771
+ *
772
+ * @param location - The location of the uniform variable.
773
+ * @param transpose - Whether to transpose the matrix.
774
+ * @param value - The array of mat2 values to set.
775
+ */
776
+ uniformMatrix2fv(location, value) {
777
+ this.gl.uniformMatrix2fv(this.curUniformLocations[location] || null, false, value);
778
+ }
779
+ /**
780
+ * Sets the value of a mat2 uniform variable.
781
+ * @param location - The location of the uniform variable.
782
+ * @param value - The array of mat2 values to set.
783
+ */
784
+ uniformMatrix3fv(location, value) {
785
+ this.gl.uniformMatrix3fv(this.curUniformLocations[location] || null, false, value);
786
+ }
787
+ /**
788
+ * Sets the value of a mat4 uniform variable.
789
+ * @param location - The location of the uniform variable.
790
+ * @param value - The array of mat4 values to set.
791
+ */
792
+ uniformMatrix4fv(location, value) {
793
+ this.gl.uniformMatrix4fv(this.curUniformLocations[location] || null, false, value);
794
+ }
795
+ /**
796
+ * ```
797
+ * gl.getParameter(pname);
798
+ * ```
799
+ *
800
+ * @param pname
801
+ * @returns
802
+ */
803
+ getParameter(pname) {
804
+ return this.gl.getParameter(pname);
805
+ }
806
+ /**
807
+ * ```
808
+ * gl.drawElements(mode, count, type, offset);
809
+ * ```
810
+ *
811
+ * @param mode
812
+ * @param count
813
+ * @param type
814
+ * @param offset
815
+ */
816
+ drawElements(mode, count, type, offset) {
817
+ this.gl.drawElements(mode, count, type, offset);
818
+ }
819
+ /**
820
+ * ```
821
+ * gl.drawArrays(mode, first, count);
822
+ * ```
823
+ *
824
+ * @param mode
825
+ * @param first
826
+ * @param count
827
+ */
828
+ drawArrays(mode, first, count) {
829
+ this.gl.drawArrays(mode, first, count);
830
+ }
831
+ /**
832
+ * ```
833
+ * gl.drawArrays(mode, first, count);
834
+ * ```
835
+ *
836
+ * @param name
837
+ * @returns
838
+ */
839
+ getExtension(name) {
840
+ return this.gl.getExtension(name);
841
+ }
842
+ /**
843
+ * ```
844
+ * gl.getError(type);
845
+ * ```
846
+ *
847
+ * @returns
848
+ */
849
+ getError() {
850
+ return this.gl.getError();
851
+ }
852
+ /**
853
+ * ```
854
+ * gl.createVertexArray();
855
+ * ```
856
+ *
857
+ * @returns
858
+ */
859
+ createVertexArray() {
860
+ if (this.gl instanceof WebGL2RenderingContext) {
861
+ return this.gl.createVertexArray();
862
+ }
863
+ return undefined;
864
+ }
865
+ /**
866
+ * ```
867
+ * gl.bindVertexArray(vertexArray);
868
+ * ```
869
+ *
870
+ * @param vertexArray
871
+ */
872
+ bindVertexArray(vertexArray) {
873
+ if (this.gl instanceof WebGL2RenderingContext) {
874
+ this.gl.bindVertexArray(vertexArray);
875
+ }
876
+ }
877
+ /**
878
+ * ```
879
+ * gl.getAttribLocation(program, name);
880
+ * ```
881
+ *
882
+ * @param program
883
+ * @param name
884
+ * @returns
885
+ */
886
+ getAttribLocation(program, name) {
887
+ return this.gl.getAttribLocation(program, name);
888
+ }
889
+ /**
890
+ * ```
891
+ * gl.getUniformLocation(program, name);
892
+ * ```
893
+ *
894
+ * @param program
895
+ * @param name
896
+ * @returns
897
+ */
898
+ getUniformLocation(program, name) {
899
+ return this.gl.getUniformLocation(program, name);
900
+ }
901
+ /**
902
+ * ```
903
+ * gl.enableVertexAttribArray(index);
904
+ * ```
905
+ *
906
+ * @param index
907
+ */
908
+ enableVertexAttribArray(index) {
909
+ this.gl.enableVertexAttribArray(index);
910
+ }
911
+ /**
912
+ * ```
913
+ * gl.disableVertexAttribArray(index);
914
+ * ```
915
+ *
916
+ * @param index
917
+ */
918
+ disableVertexAttribArray(index) {
919
+ this.gl.disableVertexAttribArray(index);
920
+ }
921
+ /**
922
+ * ```
923
+ * gl.createShader(type);
924
+ * ```
925
+ *
926
+ * @param type
927
+ * @returns
928
+ */
929
+ createShader(type) {
930
+ return this.gl.createShader(type);
931
+ }
932
+ /**
933
+ * ```
934
+ * gl.compileShader(shader);
935
+ * ```
936
+ *
937
+ * @param shader
938
+ * @returns
939
+ */
940
+ compileShader(shader) {
941
+ this.gl.compileShader(shader);
942
+ }
943
+ /**
944
+ * ```
945
+ * gl.attachShader(program, shader);
946
+ * ```
947
+ *
948
+ * @param program
949
+ * @param shader
950
+ */
951
+ attachShader(program, shader) {
952
+ this.gl.attachShader(program, shader);
953
+ }
954
+ /**
955
+ * ```
956
+ * gl.linkProgram(program);
957
+ * ```
958
+ *
959
+ * @param program
960
+ */
961
+ linkProgram(program) {
962
+ this.gl.linkProgram(program);
963
+ }
964
+ /**
965
+ * ```
966
+ * gl.deleteProgram(shader);
967
+ * ```
968
+ *
969
+ * @param shader
970
+ */
971
+ deleteProgram(shader) {
972
+ this.gl.deleteProgram(shader);
973
+ }
974
+ /**
975
+ * ```
976
+ * gl.getShaderParameter(shader, pname);
977
+ * ```
978
+ *
979
+ * @param shader
980
+ * @param pname
981
+ */
982
+ getShaderParameter(shader, pname) {
983
+ return this.gl.getShaderParameter(shader, pname);
984
+ }
985
+ /**
986
+ * ```
987
+ * gl.getShaderInfoLog(shader);
988
+ * ```
989
+ *
990
+ * @param shader
991
+ */
992
+ getShaderInfoLog(shader) {
993
+ return this.gl.getShaderInfoLog(shader);
994
+ }
995
+ /**
996
+ * ```
997
+ * gl.createProgram();
998
+ * ```
999
+ *
1000
+ * @returns
1001
+ */
1002
+ createProgram() {
1003
+ return this.gl.createProgram();
1004
+ }
1005
+ /**
1006
+ * ```
1007
+ * gl.getProgramParameter(program, pname);
1008
+ * ```
1009
+ *
1010
+ * @param program
1011
+ * @param pname
1012
+ * @returns
1013
+ */
1014
+ getProgramParameter(program, pname) {
1015
+ return this.gl.getProgramParameter(program, pname);
1016
+ }
1017
+ /**
1018
+ * ```
1019
+ * gl.getProgramInfoLog(program);
1020
+ * ```
1021
+ *
1022
+ * @param program
1023
+ * @returns
1024
+ */
1025
+ getProgramInfoLog(program) {
1026
+ return this.gl.getProgramInfoLog(program);
1027
+ }
1028
+ /**
1029
+ * ```
1030
+ * gl.shaderSource(shader, source);
1031
+ * ```
1032
+ *
1033
+ * @param shader
1034
+ * @param source
1035
+ */
1036
+ shaderSource(shader, source) {
1037
+ this.gl.shaderSource(shader, source);
1038
+ }
1039
+ /**
1040
+ * ```
1041
+ * gl.deleteShader(shader);
1042
+ * ```
1043
+ *
1044
+ * @param shader
1045
+ */
1046
+ deleteShader(shader) {
1047
+ this.gl.deleteShader(shader);
1048
+ }
1049
+ /**
1050
+ * ```
1051
+ * gl.deleteBuffer(buffer);
1052
+ * ```
1053
+ *
1054
+ * @param buffer - The buffer to delete
1055
+ */
1056
+ deleteBuffer(buffer) {
1057
+ const { gl } = this;
1058
+ gl.deleteBuffer(buffer);
1059
+ // Reset bound buffers if they match the deleted buffer
1060
+ if (this.boundArrayBuffer === buffer) {
1061
+ this.boundArrayBuffer = null;
1062
+ }
1063
+ }
1064
+ /**
1065
+ * ```
1066
+ * gl.deleteVertexArray(vertexArray);
1067
+ * ```
1068
+ *
1069
+ * @param vertexArray - The vertex array object to delete
1070
+ */
1071
+ deleteVertexArray(vertexArray) {
1072
+ if (this.isWebGl2()) {
1073
+ this.gl.deleteVertexArray(vertexArray);
1074
+ }
1075
+ }
1076
+ /**
1077
+ * Check for WebGL errors and return error information
1078
+ * @param operation Description of the operation for error reporting
1079
+ * @returns Object with error information or null if no error
1080
+ */
1081
+ checkError(operation) {
1082
+ const error = this.getError();
1083
+ if (error !== 0) {
1084
+ // 0 is GL_NO_ERROR
1085
+ let errorName = 'UNKNOWN_ERROR';
1086
+ switch (error) {
1087
+ case this.INVALID_ENUM:
1088
+ errorName = 'INVALID_ENUM';
1089
+ break;
1090
+ case 0x0501: // GL_INVALID_VALUE
1091
+ errorName = 'INVALID_VALUE';
1092
+ break;
1093
+ case this.INVALID_OPERATION:
1094
+ errorName = 'INVALID_OPERATION';
1095
+ break;
1096
+ case 0x0505: // GL_OUT_OF_MEMORY
1097
+ errorName = 'OUT_OF_MEMORY';
1098
+ break;
1099
+ case 0x9242: // GL_CONTEXT_LOST_WEBGL
1100
+ errorName = 'CONTEXT_LOST_WEBGL';
1101
+ break;
1102
+ }
1103
+ const message = `WebGL ${errorName} (0x${error.toString(16)}) during ${operation}`;
1104
+ return { error, errorName, message };
1105
+ }
1106
+ return null;
1107
+ }
1108
+ /**
1109
+ *
1110
+ * Compressed Textures support
1111
+ */
1112
+ uploadKTX(texture, data) {
1113
+ const { glInternalFormat, mipmaps, w: width, h: height, blockInfo } = data;
1114
+ if (mipmaps === undefined) {
1115
+ return;
1116
+ }
1117
+ this.bindTexture(texture);
1118
+ const blockWidth = blockInfo.width;
1119
+ const blockHeight = blockInfo.height;
1120
+ let w = width;
1121
+ let h = height;
1122
+ for (let i = 0; i < mipmaps.length; i++) {
1123
+ let view = new Uint8Array(mipmaps[i]);
1124
+ const uploadW = Math.ceil(w / blockWidth) * blockWidth;
1125
+ const uploadH = Math.ceil(h / blockHeight) * blockHeight;
1126
+ const expectedBytes = Math.ceil(w / blockWidth) *
1127
+ Math.ceil(h / blockHeight) *
1128
+ blockInfo.bytes;
1129
+ if (view.byteLength < expectedBytes) {
1130
+ const padded = new Uint8Array(expectedBytes);
1131
+ padded.set(view);
1132
+ view = padded;
1133
+ }
1134
+ this.compressedTexImage2D(i, glInternalFormat, uploadW, uploadH, 0, view);
1135
+ w = Math.max(1, w >> 1);
1136
+ h = Math.max(1, h >> 1);
1137
+ }
1138
+ this.texParameteri(this.TEXTURE_WRAP_S, this.CLAMP_TO_EDGE);
1139
+ this.texParameteri(this.TEXTURE_WRAP_T, this.CLAMP_TO_EDGE);
1140
+ this.texParameteri(this.TEXTURE_MAG_FILTER, this.LINEAR);
1141
+ this.texParameteri(this.TEXTURE_MIN_FILTER, mipmaps.length > 1 ? this.LINEAR_MIPMAP_LINEAR : this.LINEAR);
1142
+ }
1143
+ uploadPVR(texture, data) {
1144
+ const { glInternalFormat, mipmaps, w: width, h: height } = data;
1145
+ if (mipmaps === undefined) {
1146
+ return;
1147
+ }
1148
+ this.bindTexture(texture);
1149
+ let w = width;
1150
+ let h = height;
1151
+ for (let i = 0; i < mipmaps.length; i++) {
1152
+ this.compressedTexImage2D(i, glInternalFormat, w, h, 0, new Uint8Array(mipmaps[i]));
1153
+ w = Math.max(1, w >> 1);
1154
+ h = Math.max(1, h >> 1);
1155
+ }
1156
+ this.texParameteri(this.TEXTURE_WRAP_S, this.CLAMP_TO_EDGE);
1157
+ this.texParameteri(this.TEXTURE_WRAP_T, this.CLAMP_TO_EDGE);
1158
+ this.texParameteri(this.TEXTURE_MAG_FILTER, this.LINEAR);
1159
+ this.texParameteri(this.TEXTURE_MIN_FILTER, mipmaps.length > 1 ? this.LINEAR_MIPMAP_LINEAR : this.LINEAR);
1160
+ }
1161
+ uploadASTC(texture, data) {
1162
+ if (this.getExtension('WEBGL_compressed_texture_astc') === null) {
1163
+ throw new Error('ASTC compressed textures not supported by this device');
1164
+ }
1165
+ this.bindTexture(texture);
1166
+ const { glInternalFormat, mipmaps, w, h } = data;
1167
+ if (mipmaps === undefined) {
1168
+ return;
1169
+ }
1170
+ const view = new Uint8Array(mipmaps[0]);
1171
+ this.compressedTexImage2D(0, glInternalFormat, w, h, 0, view);
1172
+ // ASTC textures MUST use no mipmaps unless stored
1173
+ this.texParameteri(this.TEXTURE_WRAP_S, this.CLAMP_TO_EDGE);
1174
+ this.texParameteri(this.TEXTURE_WRAP_T, this.CLAMP_TO_EDGE);
1175
+ this.texParameteri(this.TEXTURE_MAG_FILTER, this.LINEAR);
1176
+ this.texParameteri(this.TEXTURE_MIN_FILTER, this.LINEAR);
1177
+ }
1178
+ }
1179
+ /**
1180
+ * Compare two arrays for equality.
1181
+ *
1182
+ * @remarks
1183
+ * This function will not try to compare nested arrays or Float32Arrays and
1184
+ * instead will always return false when they are encountered.
1185
+ *
1186
+ * @param a
1187
+ * @param b
1188
+ * @returns
1189
+ */
1190
+ export function compareArrays(a, b) {
1191
+ if (a.length !== b.length) {
1192
+ return false;
1193
+ }
1194
+ let result = false;
1195
+ for (let i = 0; i < a.length; i++) {
1196
+ if (Array.isArray(a[i]) || a[i] instanceof Float32Array) {
1197
+ result = false;
1198
+ break;
1199
+ }
1200
+ if (a[i] !== b[i]) {
1201
+ result = false;
1202
+ break;
1203
+ }
1204
+ result = true;
1205
+ }
1206
+ return result;
1207
+ }
1208
+ //# sourceMappingURL=WebGlContextWrapper.js.map