@kurot/core 1.0.12

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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/index.d.ts +14 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +14 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/kurot/benchmark/BenchmarkRunner.d.ts +60 -0
  8. package/dist/kurot/benchmark/BenchmarkRunner.d.ts.map +1 -0
  9. package/dist/kurot/benchmark/BenchmarkRunner.js +112 -0
  10. package/dist/kurot/benchmark/BenchmarkRunner.js.map +1 -0
  11. package/dist/kurot/benchmark/MetricsCollector.d.ts +34 -0
  12. package/dist/kurot/benchmark/MetricsCollector.d.ts.map +1 -0
  13. package/dist/kurot/benchmark/MetricsCollector.js +123 -0
  14. package/dist/kurot/benchmark/MetricsCollector.js.map +1 -0
  15. package/dist/kurot/benchmark/PerfPanel.d.ts +24 -0
  16. package/dist/kurot/benchmark/PerfPanel.d.ts.map +1 -0
  17. package/dist/kurot/benchmark/PerfPanel.js +131 -0
  18. package/dist/kurot/benchmark/PerfPanel.js.map +1 -0
  19. package/dist/kurot/benchmark/ReportExporter.d.ts +8 -0
  20. package/dist/kurot/benchmark/ReportExporter.d.ts.map +1 -0
  21. package/dist/kurot/benchmark/ReportExporter.js +54 -0
  22. package/dist/kurot/benchmark/ReportExporter.js.map +1 -0
  23. package/dist/kurot/benchmark/SceneRegistry.d.ts +16 -0
  24. package/dist/kurot/benchmark/SceneRegistry.d.ts.map +1 -0
  25. package/dist/kurot/benchmark/SceneRegistry.js +233 -0
  26. package/dist/kurot/benchmark/SceneRegistry.js.map +1 -0
  27. package/dist/kurot/benchmark/types.d.ts +47 -0
  28. package/dist/kurot/benchmark/types.d.ts.map +1 -0
  29. package/dist/kurot/benchmark/types.js +2 -0
  30. package/dist/kurot/benchmark/types.js.map +1 -0
  31. package/dist/kurot/display/Bitmap.d.ts +53 -0
  32. package/dist/kurot/display/Bitmap.d.ts.map +1 -0
  33. package/dist/kurot/display/Bitmap.js +185 -0
  34. package/dist/kurot/display/Bitmap.js.map +1 -0
  35. package/dist/kurot/display/DisplayObject.d.ts +253 -0
  36. package/dist/kurot/display/DisplayObject.d.ts.map +1 -0
  37. package/dist/kurot/display/DisplayObject.js +833 -0
  38. package/dist/kurot/display/DisplayObject.js.map +1 -0
  39. package/dist/kurot/display/DisplayObjectContainer.d.ts +57 -0
  40. package/dist/kurot/display/DisplayObjectContainer.d.ts.map +1 -0
  41. package/dist/kurot/display/DisplayObjectContainer.js +330 -0
  42. package/dist/kurot/display/DisplayObjectContainer.js.map +1 -0
  43. package/dist/kurot/display/Graphics.d.ts +48 -0
  44. package/dist/kurot/display/Graphics.d.ts.map +1 -0
  45. package/dist/kurot/display/Graphics.js +315 -0
  46. package/dist/kurot/display/Graphics.js.map +1 -0
  47. package/dist/kurot/display/GraphicsPath.d.ts +112 -0
  48. package/dist/kurot/display/GraphicsPath.d.ts.map +1 -0
  49. package/dist/kurot/display/GraphicsPath.js +2 -0
  50. package/dist/kurot/display/GraphicsPath.js.map +1 -0
  51. package/dist/kurot/display/Mesh.d.ts +21 -0
  52. package/dist/kurot/display/Mesh.d.ts.map +1 -0
  53. package/dist/kurot/display/Mesh.js +56 -0
  54. package/dist/kurot/display/Mesh.js.map +1 -0
  55. package/dist/kurot/display/Shape.d.ts +12 -0
  56. package/dist/kurot/display/Shape.d.ts.map +1 -0
  57. package/dist/kurot/display/Shape.js +35 -0
  58. package/dist/kurot/display/Shape.js.map +1 -0
  59. package/dist/kurot/display/Sprite.d.ts +13 -0
  60. package/dist/kurot/display/Sprite.d.ts.map +1 -0
  61. package/dist/kurot/display/Sprite.js +38 -0
  62. package/dist/kurot/display/Sprite.js.map +1 -0
  63. package/dist/kurot/display/Stage.d.ts +45 -0
  64. package/dist/kurot/display/Stage.d.ts.map +1 -0
  65. package/dist/kurot/display/Stage.js +107 -0
  66. package/dist/kurot/display/Stage.js.map +1 -0
  67. package/dist/kurot/display/enums/BitmapFillMode.d.ts +7 -0
  68. package/dist/kurot/display/enums/BitmapFillMode.d.ts.map +1 -0
  69. package/dist/kurot/display/enums/BitmapFillMode.js +6 -0
  70. package/dist/kurot/display/enums/BitmapFillMode.js.map +1 -0
  71. package/dist/kurot/display/enums/BlendMode.d.ts +24 -0
  72. package/dist/kurot/display/enums/BlendMode.d.ts.map +1 -0
  73. package/dist/kurot/display/enums/BlendMode.js +31 -0
  74. package/dist/kurot/display/enums/BlendMode.js.map +1 -0
  75. package/dist/kurot/display/enums/CapsStyle.d.ts +7 -0
  76. package/dist/kurot/display/enums/CapsStyle.d.ts.map +1 -0
  77. package/dist/kurot/display/enums/CapsStyle.js +6 -0
  78. package/dist/kurot/display/enums/CapsStyle.js.map +1 -0
  79. package/dist/kurot/display/enums/GradientType.d.ts +6 -0
  80. package/dist/kurot/display/enums/GradientType.d.ts.map +1 -0
  81. package/dist/kurot/display/enums/GradientType.js +5 -0
  82. package/dist/kurot/display/enums/GradientType.js.map +1 -0
  83. package/dist/kurot/display/enums/JointStyle.d.ts +7 -0
  84. package/dist/kurot/display/enums/JointStyle.d.ts.map +1 -0
  85. package/dist/kurot/display/enums/JointStyle.js +6 -0
  86. package/dist/kurot/display/enums/JointStyle.js.map +1 -0
  87. package/dist/kurot/display/enums/OrientationMode.d.ts +8 -0
  88. package/dist/kurot/display/enums/OrientationMode.d.ts.map +1 -0
  89. package/dist/kurot/display/enums/OrientationMode.js +7 -0
  90. package/dist/kurot/display/enums/OrientationMode.js.map +1 -0
  91. package/dist/kurot/display/enums/StageScaleMode.d.ts +12 -0
  92. package/dist/kurot/display/enums/StageScaleMode.d.ts.map +1 -0
  93. package/dist/kurot/display/enums/StageScaleMode.js +11 -0
  94. package/dist/kurot/display/enums/StageScaleMode.js.map +1 -0
  95. package/dist/kurot/display/enums/index.d.ts +8 -0
  96. package/dist/kurot/display/enums/index.d.ts.map +1 -0
  97. package/dist/kurot/display/enums/index.js +8 -0
  98. package/dist/kurot/display/enums/index.js.map +1 -0
  99. package/dist/kurot/display/index.d.ts +21 -0
  100. package/dist/kurot/display/index.d.ts.map +1 -0
  101. package/dist/kurot/display/index.js +20 -0
  102. package/dist/kurot/display/index.js.map +1 -0
  103. package/dist/kurot/display/texture/BitmapData.d.ts +36 -0
  104. package/dist/kurot/display/texture/BitmapData.d.ts.map +1 -0
  105. package/dist/kurot/display/texture/BitmapData.js +129 -0
  106. package/dist/kurot/display/texture/BitmapData.js.map +1 -0
  107. package/dist/kurot/display/texture/RenderTexture.d.ts +15 -0
  108. package/dist/kurot/display/texture/RenderTexture.d.ts.map +1 -0
  109. package/dist/kurot/display/texture/RenderTexture.js +58 -0
  110. package/dist/kurot/display/texture/RenderTexture.js.map +1 -0
  111. package/dist/kurot/display/texture/SpriteSheet.d.ts +12 -0
  112. package/dist/kurot/display/texture/SpriteSheet.d.ts.map +1 -0
  113. package/dist/kurot/display/texture/SpriteSheet.js +32 -0
  114. package/dist/kurot/display/texture/SpriteSheet.js.map +1 -0
  115. package/dist/kurot/display/texture/Texture.d.ts +32 -0
  116. package/dist/kurot/display/texture/Texture.d.ts.map +1 -0
  117. package/dist/kurot/display/texture/Texture.js +76 -0
  118. package/dist/kurot/display/texture/Texture.js.map +1 -0
  119. package/dist/kurot/display/texture/index.d.ts +5 -0
  120. package/dist/kurot/display/texture/index.d.ts.map +1 -0
  121. package/dist/kurot/display/texture/index.js +5 -0
  122. package/dist/kurot/display/texture/index.js.map +1 -0
  123. package/dist/kurot/events/Event.d.ts +58 -0
  124. package/dist/kurot/events/Event.d.ts.map +1 -0
  125. package/dist/kurot/events/Event.js +142 -0
  126. package/dist/kurot/events/Event.js.map +1 -0
  127. package/dist/kurot/events/EventDispatcher.d.ts +25 -0
  128. package/dist/kurot/events/EventDispatcher.d.ts.map +1 -0
  129. package/dist/kurot/events/EventDispatcher.js +121 -0
  130. package/dist/kurot/events/EventDispatcher.js.map +1 -0
  131. package/dist/kurot/events/EventPhase.d.ts +6 -0
  132. package/dist/kurot/events/EventPhase.d.ts.map +1 -0
  133. package/dist/kurot/events/EventPhase.js +2 -0
  134. package/dist/kurot/events/EventPhase.js.map +1 -0
  135. package/dist/kurot/events/FocusEvent.d.ts +7 -0
  136. package/dist/kurot/events/FocusEvent.d.ts.map +1 -0
  137. package/dist/kurot/events/FocusEvent.js +11 -0
  138. package/dist/kurot/events/FocusEvent.js.map +1 -0
  139. package/dist/kurot/events/HTTPStatusEvent.d.ts +10 -0
  140. package/dist/kurot/events/HTTPStatusEvent.d.ts.map +1 -0
  141. package/dist/kurot/events/HTTPStatusEvent.js +24 -0
  142. package/dist/kurot/events/HTTPStatusEvent.js.map +1 -0
  143. package/dist/kurot/events/IEventDispatcher.d.ts +10 -0
  144. package/dist/kurot/events/IEventDispatcher.d.ts.map +1 -0
  145. package/dist/kurot/events/IEventDispatcher.js +2 -0
  146. package/dist/kurot/events/IEventDispatcher.js.map +1 -0
  147. package/dist/kurot/events/IOErrorEvent.d.ts +8 -0
  148. package/dist/kurot/events/IOErrorEvent.d.ts.map +1 -0
  149. package/dist/kurot/events/IOErrorEvent.js +17 -0
  150. package/dist/kurot/events/IOErrorEvent.js.map +1 -0
  151. package/dist/kurot/events/ProgressEvent.d.ts +11 -0
  152. package/dist/kurot/events/ProgressEvent.d.ts.map +1 -0
  153. package/dist/kurot/events/ProgressEvent.js +25 -0
  154. package/dist/kurot/events/ProgressEvent.js.map +1 -0
  155. package/dist/kurot/events/StageOrientationEvent.d.ts +8 -0
  156. package/dist/kurot/events/StageOrientationEvent.d.ts.map +1 -0
  157. package/dist/kurot/events/StageOrientationEvent.js +17 -0
  158. package/dist/kurot/events/StageOrientationEvent.js.map +1 -0
  159. package/dist/kurot/events/TextEvent.d.ts +9 -0
  160. package/dist/kurot/events/TextEvent.d.ts.map +1 -0
  161. package/dist/kurot/events/TextEvent.js +21 -0
  162. package/dist/kurot/events/TextEvent.js.map +1 -0
  163. package/dist/kurot/events/TimerEvent.d.ts +14 -0
  164. package/dist/kurot/events/TimerEvent.d.ts.map +1 -0
  165. package/dist/kurot/events/TimerEvent.js +27 -0
  166. package/dist/kurot/events/TimerEvent.js.map +1 -0
  167. package/dist/kurot/events/TouchEvent.d.ts +32 -0
  168. package/dist/kurot/events/TouchEvent.d.ts.map +1 -0
  169. package/dist/kurot/events/TouchEvent.js +85 -0
  170. package/dist/kurot/events/TouchEvent.js.map +1 -0
  171. package/dist/kurot/events/index.d.ts +13 -0
  172. package/dist/kurot/events/index.d.ts.map +1 -0
  173. package/dist/kurot/events/index.js +11 -0
  174. package/dist/kurot/events/index.js.map +1 -0
  175. package/dist/kurot/external/ExternalInterface.d.ts +18 -0
  176. package/dist/kurot/external/ExternalInterface.d.ts.map +1 -0
  177. package/dist/kurot/external/ExternalInterface.js +23 -0
  178. package/dist/kurot/external/ExternalInterface.js.map +1 -0
  179. package/dist/kurot/external/index.d.ts +2 -0
  180. package/dist/kurot/external/index.d.ts.map +1 -0
  181. package/dist/kurot/external/index.js +2 -0
  182. package/dist/kurot/external/index.js.map +1 -0
  183. package/dist/kurot/filters/BlurFilter.d.ts +16 -0
  184. package/dist/kurot/filters/BlurFilter.d.ts.map +1 -0
  185. package/dist/kurot/filters/BlurFilter.js +56 -0
  186. package/dist/kurot/filters/BlurFilter.js.map +1 -0
  187. package/dist/kurot/filters/ColorMatrixFilter.d.ts +10 -0
  188. package/dist/kurot/filters/ColorMatrixFilter.d.ts.map +1 -0
  189. package/dist/kurot/filters/ColorMatrixFilter.js +51 -0
  190. package/dist/kurot/filters/ColorMatrixFilter.js.map +1 -0
  191. package/dist/kurot/filters/CustomFilter.d.ts +12 -0
  192. package/dist/kurot/filters/CustomFilter.d.ts.map +1 -0
  193. package/dist/kurot/filters/CustomFilter.js +43 -0
  194. package/dist/kurot/filters/CustomFilter.js.map +1 -0
  195. package/dist/kurot/filters/DropShadowFilter.d.ts +16 -0
  196. package/dist/kurot/filters/DropShadowFilter.d.ts.map +1 -0
  197. package/dist/kurot/filters/DropShadowFilter.js +76 -0
  198. package/dist/kurot/filters/DropShadowFilter.js.map +1 -0
  199. package/dist/kurot/filters/Filter.d.ts +18 -0
  200. package/dist/kurot/filters/Filter.d.ts.map +1 -0
  201. package/dist/kurot/filters/Filter.js +22 -0
  202. package/dist/kurot/filters/Filter.js.map +1 -0
  203. package/dist/kurot/filters/GlowFilter.d.ts +34 -0
  204. package/dist/kurot/filters/GlowFilter.d.ts.map +1 -0
  205. package/dist/kurot/filters/GlowFilter.js +131 -0
  206. package/dist/kurot/filters/GlowFilter.js.map +1 -0
  207. package/dist/kurot/filters/index.d.ts +7 -0
  208. package/dist/kurot/filters/index.d.ts.map +1 -0
  209. package/dist/kurot/filters/index.js +7 -0
  210. package/dist/kurot/filters/index.js.map +1 -0
  211. package/dist/kurot/geom/Matrix.d.ts +50 -0
  212. package/dist/kurot/geom/Matrix.d.ts.map +1 -0
  213. package/dist/kurot/geom/Matrix.js +310 -0
  214. package/dist/kurot/geom/Matrix.js.map +1 -0
  215. package/dist/kurot/geom/Point.d.ts +23 -0
  216. package/dist/kurot/geom/Point.d.ts.map +1 -0
  217. package/dist/kurot/geom/Point.js +73 -0
  218. package/dist/kurot/geom/Point.js.map +1 -0
  219. package/dist/kurot/geom/Rectangle.d.ts +47 -0
  220. package/dist/kurot/geom/Rectangle.d.ts.map +1 -0
  221. package/dist/kurot/geom/Rectangle.js +174 -0
  222. package/dist/kurot/geom/Rectangle.js.map +1 -0
  223. package/dist/kurot/geom/index.d.ts +4 -0
  224. package/dist/kurot/geom/index.d.ts.map +1 -0
  225. package/dist/kurot/geom/index.js +4 -0
  226. package/dist/kurot/geom/index.js.map +1 -0
  227. package/dist/kurot/localStorage/index.d.ts +2 -0
  228. package/dist/kurot/localStorage/index.d.ts.map +1 -0
  229. package/dist/kurot/localStorage/index.js +2 -0
  230. package/dist/kurot/localStorage/index.js.map +1 -0
  231. package/dist/kurot/localStorage/localStorage.d.ts +5 -0
  232. package/dist/kurot/localStorage/localStorage.d.ts.map +1 -0
  233. package/dist/kurot/localStorage/localStorage.js +19 -0
  234. package/dist/kurot/localStorage/localStorage.js.map +1 -0
  235. package/dist/kurot/media/Sound.d.ts +33 -0
  236. package/dist/kurot/media/Sound.d.ts.map +1 -0
  237. package/dist/kurot/media/Sound.js +163 -0
  238. package/dist/kurot/media/Sound.js.map +1 -0
  239. package/dist/kurot/media/SoundChannel.d.ts +28 -0
  240. package/dist/kurot/media/SoundChannel.d.ts.map +1 -0
  241. package/dist/kurot/media/SoundChannel.js +117 -0
  242. package/dist/kurot/media/SoundChannel.js.map +1 -0
  243. package/dist/kurot/media/Video.d.ts +50 -0
  244. package/dist/kurot/media/Video.d.ts.map +1 -0
  245. package/dist/kurot/media/Video.js +242 -0
  246. package/dist/kurot/media/Video.js.map +1 -0
  247. package/dist/kurot/media/index.d.ts +4 -0
  248. package/dist/kurot/media/index.d.ts.map +1 -0
  249. package/dist/kurot/media/index.js +4 -0
  250. package/dist/kurot/media/index.js.map +1 -0
  251. package/dist/kurot/net/HttpMethod.d.ts +12 -0
  252. package/dist/kurot/net/HttpMethod.d.ts.map +1 -0
  253. package/dist/kurot/net/HttpMethod.js +10 -0
  254. package/dist/kurot/net/HttpMethod.js.map +1 -0
  255. package/dist/kurot/net/HttpRequest.d.ts +69 -0
  256. package/dist/kurot/net/HttpRequest.d.ts.map +1 -0
  257. package/dist/kurot/net/HttpRequest.js +121 -0
  258. package/dist/kurot/net/HttpRequest.js.map +1 -0
  259. package/dist/kurot/net/HttpResponseType.d.ts +12 -0
  260. package/dist/kurot/net/HttpResponseType.d.ts.map +1 -0
  261. package/dist/kurot/net/HttpResponseType.js +10 -0
  262. package/dist/kurot/net/HttpResponseType.js.map +1 -0
  263. package/dist/kurot/net/ImageLoader.d.ts +34 -0
  264. package/dist/kurot/net/ImageLoader.d.ts.map +1 -0
  265. package/dist/kurot/net/ImageLoader.js +54 -0
  266. package/dist/kurot/net/ImageLoader.js.map +1 -0
  267. package/dist/kurot/net/index.d.ts +7 -0
  268. package/dist/kurot/net/index.d.ts.map +1 -0
  269. package/dist/kurot/net/index.js +5 -0
  270. package/dist/kurot/net/index.js.map +1 -0
  271. package/dist/kurot/player/KurotOptions.d.ts +25 -0
  272. package/dist/kurot/player/KurotOptions.d.ts.map +1 -0
  273. package/dist/kurot/player/KurotOptions.js +2 -0
  274. package/dist/kurot/player/KurotOptions.js.map +1 -0
  275. package/dist/kurot/player/Player.d.ts +45 -0
  276. package/dist/kurot/player/Player.d.ts.map +1 -0
  277. package/dist/kurot/player/Player.js +158 -0
  278. package/dist/kurot/player/Player.js.map +1 -0
  279. package/dist/kurot/player/RenderPipe.d.ts +33 -0
  280. package/dist/kurot/player/RenderPipe.d.ts.map +1 -0
  281. package/dist/kurot/player/RenderPipe.js +2 -0
  282. package/dist/kurot/player/RenderPipe.js.map +1 -0
  283. package/dist/kurot/player/ScreenAdapter.d.ts +29 -0
  284. package/dist/kurot/player/ScreenAdapter.d.ts.map +1 -0
  285. package/dist/kurot/player/ScreenAdapter.js +127 -0
  286. package/dist/kurot/player/ScreenAdapter.js.map +1 -0
  287. package/dist/kurot/player/SystemTicker.d.ts +63 -0
  288. package/dist/kurot/player/SystemTicker.d.ts.map +1 -0
  289. package/dist/kurot/player/SystemTicker.js +209 -0
  290. package/dist/kurot/player/SystemTicker.js.map +1 -0
  291. package/dist/kurot/player/TouchHandler.d.ts +39 -0
  292. package/dist/kurot/player/TouchHandler.d.ts.map +1 -0
  293. package/dist/kurot/player/TouchHandler.js +152 -0
  294. package/dist/kurot/player/TouchHandler.js.map +1 -0
  295. package/dist/kurot/player/canvas/CanvasRenderer.d.ts +50 -0
  296. package/dist/kurot/player/canvas/CanvasRenderer.d.ts.map +1 -0
  297. package/dist/kurot/player/canvas/CanvasRenderer.js +811 -0
  298. package/dist/kurot/player/canvas/CanvasRenderer.js.map +1 -0
  299. package/dist/kurot/player/canvas/DisplayList.d.ts +36 -0
  300. package/dist/kurot/player/canvas/DisplayList.d.ts.map +1 -0
  301. package/dist/kurot/player/canvas/DisplayList.js +100 -0
  302. package/dist/kurot/player/canvas/DisplayList.js.map +1 -0
  303. package/dist/kurot/player/canvas/RenderBuffer.d.ts +35 -0
  304. package/dist/kurot/player/canvas/RenderBuffer.d.ts.map +1 -0
  305. package/dist/kurot/player/canvas/RenderBuffer.js +83 -0
  306. package/dist/kurot/player/canvas/RenderBuffer.js.map +1 -0
  307. package/dist/kurot/player/canvas/index.d.ts +4 -0
  308. package/dist/kurot/player/canvas/index.d.ts.map +1 -0
  309. package/dist/kurot/player/canvas/index.js +4 -0
  310. package/dist/kurot/player/canvas/index.js.map +1 -0
  311. package/dist/kurot/player/createPlayer.d.ts +36 -0
  312. package/dist/kurot/player/createPlayer.d.ts.map +1 -0
  313. package/dist/kurot/player/createPlayer.js +83 -0
  314. package/dist/kurot/player/createPlayer.js.map +1 -0
  315. package/dist/kurot/player/index.d.ts +11 -0
  316. package/dist/kurot/player/index.d.ts.map +1 -0
  317. package/dist/kurot/player/index.js +14 -0
  318. package/dist/kurot/player/index.js.map +1 -0
  319. package/dist/kurot/player/webgl/InstructionSet.d.ts +61 -0
  320. package/dist/kurot/player/webgl/InstructionSet.d.ts.map +1 -0
  321. package/dist/kurot/player/webgl/InstructionSet.js +84 -0
  322. package/dist/kurot/player/webgl/InstructionSet.js.map +1 -0
  323. package/dist/kurot/player/webgl/MultiTextureBatcher.d.ts +39 -0
  324. package/dist/kurot/player/webgl/MultiTextureBatcher.d.ts.map +1 -0
  325. package/dist/kurot/player/webgl/MultiTextureBatcher.js +63 -0
  326. package/dist/kurot/player/webgl/MultiTextureBatcher.js.map +1 -0
  327. package/dist/kurot/player/webgl/WebGLDrawCmdManager.d.ts +57 -0
  328. package/dist/kurot/player/webgl/WebGLDrawCmdManager.d.ts.map +1 -0
  329. package/dist/kurot/player/webgl/WebGLDrawCmdManager.js +197 -0
  330. package/dist/kurot/player/webgl/WebGLDrawCmdManager.js.map +1 -0
  331. package/dist/kurot/player/webgl/WebGLProgram.d.ts +15 -0
  332. package/dist/kurot/player/webgl/WebGLProgram.d.ts.map +1 -0
  333. package/dist/kurot/player/webgl/WebGLProgram.js +32 -0
  334. package/dist/kurot/player/webgl/WebGLProgram.js.map +1 -0
  335. package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts +57 -0
  336. package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts.map +1 -0
  337. package/dist/kurot/player/webgl/WebGLRenderBuffer.js +254 -0
  338. package/dist/kurot/player/webgl/WebGLRenderBuffer.js.map +1 -0
  339. package/dist/kurot/player/webgl/WebGLRenderContext.d.ts +128 -0
  340. package/dist/kurot/player/webgl/WebGLRenderContext.d.ts.map +1 -0
  341. package/dist/kurot/player/webgl/WebGLRenderContext.js +933 -0
  342. package/dist/kurot/player/webgl/WebGLRenderContext.js.map +1 -0
  343. package/dist/kurot/player/webgl/WebGLRenderTarget.d.ts +20 -0
  344. package/dist/kurot/player/webgl/WebGLRenderTarget.d.ts.map +1 -0
  345. package/dist/kurot/player/webgl/WebGLRenderTarget.js +90 -0
  346. package/dist/kurot/player/webgl/WebGLRenderTarget.js.map +1 -0
  347. package/dist/kurot/player/webgl/WebGLRenderer.d.ts +208 -0
  348. package/dist/kurot/player/webgl/WebGLRenderer.d.ts.map +1 -0
  349. package/dist/kurot/player/webgl/WebGLRenderer.js +921 -0
  350. package/dist/kurot/player/webgl/WebGLRenderer.js.map +1 -0
  351. package/dist/kurot/player/webgl/WebGLUtils.d.ts +17 -0
  352. package/dist/kurot/player/webgl/WebGLUtils.d.ts.map +1 -0
  353. package/dist/kurot/player/webgl/WebGLUtils.js +56 -0
  354. package/dist/kurot/player/webgl/WebGLUtils.js.map +1 -0
  355. package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts +39 -0
  356. package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts.map +1 -0
  357. package/dist/kurot/player/webgl/WebGLVertexArrayObject.js +375 -0
  358. package/dist/kurot/player/webgl/WebGLVertexArrayObject.js.map +1 -0
  359. package/dist/kurot/player/webgl/index.d.ts +11 -0
  360. package/dist/kurot/player/webgl/index.d.ts.map +1 -0
  361. package/dist/kurot/player/webgl/index.js +11 -0
  362. package/dist/kurot/player/webgl/index.js.map +1 -0
  363. package/dist/kurot/player/webgl/pipes/BitmapPipe.d.ts +35 -0
  364. package/dist/kurot/player/webgl/pipes/BitmapPipe.d.ts.map +1 -0
  365. package/dist/kurot/player/webgl/pipes/BitmapPipe.js +130 -0
  366. package/dist/kurot/player/webgl/pipes/BitmapPipe.js.map +1 -0
  367. package/dist/kurot/player/webgl/pipes/FilterPipe.d.ts +68 -0
  368. package/dist/kurot/player/webgl/pipes/FilterPipe.d.ts.map +1 -0
  369. package/dist/kurot/player/webgl/pipes/FilterPipe.js +176 -0
  370. package/dist/kurot/player/webgl/pipes/FilterPipe.js.map +1 -0
  371. package/dist/kurot/player/webgl/pipes/GraphicsPipe.d.ts +38 -0
  372. package/dist/kurot/player/webgl/pipes/GraphicsPipe.d.ts.map +1 -0
  373. package/dist/kurot/player/webgl/pipes/GraphicsPipe.js +165 -0
  374. package/dist/kurot/player/webgl/pipes/GraphicsPipe.js.map +1 -0
  375. package/dist/kurot/player/webgl/pipes/MaskPipe.d.ts +58 -0
  376. package/dist/kurot/player/webgl/pipes/MaskPipe.d.ts.map +1 -0
  377. package/dist/kurot/player/webgl/pipes/MaskPipe.js +206 -0
  378. package/dist/kurot/player/webgl/pipes/MaskPipe.js.map +1 -0
  379. package/dist/kurot/player/webgl/pipes/MeshPipe.d.ts +22 -0
  380. package/dist/kurot/player/webgl/pipes/MeshPipe.d.ts.map +1 -0
  381. package/dist/kurot/player/webgl/pipes/MeshPipe.js +50 -0
  382. package/dist/kurot/player/webgl/pipes/MeshPipe.js.map +1 -0
  383. package/dist/kurot/player/webgl/pipes/ParticlePipe.d.ts +23 -0
  384. package/dist/kurot/player/webgl/pipes/ParticlePipe.d.ts.map +1 -0
  385. package/dist/kurot/player/webgl/pipes/ParticlePipe.js +48 -0
  386. package/dist/kurot/player/webgl/pipes/ParticlePipe.js.map +1 -0
  387. package/dist/kurot/player/webgl/pipes/TextPipe.d.ts +54 -0
  388. package/dist/kurot/player/webgl/pipes/TextPipe.d.ts.map +1 -0
  389. package/dist/kurot/player/webgl/pipes/TextPipe.js +201 -0
  390. package/dist/kurot/player/webgl/pipes/TextPipe.js.map +1 -0
  391. package/dist/kurot/player/webgl/pipes/index.d.ts +8 -0
  392. package/dist/kurot/player/webgl/pipes/index.d.ts.map +1 -0
  393. package/dist/kurot/player/webgl/pipes/index.js +8 -0
  394. package/dist/kurot/player/webgl/pipes/index.js.map +1 -0
  395. package/dist/kurot/player/webgl/shaders/ShaderLib.d.ts +23 -0
  396. package/dist/kurot/player/webgl/shaders/ShaderLib.d.ts.map +1 -0
  397. package/dist/kurot/player/webgl/shaders/ShaderLib.js +263 -0
  398. package/dist/kurot/player/webgl/shaders/ShaderLib.js.map +1 -0
  399. package/dist/kurot/player/webgl/shaders/ShaderLib2.d.ts +23 -0
  400. package/dist/kurot/player/webgl/shaders/ShaderLib2.d.ts.map +1 -0
  401. package/dist/kurot/player/webgl/shaders/ShaderLib2.js +280 -0
  402. package/dist/kurot/player/webgl/shaders/ShaderLib2.js.map +1 -0
  403. package/dist/kurot/player/webgl/shaders/index.d.ts +5 -0
  404. package/dist/kurot/player/webgl/shaders/index.d.ts.map +1 -0
  405. package/dist/kurot/player/webgl/shaders/index.js +5 -0
  406. package/dist/kurot/player/webgl/shaders/index.js.map +1 -0
  407. package/dist/kurot/resource/Resource.d.ts +126 -0
  408. package/dist/kurot/resource/Resource.d.ts.map +1 -0
  409. package/dist/kurot/resource/Resource.js +377 -0
  410. package/dist/kurot/resource/Resource.js.map +1 -0
  411. package/dist/kurot/resource/ResourceConfig.d.ts +71 -0
  412. package/dist/kurot/resource/ResourceConfig.d.ts.map +1 -0
  413. package/dist/kurot/resource/ResourceConfig.js +146 -0
  414. package/dist/kurot/resource/ResourceConfig.js.map +1 -0
  415. package/dist/kurot/resource/ResourceEvent.d.ts +29 -0
  416. package/dist/kurot/resource/ResourceEvent.d.ts.map +1 -0
  417. package/dist/kurot/resource/ResourceEvent.js +12 -0
  418. package/dist/kurot/resource/ResourceEvent.js.map +1 -0
  419. package/dist/kurot/resource/ResourceItem.d.ts +24 -0
  420. package/dist/kurot/resource/ResourceItem.d.ts.map +1 -0
  421. package/dist/kurot/resource/ResourceItem.js +29 -0
  422. package/dist/kurot/resource/ResourceItem.js.map +1 -0
  423. package/dist/kurot/resource/ResourceLoader.d.ts +73 -0
  424. package/dist/kurot/resource/ResourceLoader.d.ts.map +1 -0
  425. package/dist/kurot/resource/ResourceLoader.js +174 -0
  426. package/dist/kurot/resource/ResourceLoader.js.map +1 -0
  427. package/dist/kurot/resource/analyzers/AnalyzerBase.d.ts +31 -0
  428. package/dist/kurot/resource/analyzers/AnalyzerBase.d.ts.map +1 -0
  429. package/dist/kurot/resource/analyzers/AnalyzerBase.js +38 -0
  430. package/dist/kurot/resource/analyzers/AnalyzerBase.js.map +1 -0
  431. package/dist/kurot/resource/analyzers/ImageAnalyzer.d.ts +13 -0
  432. package/dist/kurot/resource/analyzers/ImageAnalyzer.d.ts.map +1 -0
  433. package/dist/kurot/resource/analyzers/ImageAnalyzer.js +54 -0
  434. package/dist/kurot/resource/analyzers/ImageAnalyzer.js.map +1 -0
  435. package/dist/kurot/resource/analyzers/JsonAnalyzer.d.ts +12 -0
  436. package/dist/kurot/resource/analyzers/JsonAnalyzer.d.ts.map +1 -0
  437. package/dist/kurot/resource/analyzers/JsonAnalyzer.js +54 -0
  438. package/dist/kurot/resource/analyzers/JsonAnalyzer.js.map +1 -0
  439. package/dist/kurot/resource/analyzers/SheetAnalyzer.d.ts +32 -0
  440. package/dist/kurot/resource/analyzers/SheetAnalyzer.d.ts.map +1 -0
  441. package/dist/kurot/resource/analyzers/SheetAnalyzer.js +182 -0
  442. package/dist/kurot/resource/analyzers/SheetAnalyzer.js.map +1 -0
  443. package/dist/kurot/resource/analyzers/SoundAnalyzer.d.ts +13 -0
  444. package/dist/kurot/resource/analyzers/SoundAnalyzer.d.ts.map +1 -0
  445. package/dist/kurot/resource/analyzers/SoundAnalyzer.js +45 -0
  446. package/dist/kurot/resource/analyzers/SoundAnalyzer.js.map +1 -0
  447. package/dist/kurot/resource/analyzers/TextAnalyzer.d.ts +12 -0
  448. package/dist/kurot/resource/analyzers/TextAnalyzer.d.ts.map +1 -0
  449. package/dist/kurot/resource/analyzers/TextAnalyzer.js +49 -0
  450. package/dist/kurot/resource/analyzers/TextAnalyzer.js.map +1 -0
  451. package/dist/kurot/resource/analyzers/index.d.ts +7 -0
  452. package/dist/kurot/resource/analyzers/index.d.ts.map +1 -0
  453. package/dist/kurot/resource/analyzers/index.js +7 -0
  454. package/dist/kurot/resource/analyzers/index.js.map +1 -0
  455. package/dist/kurot/resource/index.d.ts +15 -0
  456. package/dist/kurot/resource/index.d.ts.map +1 -0
  457. package/dist/kurot/resource/index.js +15 -0
  458. package/dist/kurot/resource/index.js.map +1 -0
  459. package/dist/kurot/system/Capabilities.d.ts +46 -0
  460. package/dist/kurot/system/Capabilities.d.ts.map +1 -0
  461. package/dist/kurot/system/Capabilities.js +100 -0
  462. package/dist/kurot/system/Capabilities.js.map +1 -0
  463. package/dist/kurot/system/index.d.ts +2 -0
  464. package/dist/kurot/system/index.d.ts.map +1 -0
  465. package/dist/kurot/system/index.js +2 -0
  466. package/dist/kurot/system/index.js.map +1 -0
  467. package/dist/kurot/text/BitmapFont.d.ts +31 -0
  468. package/dist/kurot/text/BitmapFont.d.ts.map +1 -0
  469. package/dist/kurot/text/BitmapFont.js +86 -0
  470. package/dist/kurot/text/BitmapFont.js.map +1 -0
  471. package/dist/kurot/text/BitmapText.d.ts +58 -0
  472. package/dist/kurot/text/BitmapText.d.ts.map +1 -0
  473. package/dist/kurot/text/BitmapText.js +245 -0
  474. package/dist/kurot/text/BitmapText.js.map +1 -0
  475. package/dist/kurot/text/HtmlTextParser.d.ts +14 -0
  476. package/dist/kurot/text/HtmlTextParser.d.ts.map +1 -0
  477. package/dist/kurot/text/HtmlTextParser.js +147 -0
  478. package/dist/kurot/text/HtmlTextParser.js.map +1 -0
  479. package/dist/kurot/text/InputController.d.ts +29 -0
  480. package/dist/kurot/text/InputController.d.ts.map +1 -0
  481. package/dist/kurot/text/InputController.js +131 -0
  482. package/dist/kurot/text/InputController.js.map +1 -0
  483. package/dist/kurot/text/StageText.d.ts +51 -0
  484. package/dist/kurot/text/StageText.d.ts.map +1 -0
  485. package/dist/kurot/text/StageText.js +324 -0
  486. package/dist/kurot/text/StageText.js.map +1 -0
  487. package/dist/kurot/text/TextField.d.ts +149 -0
  488. package/dist/kurot/text/TextField.d.ts.map +1 -0
  489. package/dist/kurot/text/TextField.js +734 -0
  490. package/dist/kurot/text/TextField.js.map +1 -0
  491. package/dist/kurot/text/TextMeasurer.d.ts +9 -0
  492. package/dist/kurot/text/TextMeasurer.d.ts.map +1 -0
  493. package/dist/kurot/text/TextMeasurer.js +36 -0
  494. package/dist/kurot/text/TextMeasurer.js.map +1 -0
  495. package/dist/kurot/text/WordWrap.d.ts +29 -0
  496. package/dist/kurot/text/WordWrap.d.ts.map +1 -0
  497. package/dist/kurot/text/WordWrap.js +110 -0
  498. package/dist/kurot/text/WordWrap.js.map +1 -0
  499. package/dist/kurot/text/enums/HorizontalAlign.d.ts +9 -0
  500. package/dist/kurot/text/enums/HorizontalAlign.d.ts.map +1 -0
  501. package/dist/kurot/text/enums/HorizontalAlign.js +8 -0
  502. package/dist/kurot/text/enums/HorizontalAlign.js.map +1 -0
  503. package/dist/kurot/text/enums/TextFieldInputType.d.ts +7 -0
  504. package/dist/kurot/text/enums/TextFieldInputType.d.ts.map +1 -0
  505. package/dist/kurot/text/enums/TextFieldInputType.js +6 -0
  506. package/dist/kurot/text/enums/TextFieldInputType.js.map +1 -0
  507. package/dist/kurot/text/enums/TextFieldType.d.ts +6 -0
  508. package/dist/kurot/text/enums/TextFieldType.d.ts.map +1 -0
  509. package/dist/kurot/text/enums/TextFieldType.js +5 -0
  510. package/dist/kurot/text/enums/TextFieldType.js.map +1 -0
  511. package/dist/kurot/text/enums/VerticalAlign.d.ts +9 -0
  512. package/dist/kurot/text/enums/VerticalAlign.d.ts.map +1 -0
  513. package/dist/kurot/text/enums/VerticalAlign.js +8 -0
  514. package/dist/kurot/text/enums/VerticalAlign.js.map +1 -0
  515. package/dist/kurot/text/enums/index.d.ts +5 -0
  516. package/dist/kurot/text/enums/index.d.ts.map +1 -0
  517. package/dist/kurot/text/enums/index.js +5 -0
  518. package/dist/kurot/text/enums/index.js.map +1 -0
  519. package/dist/kurot/text/index.d.ts +14 -0
  520. package/dist/kurot/text/index.d.ts.map +1 -0
  521. package/dist/kurot/text/index.js +13 -0
  522. package/dist/kurot/text/index.js.map +1 -0
  523. package/dist/kurot/text/types/ITextElement.d.ts +31 -0
  524. package/dist/kurot/text/types/ITextElement.d.ts.map +1 -0
  525. package/dist/kurot/text/types/ITextElement.js +2 -0
  526. package/dist/kurot/text/types/ITextElement.js.map +1 -0
  527. package/dist/kurot/text/types/index.d.ts +2 -0
  528. package/dist/kurot/text/types/index.d.ts.map +1 -0
  529. package/dist/kurot/text/types/index.js +2 -0
  530. package/dist/kurot/text/types/index.js.map +1 -0
  531. package/dist/kurot/utils/Base64Util.d.ts +20 -0
  532. package/dist/kurot/utils/Base64Util.d.ts.map +1 -0
  533. package/dist/kurot/utils/Base64Util.js +41 -0
  534. package/dist/kurot/utils/Base64Util.js.map +1 -0
  535. package/dist/kurot/utils/ByteArray.d.ts +65 -0
  536. package/dist/kurot/utils/ByteArray.d.ts.map +1 -0
  537. package/dist/kurot/utils/ByteArray.js +300 -0
  538. package/dist/kurot/utils/ByteArray.js.map +1 -0
  539. package/dist/kurot/utils/DebugLog.d.ts +9 -0
  540. package/dist/kurot/utils/DebugLog.d.ts.map +1 -0
  541. package/dist/kurot/utils/DebugLog.js +25 -0
  542. package/dist/kurot/utils/DebugLog.js.map +1 -0
  543. package/dist/kurot/utils/FontManager.d.ts +11 -0
  544. package/dist/kurot/utils/FontManager.d.ts.map +1 -0
  545. package/dist/kurot/utils/FontManager.js +39 -0
  546. package/dist/kurot/utils/FontManager.js.map +1 -0
  547. package/dist/kurot/utils/Logger.d.ts +16 -0
  548. package/dist/kurot/utils/Logger.d.ts.map +1 -0
  549. package/dist/kurot/utils/Logger.js +26 -0
  550. package/dist/kurot/utils/Logger.js.map +1 -0
  551. package/dist/kurot/utils/NumberUtils.d.ts +15 -0
  552. package/dist/kurot/utils/NumberUtils.d.ts.map +1 -0
  553. package/dist/kurot/utils/NumberUtils.js +60 -0
  554. package/dist/kurot/utils/NumberUtils.js.map +1 -0
  555. package/dist/kurot/utils/Timer.d.ts +28 -0
  556. package/dist/kurot/utils/Timer.d.ts.map +1 -0
  557. package/dist/kurot/utils/Timer.js +67 -0
  558. package/dist/kurot/utils/Timer.js.map +1 -0
  559. package/dist/kurot/utils/index.d.ts +9 -0
  560. package/dist/kurot/utils/index.d.ts.map +1 -0
  561. package/dist/kurot/utils/index.js +9 -0
  562. package/dist/kurot/utils/index.js.map +1 -0
  563. package/dist/kurot/utils/toColorString.d.ts +2 -0
  564. package/dist/kurot/utils/toColorString.d.ts.map +1 -0
  565. package/dist/kurot/utils/toColorString.js +5 -0
  566. package/dist/kurot/utils/toColorString.js.map +1 -0
  567. package/package.json +56 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kelvin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,154 @@
1
+ # @kurot/core
2
+
3
+ A modern rewrite of the Egret game engine. Maintains Egret-compatible display object and event APIs while upgrading the rendering architecture, type safety, and tooling.
4
+
5
+ > **Stable (1.0.12).** Targets ES2022 and evergreen browsers (Chrome / Edge / Firefox / Safari). No IE / old-Android / pre-2022 Safari support shims.
6
+
7
+ ## Features
8
+
9
+ **Rendering Engine**
10
+
11
+ - WebGL-first with automatic Canvas 2D fallback when WebGL initialization fails
12
+ - WebGL-only InstructionSet pipeline (Build → Execute two-phase, inspired by Pixi.js 8)
13
+ - Multi-texture batching (up to 8 textures per draw call)
14
+ - RenderGroup layers — localize instruction rebuilds to the affected subtree
15
+ - Filters: Blur (ping-pong dual-pass), Glow, DropShadow, ColorMatrix, custom shaders
16
+ - Masks: automatic selection between scissor / stencil / offscreen compositing
17
+ - PixiJS-style `cacheAsTexture()` plus Egret-compatible `cacheAsBitmap`
18
+ - WebGL Context Lost recovery
19
+
20
+ **Display Objects**
21
+
22
+ - Full scene graph: DisplayObject → Container → Sprite → Stage
23
+ - Bitmap (with scale9Grid), Shape, Mesh, TextField, BitmapText, Video
24
+ - Graphics vector drawing (rect, circle, ellipse, arc, bezier, gradients, dashed lines)
25
+ - cacheAsBitmap / cacheAsTexture, tint, skew, zIndex sorting
26
+
27
+ **Event System**
28
+
29
+ - Egret-compatible event classes: Event, TouchEvent, TimerEvent, ProgressEvent, etc.
30
+ - Capture / bubble two-phase dispatch, object pooling, `once()` built-in
31
+ - Unified touch + mouse handling, multi-touch support
32
+
33
+ **Other**
34
+
35
+ - 7 screen scale modes (showAll / noScale / exactFit / noBorder, etc.)
36
+ - Resource manager — async/await loading, group-based batching, 5 built-in parsers (Image / Json / Text / Sound / Sheet)
37
+ - HttpRequest / ImageLoader networking
38
+ - Sound (Web Audio + HTML Audio fallback) / Video playback
39
+ - ByteArray / Timer / Logger / FontManager / LocalStorage
40
+ - Full `strict: true` TypeScript across runtime APIs
41
+
42
+ ### Rendering Backends
43
+
44
+ `Player` tries `webgl2` and then `webgl` directly on the supplied canvas. If both context types fail to initialize, it falls back to the Canvas 2D renderer. No temporary canvas is created solely to probe WebGL support.
45
+
46
+ ```typescript
47
+ const app = createPlayer({ canvas });
48
+ console.log(app.player.isWebGL ? 'WebGL' : 'Canvas 2D');
49
+ ```
50
+
51
+ The flat InstructionSet pipeline and multi-texture batching apply to the WebGL backend. The full-scene Canvas fallback uses direct display-tree traversal. Canvas support is still part of the normal WebGL path: text, Graphics, RenderTexture, and pixel hit testing may be rasterized through Canvas before being uploaded or composited by WebGL.
52
+
53
+ **Migrating from Egret (1.0.0 breaking changes)**
54
+
55
+ - `.hashCode` and the `HashObject` base class were removed. Use `WeakMap`-keyed lookups or `===` for object identity instead of comparing integer hash codes. Internal consumers were migrated to `WeakMap` in 0.6.3.
56
+ - `Resource.instance` (singleton getter) was removed — import the shared `resource` instance directly: `import { resource } from '@kurot/core'`.
57
+ - The multi-Player listener registration API on `DisplayObject` / `DisplayObjectContainer` (`addStructureChangeListener` / `addRenderableDirtyListener` / `addContainerStructureChangeListener`) was removed — the engine is single-Player by design.
58
+ - `WebGLRenderContext.getInstance()` / `resetInstance()` were removed — `Player` constructs the context directly.
59
+ - Internal fields were renamed with a `$` prefix (e.g. `$x`, `$y`, `$renderDirty`) to separate engine state from public API.
60
+ - Vendor-prefixed fallbacks (`experimental-webgl`, `webkitAudioContext`, `webkit/moz fullscreen`) and the hand-rolled base64 implementation were removed in favour of native APIs.
61
+
62
+ **vs. Egret**
63
+
64
+ | Aspect | Egret | Kurot |
65
+ | ----------- | ----------------- | ----------------------- |
66
+ | Code size | 42,340 lines | ~18,500 lines |
67
+ | Modules | `namespace egret` | ES Module |
68
+ | Type safety | pervasive `any` | `strict: true` |
69
+ | Target | ES5 | ES2022 |
70
+ | Pipeline | RenderNode tree | Flat InstructionSet |
71
+ | Batching | same-texture | multi-texture (8/batch) |
72
+
73
+ **Design Credits**
74
+
75
+ The rendering pipeline borrows concepts from Pixi.js 8 while keeping the Egret display object model and API intact:
76
+
77
+ | Aspect | Source | Notes |
78
+ | ------------------------------------- | --------- | --------------------------------------------------------------- |
79
+ | InstructionSet + RenderPipe two-phase | Pixi.js 8 | Build → flat instructions, Execute → dispatch by `renderPipeId` |
80
+ | RenderGroup layers | Pixi.js 8 | `isRenderGroup` isolates subtree instruction sets |
81
+ | Multi-texture batching | Pixi.js | `aTextureId` per vertex, up to 8 textures per draw call |
82
+ | Tint | Pixi.js | `displayObject.tint` passed as premultiplied vertex color |
83
+ | Dirty flag separation | Pixi.js 8 | `structureDirty` (rebuild) vs `renderDirty` (patch) |
84
+ | Display objects / events / API | Egret | Fully preserved for minimal migration cost |
85
+ | Filter shaders | Egret | Original GLSL, blur upgraded to ping-pong dual-pass |
86
+ | WebGL state management | Egret | DrawCmdManager batching command queue |
87
+ | Mask strategies | Egret | scissor / stencil / offscreen compositing |
88
+
89
+ ## Quick Start
90
+
91
+ ```typescript
92
+ import { createPlayer, Sprite, Shape } from '@kurot/core';
93
+
94
+ const app = createPlayer({
95
+ canvas: document.getElementById('game-canvas') as HTMLCanvasElement,
96
+ frameRate: 60,
97
+ scaleMode: 'showAll',
98
+ contentWidth: 640,
99
+ contentHeight: 1136,
100
+ });
101
+
102
+ const root = new Sprite();
103
+ app.start(root);
104
+
105
+ const rect = new Shape();
106
+ rect.graphics.beginFill(0xff0000);
107
+ rect.graphics.drawRect(0, 0, 100, 100);
108
+ rect.graphics.endFill();
109
+ rect.x = 100;
110
+ rect.y = 100;
111
+ root.addChild(rect);
112
+
113
+ // stop() is resumable; destroy() performs final lifecycle cleanup.
114
+ // app.destroy();
115
+ ```
116
+
117
+ ## Development
118
+
119
+ ```bash
120
+ pnpm install
121
+ pnpm run build # compile
122
+ pnpm run test # run tests (634 cases)
123
+ pnpm run dev # watch mode
124
+ ```
125
+
126
+ ## Documentation
127
+
128
+ - [CHANGELOG.md](./CHANGELOG.md) — versioned release notes, including the full list of 1.0.0 breaking changes
129
+ - [Architecture](./docs/architecture.md) — engine structure and rendering pipeline
130
+ - [Resource system](./docs/resource.md) — resource configuration, loading, and lifecycle
131
+ - [PixiJS alignment](./docs/pixi-alignment.md) — rendering concepts adopted from PixiJS and intentional differences
132
+ - [Live demo](https://irwinmc.github.io/kurot-demo/) — interactive rendering examples
133
+
134
+ ## Test Pages
135
+
136
+ Interactive test pages in `examples/` require an HTTP dev server (ES Modules don't work over `file://`):
137
+
138
+ ```bash
139
+ pnpm benchmark
140
+ ```
141
+
142
+ | Page | Description |
143
+ | --------------- | -------------------------------------------------------------------- |
144
+ | **Visual Test** | 19 cases: Shape, Graphics, Filters, Mask, RenderGroup, Animation |
145
+ | **Bitmap Test** | Bitmap rendering: scale, rotation, SpriteSheet, scale9Grid, batching |
146
+ | **Mesh Test** | Mesh deformation: Quad / Fan / Grid presets, Wave / Ripple / Twist |
147
+ | **Sound Test** | Sound / SoundChannel: load, play, volume, loop, error handling |
148
+ | **Video Test** | Video: load, play/pause, seek, volume, resize |
149
+ | **Net Test** | HttpRequest / ImageLoader: GET / POST, responseType, timeout, abort |
150
+ | **Benchmark** | WebGL perf: 5 stress scenes with FPS / Draw Calls / Batch Efficiency |
151
+
152
+ ## License
153
+
154
+ MIT
@@ -0,0 +1,14 @@
1
+ export * from './kurot/events/index.js';
2
+ export * from './kurot/geom/index.js';
3
+ export * from './kurot/utils/index.js';
4
+ export * from './kurot/display/index.js';
5
+ export * from './kurot/net/index.js';
6
+ export * from './kurot/filters/index.js';
7
+ export * from './kurot/media/index.js';
8
+ export * from './kurot/player/index.js';
9
+ export * from './kurot/text/index.js';
10
+ export * from './kurot/system/index.js';
11
+ export * as localStorage from './kurot/localStorage/localStorage.js';
12
+ export { ExternalInterface } from './kurot/external/ExternalInterface.js';
13
+ export * from './kurot/resource/index.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,cAAc,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from './kurot/events/index.js';
2
+ export * from './kurot/geom/index.js';
3
+ export * from './kurot/utils/index.js';
4
+ export * from './kurot/display/index.js';
5
+ export * from './kurot/net/index.js';
6
+ export * from './kurot/filters/index.js';
7
+ export * from './kurot/media/index.js';
8
+ export * from './kurot/player/index.js';
9
+ export * from './kurot/text/index.js';
10
+ export * from './kurot/system/index.js';
11
+ export * as localStorage from './kurot/localStorage/localStorage.js';
12
+ export { ExternalInterface } from './kurot/external/ExternalInterface.js';
13
+ export * from './kurot/resource/index.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { MetricsCollector } from './MetricsCollector.js';
2
+ export type Phase = 'idle' | 'warmup' | 'measuring' | 'paused';
3
+ export interface SceneDescriptor {
4
+ id: string;
5
+ label?: string;
6
+ defaultCount?: number;
7
+ minCount?: number;
8
+ maxCount?: number;
9
+ build(container: unknown, count: number): () => void;
10
+ }
11
+ /**
12
+ * 纯状态机,管理 warmup/measuring/paused 状态。
13
+ * 不依赖 Kurot 引擎,通过外部注入的回调与引擎交互。
14
+ */
15
+ export declare class BenchmarkRunner {
16
+ private readonly collector;
17
+ private readonly onPhaseChange;
18
+ private readonly getSceneDescriptor;
19
+ private readonly container;
20
+ private phase;
21
+ private warmupFrames;
22
+ private readonly warmupTarget;
23
+ private currentSceneId;
24
+ private currentCount;
25
+ private cleanup;
26
+ constructor(collector: MetricsCollector, onPhaseChange: (phase: Phase) => void, getSceneDescriptor: (id: string) => SceneDescriptor | undefined, container: unknown);
27
+ /**
28
+ * 切换场景:销毁旧场景,重建新场景,重置 warmup
29
+ */
30
+ switchScene(sceneId: string, count: number): void;
31
+ /**
32
+ * 重建当前场景(对象数量变更)
33
+ */
34
+ rebuildScene(count: number): void;
35
+ /**
36
+ * 暂停(仅在 measuring 状态有效)
37
+ */
38
+ pause(): void;
39
+ /**
40
+ * 继续(仅在 paused 状态有效)
41
+ */
42
+ resume(): void;
43
+ /**
44
+ * 重置测量:清空统计,重新进入 warmup
45
+ */
46
+ resetMeasurement(): void;
47
+ /**
48
+ * 每帧回调(由外部 ENTER_FRAME 事件调用)
49
+ */
50
+ onFrame(perf: {
51
+ fps: number;
52
+ drawCalls: number;
53
+ renderTimeMs: number;
54
+ }): void;
55
+ /**
56
+ * 获取当前阶段
57
+ */
58
+ getPhase(): Phase;
59
+ }
60
+ //# sourceMappingURL=BenchmarkRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BenchmarkRunner.d.ts","sourceRoot":"","sources":["../../../src/kurot/benchmark/BenchmarkRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,qBAAa,eAAe;IAS1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAA2B;gBAGxB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EACrC,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,GAAG,SAAS,EAC/D,SAAS,EAAE,OAAO;IAGpC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAyBjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAyB7E;;OAEG;IACH,QAAQ,IAAI,KAAK;CAGjB"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * 纯状态机,管理 warmup/measuring/paused 状态。
3
+ * 不依赖 Kurot 引擎,通过外部注入的回调与引擎交互。
4
+ */
5
+ export class BenchmarkRunner {
6
+ collector;
7
+ onPhaseChange;
8
+ getSceneDescriptor;
9
+ container;
10
+ phase = 'idle';
11
+ warmupFrames = 0;
12
+ warmupTarget = 60;
13
+ currentSceneId;
14
+ currentCount = 0;
15
+ cleanup;
16
+ constructor(collector, onPhaseChange, getSceneDescriptor, container) {
17
+ this.collector = collector;
18
+ this.onPhaseChange = onPhaseChange;
19
+ this.getSceneDescriptor = getSceneDescriptor;
20
+ this.container = container;
21
+ }
22
+ /**
23
+ * 切换场景:销毁旧场景,重建新场景,重置 warmup
24
+ */
25
+ switchScene(sceneId, count) {
26
+ // 1. 销毁旧场景
27
+ if (this.cleanup) {
28
+ this.cleanup();
29
+ this.cleanup = undefined;
30
+ }
31
+ // 2. 找到场景描述符,构建新场景
32
+ const descriptor = this.getSceneDescriptor(sceneId);
33
+ if (descriptor) {
34
+ this.cleanup = descriptor.build(this.container, count);
35
+ }
36
+ this.currentSceneId = sceneId;
37
+ this.currentCount = count;
38
+ // 3. 重置 warmup 状态
39
+ this.warmupFrames = 0;
40
+ this.phase = 'warmup';
41
+ this.onPhaseChange(this.phase);
42
+ // 4. 清空统计
43
+ this.collector.reset();
44
+ }
45
+ /**
46
+ * 重建当前场景(对象数量变更)
47
+ */
48
+ rebuildScene(count) {
49
+ if (this.currentSceneId !== undefined) {
50
+ this.switchScene(this.currentSceneId, count);
51
+ }
52
+ }
53
+ /**
54
+ * 暂停(仅在 measuring 状态有效)
55
+ */
56
+ pause() {
57
+ if (this.phase === 'measuring') {
58
+ this.phase = 'paused';
59
+ this.onPhaseChange(this.phase);
60
+ }
61
+ }
62
+ /**
63
+ * 继续(仅在 paused 状态有效)
64
+ */
65
+ resume() {
66
+ if (this.phase === 'paused') {
67
+ this.phase = 'measuring';
68
+ this.onPhaseChange(this.phase);
69
+ }
70
+ }
71
+ /**
72
+ * 重置测量:清空统计,重新进入 warmup
73
+ */
74
+ resetMeasurement() {
75
+ this.collector.reset();
76
+ this.warmupFrames = 0;
77
+ this.phase = 'warmup';
78
+ this.onPhaseChange(this.phase);
79
+ }
80
+ /**
81
+ * 每帧回调(由外部 ENTER_FRAME 事件调用)
82
+ */
83
+ onFrame(perf) {
84
+ if (this.phase === 'idle' || this.phase === 'paused') {
85
+ return;
86
+ }
87
+ if (this.phase === 'warmup') {
88
+ this.warmupFrames++;
89
+ if (this.warmupFrames >= this.warmupTarget) {
90
+ this.phase = 'measuring';
91
+ this.onPhaseChange(this.phase);
92
+ }
93
+ return;
94
+ }
95
+ // measuring 状态
96
+ if (this.phase === 'measuring') {
97
+ this.collector.record({
98
+ fps: perf.fps,
99
+ drawCalls: perf.drawCalls,
100
+ renderTimeMs: perf.renderTimeMs,
101
+ objectCount: this.currentCount,
102
+ });
103
+ }
104
+ }
105
+ /**
106
+ * 获取当前阶段
107
+ */
108
+ getPhase() {
109
+ return this.phase;
110
+ }
111
+ }
112
+ //# sourceMappingURL=BenchmarkRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BenchmarkRunner.js","sourceRoot":"","sources":["../../../src/kurot/benchmark/BenchmarkRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { FrameData, Stats } from './types.js';
2
+ /**
3
+ * 计算排序数组的百分位数
4
+ * @param sortedArr 已排序的数组
5
+ * @param p 百分位(0-1)
6
+ */
7
+ export declare function percentile(sortedArr: number[], p: number): number;
8
+ /**
9
+ * 使用 ring buffer 维护 300 帧滑动窗口的指标采集器
10
+ */
11
+ export declare class MetricsCollector {
12
+ private readonly windowSize;
13
+ private readonly buffer;
14
+ private writeIdx;
15
+ private frameCount;
16
+ constructor(windowSize?: number);
17
+ /**
18
+ * 写入一帧数据到 ring buffer
19
+ */
20
+ record(frame: FrameData): void;
21
+ /**
22
+ * 清空所有历史数据,重置写指针和帧计数
23
+ */
24
+ reset(): void;
25
+ /**
26
+ * 连续 10 帧 renderTimeMs > 33.3ms 时返回 true
27
+ */
28
+ isLowFps(): boolean;
29
+ /**
30
+ * 计算并返回统计结果
31
+ */
32
+ getStats(): Stats;
33
+ }
34
+ //# sourceMappingURL=MetricsCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/kurot/benchmark/MetricsCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,GAAE,MAAY;IAKpC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAQ9B;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,QAAQ,IAAI,OAAO;IAcnB;;OAEG;IACH,QAAQ,IAAI,KAAK;CAiEjB"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 计算排序数组的百分位数
3
+ * @param sortedArr 已排序的数组
4
+ * @param p 百分位(0-1)
5
+ */
6
+ export function percentile(sortedArr, p) {
7
+ if (sortedArr.length === 0)
8
+ return 0;
9
+ const idx = Math.ceil(p * sortedArr.length) - 1;
10
+ const clamped = Math.max(0, Math.min(idx, sortedArr.length - 1));
11
+ return sortedArr[clamped];
12
+ }
13
+ /**
14
+ * 使用 ring buffer 维护 300 帧滑动窗口的指标采集器
15
+ */
16
+ export class MetricsCollector {
17
+ windowSize;
18
+ buffer;
19
+ writeIdx = 0;
20
+ frameCount = 0;
21
+ constructor(windowSize = 300) {
22
+ this.windowSize = windowSize;
23
+ this.buffer = new Array(windowSize);
24
+ }
25
+ /**
26
+ * 写入一帧数据到 ring buffer
27
+ */
28
+ record(frame) {
29
+ this.buffer[this.writeIdx] = frame;
30
+ this.writeIdx = (this.writeIdx + 1) % this.windowSize;
31
+ if (this.frameCount < this.windowSize) {
32
+ this.frameCount++;
33
+ }
34
+ }
35
+ /**
36
+ * 清空所有历史数据,重置写指针和帧计数
37
+ */
38
+ reset() {
39
+ this.writeIdx = 0;
40
+ this.frameCount = 0;
41
+ // 清空 buffer 引用
42
+ for (let i = 0; i < this.windowSize; i++) {
43
+ this.buffer[i] = undefined;
44
+ }
45
+ }
46
+ /**
47
+ * 连续 10 帧 renderTimeMs > 33.3ms 时返回 true
48
+ */
49
+ isLowFps() {
50
+ if (this.frameCount < 10)
51
+ return false;
52
+ // 从最近写入的帧往回检查 10 帧
53
+ for (let i = 0; i < 10; i++) {
54
+ const idx = (this.writeIdx - 1 - i + this.windowSize) % this.windowSize;
55
+ const frame = this.buffer[idx];
56
+ if (!frame || frame.renderTimeMs <= 33.3) {
57
+ return false;
58
+ }
59
+ }
60
+ return true;
61
+ }
62
+ /**
63
+ * 计算并返回统计结果
64
+ */
65
+ getStats() {
66
+ if (this.frameCount === 0) {
67
+ return {
68
+ frameCount: 0,
69
+ fps: { current: 0, avg: 0, p50: 0, p95: 0, max: 0 },
70
+ render: { current: 0, avg: 0, p50: 0, p95: 0, max: 0 },
71
+ drawCalls: { current: 0, avg: 0 },
72
+ batchEfficiency: 0,
73
+ isLowFps: false,
74
+ };
75
+ }
76
+ // 收集有效帧数据
77
+ const fpsValues = [];
78
+ const renderValues = [];
79
+ const drawCallValues = [];
80
+ for (let i = 0; i < this.frameCount; i++) {
81
+ const idx = (this.writeIdx - this.frameCount + i + this.windowSize * 2) % this.windowSize;
82
+ const frame = this.buffer[idx];
83
+ if (frame) {
84
+ fpsValues.push(frame.fps);
85
+ renderValues.push(frame.renderTimeMs);
86
+ drawCallValues.push(frame.drawCalls);
87
+ }
88
+ }
89
+ // 最新帧(writeIdx - 1)
90
+ const latestIdx = (this.writeIdx - 1 + this.windowSize) % this.windowSize;
91
+ const latestFrame = this.buffer[latestIdx];
92
+ const sortedFps = [...fpsValues].sort((a, b) => a - b);
93
+ const sortedRender = [...renderValues].sort((a, b) => a - b);
94
+ const avgFps = fpsValues.reduce((s, v) => s + v, 0) / fpsValues.length;
95
+ const avgRender = renderValues.reduce((s, v) => s + v, 0) / renderValues.length;
96
+ const avgDrawCalls = drawCallValues.reduce((s, v) => s + v, 0) / drawCallValues.length;
97
+ const batchEfficiency = latestFrame && latestFrame.drawCalls > 0 ? latestFrame.objectCount / latestFrame.drawCalls : 0;
98
+ return {
99
+ frameCount: this.frameCount,
100
+ fps: {
101
+ current: latestFrame?.fps ?? 0,
102
+ avg: avgFps,
103
+ p50: percentile(sortedFps, 0.5),
104
+ p95: percentile(sortedFps, 0.95),
105
+ max: sortedFps[sortedFps.length - 1] ?? 0,
106
+ },
107
+ render: {
108
+ current: latestFrame?.renderTimeMs ?? 0,
109
+ avg: avgRender,
110
+ p50: percentile(sortedRender, 0.5),
111
+ p95: percentile(sortedRender, 0.95),
112
+ max: sortedRender[sortedRender.length - 1] ?? 0,
113
+ },
114
+ drawCalls: {
115
+ current: latestFrame?.drawCalls ?? 0,
116
+ avg: avgDrawCalls,
117
+ },
118
+ batchEfficiency,
119
+ isLowFps: this.isLowFps(),
120
+ };
121
+ }
122
+ }
123
+ //# sourceMappingURL=MetricsCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/kurot/benchmark/MetricsCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Stats } from './types.js';
2
+ import type { Phase } from './BenchmarkRunner.js';
3
+ export type FpsColorClass = 'good' | 'warn' | 'bad';
4
+ export declare function fpsColorClass(fps: number): FpsColorClass;
5
+ export interface PerfPanelElements {
6
+ fps: HTMLElement;
7
+ drawCalls: HTMLElement;
8
+ renderCurrent: HTMLElement;
9
+ renderAvg: HTMLElement;
10
+ renderP95: HTMLElement;
11
+ batchEfficiency: HTMLElement;
12
+ frameCount: HTMLElement;
13
+ status: HTMLElement;
14
+ graphCanvas: HTMLCanvasElement;
15
+ }
16
+ export declare class PerfPanel {
17
+ private readonly els;
18
+ private fpsHistory;
19
+ private historyWriteIdx;
20
+ constructor(els: PerfPanelElements);
21
+ update(stats: Stats, phase: Phase): void;
22
+ _drawGraph(fpsHistory: number[], writeIdx: number): void;
23
+ }
24
+ //# sourceMappingURL=PerfPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerfPanel.d.ts","sourceRoot":"","sources":["../../../src/kurot/benchmark/PerfPanel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIxD;AAED,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,aAAa,EAAE,WAAW,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,WAAW,CAAC;IAC7B,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,iBAAiB,CAAC;CAC/B;AAED,qBAAa,SAAS;IAIT,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,eAAe,CAAK;gBAEC,GAAG,EAAE,iBAAiB;IAEnD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAqDxC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAqExD"}