@blakron/core 0.4.1 → 0.4.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 (601) hide show
  1. package/dist/blakron/display/DisplayObject.d.ts +1 -1
  2. package/dist/blakron/display/DisplayObject.d.ts.map +1 -1
  3. package/dist/blakron/display/DisplayObject.js +1 -1
  4. package/dist/blakron/display/DisplayObject.js.map +1 -1
  5. package/dist/blakron/player/Player.d.ts.map +1 -1
  6. package/dist/blakron/player/Player.js +1 -2
  7. package/dist/blakron/player/Player.js.map +1 -1
  8. package/dist/blakron/player/RenderPipe.d.ts +1 -1
  9. package/dist/blakron/player/RenderPipe.d.ts.map +1 -1
  10. package/dist/blakron/player/{CanvasRenderer.d.ts → canvas/CanvasRenderer.d.ts} +5 -5
  11. package/dist/blakron/player/canvas/CanvasRenderer.d.ts.map +1 -0
  12. package/dist/blakron/player/{CanvasRenderer.js → canvas/CanvasRenderer.js} +11 -11
  13. package/dist/blakron/player/canvas/CanvasRenderer.js.map +1 -0
  14. package/dist/blakron/player/{DisplayList.d.ts → canvas/DisplayList.d.ts} +2 -2
  15. package/dist/blakron/player/canvas/DisplayList.d.ts.map +1 -0
  16. package/dist/blakron/player/{DisplayList.js → canvas/DisplayList.js} +1 -1
  17. package/dist/blakron/player/canvas/DisplayList.js.map +1 -0
  18. package/dist/blakron/player/canvas/RenderBuffer.d.ts.map +1 -0
  19. package/dist/blakron/player/canvas/RenderBuffer.js.map +1 -0
  20. package/dist/blakron/player/canvas/index.d.ts +4 -0
  21. package/dist/blakron/player/canvas/index.d.ts.map +1 -0
  22. package/dist/blakron/player/canvas/index.js +4 -0
  23. package/dist/blakron/player/canvas/index.js.map +1 -0
  24. package/dist/blakron/player/createPlayer.d.ts.map +1 -1
  25. package/dist/blakron/player/createPlayer.js +1 -2
  26. package/dist/blakron/player/createPlayer.js.map +1 -1
  27. package/dist/blakron/player/index.d.ts +2 -4
  28. package/dist/blakron/player/index.d.ts.map +1 -1
  29. package/dist/blakron/player/index.js +2 -4
  30. package/dist/blakron/player/index.js.map +1 -1
  31. package/dist/{heron/player → blakron/player/webgl}/InstructionSet.d.ts +1 -1
  32. package/dist/blakron/player/webgl/InstructionSet.d.ts.map +1 -0
  33. package/dist/blakron/player/webgl/InstructionSet.js.map +1 -0
  34. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts +6 -0
  35. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts.map +1 -1
  36. package/dist/blakron/player/webgl/WebGLRenderContext.js +28 -10
  37. package/dist/blakron/player/webgl/WebGLRenderContext.js.map +1 -1
  38. package/dist/blakron/player/webgl/WebGLRenderer.d.ts.map +1 -1
  39. package/dist/blakron/player/webgl/WebGLRenderer.js +3 -8
  40. package/dist/blakron/player/webgl/WebGLRenderer.js.map +1 -1
  41. package/dist/blakron/player/webgl/index.d.ts +1 -1
  42. package/dist/blakron/player/webgl/index.d.ts.map +1 -1
  43. package/dist/blakron/player/webgl/index.js +1 -1
  44. package/dist/blakron/player/webgl/index.js.map +1 -1
  45. package/dist/{heron/player → blakron/player/webgl}/pipes/BitmapPipe.d.ts +3 -3
  46. package/dist/blakron/player/webgl/pipes/BitmapPipe.d.ts.map +1 -0
  47. package/dist/blakron/player/webgl/pipes/BitmapPipe.js.map +1 -0
  48. package/dist/blakron/player/{pipes → webgl/pipes}/FilterPipe.d.ts +4 -4
  49. package/dist/blakron/player/webgl/pipes/FilterPipe.d.ts.map +1 -0
  50. package/dist/blakron/player/{pipes → webgl/pipes}/FilterPipe.js +2 -2
  51. package/dist/blakron/player/webgl/pipes/FilterPipe.js.map +1 -0
  52. package/dist/{heron/player → blakron/player/webgl}/pipes/GraphicsPipe.d.ts +5 -5
  53. package/dist/blakron/player/webgl/pipes/GraphicsPipe.d.ts.map +1 -0
  54. package/dist/blakron/player/{pipes → webgl/pipes}/GraphicsPipe.js +2 -2
  55. package/dist/blakron/player/webgl/pipes/GraphicsPipe.js.map +1 -0
  56. package/dist/blakron/player/{pipes → webgl/pipes}/MaskPipe.d.ts +3 -3
  57. package/dist/blakron/player/webgl/pipes/MaskPipe.d.ts.map +1 -0
  58. package/dist/blakron/player/{pipes → webgl/pipes}/MaskPipe.js +2 -2
  59. package/dist/blakron/player/webgl/pipes/MaskPipe.js.map +1 -0
  60. package/dist/blakron/player/{pipes → webgl/pipes}/MeshPipe.d.ts +3 -3
  61. package/dist/blakron/player/webgl/pipes/MeshPipe.d.ts.map +1 -0
  62. package/dist/blakron/player/webgl/pipes/MeshPipe.js.map +1 -0
  63. package/dist/{heron/player → blakron/player/webgl}/pipes/TextPipe.d.ts +4 -4
  64. package/dist/blakron/player/webgl/pipes/TextPipe.d.ts.map +1 -0
  65. package/dist/blakron/player/{pipes → webgl/pipes}/TextPipe.js +2 -2
  66. package/dist/blakron/player/webgl/pipes/TextPipe.js.map +1 -0
  67. package/dist/blakron/player/webgl/pipes/index.d.ts +7 -0
  68. package/dist/blakron/player/webgl/pipes/index.d.ts.map +1 -0
  69. package/dist/blakron/player/webgl/pipes/index.js +7 -0
  70. package/dist/blakron/player/webgl/pipes/index.js.map +1 -0
  71. package/dist/{heron/player/webgl → blakron/player/webgl/shaders}/ShaderLib.d.ts +4 -16
  72. package/dist/blakron/player/webgl/shaders/ShaderLib.d.ts.map +1 -0
  73. package/dist/{heron/player/webgl → blakron/player/webgl/shaders}/ShaderLib.js +5 -27
  74. package/dist/blakron/player/webgl/shaders/ShaderLib.js.map +1 -0
  75. package/dist/blakron/player/webgl/shaders/ShaderLib2.d.ts +22 -0
  76. package/dist/blakron/player/webgl/shaders/ShaderLib2.d.ts.map +1 -0
  77. package/dist/blakron/player/webgl/{ShaderLib.js → shaders/ShaderLib2.js} +89 -92
  78. package/dist/blakron/player/webgl/shaders/ShaderLib2.js.map +1 -0
  79. package/dist/blakron/player/webgl/shaders/index.d.ts +5 -0
  80. package/dist/blakron/player/webgl/shaders/index.d.ts.map +1 -0
  81. package/dist/blakron/player/webgl/shaders/index.js +5 -0
  82. package/dist/blakron/player/webgl/shaders/index.js.map +1 -0
  83. package/package.json +51 -52
  84. package/dist/blakron/player/CanvasRenderer.d.ts.map +0 -1
  85. package/dist/blakron/player/CanvasRenderer.js.map +0 -1
  86. package/dist/blakron/player/DisplayList.d.ts.map +0 -1
  87. package/dist/blakron/player/DisplayList.js.map +0 -1
  88. package/dist/blakron/player/InstructionSet.d.ts +0 -49
  89. package/dist/blakron/player/InstructionSet.d.ts.map +0 -1
  90. package/dist/blakron/player/InstructionSet.js.map +0 -1
  91. package/dist/blakron/player/RenderBuffer.d.ts.map +0 -1
  92. package/dist/blakron/player/RenderBuffer.js.map +0 -1
  93. package/dist/blakron/player/pipes/BitmapPipe.d.ts +0 -35
  94. package/dist/blakron/player/pipes/BitmapPipe.d.ts.map +0 -1
  95. package/dist/blakron/player/pipes/BitmapPipe.js.map +0 -1
  96. package/dist/blakron/player/pipes/FilterPipe.d.ts.map +0 -1
  97. package/dist/blakron/player/pipes/FilterPipe.js.map +0 -1
  98. package/dist/blakron/player/pipes/GraphicsPipe.d.ts +0 -36
  99. package/dist/blakron/player/pipes/GraphicsPipe.d.ts.map +0 -1
  100. package/dist/blakron/player/pipes/GraphicsPipe.js.map +0 -1
  101. package/dist/blakron/player/pipes/MaskPipe.d.ts.map +0 -1
  102. package/dist/blakron/player/pipes/MaskPipe.js.map +0 -1
  103. package/dist/blakron/player/pipes/MeshPipe.d.ts.map +0 -1
  104. package/dist/blakron/player/pipes/MeshPipe.js.map +0 -1
  105. package/dist/blakron/player/pipes/TextPipe.d.ts +0 -52
  106. package/dist/blakron/player/pipes/TextPipe.d.ts.map +0 -1
  107. package/dist/blakron/player/pipes/TextPipe.js.map +0 -1
  108. package/dist/blakron/player/webgl/ShaderLib.d.ts +0 -34
  109. package/dist/blakron/player/webgl/ShaderLib.d.ts.map +0 -1
  110. package/dist/blakron/player/webgl/ShaderLib.js.map +0 -1
  111. package/dist/heron/benchmark/BenchmarkRunner.d.ts +0 -60
  112. package/dist/heron/benchmark/BenchmarkRunner.d.ts.map +0 -1
  113. package/dist/heron/benchmark/BenchmarkRunner.js +0 -112
  114. package/dist/heron/benchmark/BenchmarkRunner.js.map +0 -1
  115. package/dist/heron/benchmark/MetricsCollector.d.ts +0 -34
  116. package/dist/heron/benchmark/MetricsCollector.d.ts.map +0 -1
  117. package/dist/heron/benchmark/MetricsCollector.js +0 -123
  118. package/dist/heron/benchmark/MetricsCollector.js.map +0 -1
  119. package/dist/heron/benchmark/PerfPanel.d.ts +0 -24
  120. package/dist/heron/benchmark/PerfPanel.d.ts.map +0 -1
  121. package/dist/heron/benchmark/PerfPanel.js +0 -131
  122. package/dist/heron/benchmark/PerfPanel.js.map +0 -1
  123. package/dist/heron/benchmark/ReportExporter.d.ts +0 -8
  124. package/dist/heron/benchmark/ReportExporter.d.ts.map +0 -1
  125. package/dist/heron/benchmark/ReportExporter.js +0 -54
  126. package/dist/heron/benchmark/ReportExporter.js.map +0 -1
  127. package/dist/heron/benchmark/SceneRegistry.d.ts +0 -16
  128. package/dist/heron/benchmark/SceneRegistry.d.ts.map +0 -1
  129. package/dist/heron/benchmark/SceneRegistry.js +0 -233
  130. package/dist/heron/benchmark/SceneRegistry.js.map +0 -1
  131. package/dist/heron/benchmark/types.d.ts +0 -47
  132. package/dist/heron/benchmark/types.d.ts.map +0 -1
  133. package/dist/heron/benchmark/types.js +0 -2
  134. package/dist/heron/benchmark/types.js.map +0 -1
  135. package/dist/heron/display/Bitmap.d.ts +0 -53
  136. package/dist/heron/display/Bitmap.d.ts.map +0 -1
  137. package/dist/heron/display/Bitmap.js +0 -176
  138. package/dist/heron/display/Bitmap.js.map +0 -1
  139. package/dist/heron/display/DisplayObject.d.ts +0 -206
  140. package/dist/heron/display/DisplayObject.d.ts.map +0 -1
  141. package/dist/heron/display/DisplayObject.js +0 -827
  142. package/dist/heron/display/DisplayObject.js.map +0 -1
  143. package/dist/heron/display/DisplayObjectContainer.d.ts +0 -57
  144. package/dist/heron/display/DisplayObjectContainer.d.ts.map +0 -1
  145. package/dist/heron/display/DisplayObjectContainer.js +0 -348
  146. package/dist/heron/display/DisplayObjectContainer.js.map +0 -1
  147. package/dist/heron/display/Graphics.d.ts +0 -49
  148. package/dist/heron/display/Graphics.d.ts.map +0 -1
  149. package/dist/heron/display/Graphics.js +0 -315
  150. package/dist/heron/display/Graphics.js.map +0 -1
  151. package/dist/heron/display/GraphicsPath.d.ts +0 -112
  152. package/dist/heron/display/GraphicsPath.d.ts.map +0 -1
  153. package/dist/heron/display/GraphicsPath.js +0 -2
  154. package/dist/heron/display/GraphicsPath.js.map +0 -1
  155. package/dist/heron/display/Mesh.d.ts +0 -21
  156. package/dist/heron/display/Mesh.d.ts.map +0 -1
  157. package/dist/heron/display/Mesh.js +0 -56
  158. package/dist/heron/display/Mesh.js.map +0 -1
  159. package/dist/heron/display/Shape.d.ts +0 -12
  160. package/dist/heron/display/Shape.d.ts.map +0 -1
  161. package/dist/heron/display/Shape.js +0 -35
  162. package/dist/heron/display/Shape.js.map +0 -1
  163. package/dist/heron/display/Sprite.d.ts +0 -13
  164. package/dist/heron/display/Sprite.d.ts.map +0 -1
  165. package/dist/heron/display/Sprite.js +0 -37
  166. package/dist/heron/display/Sprite.js.map +0 -1
  167. package/dist/heron/display/Stage.d.ts +0 -45
  168. package/dist/heron/display/Stage.d.ts.map +0 -1
  169. package/dist/heron/display/Stage.js +0 -107
  170. package/dist/heron/display/Stage.js.map +0 -1
  171. package/dist/heron/display/enums/BitmapFillMode.d.ts +0 -7
  172. package/dist/heron/display/enums/BitmapFillMode.d.ts.map +0 -1
  173. package/dist/heron/display/enums/BitmapFillMode.js +0 -6
  174. package/dist/heron/display/enums/BitmapFillMode.js.map +0 -1
  175. package/dist/heron/display/enums/BlendMode.d.ts +0 -24
  176. package/dist/heron/display/enums/BlendMode.d.ts.map +0 -1
  177. package/dist/heron/display/enums/BlendMode.js +0 -31
  178. package/dist/heron/display/enums/BlendMode.js.map +0 -1
  179. package/dist/heron/display/enums/CapsStyle.d.ts +0 -7
  180. package/dist/heron/display/enums/CapsStyle.d.ts.map +0 -1
  181. package/dist/heron/display/enums/CapsStyle.js +0 -6
  182. package/dist/heron/display/enums/CapsStyle.js.map +0 -1
  183. package/dist/heron/display/enums/GradientType.d.ts +0 -6
  184. package/dist/heron/display/enums/GradientType.d.ts.map +0 -1
  185. package/dist/heron/display/enums/GradientType.js +0 -5
  186. package/dist/heron/display/enums/GradientType.js.map +0 -1
  187. package/dist/heron/display/enums/JointStyle.d.ts +0 -7
  188. package/dist/heron/display/enums/JointStyle.d.ts.map +0 -1
  189. package/dist/heron/display/enums/JointStyle.js +0 -6
  190. package/dist/heron/display/enums/JointStyle.js.map +0 -1
  191. package/dist/heron/display/enums/OrientationMode.d.ts +0 -8
  192. package/dist/heron/display/enums/OrientationMode.d.ts.map +0 -1
  193. package/dist/heron/display/enums/OrientationMode.js +0 -7
  194. package/dist/heron/display/enums/OrientationMode.js.map +0 -1
  195. package/dist/heron/display/enums/StageScaleMode.d.ts +0 -12
  196. package/dist/heron/display/enums/StageScaleMode.d.ts.map +0 -1
  197. package/dist/heron/display/enums/StageScaleMode.js +0 -11
  198. package/dist/heron/display/enums/StageScaleMode.js.map +0 -1
  199. package/dist/heron/display/enums/index.d.ts +0 -8
  200. package/dist/heron/display/enums/index.d.ts.map +0 -1
  201. package/dist/heron/display/enums/index.js +0 -8
  202. package/dist/heron/display/enums/index.js.map +0 -1
  203. package/dist/heron/display/index.d.ts +0 -21
  204. package/dist/heron/display/index.d.ts.map +0 -1
  205. package/dist/heron/display/index.js +0 -20
  206. package/dist/heron/display/index.js.map +0 -1
  207. package/dist/heron/display/texture/BitmapData.d.ts +0 -37
  208. package/dist/heron/display/texture/BitmapData.d.ts.map +0 -1
  209. package/dist/heron/display/texture/BitmapData.js +0 -144
  210. package/dist/heron/display/texture/BitmapData.js.map +0 -1
  211. package/dist/heron/display/texture/RenderTexture.d.ts +0 -13
  212. package/dist/heron/display/texture/RenderTexture.d.ts.map +0 -1
  213. package/dist/heron/display/texture/RenderTexture.js +0 -51
  214. package/dist/heron/display/texture/RenderTexture.js.map +0 -1
  215. package/dist/heron/display/texture/SpriteSheet.d.ts +0 -13
  216. package/dist/heron/display/texture/SpriteSheet.d.ts.map +0 -1
  217. package/dist/heron/display/texture/SpriteSheet.js +0 -34
  218. package/dist/heron/display/texture/SpriteSheet.js.map +0 -1
  219. package/dist/heron/display/texture/Texture.d.ts +0 -33
  220. package/dist/heron/display/texture/Texture.d.ts.map +0 -1
  221. package/dist/heron/display/texture/Texture.js +0 -77
  222. package/dist/heron/display/texture/Texture.js.map +0 -1
  223. package/dist/heron/display/texture/index.d.ts +0 -5
  224. package/dist/heron/display/texture/index.d.ts.map +0 -1
  225. package/dist/heron/display/texture/index.js +0 -5
  226. package/dist/heron/display/texture/index.js.map +0 -1
  227. package/dist/heron/events/Event.d.ts +0 -57
  228. package/dist/heron/events/Event.d.ts.map +0 -1
  229. package/dist/heron/events/Event.js +0 -139
  230. package/dist/heron/events/Event.js.map +0 -1
  231. package/dist/heron/events/EventDispatcher.d.ts +0 -23
  232. package/dist/heron/events/EventDispatcher.d.ts.map +0 -1
  233. package/dist/heron/events/EventDispatcher.js +0 -123
  234. package/dist/heron/events/EventDispatcher.js.map +0 -1
  235. package/dist/heron/events/EventPhase.d.ts +0 -6
  236. package/dist/heron/events/EventPhase.d.ts.map +0 -1
  237. package/dist/heron/events/EventPhase.js +0 -2
  238. package/dist/heron/events/EventPhase.js.map +0 -1
  239. package/dist/heron/events/FocusEvent.d.ts +0 -7
  240. package/dist/heron/events/FocusEvent.d.ts.map +0 -1
  241. package/dist/heron/events/FocusEvent.js +0 -11
  242. package/dist/heron/events/FocusEvent.js.map +0 -1
  243. package/dist/heron/events/HTTPStatusEvent.d.ts +0 -10
  244. package/dist/heron/events/HTTPStatusEvent.d.ts.map +0 -1
  245. package/dist/heron/events/HTTPStatusEvent.js +0 -24
  246. package/dist/heron/events/HTTPStatusEvent.js.map +0 -1
  247. package/dist/heron/events/IEventDispatcher.d.ts +0 -11
  248. package/dist/heron/events/IEventDispatcher.d.ts.map +0 -1
  249. package/dist/heron/events/IEventDispatcher.js +0 -2
  250. package/dist/heron/events/IEventDispatcher.js.map +0 -1
  251. package/dist/heron/events/IOErrorEvent.d.ts +0 -8
  252. package/dist/heron/events/IOErrorEvent.d.ts.map +0 -1
  253. package/dist/heron/events/IOErrorEvent.js +0 -17
  254. package/dist/heron/events/IOErrorEvent.js.map +0 -1
  255. package/dist/heron/events/ProgressEvent.d.ts +0 -11
  256. package/dist/heron/events/ProgressEvent.d.ts.map +0 -1
  257. package/dist/heron/events/ProgressEvent.js +0 -25
  258. package/dist/heron/events/ProgressEvent.js.map +0 -1
  259. package/dist/heron/events/StageOrientationEvent.d.ts +0 -8
  260. package/dist/heron/events/StageOrientationEvent.d.ts.map +0 -1
  261. package/dist/heron/events/StageOrientationEvent.js +0 -17
  262. package/dist/heron/events/StageOrientationEvent.js.map +0 -1
  263. package/dist/heron/events/TextEvent.d.ts +0 -9
  264. package/dist/heron/events/TextEvent.d.ts.map +0 -1
  265. package/dist/heron/events/TextEvent.js +0 -21
  266. package/dist/heron/events/TextEvent.js.map +0 -1
  267. package/dist/heron/events/TimerEvent.d.ts +0 -14
  268. package/dist/heron/events/TimerEvent.d.ts.map +0 -1
  269. package/dist/heron/events/TimerEvent.js +0 -27
  270. package/dist/heron/events/TimerEvent.js.map +0 -1
  271. package/dist/heron/events/TouchEvent.d.ts +0 -32
  272. package/dist/heron/events/TouchEvent.d.ts.map +0 -1
  273. package/dist/heron/events/TouchEvent.js +0 -85
  274. package/dist/heron/events/TouchEvent.js.map +0 -1
  275. package/dist/heron/events/index.d.ts +0 -13
  276. package/dist/heron/events/index.d.ts.map +0 -1
  277. package/dist/heron/events/index.js +0 -11
  278. package/dist/heron/events/index.js.map +0 -1
  279. package/dist/heron/external/ExternalInterface.d.ts +0 -18
  280. package/dist/heron/external/ExternalInterface.d.ts.map +0 -1
  281. package/dist/heron/external/ExternalInterface.js +0 -23
  282. package/dist/heron/external/ExternalInterface.js.map +0 -1
  283. package/dist/heron/external/index.d.ts +0 -2
  284. package/dist/heron/external/index.d.ts.map +0 -1
  285. package/dist/heron/external/index.js +0 -2
  286. package/dist/heron/external/index.js.map +0 -1
  287. package/dist/heron/filters/BlurFilter.d.ts +0 -16
  288. package/dist/heron/filters/BlurFilter.d.ts.map +0 -1
  289. package/dist/heron/filters/BlurFilter.js +0 -56
  290. package/dist/heron/filters/BlurFilter.js.map +0 -1
  291. package/dist/heron/filters/ColorMatrixFilter.d.ts +0 -10
  292. package/dist/heron/filters/ColorMatrixFilter.d.ts.map +0 -1
  293. package/dist/heron/filters/ColorMatrixFilter.js +0 -51
  294. package/dist/heron/filters/ColorMatrixFilter.js.map +0 -1
  295. package/dist/heron/filters/CustomFilter.d.ts +0 -12
  296. package/dist/heron/filters/CustomFilter.d.ts.map +0 -1
  297. package/dist/heron/filters/CustomFilter.js +0 -43
  298. package/dist/heron/filters/CustomFilter.js.map +0 -1
  299. package/dist/heron/filters/DropShadowFilter.d.ts +0 -16
  300. package/dist/heron/filters/DropShadowFilter.d.ts.map +0 -1
  301. package/dist/heron/filters/DropShadowFilter.js +0 -76
  302. package/dist/heron/filters/DropShadowFilter.js.map +0 -1
  303. package/dist/heron/filters/Filter.d.ts +0 -20
  304. package/dist/heron/filters/Filter.d.ts.map +0 -1
  305. package/dist/heron/filters/Filter.js +0 -27
  306. package/dist/heron/filters/Filter.js.map +0 -1
  307. package/dist/heron/filters/GlowFilter.d.ts +0 -34
  308. package/dist/heron/filters/GlowFilter.d.ts.map +0 -1
  309. package/dist/heron/filters/GlowFilter.js +0 -131
  310. package/dist/heron/filters/GlowFilter.js.map +0 -1
  311. package/dist/heron/filters/index.d.ts +0 -7
  312. package/dist/heron/filters/index.d.ts.map +0 -1
  313. package/dist/heron/filters/index.js +0 -7
  314. package/dist/heron/filters/index.js.map +0 -1
  315. package/dist/heron/geom/Matrix.d.ts +0 -51
  316. package/dist/heron/geom/Matrix.d.ts.map +0 -1
  317. package/dist/heron/geom/Matrix.js +0 -312
  318. package/dist/heron/geom/Matrix.js.map +0 -1
  319. package/dist/heron/geom/Point.d.ts +0 -24
  320. package/dist/heron/geom/Point.d.ts.map +0 -1
  321. package/dist/heron/geom/Point.js +0 -75
  322. package/dist/heron/geom/Point.js.map +0 -1
  323. package/dist/heron/geom/Rectangle.d.ts +0 -48
  324. package/dist/heron/geom/Rectangle.d.ts.map +0 -1
  325. package/dist/heron/geom/Rectangle.js +0 -176
  326. package/dist/heron/geom/Rectangle.js.map +0 -1
  327. package/dist/heron/geom/index.d.ts +0 -4
  328. package/dist/heron/geom/index.d.ts.map +0 -1
  329. package/dist/heron/geom/index.js +0 -4
  330. package/dist/heron/geom/index.js.map +0 -1
  331. package/dist/heron/localStorage/index.d.ts +0 -2
  332. package/dist/heron/localStorage/index.d.ts.map +0 -1
  333. package/dist/heron/localStorage/index.js +0 -2
  334. package/dist/heron/localStorage/index.js.map +0 -1
  335. package/dist/heron/localStorage/localStorage.d.ts +0 -5
  336. package/dist/heron/localStorage/localStorage.d.ts.map +0 -1
  337. package/dist/heron/localStorage/localStorage.js +0 -19
  338. package/dist/heron/localStorage/localStorage.js.map +0 -1
  339. package/dist/heron/media/Sound.d.ts +0 -26
  340. package/dist/heron/media/Sound.d.ts.map +0 -1
  341. package/dist/heron/media/Sound.js +0 -145
  342. package/dist/heron/media/Sound.js.map +0 -1
  343. package/dist/heron/media/SoundChannel.d.ts +0 -28
  344. package/dist/heron/media/SoundChannel.d.ts.map +0 -1
  345. package/dist/heron/media/SoundChannel.js +0 -117
  346. package/dist/heron/media/SoundChannel.js.map +0 -1
  347. package/dist/heron/media/Video.d.ts +0 -50
  348. package/dist/heron/media/Video.d.ts.map +0 -1
  349. package/dist/heron/media/Video.js +0 -249
  350. package/dist/heron/media/Video.js.map +0 -1
  351. package/dist/heron/media/index.d.ts +0 -4
  352. package/dist/heron/media/index.d.ts.map +0 -1
  353. package/dist/heron/media/index.js +0 -4
  354. package/dist/heron/media/index.js.map +0 -1
  355. package/dist/heron/net/HttpMethod.d.ts +0 -6
  356. package/dist/heron/net/HttpMethod.d.ts.map +0 -1
  357. package/dist/heron/net/HttpMethod.js +0 -5
  358. package/dist/heron/net/HttpMethod.js.map +0 -1
  359. package/dist/heron/net/HttpRequest.d.ts +0 -19
  360. package/dist/heron/net/HttpRequest.d.ts.map +0 -1
  361. package/dist/heron/net/HttpRequest.js +0 -63
  362. package/dist/heron/net/HttpRequest.js.map +0 -1
  363. package/dist/heron/net/HttpResponseType.d.ts +0 -6
  364. package/dist/heron/net/HttpResponseType.d.ts.map +0 -1
  365. package/dist/heron/net/HttpResponseType.js +0 -5
  366. package/dist/heron/net/HttpResponseType.js.map +0 -1
  367. package/dist/heron/net/ImageLoader.d.ts +0 -10
  368. package/dist/heron/net/ImageLoader.d.ts.map +0 -1
  369. package/dist/heron/net/ImageLoader.js +0 -32
  370. package/dist/heron/net/ImageLoader.js.map +0 -1
  371. package/dist/heron/net/index.d.ts +0 -7
  372. package/dist/heron/net/index.d.ts.map +0 -1
  373. package/dist/heron/net/index.js +0 -5
  374. package/dist/heron/net/index.js.map +0 -1
  375. package/dist/heron/player/CanvasRenderer.d.ts +0 -49
  376. package/dist/heron/player/CanvasRenderer.d.ts.map +0 -1
  377. package/dist/heron/player/CanvasRenderer.js +0 -767
  378. package/dist/heron/player/CanvasRenderer.js.map +0 -1
  379. package/dist/heron/player/DisplayList.d.ts +0 -32
  380. package/dist/heron/player/DisplayList.d.ts.map +0 -1
  381. package/dist/heron/player/DisplayList.js +0 -78
  382. package/dist/heron/player/DisplayList.js.map +0 -1
  383. package/dist/heron/player/HeronOptions.d.ts +0 -25
  384. package/dist/heron/player/HeronOptions.d.ts.map +0 -1
  385. package/dist/heron/player/HeronOptions.js +0 -2
  386. package/dist/heron/player/HeronOptions.js.map +0 -1
  387. package/dist/heron/player/InstructionSet.d.ts.map +0 -1
  388. package/dist/heron/player/InstructionSet.js +0 -45
  389. package/dist/heron/player/InstructionSet.js.map +0 -1
  390. package/dist/heron/player/Player.d.ts +0 -45
  391. package/dist/heron/player/Player.d.ts.map +0 -1
  392. package/dist/heron/player/Player.js +0 -149
  393. package/dist/heron/player/Player.js.map +0 -1
  394. package/dist/heron/player/RenderBuffer.d.ts +0 -35
  395. package/dist/heron/player/RenderBuffer.d.ts.map +0 -1
  396. package/dist/heron/player/RenderBuffer.js +0 -81
  397. package/dist/heron/player/RenderBuffer.js.map +0 -1
  398. package/dist/heron/player/RenderPipe.d.ts +0 -33
  399. package/dist/heron/player/RenderPipe.d.ts.map +0 -1
  400. package/dist/heron/player/RenderPipe.js +0 -2
  401. package/dist/heron/player/RenderPipe.js.map +0 -1
  402. package/dist/heron/player/ScreenAdapter.d.ts +0 -29
  403. package/dist/heron/player/ScreenAdapter.d.ts.map +0 -1
  404. package/dist/heron/player/ScreenAdapter.js +0 -127
  405. package/dist/heron/player/ScreenAdapter.js.map +0 -1
  406. package/dist/heron/player/SystemTicker.d.ts +0 -63
  407. package/dist/heron/player/SystemTicker.d.ts.map +0 -1
  408. package/dist/heron/player/SystemTicker.js +0 -207
  409. package/dist/heron/player/SystemTicker.js.map +0 -1
  410. package/dist/heron/player/TouchHandler.d.ts +0 -39
  411. package/dist/heron/player/TouchHandler.d.ts.map +0 -1
  412. package/dist/heron/player/TouchHandler.js +0 -149
  413. package/dist/heron/player/TouchHandler.js.map +0 -1
  414. package/dist/heron/player/createPlayer.d.ts +0 -35
  415. package/dist/heron/player/createPlayer.d.ts.map +0 -1
  416. package/dist/heron/player/createPlayer.js +0 -74
  417. package/dist/heron/player/createPlayer.js.map +0 -1
  418. package/dist/heron/player/index.d.ts +0 -13
  419. package/dist/heron/player/index.d.ts.map +0 -1
  420. package/dist/heron/player/index.js +0 -16
  421. package/dist/heron/player/index.js.map +0 -1
  422. package/dist/heron/player/pipes/BitmapPipe.d.ts.map +0 -1
  423. package/dist/heron/player/pipes/BitmapPipe.js +0 -130
  424. package/dist/heron/player/pipes/BitmapPipe.js.map +0 -1
  425. package/dist/heron/player/pipes/FilterPipe.d.ts +0 -68
  426. package/dist/heron/player/pipes/FilterPipe.d.ts.map +0 -1
  427. package/dist/heron/player/pipes/FilterPipe.js +0 -157
  428. package/dist/heron/player/pipes/FilterPipe.js.map +0 -1
  429. package/dist/heron/player/pipes/GraphicsPipe.d.ts.map +0 -1
  430. package/dist/heron/player/pipes/GraphicsPipe.js +0 -126
  431. package/dist/heron/player/pipes/GraphicsPipe.js.map +0 -1
  432. package/dist/heron/player/pipes/MaskPipe.d.ts +0 -58
  433. package/dist/heron/player/pipes/MaskPipe.d.ts.map +0 -1
  434. package/dist/heron/player/pipes/MaskPipe.js +0 -185
  435. package/dist/heron/player/pipes/MaskPipe.js.map +0 -1
  436. package/dist/heron/player/pipes/MeshPipe.d.ts +0 -22
  437. package/dist/heron/player/pipes/MeshPipe.d.ts.map +0 -1
  438. package/dist/heron/player/pipes/MeshPipe.js +0 -50
  439. package/dist/heron/player/pipes/MeshPipe.js.map +0 -1
  440. package/dist/heron/player/pipes/TextPipe.d.ts.map +0 -1
  441. package/dist/heron/player/pipes/TextPipe.js +0 -163
  442. package/dist/heron/player/pipes/TextPipe.js.map +0 -1
  443. package/dist/heron/player/webgl/MultiTextureBatcher.d.ts +0 -37
  444. package/dist/heron/player/webgl/MultiTextureBatcher.d.ts.map +0 -1
  445. package/dist/heron/player/webgl/MultiTextureBatcher.js +0 -63
  446. package/dist/heron/player/webgl/MultiTextureBatcher.js.map +0 -1
  447. package/dist/heron/player/webgl/ShaderLib.d.ts.map +0 -1
  448. package/dist/heron/player/webgl/ShaderLib.js.map +0 -1
  449. package/dist/heron/player/webgl/WebGLDrawCmdManager.d.ts +0 -58
  450. package/dist/heron/player/webgl/WebGLDrawCmdManager.d.ts.map +0 -1
  451. package/dist/heron/player/webgl/WebGLDrawCmdManager.js +0 -197
  452. package/dist/heron/player/webgl/WebGLDrawCmdManager.js.map +0 -1
  453. package/dist/heron/player/webgl/WebGLProgram.d.ts +0 -14
  454. package/dist/heron/player/webgl/WebGLProgram.d.ts.map +0 -1
  455. package/dist/heron/player/webgl/WebGLProgram.js +0 -32
  456. package/dist/heron/player/webgl/WebGLProgram.js.map +0 -1
  457. package/dist/heron/player/webgl/WebGLRenderBuffer.d.ts +0 -52
  458. package/dist/heron/player/webgl/WebGLRenderBuffer.d.ts.map +0 -1
  459. package/dist/heron/player/webgl/WebGLRenderBuffer.js +0 -227
  460. package/dist/heron/player/webgl/WebGLRenderBuffer.js.map +0 -1
  461. package/dist/heron/player/webgl/WebGLRenderContext.d.ts +0 -114
  462. package/dist/heron/player/webgl/WebGLRenderContext.d.ts.map +0 -1
  463. package/dist/heron/player/webgl/WebGLRenderContext.js +0 -852
  464. package/dist/heron/player/webgl/WebGLRenderContext.js.map +0 -1
  465. package/dist/heron/player/webgl/WebGLRenderTarget.d.ts +0 -19
  466. package/dist/heron/player/webgl/WebGLRenderTarget.d.ts.map +0 -1
  467. package/dist/heron/player/webgl/WebGLRenderTarget.js +0 -90
  468. package/dist/heron/player/webgl/WebGLRenderTarget.js.map +0 -1
  469. package/dist/heron/player/webgl/WebGLRenderer.d.ts +0 -91
  470. package/dist/heron/player/webgl/WebGLRenderer.d.ts.map +0 -1
  471. package/dist/heron/player/webgl/WebGLRenderer.js +0 -721
  472. package/dist/heron/player/webgl/WebGLRenderer.js.map +0 -1
  473. package/dist/heron/player/webgl/WebGLUtils.d.ts +0 -11
  474. package/dist/heron/player/webgl/WebGLUtils.d.ts.map +0 -1
  475. package/dist/heron/player/webgl/WebGLUtils.js +0 -57
  476. package/dist/heron/player/webgl/WebGLUtils.js.map +0 -1
  477. package/dist/heron/player/webgl/WebGLVertexArrayObject.d.ts +0 -39
  478. package/dist/heron/player/webgl/WebGLVertexArrayObject.d.ts.map +0 -1
  479. package/dist/heron/player/webgl/WebGLVertexArrayObject.js +0 -367
  480. package/dist/heron/player/webgl/WebGLVertexArrayObject.js.map +0 -1
  481. package/dist/heron/player/webgl/index.d.ts +0 -11
  482. package/dist/heron/player/webgl/index.d.ts.map +0 -1
  483. package/dist/heron/player/webgl/index.js +0 -11
  484. package/dist/heron/player/webgl/index.js.map +0 -1
  485. package/dist/heron/system/Capabilities.d.ts +0 -46
  486. package/dist/heron/system/Capabilities.d.ts.map +0 -1
  487. package/dist/heron/system/Capabilities.js +0 -100
  488. package/dist/heron/system/Capabilities.js.map +0 -1
  489. package/dist/heron/system/index.d.ts +0 -2
  490. package/dist/heron/system/index.d.ts.map +0 -1
  491. package/dist/heron/system/index.js +0 -2
  492. package/dist/heron/system/index.js.map +0 -1
  493. package/dist/heron/text/BitmapFont.d.ts +0 -31
  494. package/dist/heron/text/BitmapFont.d.ts.map +0 -1
  495. package/dist/heron/text/BitmapFont.js +0 -86
  496. package/dist/heron/text/BitmapFont.js.map +0 -1
  497. package/dist/heron/text/BitmapText.d.ts +0 -56
  498. package/dist/heron/text/BitmapText.d.ts.map +0 -1
  499. package/dist/heron/text/BitmapText.js +0 -230
  500. package/dist/heron/text/BitmapText.js.map +0 -1
  501. package/dist/heron/text/HtmlTextParser.d.ts +0 -14
  502. package/dist/heron/text/HtmlTextParser.d.ts.map +0 -1
  503. package/dist/heron/text/HtmlTextParser.js +0 -147
  504. package/dist/heron/text/HtmlTextParser.js.map +0 -1
  505. package/dist/heron/text/InputController.d.ts +0 -29
  506. package/dist/heron/text/InputController.d.ts.map +0 -1
  507. package/dist/heron/text/InputController.js +0 -131
  508. package/dist/heron/text/InputController.js.map +0 -1
  509. package/dist/heron/text/StageText.d.ts +0 -53
  510. package/dist/heron/text/StageText.d.ts.map +0 -1
  511. package/dist/heron/text/StageText.js +0 -392
  512. package/dist/heron/text/StageText.js.map +0 -1
  513. package/dist/heron/text/TextField.d.ts +0 -145
  514. package/dist/heron/text/TextField.d.ts.map +0 -1
  515. package/dist/heron/text/TextField.js +0 -716
  516. package/dist/heron/text/TextField.js.map +0 -1
  517. package/dist/heron/text/TextMeasurer.d.ts +0 -9
  518. package/dist/heron/text/TextMeasurer.d.ts.map +0 -1
  519. package/dist/heron/text/TextMeasurer.js +0 -36
  520. package/dist/heron/text/TextMeasurer.js.map +0 -1
  521. package/dist/heron/text/WordWrap.d.ts +0 -15
  522. package/dist/heron/text/WordWrap.d.ts.map +0 -1
  523. package/dist/heron/text/WordWrap.js +0 -50
  524. package/dist/heron/text/WordWrap.js.map +0 -1
  525. package/dist/heron/text/enums/HorizontalAlign.d.ts +0 -9
  526. package/dist/heron/text/enums/HorizontalAlign.d.ts.map +0 -1
  527. package/dist/heron/text/enums/HorizontalAlign.js +0 -8
  528. package/dist/heron/text/enums/HorizontalAlign.js.map +0 -1
  529. package/dist/heron/text/enums/TextFieldInputType.d.ts +0 -7
  530. package/dist/heron/text/enums/TextFieldInputType.d.ts.map +0 -1
  531. package/dist/heron/text/enums/TextFieldInputType.js +0 -6
  532. package/dist/heron/text/enums/TextFieldInputType.js.map +0 -1
  533. package/dist/heron/text/enums/TextFieldType.d.ts +0 -6
  534. package/dist/heron/text/enums/TextFieldType.d.ts.map +0 -1
  535. package/dist/heron/text/enums/TextFieldType.js +0 -5
  536. package/dist/heron/text/enums/TextFieldType.js.map +0 -1
  537. package/dist/heron/text/enums/VerticalAlign.d.ts +0 -9
  538. package/dist/heron/text/enums/VerticalAlign.d.ts.map +0 -1
  539. package/dist/heron/text/enums/VerticalAlign.js +0 -8
  540. package/dist/heron/text/enums/VerticalAlign.js.map +0 -1
  541. package/dist/heron/text/enums/index.d.ts +0 -5
  542. package/dist/heron/text/enums/index.d.ts.map +0 -1
  543. package/dist/heron/text/enums/index.js +0 -5
  544. package/dist/heron/text/enums/index.js.map +0 -1
  545. package/dist/heron/text/index.d.ts +0 -14
  546. package/dist/heron/text/index.d.ts.map +0 -1
  547. package/dist/heron/text/index.js +0 -13
  548. package/dist/heron/text/index.js.map +0 -1
  549. package/dist/heron/text/types/ITextElement.d.ts +0 -31
  550. package/dist/heron/text/types/ITextElement.d.ts.map +0 -1
  551. package/dist/heron/text/types/ITextElement.js +0 -2
  552. package/dist/heron/text/types/ITextElement.js.map +0 -1
  553. package/dist/heron/text/types/index.d.ts +0 -2
  554. package/dist/heron/text/types/index.d.ts.map +0 -1
  555. package/dist/heron/text/types/index.js +0 -2
  556. package/dist/heron/text/types/index.js.map +0 -1
  557. package/dist/heron/utils/Base64Util.d.ts +0 -5
  558. package/dist/heron/utils/Base64Util.d.ts.map +0 -1
  559. package/dist/heron/utils/Base64Util.js +0 -45
  560. package/dist/heron/utils/Base64Util.js.map +0 -1
  561. package/dist/heron/utils/ByteArray.d.ts +0 -66
  562. package/dist/heron/utils/ByteArray.d.ts.map +0 -1
  563. package/dist/heron/utils/ByteArray.js +0 -303
  564. package/dist/heron/utils/ByteArray.js.map +0 -1
  565. package/dist/heron/utils/DebugLog.d.ts +0 -9
  566. package/dist/heron/utils/DebugLog.d.ts.map +0 -1
  567. package/dist/heron/utils/DebugLog.js +0 -25
  568. package/dist/heron/utils/DebugLog.js.map +0 -1
  569. package/dist/heron/utils/FontManager.d.ts +0 -11
  570. package/dist/heron/utils/FontManager.d.ts.map +0 -1
  571. package/dist/heron/utils/FontManager.js +0 -39
  572. package/dist/heron/utils/FontManager.js.map +0 -1
  573. package/dist/heron/utils/HashObject.d.ts +0 -9
  574. package/dist/heron/utils/HashObject.d.ts.map +0 -1
  575. package/dist/heron/utils/HashObject.js +0 -11
  576. package/dist/heron/utils/HashObject.js.map +0 -1
  577. package/dist/heron/utils/Logger.d.ts +0 -16
  578. package/dist/heron/utils/Logger.d.ts.map +0 -1
  579. package/dist/heron/utils/Logger.js +0 -26
  580. package/dist/heron/utils/Logger.js.map +0 -1
  581. package/dist/heron/utils/NumberUtils.d.ts +0 -15
  582. package/dist/heron/utils/NumberUtils.d.ts.map +0 -1
  583. package/dist/heron/utils/NumberUtils.js +0 -60
  584. package/dist/heron/utils/NumberUtils.js.map +0 -1
  585. package/dist/heron/utils/Timer.d.ts +0 -22
  586. package/dist/heron/utils/Timer.d.ts.map +0 -1
  587. package/dist/heron/utils/Timer.js +0 -67
  588. package/dist/heron/utils/Timer.js.map +0 -1
  589. package/dist/heron/utils/index.d.ts +0 -11
  590. package/dist/heron/utils/index.d.ts.map +0 -1
  591. package/dist/heron/utils/index.js +0 -10
  592. package/dist/heron/utils/index.js.map +0 -1
  593. package/dist/heron/utils/toColorString.d.ts +0 -2
  594. package/dist/heron/utils/toColorString.d.ts.map +0 -1
  595. package/dist/heron/utils/toColorString.js +0 -5
  596. package/dist/heron/utils/toColorString.js.map +0 -1
  597. /package/dist/blakron/player/{RenderBuffer.d.ts → canvas/RenderBuffer.d.ts} +0 -0
  598. /package/dist/blakron/player/{RenderBuffer.js → canvas/RenderBuffer.js} +0 -0
  599. /package/dist/blakron/player/{InstructionSet.js → webgl/InstructionSet.js} +0 -0
  600. /package/dist/blakron/player/{pipes → webgl/pipes}/BitmapPipe.js +0 -0
  601. /package/dist/blakron/player/{pipes → webgl/pipes}/MeshPipe.js +0 -0
@@ -1,852 +0,0 @@
1
- import { ColorMatrixFilter } from '../../filters/ColorMatrixFilter.js';
2
- import { BlurFilter } from '../../filters/BlurFilter.js';
3
- import { GlowFilter } from '../../filters/GlowFilter.js';
4
- import { DropShadowFilter } from '../../filters/DropShadowFilter.js';
5
- import { WebGLVertexArrayObject } from './WebGLVertexArrayObject.js';
6
- import { WebGLDrawCmdManager } from './WebGLDrawCmdManager.js';
7
- import { WebGLProgram } from './WebGLProgram.js';
8
- import { ShaderLib, getBlurTier, makeBlurHFrag, makeBlurVFrag } from './ShaderLib.js';
9
- import { SYM_GL_CONTEXT, SYM_PREMULTIPLIED, SYM_DEFAULT_EMPTY, SYM_SMOOTHING } from './WebGLUtils.js';
10
- import { MultiTextureBatcher, makeMultiCmd } from './MultiTextureBatcher.js';
11
- export class WebGLRenderContext {
12
- // ── Static fields ─────────────────────────────────────────────────────────
13
- static _instance;
14
- static getInstance(canvas) {
15
- if (!this._instance)
16
- this._instance = new WebGLRenderContext(canvas);
17
- return this._instance;
18
- }
19
- static resetInstance() {
20
- this._instance = undefined;
21
- }
22
- // ── Public readonly fields ────────────────────────────────────────────────
23
- gl;
24
- surface;
25
- drawCmdManager;
26
- // ── Public mutable fields ─────────────────────────────────────────────────
27
- maxTextureSize = 2048;
28
- contextLost = false;
29
- projectionX = 0;
30
- projectionY = 0;
31
- activeFilter;
32
- currentBlendMode = 'source-over';
33
- // ── Private fields ────────────────────────────────────────────────────────
34
- _vao;
35
- _batcher = new MultiTextureBatcher();
36
- _bufferStack = [];
37
- _currentBuffer;
38
- _vertexBuffer;
39
- _indexBuffer;
40
- _bindIndices = false;
41
- // Track which GPU buffer size is currently allocated so we only re-allocate
42
- // when switching between single-texture and multi-texture layouts.
43
- _gpuVertexBufferSize = 0;
44
- _defaultEmptyTexture;
45
- _maxTextureUnits = MultiTextureBatcher.MAX_TEXTURES;
46
- _contextRestoredCallbacks = [];
47
- _trackedBitmapDatas = new Set();
48
- // ── Blur FBO pool ─────────────────────────────────────────────────────────
49
- // Key: "${width}x${height}", Value: stack of reusable { texture, fbo } pairs.
50
- _blurFboPool = new Map();
51
- constructor(canvas) {
52
- this.surface = canvas;
53
- const gl = (canvas.getContext('webgl') ?? canvas.getContext('experimental-webgl'));
54
- if (!gl)
55
- throw new Error('WebGL not supported');
56
- this.gl = gl;
57
- gl.disable(gl.DEPTH_TEST);
58
- gl.disable(gl.CULL_FACE);
59
- gl.enable(gl.BLEND);
60
- gl.colorMask(true, true, true, true);
61
- gl.activeTexture(gl.TEXTURE0);
62
- this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
63
- this._maxTextureUnits = Math.min(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS), MultiTextureBatcher.MAX_TEXTURES);
64
- this._vertexBuffer = gl.createBuffer();
65
- this._indexBuffer = gl.createBuffer();
66
- gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
67
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
68
- this.drawCmdManager = new WebGLDrawCmdManager();
69
- this._vao = new WebGLVertexArrayObject();
70
- // Pre-allocate the GPU vertex buffer at maximum single-texture capacity.
71
- // bufferSubData will update only the used portion each frame without
72
- // triggering a GPU memory reallocation.
73
- gl.bufferData(gl.ARRAY_BUFFER, WebGLVertexArrayObject.MAX_VERTEX_BYTES, gl.DYNAMIC_DRAW);
74
- this._gpuVertexBufferSize = WebGLVertexArrayObject.MAX_VERTEX_BYTES;
75
- this.setGlobalCompositeOperation('source-over');
76
- canvas.addEventListener('webglcontextlost', e => {
77
- e.preventDefault();
78
- this.contextLost = true;
79
- });
80
- canvas.addEventListener('webglcontextrestored', () => {
81
- this.contextLost = false;
82
- this._onContextRestored();
83
- });
84
- }
85
- // ── Getter ────────────────────────────────────────────────────────────────
86
- /**
87
- * Register a callback to be invoked after the WebGL context is restored.
88
- * Returns an unregister function.
89
- */
90
- addContextRestoredListener(fn) {
91
- this._contextRestoredCallbacks.push(fn);
92
- return () => {
93
- const i = this._contextRestoredCallbacks.indexOf(fn);
94
- if (i >= 0)
95
- this._contextRestoredCallbacks.splice(i, 1);
96
- };
97
- }
98
- get activatedBuffer() {
99
- return this._currentBuffer;
100
- }
101
- get defaultEmptyTexture() {
102
- if (!this._defaultEmptyTexture) {
103
- const canvas = document.createElement('canvas');
104
- canvas.width = canvas.height = 16;
105
- const ctx = canvas.getContext('2d');
106
- ctx.fillStyle = 'white';
107
- ctx.fillRect(0, 0, 16, 16);
108
- this._defaultEmptyTexture = this.createTexture(canvas);
109
- this._defaultEmptyTexture[SYM_DEFAULT_EMPTY] = true;
110
- }
111
- return this._defaultEmptyTexture;
112
- }
113
- // ── Buffer stack ──────────────────────────────────────────────────────────
114
- pushBuffer(buffer) {
115
- this._bufferStack.push(buffer);
116
- if (buffer !== this._currentBuffer) {
117
- this.drawCmdManager.pushActivateBuffer(buffer);
118
- }
119
- this._currentBuffer = buffer;
120
- }
121
- popBuffer() {
122
- if (this._bufferStack.length <= 1)
123
- return;
124
- this._bufferStack.pop();
125
- const last = this._bufferStack[this._bufferStack.length - 1];
126
- if (last !== this._currentBuffer) {
127
- this.drawCmdManager.pushActivateBuffer(last);
128
- }
129
- this._currentBuffer = last;
130
- }
131
- // ── Resize ────────────────────────────────────────────────────────────────
132
- resize(width, height) {
133
- this.surface.width = width;
134
- this.surface.height = height;
135
- this.onResize(width, height);
136
- }
137
- onResize(width, height) {
138
- const w = width ?? this.surface.width;
139
- const h = height ?? this.surface.height;
140
- this.projectionX = w / 2;
141
- this.projectionY = -h / 2;
142
- this.gl.viewport(0, 0, w, h);
143
- }
144
- // ── Stencil / Scissor ─────────────────────────────────────────────────────
145
- enableStencilTest() {
146
- this.gl.enable(this.gl.STENCIL_TEST);
147
- }
148
- disableStencilTest() {
149
- this.gl.disable(this.gl.STENCIL_TEST);
150
- }
151
- enableScissorTest(rect) {
152
- const gl = this.gl;
153
- gl.enable(gl.SCISSOR_TEST);
154
- gl.scissor(rect.x, rect.y, rect.width, rect.height);
155
- }
156
- disableScissorTest() {
157
- this.gl.disable(this.gl.SCISSOR_TEST);
158
- }
159
- enableScissor(x, y, width, height) {
160
- this.drawCmdManager.pushEnableScissor(x, y, width, height);
161
- }
162
- disableScissor() {
163
- this.drawCmdManager.pushDisableScissor();
164
- }
165
- // ── Mask (stencil-based) ──────────────────────────────────────────────────
166
- pushMask(x, y, width, height) {
167
- this.drawCmdManager.pushPushMask();
168
- const buf = this._currentBuffer;
169
- this._vao.cacheArrays(buf, 0, 0, width, height, x, y, width, height, width, height);
170
- this.drawCmdManager.pushDrawRect();
171
- }
172
- popMask() {
173
- this.drawCmdManager.pushPopMask();
174
- const buf = this._currentBuffer;
175
- const rect = buf.stencilList[buf.stencilList.length - 1];
176
- if (rect) {
177
- this._vao.cacheArrays(buf, 0, 0, rect.width, rect.height, rect.x, rect.y, rect.width, rect.height, rect.width, rect.height);
178
- this.drawCmdManager.pushDrawRect();
179
- }
180
- }
181
- // ── Blend mode ────────────────────────────────────────────────────────────
182
- setGlobalCompositeOperation(value) {
183
- this.currentBlendMode = value;
184
- this.drawCmdManager.pushSetBlend(value);
185
- }
186
- // ── Texture ───────────────────────────────────────────────────────────────
187
- createTexture(source) {
188
- const gl = this.gl;
189
- const texture = gl.createTexture();
190
- texture[SYM_GL_CONTEXT] = gl;
191
- gl.bindTexture(gl.TEXTURE_2D, texture);
192
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);
193
- texture[SYM_PREMULTIPLIED] = true;
194
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
195
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
196
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
197
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
198
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
199
- return texture;
200
- }
201
- updateTexture(texture, source) {
202
- const gl = this.gl;
203
- gl.bindTexture(gl.TEXTURE_2D, texture);
204
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);
205
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
206
- }
207
- getWebGLTexture(bitmapData) {
208
- const source = bitmapData.source;
209
- if (!source)
210
- return undefined;
211
- if (!bitmapData.webGLTexture) {
212
- const tex = this.createTexture(source);
213
- bitmapData.webGLTexture = tex;
214
- tex[SYM_SMOOTHING] = true;
215
- this._trackedBitmapDatas.add(new WeakRef(bitmapData));
216
- }
217
- else if (source instanceof HTMLVideoElement) {
218
- // Video frames change every tick — re-upload the current frame
219
- this.updateTexture(bitmapData.webGLTexture, source);
220
- }
221
- return bitmapData.webGLTexture;
222
- }
223
- // ── Draw ──────────────────────────────────────────────────────────────────
224
- drawImage(image, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, imageSourceWidth, imageSourceHeight, rotated, smoothing) {
225
- if (this.contextLost || !image || !this._currentBuffer)
226
- return;
227
- const texture = this.getWebGLTexture(image);
228
- if (!texture)
229
- return;
230
- this.drawTexture(texture, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, imageSourceWidth, imageSourceHeight, undefined, undefined, undefined, undefined, rotated, smoothing);
231
- }
232
- drawMesh(image, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, imageSourceWidth, imageSourceHeight, meshUVs, meshVertices, meshIndices, rotated, smoothing) {
233
- if (this.contextLost || !image || !this._currentBuffer)
234
- return;
235
- const texture = this.getWebGLTexture(image);
236
- if (!texture)
237
- return;
238
- this.drawTexture(texture, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, imageSourceWidth, imageSourceHeight, meshUVs, meshVertices, meshIndices, undefined, rotated, smoothing);
239
- }
240
- drawTexture(texture, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, textureWidth, textureHeight, meshUVs, meshVertices, meshIndices, _bounds, rotated, smoothing) {
241
- if (this.contextLost || !texture || !this._currentBuffer)
242
- return;
243
- const buf = this._currentBuffer;
244
- if (meshVertices && meshIndices) {
245
- const meshNum = meshIndices.length / 3;
246
- if (this._vao.reachMaxSize(meshNum * 4, meshNum * 6))
247
- this.flush();
248
- }
249
- else {
250
- if (this._vao.reachMaxSize())
251
- this.flush();
252
- }
253
- if (smoothing !== undefined && texture[SYM_SMOOTHING] !== smoothing) {
254
- this.drawCmdManager.pushChangeSmoothing(texture, smoothing);
255
- }
256
- if (meshUVs)
257
- this._vao.changeToMeshIndices();
258
- // ── Multi-texture path (plain quads without filter) ───────────────────
259
- const useMulti = !this.activeFilter && !meshVertices && this._maxTextureUnits > 1;
260
- if (useMulti) {
261
- let slot = this._batcher.getOrAssignSlot(texture);
262
- if (slot === -1) {
263
- this.flush();
264
- slot = this._batcher.getOrAssignSlot(texture);
265
- }
266
- if (!this._vao.isMultiTexture())
267
- this._vao.setMultiTexture(true);
268
- this._vao.cacheArrays(buf, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, textureWidth, textureHeight, undefined, undefined, undefined, rotated, slot);
269
- const cmd = makeMultiCmd(2, this._batcher.slots, this._batcher.textureCount);
270
- this.drawCmdManager.pushDrawMultiTexture(cmd);
271
- return;
272
- }
273
- // ── Single-texture path (filter, mesh, or single-unit device) ─────────
274
- if (this._vao.isMultiTexture())
275
- this.flush();
276
- this._vao.cacheArrays(buf, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, textureWidth, textureHeight, meshUVs, meshVertices, meshIndices, rotated);
277
- const count = meshIndices ? meshIndices.length / 3 : 2;
278
- this.drawCmdManager.pushDrawTexture(texture, count, this.activeFilter, textureWidth, textureHeight);
279
- }
280
- /**
281
- * Composite the offscreen filter result back onto the current (parent) buffer.
282
- *
283
- * Strategy (following Egret's WebGLRenderer._drawWithFilter pattern):
284
- *
285
- * 1. Flush all pending batched commands so the offscreen FBO content is
286
- * fully rasterised and the GL state is clean.
287
- * 2. Apply multi-pass effects (blur ping-pong) directly on the offscreen
288
- * texture via temporary FBOs.
289
- * 3. Activate the parent buffer's FBO.
290
- * 4. Draw the offscreen texture onto the parent buffer using the batched
291
- * drawTexture() path so that the parent buffer's globalMatrix is
292
- * correctly applied to position the result.
293
- * 5. Flush immediately so the draw executes while the GL FBO state is
294
- * known-good, preventing feedback loops.
295
- */
296
- compositeFilterResult(filters, offscreen) {
297
- const target = offscreen.rootRenderTarget;
298
- if (!target?.texture)
299
- return;
300
- const w = target.width;
301
- const h = target.height;
302
- // Step 1 — flush pending commands (leaf draws into the offscreen FBO).
303
- this.flush();
304
- // Step 2 — multi-pass blur (operates entirely via direct GL calls on
305
- // temporary FBOs; does NOT touch the batched command queue).
306
- for (const filter of filters) {
307
- if (filter instanceof BlurFilter && (filter.blurX > 0 || filter.blurY > 0)) {
308
- this._drawBlurPingPong(target.texture, w, h, filter, offscreen);
309
- }
310
- }
311
- // Step 3 — ensure the parent buffer's FBO is the active GL framebuffer.
312
- if (this._currentBuffer) {
313
- this._currentBuffer.rootRenderTarget.activate();
314
- this.onResize(this._currentBuffer.width, this._currentBuffer.height);
315
- }
316
- // Step 4 — queue a batched drawTexture so the parent buffer's
317
- // globalMatrix positions the quad correctly.
318
- const nonBlurFilter = filters.find(f => !(f instanceof BlurFilter));
319
- this.activeFilter = nonBlurFilter;
320
- this.drawTexture(target.texture, 0, 0, w, h, 0, 0, w, h, w, h);
321
- this.activeFilter = undefined;
322
- // Step 5 — flush immediately.
323
- this.flush();
324
- }
325
- /**
326
- * Two-pass separable Gaussian blur.
327
- * Horizontal pass renders into a temporary FBO; vertical pass writes the
328
- * blurred result back into the offscreen buffer's FBO so that the caller
329
- * (compositeFilterResult) can composite it onto the parent buffer.
330
- *
331
- * Optimisations vs. the naive approach:
332
- * - FBO pool: temporary textures/framebuffers are reused across frames
333
- * (keyed by size) to avoid the expensive create/delete cycle on mobile.
334
- * - Dynamic shader tier: the loop bound in the GLSL is a compile-time
335
- * constant chosen from {4, 8, 16, 32} so the GPU can unroll/optimise it,
336
- * while still supporting blur radii up to 32 px.
337
- *
338
- * NOTE: This method does NOT restore the parent buffer's FBO — the caller
339
- * is responsible for activating the correct destination FBO before the
340
- * final composite draw.
341
- */
342
- _drawBlurPingPong(texture, w, h, filter, buffer) {
343
- const gl = this.gl;
344
- // ── Acquire a temporary FBO from the pool (or create a new one) ───────
345
- const poolKey = `${w}x${h}`;
346
- let pool = this._blurFboPool.get(poolKey);
347
- if (!pool) {
348
- pool = [];
349
- this._blurFboPool.set(poolKey, pool);
350
- }
351
- let tmpEntry = pool.pop();
352
- if (!tmpEntry) {
353
- const tmpTex = gl.createTexture();
354
- gl.bindTexture(gl.TEXTURE_2D, tmpTex);
355
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
356
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
357
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
358
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
359
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
360
- const tmpFbo = gl.createFramebuffer();
361
- gl.bindFramebuffer(gl.FRAMEBUFFER, tmpFbo);
362
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tmpTex, 0);
363
- tmpEntry = { texture: tmpTex, fbo: tmpFbo };
364
- }
365
- // Clear the temporary FBO before use.
366
- gl.bindFramebuffer(gl.FRAMEBUFFER, tmpEntry.fbo);
367
- gl.viewport(0, 0, w, h);
368
- gl.clearColor(0, 0, 0, 0);
369
- gl.clear(gl.COLOR_BUFFER_BIT);
370
- // ── Select shader tier based on actual blur radius ────────────────────
371
- const hTier = getBlurTier(filter.blurX);
372
- const vTier = getBlurTier(filter.blurY);
373
- const hKey = `blur_h_${hTier}`;
374
- const vKey = `blur_v_${vTier}`;
375
- // ── Pass 1: horizontal blur → tmpFbo ──────────────────────────────────
376
- const hProg = WebGLProgram.get(gl, ShaderLib.default_vert, makeBlurHFrag(hTier), hKey);
377
- this._drawFullscreenQuad(hProg, texture, w, h, prog => {
378
- const uBlurX = prog.uniforms['blurX'];
379
- const uSize = prog.uniforms['uTextureSize'];
380
- if (uBlurX)
381
- gl.uniform1f(uBlurX, filter.blurX);
382
- if (uSize)
383
- gl.uniform2f(uSize, w, h);
384
- });
385
- // ── Pass 2: vertical blur → offscreen FBO ────────────────────────────
386
- buffer.rootRenderTarget.activate();
387
- this.onResize(w, h);
388
- const vProg = WebGLProgram.get(gl, ShaderLib.default_vert, makeBlurVFrag(vTier), vKey);
389
- this._drawFullscreenQuad(vProg, tmpEntry.texture, w, h, prog => {
390
- const uBlurY = prog.uniforms['blurY'];
391
- const uSize = prog.uniforms['uTextureSize'];
392
- if (uBlurY)
393
- gl.uniform1f(uBlurY, filter.blurY);
394
- if (uSize)
395
- gl.uniform2f(uSize, w, h);
396
- });
397
- // ── Return the temporary FBO to the pool ──────────────────────────────
398
- pool.push(tmpEntry);
399
- }
400
- /**
401
- * Draws a single full-screen quad using the given program and texture.
402
- * `setUniforms` is called after `useProgram` to let the caller set
403
- * filter-specific uniforms.
404
- */
405
- _drawFullscreenQuad(prog, texture, w, h, setUniforms) {
406
- const gl = this.gl;
407
- gl.useProgram(prog.id);
408
- const stride = 5 * 4;
409
- const aPos = prog.attributes['aVertexPosition'];
410
- const aUV = prog.attributes['aTextureCoord'];
411
- const aColor = prog.attributes['aColor'];
412
- if (aPos !== undefined && aPos >= 0) {
413
- gl.enableVertexAttribArray(aPos);
414
- gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, stride, 0);
415
- }
416
- if (aUV !== undefined && aUV >= 0) {
417
- gl.enableVertexAttribArray(aUV);
418
- gl.vertexAttribPointer(aUV, 2, gl.FLOAT, false, stride, 8);
419
- }
420
- if (aColor !== undefined && aColor >= 0) {
421
- gl.enableVertexAttribArray(aColor);
422
- gl.vertexAttribPointer(aColor, 4, gl.UNSIGNED_BYTE, true, stride, 16);
423
- }
424
- const uProj = prog.uniforms['projectionVector'];
425
- if (uProj)
426
- gl.uniform2f(uProj, w / 2, -h / 2);
427
- const uSampler = prog.uniforms['uSampler'];
428
- if (uSampler)
429
- gl.uniform1i(uSampler, 0);
430
- gl.bindTexture(gl.TEXTURE_2D, texture);
431
- setUniforms(prog);
432
- // Build a single quad covering [0,w] × [0,h] directly in a local buffer.
433
- const f32 = new Float32Array(20);
434
- const u32 = new Uint32Array(f32.buffer);
435
- const packed = 0xffffffff; // white, full alpha (premultiplied)
436
- // v0 (0,0)
437
- f32[0] = 0;
438
- f32[1] = 0;
439
- f32[2] = 0;
440
- f32[3] = 0;
441
- u32[4] = packed;
442
- // v1 (w,0)
443
- f32[5] = w;
444
- f32[6] = 0;
445
- f32[7] = 1;
446
- f32[8] = 0;
447
- u32[9] = packed;
448
- // v2 (w,h)
449
- f32[10] = w;
450
- f32[11] = h;
451
- f32[12] = 1;
452
- f32[13] = 1;
453
- u32[14] = packed;
454
- // v3 (0,h)
455
- f32[15] = 0;
456
- f32[16] = h;
457
- f32[17] = 0;
458
- f32[18] = 1;
459
- u32[19] = packed;
460
- gl.bufferData(gl.ARRAY_BUFFER, f32, gl.STREAM_DRAW);
461
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);
462
- gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
463
- this._bindIndices = false;
464
- }
465
- clear() {
466
- this.drawCmdManager.pushClearColor();
467
- }
468
- getPixels(x, y, width, height, pixels) {
469
- this.gl.readPixels(x, y, width, height, this.gl.RGBA, this.gl.UNSIGNED_BYTE, pixels);
470
- }
471
- // ── Execute ───────────────────────────────────────────────────────────────
472
- flush() {
473
- this._flush();
474
- }
475
- // ── Private — flush & dispatch ────────────────────────────────────────────
476
- _onContextRestored() {
477
- const gl = this.gl;
478
- // Re-apply baseline GL state.
479
- gl.disable(gl.DEPTH_TEST);
480
- gl.disable(gl.CULL_FACE);
481
- gl.enable(gl.BLEND);
482
- gl.colorMask(true, true, true, true);
483
- gl.activeTexture(gl.TEXTURE0);
484
- // Re-bind the vertex and index buffers (they are lost on context loss).
485
- gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
486
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer);
487
- // Re-allocate the GPU vertex buffer after context loss.
488
- gl.bufferData(gl.ARRAY_BUFFER, this._gpuVertexBufferSize, gl.DYNAMIC_DRAW);
489
- // Clear the shader program cache — all programs are invalid after context loss.
490
- WebGLProgram.clearCache();
491
- // Reset internal state.
492
- this._bindIndices = false;
493
- this._batcher.reset();
494
- this.drawCmdManager.clear();
495
- this._vao.clear();
496
- // The default empty texture is also lost.
497
- this._defaultEmptyTexture = undefined;
498
- // All blur FBO pool entries are invalid after context loss — discard them.
499
- this._blurFboPool.clear();
500
- // Invalidate all cached WebGL textures on BitmapData instances.
501
- // After context loss every WebGLTexture handle is invalid; clearing the
502
- // reference lets getWebGLTexture() lazily re-upload from the source.
503
- for (const ref of this._trackedBitmapDatas) {
504
- const bd = ref.deref();
505
- if (bd) {
506
- bd.webGLTexture = undefined;
507
- }
508
- else {
509
- // BitmapData was garbage collected — remove the dead WeakRef.
510
- this._trackedBitmapDatas.delete(ref);
511
- }
512
- }
513
- // Restore projection.
514
- this.onResize();
515
- // Notify listeners (e.g. WebGLRenderer) so they can rebuild instructions
516
- // and invalidate texture references.
517
- for (const fn of this._contextRestoredCallbacks)
518
- fn();
519
- }
520
- _flush() {
521
- const gl = this.gl;
522
- const cmds = this.drawCmdManager;
523
- const vao = this._vao;
524
- if (vao.getVerticesByteLength() === 0 && cmds.drawDataLen === 0)
525
- return;
526
- // Upload only the vertices written this frame.
527
- // If the batch switched to multi-texture layout the GPU buffer may need
528
- // to grow (multi stride is 24B vs 20B for single); re-allocate once.
529
- const neededBytes = vao.getVerticesByteLength();
530
- if (neededBytes > 0) {
531
- if (neededBytes > this._gpuVertexBufferSize) {
532
- // Grow: re-allocate at the new maximum capacity.
533
- const newSize = WebGLVertexArrayObject.MAX_MULTI_VERTEX_BYTES;
534
- gl.bufferData(gl.ARRAY_BUFFER, newSize, gl.DYNAMIC_DRAW);
535
- this._gpuVertexBufferSize = newSize;
536
- }
537
- // Upload only the used portion — no GPU memory reallocation.
538
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Uint8Array(vao.getVerticesBuffer(), 0, neededBytes));
539
- }
540
- if (!this._bindIndices) {
541
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, vao.isMesh() ? vao.getMeshIndices() : vao.getIndices(), gl.STATIC_DRAW);
542
- // Quad indices are static — cache after first upload.
543
- // Mesh indices vary per frame — never cache.
544
- if (!vao.isMesh()) {
545
- this._bindIndices = true;
546
- }
547
- }
548
- let indexOffset = 0;
549
- let gpuDrawCalls = 0;
550
- for (let i = 0; i < cmds.drawDataLen; i++) {
551
- const cmd = cmds.drawData[i];
552
- switch (cmd.type) {
553
- case 7 /* DrawCmdType.ACT_BUFFER */:
554
- this._activateBuffer(cmd.buffer, cmd.width, cmd.height);
555
- break;
556
- case 5 /* DrawCmdType.RESIZE_TARGET */:
557
- cmd.buffer.rootRenderTarget?.resize(cmd.width, cmd.height);
558
- break;
559
- case 6 /* DrawCmdType.CLEAR_COLOR */:
560
- gl.colorMask(true, true, true, true);
561
- gl.clearColor(0, 0, 0, 0);
562
- gl.clear(gl.COLOR_BUFFER_BIT);
563
- break;
564
- case 4 /* DrawCmdType.BLEND */:
565
- this._applyBlend(cmd.value);
566
- break;
567
- case 8 /* DrawCmdType.ENABLE_SCISSOR */:
568
- gl.enable(gl.SCISSOR_TEST);
569
- gl.scissor(cmd.x, cmd.y, cmd.width, cmd.height);
570
- break;
571
- case 9 /* DrawCmdType.DISABLE_SCISSOR */:
572
- gl.disable(gl.SCISSOR_TEST);
573
- break;
574
- case 2 /* DrawCmdType.PUSH_MASK */:
575
- this._pushMaskDraw(indexOffset, cmd.count);
576
- indexOffset += cmd.count;
577
- break;
578
- case 3 /* DrawCmdType.POP_MASK */:
579
- this._popMaskDraw(indexOffset, cmd.count);
580
- indexOffset += cmd.count;
581
- break;
582
- case 10 /* DrawCmdType.SMOOTHING */:
583
- if (cmd.texture) {
584
- gl.bindTexture(gl.TEXTURE_2D, cmd.texture);
585
- const filter = cmd.smoothing ? gl.LINEAR : gl.NEAREST;
586
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
587
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
588
- }
589
- break;
590
- case 0 /* DrawCmdType.TEXTURE */:
591
- this._drawTextureBatch(cmd.texture, indexOffset, cmd.count, cmd.filter, cmd.textureWidth, cmd.textureHeight);
592
- indexOffset += cmd.count;
593
- gpuDrawCalls++;
594
- break;
595
- case 11 /* DrawCmdType.MULTI_TEXTURE */:
596
- if (cmd.multiCmd) {
597
- this._drawMultiTextureBatch(cmd.multiCmd, indexOffset, cmd.count);
598
- indexOffset += cmd.count;
599
- gpuDrawCalls++;
600
- }
601
- break;
602
- case 1 /* DrawCmdType.RECT */:
603
- this._drawRectBatch(indexOffset, cmd.count);
604
- indexOffset += cmd.count;
605
- gpuDrawCalls++;
606
- break;
607
- }
608
- }
609
- vao.clear();
610
- cmds.clear();
611
- this._batcher.reset();
612
- this._bindIndices = false;
613
- if (gpuDrawCalls > 0 && this._currentBuffer) {
614
- this._currentBuffer.drawCalls += gpuDrawCalls;
615
- }
616
- }
617
- // ── Private — blend & program ─────────────────────────────────────────────
618
- _activateBuffer(buffer, width, height) {
619
- const gl = this.gl;
620
- buffer.rootRenderTarget?.activate();
621
- if (!this._bindIndices) {
622
- const vao = this._vao;
623
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, vao.isMesh() ? vao.getMeshIndices() : vao.getIndices(), gl.STATIC_DRAW);
624
- }
625
- buffer.restoreStencil();
626
- buffer.restoreScissor();
627
- this.onResize(width, height);
628
- }
629
- _applyBlend(value) {
630
- const gl = this.gl;
631
- switch (value) {
632
- case 'source-over':
633
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
634
- break;
635
- case 'lighter':
636
- gl.blendFunc(gl.ONE, gl.ONE);
637
- break;
638
- case 'destination-out':
639
- gl.blendFunc(gl.ZERO, gl.ONE_MINUS_SRC_ALPHA);
640
- break;
641
- case 'destination-in':
642
- gl.blendFunc(gl.ZERO, gl.SRC_ALPHA);
643
- break;
644
- default:
645
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
646
- break;
647
- }
648
- }
649
- // ── Private — draw batches ────────────────────────────────────────────────
650
- _drawMultiTextureBatch(cmd, indexOffset, count) {
651
- const gl = this.gl;
652
- const prog = WebGLProgram.get(gl, ShaderLib.multi_vert, ShaderLib.multi_frag, 'multi');
653
- gl.useProgram(prog.id);
654
- const stride = 6 * 4; // MULTI_VERT_BYTE_SIZE
655
- const aPos = prog.attributes['aVertexPosition'];
656
- const aUV = prog.attributes['aTextureCoord'];
657
- const aColor = prog.attributes['aColor'];
658
- const aTid = prog.attributes['aTextureId'];
659
- if (aPos !== undefined && aPos >= 0) {
660
- gl.enableVertexAttribArray(aPos);
661
- gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, stride, 0);
662
- }
663
- if (aUV !== undefined && aUV >= 0) {
664
- gl.enableVertexAttribArray(aUV);
665
- gl.vertexAttribPointer(aUV, 2, gl.FLOAT, false, stride, 8);
666
- }
667
- if (aColor !== undefined && aColor >= 0) {
668
- gl.enableVertexAttribArray(aColor);
669
- gl.vertexAttribPointer(aColor, 4, gl.UNSIGNED_BYTE, true, stride, 16);
670
- }
671
- if (aTid !== undefined && aTid >= 0) {
672
- gl.enableVertexAttribArray(aTid);
673
- gl.vertexAttribPointer(aTid, 1, gl.FLOAT, false, stride, 20);
674
- }
675
- const uProj = prog.uniforms['projectionVector'];
676
- if (uProj)
677
- gl.uniform2f(uProj, this.projectionX, this.projectionY);
678
- // Bind each texture to its unit and set the sampler uniform array.
679
- const uSamplers = prog.uniforms['uSamplers[0]'];
680
- const samplerIndices = new Int32Array(cmd.textureCount);
681
- for (let i = 0; i < cmd.textureCount; i++) {
682
- gl.activeTexture(gl.TEXTURE0 + i);
683
- gl.bindTexture(gl.TEXTURE_2D, cmd.textures[i] ?? null);
684
- samplerIndices[i] = i;
685
- }
686
- if (uSamplers)
687
- gl.uniform1iv(uSamplers, samplerIndices);
688
- // Restore active texture unit to 0 for subsequent single-texture draws.
689
- gl.activeTexture(gl.TEXTURE0);
690
- gl.drawElements(gl.TRIANGLES, count * 3, gl.UNSIGNED_SHORT, indexOffset * 6);
691
- }
692
- _getTextureProgram(filter) {
693
- if (filter instanceof ColorMatrixFilter) {
694
- return WebGLProgram.get(this.gl, ShaderLib.default_vert, ShaderLib.colorTransform_frag, 'colorTransform');
695
- }
696
- if (filter instanceof BlurFilter || filter instanceof GlowFilter || filter instanceof DropShadowFilter) {
697
- return WebGLProgram.get(this.gl, ShaderLib.default_vert, ShaderLib.glow_frag, 'glow');
698
- }
699
- return WebGLProgram.get(this.gl, ShaderLib.default_vert, ShaderLib.texture_frag, 'texture');
700
- }
701
- _drawTextureBatch(texture, indexOffset, count, filter, texW, texH) {
702
- const gl = this.gl;
703
- const prog = this._getTextureProgram(filter);
704
- gl.useProgram(prog.id);
705
- // Vertex attributes: x,y (2f), uv (2f), color (4ub)
706
- const stride = 5 * 4;
707
- const aPos = prog.attributes['aVertexPosition'];
708
- const aUV = prog.attributes['aTextureCoord'];
709
- const aColor = prog.attributes['aColor'];
710
- if (aPos !== undefined && aPos >= 0) {
711
- gl.enableVertexAttribArray(aPos);
712
- gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, stride, 0);
713
- }
714
- if (aUV !== undefined && aUV >= 0) {
715
- gl.enableVertexAttribArray(aUV);
716
- gl.vertexAttribPointer(aUV, 2, gl.FLOAT, false, stride, 8);
717
- }
718
- if (aColor !== undefined && aColor >= 0) {
719
- gl.enableVertexAttribArray(aColor);
720
- gl.vertexAttribPointer(aColor, 4, gl.UNSIGNED_BYTE, true, stride, 16);
721
- }
722
- const uProj = prog.uniforms['projectionVector'];
723
- if (uProj)
724
- gl.uniform2f(uProj, this.projectionX, this.projectionY);
725
- const uSampler = prog.uniforms['uSampler'];
726
- if (uSampler)
727
- gl.uniform1i(uSampler, 0);
728
- gl.bindTexture(gl.TEXTURE_2D, texture);
729
- // Apply filter uniforms
730
- if (filter instanceof ColorMatrixFilter) {
731
- const uMatrix = prog.uniforms['matrix'];
732
- const uAdd = prog.uniforms['colorAdd'];
733
- const fu = filter.uniforms;
734
- if (uMatrix)
735
- gl.uniformMatrix4fv(uMatrix, false, new Float32Array(fu.matrix));
736
- if (uAdd)
737
- gl.uniform4f(uAdd, fu.colorAdd.x, fu.colorAdd.y, fu.colorAdd.z, fu.colorAdd.w);
738
- }
739
- else if (filter instanceof BlurFilter) {
740
- const uBlur = prog.uniforms['blur'];
741
- const uSize = prog.uniforms['uTextureSize'];
742
- if (uBlur)
743
- gl.uniform2f(uBlur, filter.blurX, filter.blurY);
744
- if (uSize)
745
- gl.uniform2f(uSize, texW, texH);
746
- }
747
- else if (filter instanceof GlowFilter || filter instanceof DropShadowFilter) {
748
- const uSize = prog.uniforms['uTextureSize'];
749
- if (uSize)
750
- gl.uniform2f(uSize, texW, texH);
751
- const uColor = prog.uniforms['color'];
752
- const c = filter.color;
753
- if (uColor)
754
- gl.uniform4f(uColor, ((c >> 16) & 0xff) / 255, ((c >> 8) & 0xff) / 255, (c & 0xff) / 255, 1);
755
- const uAlpha = prog.uniforms['alpha'];
756
- if (uAlpha)
757
- gl.uniform1f(uAlpha, filter.alpha);
758
- const uStrength = prog.uniforms['strength'];
759
- if (uStrength)
760
- gl.uniform1f(uStrength, filter.strength);
761
- const uBlurX = prog.uniforms['blurX'];
762
- if (uBlurX)
763
- gl.uniform1f(uBlurX, filter.blurX);
764
- const uBlurY = prog.uniforms['blurY'];
765
- if (uBlurY)
766
- gl.uniform1f(uBlurY, filter.blurY);
767
- if (filter instanceof DropShadowFilter) {
768
- const uDist = prog.uniforms['dist'];
769
- if (uDist)
770
- gl.uniform1f(uDist, filter.distance);
771
- const uAngle = prog.uniforms['angle'];
772
- if (uAngle)
773
- gl.uniform1f(uAngle, -(filter.angle / 180) * Math.PI);
774
- const uHide = prog.uniforms['hideObject'];
775
- if (uHide)
776
- gl.uniform1f(uHide, filter.hideObject ? 1 : 0);
777
- }
778
- else {
779
- // GlowFilter: zero out DropShadow-specific uniforms so stale
780
- // values from a previous DropShadowFilter draw don't leak in.
781
- const uDist = prog.uniforms['dist'];
782
- if (uDist)
783
- gl.uniform1f(uDist, 0);
784
- const uAngle = prog.uniforms['angle'];
785
- if (uAngle)
786
- gl.uniform1f(uAngle, 0);
787
- const uHide = prog.uniforms['hideObject'];
788
- if (uHide)
789
- gl.uniform1f(uHide, 0);
790
- }
791
- const uInner = prog.uniforms['inner'];
792
- if (uInner)
793
- gl.uniform1f(uInner, filter instanceof GlowFilter && filter.inner ? 1 : 0);
794
- const uKnockout = prog.uniforms['knockout'];
795
- if (uKnockout)
796
- gl.uniform1f(uKnockout, filter instanceof GlowFilter && filter.knockout ? 1 : 0);
797
- }
798
- gl.drawElements(gl.TRIANGLES, count * 3, gl.UNSIGNED_SHORT, indexOffset * 6);
799
- }
800
- _drawRectBatch(indexOffset, count) {
801
- const gl = this.gl;
802
- const prog = WebGLProgram.get(gl, ShaderLib.default_vert, ShaderLib.primitive_frag, 'primitive');
803
- gl.useProgram(prog.id);
804
- const stride = 5 * 4;
805
- const aPos = prog.attributes['aVertexPosition'];
806
- const aColor = prog.attributes['aColor'];
807
- if (aPos !== undefined && aPos >= 0) {
808
- gl.enableVertexAttribArray(aPos);
809
- gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, stride, 0);
810
- }
811
- if (aColor !== undefined && aColor >= 0) {
812
- gl.enableVertexAttribArray(aColor);
813
- gl.vertexAttribPointer(aColor, 4, gl.UNSIGNED_BYTE, true, stride, 16);
814
- }
815
- const uProj = prog.uniforms['projectionVector'];
816
- if (uProj)
817
- gl.uniform2f(uProj, this.projectionX, this.projectionY);
818
- gl.drawElements(gl.TRIANGLES, count * 3, gl.UNSIGNED_SHORT, indexOffset * 6);
819
- }
820
- // ── Private — stencil mask ────────────────────────────────────────────────
821
- _pushMaskDraw(indexOffset, count) {
822
- const gl = this.gl;
823
- const buf = this._currentBuffer;
824
- buf.enableStencil();
825
- gl.colorMask(false, false, false, false);
826
- gl.stencilFunc(gl.ALWAYS, 1, 0xff);
827
- gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
828
- this._drawRectBatch(indexOffset, count);
829
- gl.colorMask(true, true, true, true);
830
- gl.stencilFunc(gl.EQUAL, buf.stencilHandleCount + 1, 0xff);
831
- gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
832
- buf.stencilHandleCount++;
833
- }
834
- _popMaskDraw(indexOffset, count) {
835
- const gl = this.gl;
836
- const buf = this._currentBuffer;
837
- gl.colorMask(false, false, false, false);
838
- gl.stencilFunc(gl.ALWAYS, 1, 0xff);
839
- gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
840
- this._drawRectBatch(indexOffset, count);
841
- gl.colorMask(true, true, true, true);
842
- buf.stencilHandleCount--;
843
- if (buf.stencilHandleCount === 0) {
844
- buf.disableStencil();
845
- }
846
- else {
847
- gl.stencilFunc(gl.EQUAL, buf.stencilHandleCount, 0xff);
848
- gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
849
- }
850
- }
851
- }
852
- //# sourceMappingURL=WebGLRenderContext.js.map