agmon 0.1.2 → 0.1.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 (233) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +7 -0
  3. package/.next/build/chunks/[root-of-the-server]__05i36w1t4lzaf._.js +502 -0
  4. package/.next/build/chunks/[root-of-the-server]__05i36w1t4lzaf._.js.map +11 -0
  5. package/.next/build/chunks/[root-of-the-server]__1kki86fknkq7y._.js +190 -0
  6. package/.next/build/chunks/[root-of-the-server]__1kki86fknkq7y._.js.map +8 -0
  7. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9iz8yb8._.js +13 -0
  8. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1gfkiq9iz8yb8._.js.map +5 -0
  9. package/.next/build/chunks/[turbopack]_runtime.js +1056 -0
  10. package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
  11. package/.next/build/chunks/node_modules_20v-8wlfss9m1._.js +7314 -0
  12. package/.next/build/chunks/node_modules_20v-8wlfss9m1._.js.map +47 -0
  13. package/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_0tp-k2vy8nj6i._.js +6 -0
  14. package/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_0tp-k2vy8nj6i._.js.map +5 -0
  15. package/.next/build/package.json +1 -0
  16. package/.next/build-manifest.json +54 -0
  17. package/.next/export-marker.json +6 -0
  18. package/.next/fallback-build-manifest.json +15 -0
  19. package/.next/images-manifest.json +68 -0
  20. package/.next/next-minimal-server.js.nft.json +1 -0
  21. package/.next/next-server.js.nft.json +1 -0
  22. package/.next/package.json +1 -0
  23. package/.next/prerender-manifest.json +97 -0
  24. package/.next/required-server-files.js +366 -0
  25. package/.next/required-server-files.json +366 -0
  26. package/.next/routes-manifest.json +75 -0
  27. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  28. package/.next/server/app/_global-error/page/build-manifest.json +21 -0
  29. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  30. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  31. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  32. package/.next/server/app/_global-error/page.js +10 -0
  33. package/.next/server/app/_global-error/page.js.map +5 -0
  34. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  35. package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  36. package/.next/server/app/_global-error.html +1 -0
  37. package/.next/server/app/_global-error.meta +30 -0
  38. package/.next/server/app/_global-error.rsc +18 -0
  39. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +23 -0
  40. package/.next/server/app/_global-error.segments/_full.segment.rsc +18 -0
  41. package/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -0
  42. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  43. package/.next/server/app/_not-found/page/build-manifest.json +21 -0
  44. package/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
  45. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  46. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  47. package/.next/server/app/_not-found/page.js +12 -0
  48. package/.next/server/app/_not-found/page.js.map +5 -0
  49. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  50. package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  51. package/.next/server/app/_not-found.html +1 -0
  52. package/.next/server/app/_not-found.meta +35 -0
  53. package/.next/server/app/_not-found.rsc +22 -0
  54. package/.next/server/app/_not-found.segments/_full.segment.rsc +22 -0
  55. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +28 -0
  56. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -0
  57. package/.next/server/app/api/traces/stream/route/app-paths-manifest.json +3 -0
  58. package/.next/server/app/api/traces/stream/route/build-manifest.json +12 -0
  59. package/.next/server/app/api/traces/stream/route/server-reference-manifest.json +4 -0
  60. package/.next/server/app/api/traces/stream/route.js +7 -0
  61. package/.next/server/app/api/traces/stream/route.js.map +5 -0
  62. package/.next/server/app/api/traces/stream/route.js.nft.json +1 -0
  63. package/.next/server/app/api/traces/stream/route_client-reference-manifest.js +3 -0
  64. package/.next/server/app/api/version/route/app-paths-manifest.json +3 -0
  65. package/.next/server/app/api/version/route/build-manifest.json +12 -0
  66. package/.next/server/app/api/version/route/server-reference-manifest.json +4 -0
  67. package/.next/server/app/api/version/route.js +7 -0
  68. package/.next/server/app/api/version/route.js.map +5 -0
  69. package/.next/server/app/api/version/route.js.nft.json +1 -0
  70. package/.next/server/app/api/version/route_client-reference-manifest.js +3 -0
  71. package/.next/server/app/index.html +1 -0
  72. package/.next/server/app/index.meta +29 -0
  73. package/.next/server/app/index.rsc +29 -0
  74. package/.next/server/app/index.segments/__PAGE__.segment.rsc +34 -0
  75. package/.next/server/app/index.segments/_full.segment.rsc +29 -0
  76. package/.next/server/app/index.segments/_tree.segment.rsc +3 -0
  77. package/.next/server/app/page/app-paths-manifest.json +3 -0
  78. package/.next/server/app/page/build-manifest.json +21 -0
  79. package/.next/server/app/page/next-font-manifest.json +6 -0
  80. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  81. package/.next/server/app/page/server-reference-manifest.json +4 -0
  82. package/.next/server/app/page.js +13 -0
  83. package/.next/server/app/page.js.map +5 -0
  84. package/.next/server/app/page.js.nft.json +1 -0
  85. package/.next/server/app/page_client-reference-manifest.js +3 -0
  86. package/.next/server/app-paths-manifest.json +7 -0
  87. package/.next/server/chunks/[externals]__0bwf06g0pqv3h._.js +3 -0
  88. package/.next/server/chunks/[externals]__0bwf06g0pqv3h._.js.map +1 -0
  89. package/.next/server/chunks/[externals]__1p2j9_5g429uh._.js +3 -0
  90. package/.next/server/chunks/[externals]__1p2j9_5g429uh._.js.map +1 -0
  91. package/.next/server/chunks/[root-of-the-server]__04an4kw4xcc5l._.js +5 -0
  92. package/.next/server/chunks/[root-of-the-server]__04an4kw4xcc5l._.js.map +1 -0
  93. package/.next/server/chunks/[root-of-the-server]__1s6v8mz-nanm-._.js +5 -0
  94. package/.next/server/chunks/[root-of-the-server]__1s6v8mz-nanm-._.js.map +1 -0
  95. package/.next/server/chunks/[root-of-the-server]__20xfs4y2ipcvv._.js +320 -0
  96. package/.next/server/chunks/[root-of-the-server]__20xfs4y2ipcvv._.js.map +1 -0
  97. package/.next/server/chunks/[turbopack]_runtime.js +937 -0
  98. package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  99. package/.next/server/chunks/_next-internal_server_app_api_traces_stream_route_actions_07rmicxgds803.js +3 -0
  100. package/.next/server/chunks/_next-internal_server_app_api_traces_stream_route_actions_07rmicxgds803.js.map +1 -0
  101. package/.next/server/chunks/_next-internal_server_app_api_version_route_actions_0kbx30hro8e93.js +3 -0
  102. package/.next/server/chunks/_next-internal_server_app_api_version_route_actions_0kbx30hro8e93.js.map +1 -0
  103. package/.next/server/chunks/ssr/1q96_modules_pixi_js_lib_rendering_renderers_canvas_CanvasRenderer_mjs_1xntzghggpb51._.js +3 -0
  104. package/.next/server/chunks/ssr/1q96_modules_pixi_js_lib_rendering_renderers_canvas_CanvasRenderer_mjs_1xntzghggpb51._.js.map +1 -0
  105. package/.next/server/chunks/ssr/1q96_modules_pixi_js_lib_rendering_renderers_gpu_WebGPURenderer_mjs_00tc9jrf-ft1_._.js +76 -0
  106. package/.next/server/chunks/ssr/1q96_modules_pixi_js_lib_rendering_renderers_gpu_WebGPURenderer_mjs_00tc9jrf-ft1_._.js.map +1 -0
  107. package/.next/server/chunks/ssr/[root-of-the-server]__08zgqq_38tv57._.js +3 -0
  108. package/.next/server/chunks/ssr/[root-of-the-server]__08zgqq_38tv57._.js.map +1 -0
  109. package/.next/server/chunks/ssr/[root-of-the-server]__0aa2929udndo-._.js +3 -0
  110. package/.next/server/chunks/ssr/[root-of-the-server]__0aa2929udndo-._.js.map +1 -0
  111. package/.next/server/chunks/ssr/[root-of-the-server]__0ayw3c9e93kvf._.js +3 -0
  112. package/.next/server/chunks/ssr/[root-of-the-server]__0ayw3c9e93kvf._.js.map +1 -0
  113. package/.next/server/chunks/ssr/[root-of-the-server]__0ojpb-dtuk3-q._.js +3 -0
  114. package/.next/server/chunks/ssr/[root-of-the-server]__0ojpb-dtuk3-q._.js.map +1 -0
  115. package/.next/server/chunks/ssr/[root-of-the-server]__0py1t7q9ntzgc._.js +3 -0
  116. package/.next/server/chunks/ssr/[root-of-the-server]__0py1t7q9ntzgc._.js.map +1 -0
  117. package/.next/server/chunks/ssr/[root-of-the-server]__1cf6qt9agg_9-._.js +14 -0
  118. package/.next/server/chunks/ssr/[root-of-the-server]__1cf6qt9agg_9-._.js.map +1 -0
  119. package/.next/server/chunks/ssr/[root-of-the-server]__1e1_fmeab1ca7._.js +3 -0
  120. package/.next/server/chunks/ssr/[root-of-the-server]__1e1_fmeab1ca7._.js.map +1 -0
  121. package/.next/server/chunks/ssr/[root-of-the-server]__1w2vu9hh0h02y._.js +3 -0
  122. package/.next/server/chunks/ssr/[root-of-the-server]__1w2vu9hh0h02y._.js.map +1 -0
  123. package/.next/server/chunks/ssr/[turbopack]_runtime.js +937 -0
  124. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  125. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-psc_d2.js +3 -0
  126. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-psc_d2.js.map +1 -0
  127. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yrisjoev.js +3 -0
  128. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yrisjoev.js.map +1 -0
  129. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1jew5ls7.js +3 -0
  130. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1jew5ls7.js.map +1 -0
  131. package/.next/server/chunks/ssr/node_modules_01xbj_9zg44kw._.js +33 -0
  132. package/.next/server/chunks/ssr/node_modules_01xbj_9zg44kw._.js.map +1 -0
  133. package/.next/server/chunks/ssr/node_modules_0a548_llmwce7._.js +23 -0
  134. package/.next/server/chunks/ssr/node_modules_0a548_llmwce7._.js.map +1 -0
  135. package/.next/server/chunks/ssr/node_modules_0gxlxpuufujz9._.js +33 -0
  136. package/.next/server/chunks/ssr/node_modules_0gxlxpuufujz9._.js.map +1 -0
  137. package/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +6 -0
  138. package/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js.map +1 -0
  139. package/.next/server/chunks/ssr/node_modules_next_dist_1hgv5i-pr1hza._.js +3 -0
  140. package/.next/server/chunks/ssr/node_modules_next_dist_1hgv5i-pr1hza._.js.map +1 -0
  141. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j32_ibz4._.js +3 -0
  142. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j32_ibz4._.js.map +1 -0
  143. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9mbf-fh.js +3 -0
  144. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9mbf-fh.js.map +1 -0
  145. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892nagajq.js +3 -0
  146. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892nagajq.js.map +1 -0
  147. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0xky89qu.js +3 -0
  148. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0xky89qu.js.map +1 -0
  149. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0aymk_x8-bu4q.js +3 -0
  150. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0aymk_x8-bu4q.js.map +1 -0
  151. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z4y02i7.js +3 -0
  152. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z4y02i7.js.map +1 -0
  153. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qjycfedgh109.js +3 -0
  154. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qjycfedgh109.js.map +1 -0
  155. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0hcyh9uzlz7ci._.js +3 -0
  156. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0hcyh9uzlz7ci._.js.map +1 -0
  157. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0k3f3soanqdoq._.js +3 -0
  158. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0k3f3soanqdoq._.js.map +1 -0
  159. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0ovgsftn-uvbz._.js +3 -0
  160. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0ovgsftn-uvbz._.js.map +1 -0
  161. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0xa24fqr5c5qi._.js +5 -0
  162. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0xa24fqr5c5qi._.js.map +1 -0
  163. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0zrftay3kjup7._.js +5 -0
  164. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_0zrftay3kjup7._.js.map +1 -0
  165. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_1z4lgkg_w-7fr._.js +208 -0
  166. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_1z4lgkg_w-7fr._.js.map +1 -0
  167. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_1zjkoj2kc4hm-._.js +3 -0
  168. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_1zjkoj2kc4hm-._.js.map +1 -0
  169. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_environment-browser_browserAll_mjs_0xb_t3dj4ad1f._.js +16 -0
  170. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_environment-browser_browserAll_mjs_0xb_t3dj4ad1f._.js.map +1 -0
  171. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_filters_Filter_mjs_0luksfw8ekifi._.js +3 -0
  172. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_filters_Filter_mjs_0luksfw8ekifi._.js.map +1 -0
  173. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_filters_init_mjs_1o5fmm_m60v_s._.js +3 -0
  174. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_filters_init_mjs_1o5fmm_m60v_s._.js.map +1 -0
  175. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_1fkio2phhfvow._.js +196 -0
  176. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_1fkio2phhfvow._.js.map +1 -0
  177. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_1n1q7aum4i7zo._.js +196 -0
  178. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_1n1q7aum4i7zo._.js.map +1 -0
  179. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_renderers_10vpvx1o7svnk._.js +3 -0
  180. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_renderers_10vpvx1o7svnk._.js.map +1 -0
  181. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_renderers_gl_WebGLRenderer_mjs_1hlux44jh7dk-._.js +153 -0
  182. package/.next/server/chunks/ssr/node_modules_pixi_js_lib_rendering_renderers_gl_WebGLRenderer_mjs_1hlux44jh7dk-._.js.map +1 -0
  183. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js +3 -0
  184. package/.next/server/chunks/ssr/src_app_page_1vqfk0-j72fp6.js.map +1 -0
  185. package/.next/server/functions-config-manifest.json +4 -0
  186. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  187. package/.next/server/middleware-build-manifest.js +54 -0
  188. package/.next/server/middleware-manifest.json +6 -0
  189. package/.next/server/next-font-manifest.js +1 -0
  190. package/.next/server/next-font-manifest.json +6 -0
  191. package/.next/server/pages/404.html +1 -0
  192. package/.next/server/pages/500.html +1 -0
  193. package/.next/server/pages-manifest.json +4 -0
  194. package/.next/server/prefetch-hints.json +34 -0
  195. package/.next/server/preview-props.json +5 -0
  196. package/.next/server/server-reference-manifest.js +1 -0
  197. package/.next/server/server-reference-manifest.json +5 -0
  198. package/.next/static/chunks/0_9x2udu0iodw.js +1 -0
  199. package/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
  200. package/.next/static/chunks/0umf92h1sb77c.js +1 -0
  201. package/.next/static/chunks/10om7oix6wjze.js +1 -0
  202. package/.next/static/chunks/1780fh11o7pze.js +1 -0
  203. package/.next/static/chunks/1cldmiyw3ya18.js +21 -0
  204. package/.next/static/chunks/1unuqfq-vfqtp.js +1 -0
  205. package/.next/static/chunks/2-vsu_pt58kse.js +3 -0
  206. package/.next/static/chunks/2drjv1ti9t4pg.js +1 -0
  207. package/.next/static/chunks/2hgsvrrwu57--.css +1 -0
  208. package/.next/static/chunks/2ogvir8krwwhf.js +1 -0
  209. package/.next/static/chunks/2tc54fmsk8v8q.js +1 -0
  210. package/.next/static/chunks/304ue7hvto0o0.js +206 -0
  211. package/.next/static/chunks/31gve42sn75--.js +1 -0
  212. package/.next/static/chunks/32kizm_7q94vd.js +194 -0
  213. package/.next/static/chunks/33bap0u4zwgab.js +74 -0
  214. package/.next/static/chunks/3c4xol65z2da2.js +22 -0
  215. package/.next/static/chunks/3cfn99dbrcvvp.js +31 -0
  216. package/.next/static/chunks/3d6xc1eemxy82.js +1 -0
  217. package/.next/static/chunks/3ycr8gfnsg-xv.js +151 -0
  218. package/.next/static/chunks/3ytt3vrdhke9u.js +14 -0
  219. package/.next/static/chunks/turbopack-3-ry682tkyiqk.js +1 -0
  220. package/.next/static/cy2F4S28h_-YWqCOuE_ul/_buildManifest.js +11 -0
  221. package/.next/static/cy2F4S28h_-YWqCOuE_ul/_clientMiddlewareManifest.js +1 -0
  222. package/.next/static/cy2F4S28h_-YWqCOuE_ul/_ssgManifest.js +1 -0
  223. package/.next/trace +1 -0
  224. package/.next/trace-build +1 -0
  225. package/.next/types/cache-life.d.ts +114 -0
  226. package/.next/types/root-params.d.ts +3 -0
  227. package/.next/types/routes.d.ts +74 -0
  228. package/.next/types/validator.ts +17 -0
  229. package/bin/cli.js +11 -4
  230. package/package.json +3 -1
  231. package/src/app/api/traces/stream/route.js +2 -2
  232. package/src/app/layout.js +1 -1
  233. package/src/app/page.js +6 -6
@@ -0,0 +1,3 @@
1
+ module.exports=[21437,a=>{"use strict";var b=a.i(53229),c=a.i(66722),d=a.i(56312),e=a.i(45287);let f=class a extends d.f{constructor(b){super(b={...a.defaultOptions,...b}),this.enabled=!0,this._state=e.A.for2d(),this.blendMode=b.blendMode,this.padding=b.padding,"boolean"==typeof b.antialias?this.antialias=b.antialias?"on":"off":this.antialias=b.antialias,this.resolution=b.resolution,this.blendRequired=b.blendRequired,this.clipToViewport=b.clipToViewport,this.addResource("uTexture",0,1),b.blendRequired&&this.addResource("uBackTexture",0,3)}apply(a,b,c,d){a.applyFilter(this,b,c,d)}get blendMode(){return this._state.blendMode}set blendMode(a){this._state.blendMode=a}static from(d){let e,f,{gpu:g,gl:h,...i}=d;return g&&(e=c.f.from(g)),h&&(f=b.f.from(h)),new a({gpuProgram:e,glProgram:f,...i})}};f.defaultOptions={blendMode:"normal",resolution:1,padding:0,antialias:"off",blendRequired:!1,clipToViewport:!0},a.s(["f",0,f])}];
2
+
3
+ //# sourceMappingURL=node_modules_pixi_js_lib_filters_Filter_mjs_0luksfw8ekifi._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/pixi.js/src/filters/Filter.ts"],"sourcesContent":["import { GlProgram } from '../rendering/renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../rendering/renderers/gpu/shader/GpuProgram';\nimport { Shader } from '../rendering/renderers/shared/shader/Shader';\nimport { State } from '../rendering/renderers/shared/state/State';\n\nimport type { RenderSurface } from '../rendering/renderers/shared/renderTarget/RenderTargetSystem';\nimport type {\n IShaderWithResources,\n ShaderFromResources,\n ShaderWithResources\n} from '../rendering/renderers/shared/shader/Shader';\nimport type { BLEND_MODES } from '../rendering/renderers/shared/state/const';\nimport type { Texture } from '../rendering/renderers/shared/texture/Texture';\nimport type { FilterSystem } from './FilterSystem';\n\n/**\n * The options to use when creating a new filter.\n * @category filters\n * @advanced\n */\nexport interface FilterOptions\n{\n /** optional blend mode used by the filter when rendering (defaults to 'normal') */\n blendMode?: BLEND_MODES;\n /**\n * the resolution the filter should be rendered at. The lower the resolution, the more performant\n * the filter will be, but the lower the quality of the output. (default 1)\n * If 'inherit', the resolution of the render target is used.\n * Consider lowering this for things like blurs filters\n */\n resolution?: number | 'inherit';\n /**\n * the amount of pixels to pad the container with when applying the filter. For example a blur extends the\n * container out as it blurs, so padding is applied to ensure that extra detail is rendered as well\n * without clipping occurring. (default 0)\n */\n padding?: number;\n /**\n * If true the filter will make use of antialiasing. Although it looks better this can have a performance impact.\n * If set to 'inherit', the filter will detect the antialiasing of the render target and change this automatically.\n * Definitely don't set this to true if the render target has antialiasing set to false. As it will antialias,\n * but you won't see the difference. (default 'off')\n *\n * This can be a boolean or [FilterAntialias]{@link FilterAntialias} string.\n */\n antialias?: FilterAntialias | boolean;\n /**\n * If this is set to true, the filter system will grab a snap shot of the area being rendered\n * to and pass this into the shader. This is useful for blend modes that need to be aware of the pixels\n * they are rendering to. Only use if you need that data, otherwise its an extra gpu copy you don't need!\n * (default false)\n *\n * If given, the shader should have a uniform named `uBackTexture`, which is where the pixels of the\n * area being rendered to can be sampled from.\n */\n blendRequired?: boolean;\n /**\n * If this is set to true, the filter system will clip filter texture into viewport\n * This is useful for filters that applied to whole texture.\n * (default true)\n */\n clipToViewport?: boolean;\n}\n\n/**\n * Filter options mixed with shader resources. A filter needs a shader and some resources to work.\n * @category filters\n * @advanced\n * @see {@link FilterOptions}\n */\nexport type FilterWithShader = FilterOptions & IShaderWithResources;\n\n/**\n * The antialiasing mode of the filter. This can be either:\n * - `on` - the filter is always antialiased regardless of the render target settings\n * - `off` - (default) the filter is never antialiased regardless of the render target settings\n * - `inherit` - the filter uses the antialias settings of the render target\n * @category filters\n * @advanced\n */\nexport type FilterAntialias = 'on' | 'off' | 'inherit';\n\n/**\n * The Filter class is the base for all filter effects used in Pixi.js\n * As it extends a shader, it requires that a glProgram is parsed in to work with WebGL and a gpuProgram for WebGPU.\n * If you don't proved one, then the filter is skipped and just rendered as if it wasn't there for that renderer.\n *\n * A filter can be applied to anything that extends Container in Pixi.js which also includes Sprites, Graphics etc.\n *\n * Its worth noting Performance-wise filters can be pretty expensive if used too much in a single scene.\n * The following happens under the hood when a filter is applied:\n *\n * .1. Break the current batch\n * <br>\n * .2. The target is measured using getGlobalBounds\n * (recursively go through all children and figure out how big the object is)\n * <br>\n * .3. Get power of two or screen sized textures from the texture pool\n * <br>\n * .4. Render the target to that texture\n * <br>\n * .5. Render that texture back to the main frame buffer as a quad using the filters program.\n * <br>\n * <br>\n * Some filters (such as blur) require multiple passes too which can result in an even bigger performance hit. So be careful!\n * Its not generally the complexity of the shader that is the bottle neck,\n * but all the framebuffer / shader switching that has to take place.\n * One filter applied to a container with many objects is MUCH faster than many filter applied to many objects.\n * @category filters\n * @advanced\n * @example\n * import { Filter } from 'pixi.js';\n *\n * const customFilter = new Filter({\n * glProgram: new GlProgram({\n * fragment,\n * vertex,\n * }),\n * resources: {\n * timeUniforms: {\n * uTime: { value: 0.0, type: 'f32' },\n * },\n * },\n * });\n *\n * // Apply the filter\n * sprite.filters = [customFilter];\n *\n * // Update uniform\n * app.ticker.add((ticker) => {\n * filter.resources.timeUniforms.uniforms.uTime += 0.04 * ticker.deltaTime;\n * });\n */\nexport class Filter extends Shader\n{\n /** The default filter settings */\n public static defaultOptions: FilterOptions = {\n blendMode: 'normal',\n resolution: 1,\n padding: 0,\n antialias: 'off',\n blendRequired: false,\n clipToViewport: true,\n };\n\n /**\n * The padding of the filter. Some filters require extra space to breath such as a blur.\n * Increasing this will add extra width and height to the bounds of the object that the\n * filter is applied to.\n * @default 0\n */\n public padding: number;\n\n /**\n * should the filter use antialiasing?\n * @default inherit\n */\n public antialias: FilterAntialias;\n\n /** If enabled is true the filter is applied, if false it will not. */\n public enabled = true;\n\n /**\n * The gpu state the filter requires to render.\n * @internal\n */\n public _state = State.for2d();\n\n /**\n * The resolution of the filter. Setting this to be lower will lower the quality but\n * increase the performance of the filter.\n * @default 1\n */\n public resolution: number | 'inherit';\n\n /**\n * Whether or not this filter requires the previous render texture for blending.\n * @default false\n */\n public blendRequired: boolean;\n\n /**\n * Clip texture into viewport or not\n * @default true\n */\n public clipToViewport: boolean;\n\n /**\n * @param options - The optional parameters of this filter.\n */\n constructor(options: FilterWithShader)\n {\n options = { ...Filter.defaultOptions, ...options };\n\n super(options as ShaderWithResources);\n\n this.blendMode = options.blendMode;\n this.padding = options.padding;\n\n // check if is boolean\n if (typeof options.antialias === 'boolean')\n {\n this.antialias = options.antialias ? 'on' : 'off';\n }\n else\n {\n this.antialias = options.antialias;\n }\n\n this.resolution = options.resolution;\n this.blendRequired = options.blendRequired;\n this.clipToViewport = options.clipToViewport;\n\n // this is where the filter system will attach the filter texture\n this.addResource('uTexture', 0, 1);\n\n if (options.blendRequired)\n {\n // this is where the filter system will attach the back texture\n this.addResource('uBackTexture', 0, 3);\n }\n }\n\n /**\n * Applies the filter\n * @param filterManager - The renderer to retrieve the filter from\n * @param input - The input render target.\n * @param output - The target to output to.\n * @param clearMode - Should the output be cleared before rendering to it\n */\n public apply(\n filterManager: FilterSystem,\n input: Texture,\n output: RenderSurface,\n clearMode: boolean\n ): void\n {\n filterManager.applyFilter(this, input, output, clearMode);\n }\n\n /**\n * Get the blend mode of the filter.\n * @default \"normal\"\n */\n get blendMode(): BLEND_MODES\n {\n return this._state.blendMode;\n }\n\n /** Sets the blend mode of the filter. */\n set blendMode(value: BLEND_MODES)\n {\n this._state.blendMode = value;\n }\n\n /**\n * A short hand function to create a filter based of a vertex and fragment shader src.\n * @param options\n * @returns A shiny new PixiJS filter!\n */\n public static from(options: FilterOptions & ShaderFromResources): Filter\n {\n const { gpu, gl, ...rest } = options;\n\n let gpuProgram: GpuProgram;\n let glProgram: GlProgram;\n\n if (gpu)\n {\n gpuProgram = GpuProgram.from(gpu);\n }\n\n if (gl)\n {\n glProgram = GlProgram.from(gl);\n }\n\n return new Filter({\n gpuProgram,\n glProgram,\n ...rest\n });\n }\n}\n"],"names":[],"mappings":"+FAqIO,IAAM,EAAN,KAAM,CAAA,OAAA,GAAe,EAAA,CAAA,CAC5B,AAwDI,YAAY,CAAA,CACZ,CAGI,KAAA,CAFA,AAEM,EAFI,CAAE,GAAG,CAEqB,AAFpC,CAAsB,AAEc,KAFrB,SAAO,CAAgB,GAAG,CAAA,CAAQ,EAhCrD,IAAA,CAAO,OAAA,EAAU,EAMjB,EANiB,EAMjB,CAAO,MAAA,CAAS,EAAA,CAAA,CAAM,KAAA,EAAM,CA8BxB,IAAA,CAAK,SAAA,CAAY,EAAQ,KAAR,IAAQ,CACzB,IAAA,CAAK,OAAA,CAAU,EAAQ,KAAR,EAAQ,CAGU,SAAA,EAA7B,AACJ,OADW,EAAQ,KAAR,IAAQ,CAEf,IAAA,CAAK,SAAA,CAAY,EAAQ,KAAR,IAAQ,CAAY,IAAA,CAAO,KAAA,CAI5C,IAAA,CAAK,SAAA,CAAY,EAAQ,KAAR,IAAQ,CAG7B,IAAA,CAAK,UAAA,CAAa,EAAQ,KAAR,KAAQ,CAC1B,IAAA,CAAK,aAAA,CAAgB,EAAQ,KAAR,QAAQ,CAC7B,IAAA,CAAK,cAAA,CAAiB,EAAQ,KAAR,SAAQ,CAG9B,IAAA,CAAK,WAAA,CAAY,UAAA,CAAY,CAAA,CAAG,CAAC,CAAA,CAE7B,EAAQ,aAAA,EACZ,AAEI,IAAA,CAAK,WAAA,CAAY,cAAA,CAAgB,CAAA,CAAG,CAAC,CAAA,AAE7C,CASO,KAAA,CACH,CAAA,CACA,CAAA,CACA,CAAA,CACA,CAAA,CAEJ,CACI,EAAc,WAAd,AAAc,CAAY,IAAA,CAAM,EAAO,EAAQ,CAAf,CACpC,CAMA,CAP2C,GAOvC,EAPwD,CAAA,MAOxD,EACJ,CACI,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,AACvB,CAGA,IAAI,UAAU,CAAA,CACd,CACI,IAAA,CAAK,MAAA,CAAO,SAAA,CAAY,CAC5B,CAOA,GAR4B,IAQd,KAAK,CAAA,CACnB,CACI,IAEI,EACA,EAHE,KAAE,CAAA,AAEJ,CACA,GAHS,CAAA,CAAI,GAAG,EAAK,CAAI,EAe7B,KAf6B,EAKzB,GAAA,CAEA,CADJ,CACiB,EAAA,CAAA,CAAW,IAAxB,AAAwB,CAAK,EAAG,CAAA,CAGhC,EAAA,EACJ,AACI,EAAY,EAAA,CAAA,CAAU,GAAtB,CAAsB,CAAK,EAAE,CAAA,CAG1B,IAAI,EAAO,KAAP,OACP,UAAA,EACA,EACA,GAAG,CAAA,CACN,CAAA,AACL,CAHQ,AAIZ,CAAA,CAtJa,EAGK,KAHL,SAGK,CAAgC,CAC1C,SAAA,CAAW,QAAA,CACX,UAAA,CAAY,CAAA,CACZ,OAAA,CAAS,CAAA,CACT,SAAA,CAAW,KAAA,CACX,aAAA,EAAe,EACf,GADe,WACf,EAAgB,CACpB,CAAA,YAVG"}
@@ -0,0 +1,3 @@
1
+ module.exports=[32419,a=>{"use strict";var b=a.i(44373),c=a.i(87069),d=a.i(9124),e=a.i(83813),f=a.i(67309);let g=new f.f;function h(a,b){b.clear();let c=b.matrix;for(let c=0;c<a.length;c++){let d=a[c];if(d.globalDisplayStatus<7)continue;let e=d.renderGroup??d.parentRenderGroup;e?.isCachedAsTexture?b.matrix=g.copyFrom(e.textureOffsetInverseTransform).append(d.worldTransform):e?._parentCacheAsTextureRenderGroup?b.matrix=g.copyFrom(e._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(d.groupTransform):b.matrix=d.worldTransform,b.addBounds(d.bounds)}return b.matrix=c,b}var i=a.i(38252);function j(a){return"function"==typeof a.getCanvasFilterString}class k{constructor(){this.skip=!1,this.useClip=!1,this.filters=null,this.container=null,this.bounds=new e.f,this.cssFilterString=""}}class l{constructor(a){this._filterStack=[],this._filterStackIndex=0,this._savedStates=[],this._alphaMultiplier=1,this._warnedFilterTypes=new Set,this.renderer=a}push(a){let b=this._pushFilterFrame(),c=a.filterEffect.filters;if(b.skip=!1,b.useClip=!1,b.filters=c,b.container=a.container,b.cssFilterString="",c.every(a=>!a.enabled)){b.skip=!0;return}let d=[];for(let a of c){if(!a.enabled)continue;if(!j(a)){this._warnUnsupportedFilter(a);continue}let b=a.getCanvasFilterString();if(null===b){this._warnUnsupportedFilter(a);continue}b&&d.push(b)}if(0===d.length){b.skip=!0;return}b.cssFilterString=d.join(" "),this._calculateFilterArea(a,b.bounds),b.useClip=!!a.filterEffect.filterArea;let e=this.renderer.canvasContext.activeContext,f=e.filter||"none";if(this._savedStates.push({filter:f,alphaMultiplier:this._alphaMultiplier}),b.useClip&&Number.isFinite(b.bounds.width)&&Number.isFinite(b.bounds.height)&&b.bounds.width>0&&b.bounds.height>0){let a=this.renderer.canvasContext.activeResolution||1;e.save(),e.setTransform(1,0,0,1,0,0),e.beginPath(),e.rect(b.bounds.x*a,b.bounds.y*a,b.bounds.width*a,b.bounds.height*a),e.clip()}else b.useClip=!1;b.cssFilterString&&(e.filter="none"!==f?`${f} ${b.cssFilterString}`:b.cssFilterString)}pop(){let a=this._popFilterFrame();if(a.skip)return;let b=this._savedStates.pop();if(!b)return;let c=this.renderer.canvasContext.activeContext;a.useClip?c.restore():c.filter=b.filter,this._alphaMultiplier=b.alphaMultiplier}generateFilteredTexture({texture:a,filters:b}){if(!b?.length||b.every(a=>!a.enabled))return a;let e=[];for(let a of b){if(!a.enabled)continue;if(!j(a)){this._warnUnsupportedFilter(a);continue}let b=a.getCanvasFilterString();if(null===b){this._warnUnsupportedFilter(a);continue}b&&e.push(b)}if(0===e.length)return a;let f=c.f.getCanvasSource(a);if(!f)return a;let g=a.frame,h=a.source._resolution??a.source.resolution??1,k=g.width,l=g.height,{canvas:m,context:n}=d.f.getOptimalCanvasAndContext(k,l,h);n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,m.width,m.height),e.length&&(n.filter=e.join(" "));let o=g.x*h,p=g.y*h,q=k*h,r=l*h;return n.drawImage(f,o,p,q,r,0,0,q,r),n.filter="none",n.globalAlpha=1,(0,i.f)(m,k,l,h)}_calculateFilterArea(a,b){if(a.renderables?h(a.renderables,b):a.filterEffect.filterArea?(b.clear(),b.addRect(a.filterEffect.filterArea),b.applyMatrix(a.container.worldTransform)):a.container.getFastGlobalBounds(!0,b),a.container){let c=a.container.renderGroup||a.container.parentRenderGroup,d=c?.cacheToLocalTransform;d&&b.applyMatrix(d)}}_warnUnsupportedFilter(a){let b=a?.constructor?.name||"Filter";this._warnedFilterTypes.has(b)||(this._warnedFilterTypes.add(b),console.warn(`CanvasRenderer: filter "${b}" is not supported in Canvas2D and will be skipped.`))}get alphaMultiplier(){return this._alphaMultiplier}_pushFilterFrame(){let a=this._filterStack[this._filterStackIndex];return a||(a=this._filterStack[this._filterStackIndex]=new k),this._filterStackIndex++,a}_popFilterFrame(){return this._filterStackIndex<=0?this._filterStack[0]:(this._filterStackIndex--,this._filterStack[this._filterStackIndex])}destroy(){this._filterStack=null,this._savedStates=null,this._warnedFilterTypes=null,this._alphaMultiplier=1}}l.extension={type:[b.x.CanvasSystem],name:"filter"};class m{constructor(a){this._renderer=a}push(a,b,c){this._renderer.renderPipes.batch.break(c),c.add({renderPipeId:"filter",canBundle:!1,action:"pushFilter",container:b,filterEffect:a})}pop(a,b,c){this._renderer.renderPipes.batch.break(c),c.add({renderPipeId:"filter",action:"popFilter",canBundle:!1})}execute(a){"pushFilter"===a.action?this._renderer.filter.push(a):"popFilter"===a.action&&this._renderer.filter.pop()}destroy(){this._renderer=null}}m.extension={type:[b.x.WebGLPipes,b.x.WebGPUPipes,b.x.CanvasPipes],name:"filter"};var n=a.i(53229),o=a.i(66722),p=a.i(21437),q="struct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\n\n@group(0) @binding(0) var <uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler: sampler;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>\n};\n\nfn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\n@vertex\nfn mainVertex(\n @location(0) aPosition: vec2<f32>,\n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition)\n );\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n) -> @location(0) vec4<f32> {\n return textureSample(uTexture, uSampler, uv);\n}\n";class r extends p.f{constructor(){super({gpuProgram:o.f.from({vertex:{source:q,entryPoint:"mainVertex"},fragment:{source:q,entryPoint:"mainFragment"},name:"passthrough-filter"}),glProgram:n.f.from({vertex:"in vec2 aPosition;\nout vec2 vTextureCoord;\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n",fragment:"in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nvoid main() {\n finalColor = texture(uTexture, vTextureCoord);\n}\n",name:"passthrough-filter"})})}}var s=a.i(74395),t=a.i(54676),u=a.i(96335),v=a.i(71805),w=a.i(36206),x=a.i(53507),y=a.i(51983);let z=new t.f({attributes:{aPosition:{buffer:new Float32Array([0,0,1,0,1,1,0,1]),format:"float32x2",stride:8,offset:0}},indexBuffer:new Uint32Array([0,1,2,0,2,3])});class A{constructor(){this.skip=!1,this.inputTexture=null,this.backTexture=null,this.filters=null,this.bounds=new e.f,this.container=null,this.blendRequired=!1,this.outputRenderSurface=null,this.firstEnabledIndex=-1,this.lastEnabledIndex=-1}}class B{constructor(a){this._filterStackIndex=0,this._filterStack=[],this._filterGlobalUniforms=new u.f({uInputSize:{value:new Float32Array(4),type:"vec4<f32>"},uInputPixel:{value:new Float32Array(4),type:"vec4<f32>"},uInputClamp:{value:new Float32Array(4),type:"vec4<f32>"},uOutputFrame:{value:new Float32Array(4),type:"vec4<f32>"},uGlobalFrame:{value:new Float32Array(4),type:"vec4<f32>"},uOutputTexture:{value:new Float32Array(4),type:"vec4<f32>"}}),this._globalFilterBindGroup=new s.f({}),this.renderer=a}get activeBackTexture(){return this._activeFilterData?.backTexture}push(a){let b=this.renderer,c=a.filterEffect.filters,d=this._pushFilterData();d.skip=!1,d.filters=c,d.container=a.container,d.outputRenderSurface=b.renderTarget.renderSurface;let e=b.renderTarget.renderTarget.colorTexture.source,f=e.resolution,g=e.antialias;if(c.every(a=>!a.enabled)){d.skip=!0;return}let h=d.bounds;if(this._calculateFilterArea(a,h),this._calculateFilterBounds(d,b.renderTarget.rootViewPort,g,f,1),d.skip)return;let i=this._getPreviousFilterData();this._setupFilterTextures(d,h,b,i)}generateFilteredTexture({texture:a,filters:b}){if(b.every(a=>!a.enabled))return a;let c=this._pushFilterData();this._activeFilterData=c,c.skip=!1,c.filters=b;let d=a.source,e=d.resolution,f=d.antialias,g=c.bounds;if(g.clear(),g.addRect(a.frame),this._calculateFilterBounds(c,g.rectangle,f,e,0),c.skip)return this._popFilterData(),a;c.outputRenderSurface=w.f.getOptimalTexture({width:g.width,height:g.height,resolution:c.resolution,antialias:c.antialias}),c.backTexture=v.f.EMPTY,c.inputTexture=a,this.renderer.renderTarget.finishRenderPass(),this._applyFiltersToTexture(c,!0);let h=c.outputRenderSurface;return h.source.alphaMode="premultiplied-alpha",this._popFilterData(),h}pop(){let a=this.renderer,b=this._popFilterData();b.skip||(a.globalUniforms.pop(),a.renderTarget.finishRenderPass(),this._activeFilterData=b,this._applyFiltersToTexture(b,!1),b.blendRequired&&w.f.returnTexture(b.backTexture),w.f.returnTexture(b.inputTexture))}getBackTexture(a,b,c){let d=a.colorTexture.source._resolution,e=w.f.getOptimalTexture({width:b.width,height:b.height,resolution:d}),f=b.minX,g=b.minY;c&&(f-=c.minX,g-=c.minY),f=Math.floor(f*d),g=Math.floor(g*d);let h=Math.ceil(b.width*d),i=Math.ceil(b.height*d);return this.renderer.renderTarget.copyToTexture(a,e,{x:f,y:g},{width:h,height:i},{x:0,y:0}),e}applyFilter(a,b,c,d){let e=this.renderer,f=this._activeFilterData,g=f.outputRenderSurface===c,h=this._findClosestFilterData(),i=h?h.inputTexture.source._resolution:e.renderTarget.rootRenderTarget.colorTexture.source._resolution,j=0,k=0;g&&h&&(j=h.bounds.minX,k=h.bounds.minY),this._updateFilterUniforms(b,c,f,j,k,i,g,d);let l=a.enabled?a:this._getPassthroughFilter();this._setupBindGroupsAndRender(l,b,e)}calculateSpriteMatrix(a,b){let c=this._activeFilterData,d=a.set(c.inputTexture._source.width,0,0,c.inputTexture._source.height,c.bounds.minX,c.bounds.minY),e=b.worldTransform.copyTo(f.f.shared),g=b.renderGroup||b.parentRenderGroup;return g&&g.cacheToLocalTransform&&e.prepend(g.cacheToLocalTransform),e.invert(),d.prepend(e),d.scale(1/b.texture.orig.width,1/b.texture.orig.height),d.translate(b.anchor.x,b.anchor.y),d}destroy(){this._passthroughFilter?.destroy(!0),this._passthroughFilter=null}_getPassthroughFilter(){return this._passthroughFilter??(this._passthroughFilter=new r),this._passthroughFilter}_setupBindGroupsAndRender(a,b,c){if(c.renderPipes.uniformBatch){let a=c.renderPipes.uniformBatch.getUboResource(this._filterGlobalUniforms);this._globalFilterBindGroup.setResource(a,0)}else this._globalFilterBindGroup.setResource(this._filterGlobalUniforms,0);this._globalFilterBindGroup.setResource(b.source,1),this._globalFilterBindGroup.setResource(b.source.style,2),a.groups[0]=this._globalFilterBindGroup,c.encoder.draw({geometry:z,shader:a,state:a._state,topology:"triangle-list"}),c.type===x.f.WEBGL&&c.renderTarget.finishRenderPass()}_setupFilterTextures(a,b,c,d){if(a.backTexture=v.f.EMPTY,a.inputTexture=w.f.getOptimalTexture({width:b.width,height:b.height,resolution:a.resolution,antialias:a.antialias}),a.blendRequired){c.renderTarget.finishRenderPass();let e=c.renderTarget.getRenderTarget(a.outputRenderSurface);a.backTexture=this.getBackTexture(e,b,d?.bounds)}c.renderTarget.bind({target:a.inputTexture,clear:!0}),c.globalUniforms.push({offset:b})}_updateFilterUniforms(a,b,c,d,e,f,g,h){let i=this._filterGlobalUniforms.uniforms,j=i.uOutputFrame,k=i.uInputSize,l=i.uInputPixel,m=i.uInputClamp,n=i.uGlobalFrame,o=i.uOutputTexture;g?(j[0]=c.bounds.minX-d,j[1]=c.bounds.minY-e):(j[0]=0,j[1]=0),j[2]=a.frame.width,j[3]=a.frame.height,k[0]=a.source.width,k[1]=a.source.height,k[2]=1/k[0],k[3]=1/k[1],l[0]=a.source.pixelWidth,l[1]=a.source.pixelHeight,l[2]=1/l[0],l[3]=1/l[1],m[0]=.5*l[2],m[1]=.5*l[3],m[2]=a.frame.width*k[2]-.5*l[2],m[3]=a.frame.height*k[3]-.5*l[3];let p=this.renderer.renderTarget.rootRenderTarget.colorTexture;n[0]=d*f,n[1]=e*f,n[2]=p.source.width*f,n[3]=p.source.height*f,b instanceof v.f&&(b.source.resource=null);let q=this.renderer.renderTarget.getRenderTarget(b);this.renderer.renderTarget.bind({target:b,clear:!!h}),b instanceof v.f?(o[0]=b.frame.width,o[1]=b.frame.height):(o[0]=q.width,o[1]=q.height),o[2]=q.isRoot?-1:1,this._filterGlobalUniforms.update()}_findClosestFilterData(){for(let a=this._filterStackIndex-1;a>=0;a--){let b=this._filterStack[a];if(!b.skip)return b}return null}_calculateFilterArea(a,b){if(a.renderables?h(a.renderables,b):a.filterEffect.filterArea?(b.clear(),b.addRect(a.filterEffect.filterArea),b.applyMatrix(a.container.worldTransform)):a.container.getFastGlobalBounds(!0,b),a.container){let c=(a.container.renderGroup||a.container.parentRenderGroup).cacheToLocalTransform;c&&b.applyMatrix(c)}}_applyFiltersToTexture(a,b){let c=a.inputTexture,d=a.bounds,e=a.filters,f=a.firstEnabledIndex,g=a.lastEnabledIndex;if(this._globalFilterBindGroup.setResource(c.source.style,2),this._globalFilterBindGroup.setResource(a.backTexture.source,3),f===g)e[f].apply(this,c,a.outputRenderSurface,b);else{let c=a.inputTexture,h=w.f.getOptimalTexture({width:d.width,height:d.height,resolution:c.source._resolution}),i=h;for(let a=f;a<g;a++){let b=e[a];if(!b.enabled)continue;b.apply(this,c,i,!0);let d=c;c=i,i=d}e[g].apply(this,c,a.outputRenderSurface,b),w.f.returnTexture(h)}}_calculateFilterBounds(a,b,c,d,e){let f=this.renderer,g=a.bounds,h=a.filters,i=1/0,j=0,k=!0,l=!1,m=!1,n=!0,o=-1,p=-1;for(let a=0;a<h.length;a++){let b=h[a];if(b.enabled){if(-1===o&&(o=a),p=a,i=Math.min(i,"inherit"===b.resolution?d:b.resolution),j+=b.padding,"off"===b.antialias?k=!1:"inherit"===b.antialias&&k&&(k=c),b.clipToViewport||(n=!1),!(b.compatibleRenderers&f.type)){m=!1;break}if(b.blendRequired&&!(f.backBuffer?.useBackBuffer??!0)){(0,y.f)("Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options."),m=!1;break}m=!0,l||(l=b.blendRequired)}}if(!m||(n&&g.fitBounds(0,b.width/d,0,b.height/d),g.scale(i).ceil().scale(1/i).pad((0|j)*e),!g.isPositive)){a.skip=!0;return}a.antialias=k,a.resolution=i,a.blendRequired=l,a.firstEnabledIndex=o,a.lastEnabledIndex=p}_popFilterData(){return this._filterStackIndex--,this._filterStack[this._filterStackIndex]}_getPreviousFilterData(){for(let a=this._filterStackIndex-2;a>=0;a--){let b=this._filterStack[a];if(!b.skip)return b}return null}_pushFilterData(){let a=this._filterStack[this._filterStackIndex];return a||(a=this._filterStack[this._filterStackIndex]=new A),this._filterStackIndex++,a}}B.extension={type:[b.x.WebGLSystem,b.x.WebGPUSystem],name:"filter"},b.H.add(B,l),b.H.add(m),a.s([],32419)}];
2
+
3
+ //# sourceMappingURL=node_modules_pixi_js_lib_filters_init_mjs_1o5fmm_m60v_s._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/pixi.js/src/filters/FilterPipe.ts","../../../../node_modules/pixi.js/src/scene/container/bounds/getRenderableBounds.ts","../../../../node_modules/pixi.js/src/filters/init.ts","../../../../node_modules/pixi.js/src/filters/defaults/passthrough/PassthroughFilter.ts","../../../../node_modules/pixi.js/src/filters/CanvasFilterSystem.ts","../../../../node_modules/pixi.js/src/filters/FilterSystem.ts"],"sourcesContent":["import { ExtensionType } from '../extensions/Extensions';\n\nimport type { InstructionSet } from '../rendering/renderers/shared/instructions/InstructionSet';\nimport type { InstructionPipe } from '../rendering/renderers/shared/instructions/RenderPipe';\nimport type { Renderer } from '../rendering/renderers/types';\nimport type { Container } from '../scene/container/Container';\nimport type { Effect } from '../scene/container/Effect';\nimport type { FilterInstruction } from './FilterSystem';\n\n/** @internal */\nexport class FilterPipe implements InstructionPipe<FilterInstruction>\n{\n public static extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes,\n ],\n name: 'filter',\n } as const;\n\n private _renderer: Renderer;\n\n constructor(renderer: Renderer)\n {\n this._renderer = renderer;\n }\n\n public push(filterEffect: Effect, container: Container, instructionSet: InstructionSet): void\n {\n const renderPipes = this._renderer.renderPipes;\n\n renderPipes.batch.break(instructionSet);\n\n instructionSet.add({\n renderPipeId: 'filter',\n canBundle: false,\n action: 'pushFilter',\n container,\n filterEffect,\n } as FilterInstruction);\n }\n\n public pop(_filterEffect: Effect, _container: Container, instructionSet: InstructionSet): void\n {\n this._renderer.renderPipes.batch.break(instructionSet);\n\n instructionSet.add({\n renderPipeId: 'filter',\n action: 'popFilter',\n canBundle: false,\n });\n }\n\n public execute(instruction: FilterInstruction)\n {\n if (instruction.action === 'pushFilter')\n {\n this._renderer.filter.push(instruction);\n }\n else if (instruction.action === 'popFilter')\n {\n this._renderer.filter.pop();\n }\n }\n\n public destroy(): void\n {\n this._renderer = null;\n }\n}\n","import { Matrix } from '../../../maths';\n\nimport type { Renderable } from '../../../rendering/renderers/shared/Renderable';\nimport type { Bounds } from './Bounds';\n\n/**\n * This matrix is used for calculations of the bounds for renderables placed inside cacheAsTexture render groups.\n * @ignore\n * @internal\n */\nconst tempProjectionMatrix: Matrix = new Matrix();\n\n/**\n * @param renderables\n * @param bounds\n * @internal\n */\nexport function getGlobalRenderableBounds(renderables: Renderable[], bounds: Bounds): Bounds\n{\n bounds.clear();\n\n // instead of copying the matrix each time we are assigning it in bounds\n // this is a performance hack :D\n // so we need to restore the matrix after we are done\n\n const actualMatrix = bounds.matrix;\n\n for (let i = 0; i < renderables.length; i++)\n {\n const renderable = renderables[i];\n\n if (renderable.globalDisplayStatus < 0b111)\n {\n continue;\n }\n\n const renderGroup = renderable.renderGroup ?? renderable.parentRenderGroup;\n\n if (renderGroup?.isCachedAsTexture)\n {\n bounds.matrix = tempProjectionMatrix.copyFrom(renderGroup.textureOffsetInverseTransform)\n .append(renderable.worldTransform);\n }\n else if (renderGroup?._parentCacheAsTextureRenderGroup)\n {\n bounds.matrix = tempProjectionMatrix\n .copyFrom(renderGroup._parentCacheAsTextureRenderGroup.inverseWorldTransform)\n .append(renderable.groupTransform);\n }\n else\n {\n bounds.matrix = renderable.worldTransform;\n }\n\n bounds.addBounds(renderable.bounds);\n }\n\n bounds.matrix = actualMatrix;\n\n return bounds;\n}\n","import { extensions } from '../extensions/Extensions';\nimport { CanvasFilterSystem } from './CanvasFilterSystem';\nimport { FilterPipe } from './FilterPipe';\nimport { FilterSystem } from './FilterSystem';\n\nextensions.add(FilterSystem, CanvasFilterSystem);\nextensions.add(FilterPipe);\n","import { GlProgram } from '../../../rendering/renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../../../rendering/renderers/gpu/shader/GpuProgram';\nimport { Filter } from '../../Filter';\nimport vertex from '../defaultFilter.vert';\nimport fragment from './passthrough.frag';\nimport source from './passthrough.wgsl';\n\n/**\n * The PassthroughFilter passes the input data through without altering it.\n * It serves as a basic filter, performing no graphical alterations.\n * @category filters\n * @internal\n */\nexport class PassthroughFilter extends Filter\n{\n constructor()\n {\n const gpuProgram = GpuProgram.from({\n vertex: { source, entryPoint: 'mainVertex' },\n fragment: { source, entryPoint: 'mainFragment' },\n name: 'passthrough-filter'\n });\n\n const glProgram = GlProgram.from({\n vertex,\n fragment,\n name: 'passthrough-filter'\n });\n\n super({\n gpuProgram,\n glProgram,\n });\n }\n}\n","import { ExtensionType } from '../extensions/Extensions';\nimport { canvasUtils } from '../rendering/renderers/canvas/utils/canvasUtils';\nimport { CanvasPool } from '../rendering/renderers/shared/texture/CanvasPool';\nimport { Bounds } from '../scene/container/bounds/Bounds';\nimport { getGlobalRenderableBounds } from '../scene/container/bounds/getRenderableBounds';\nimport { getPo2TextureFromSource } from '../scene/text/utils/getPo2TextureFromSource';\n\nimport type { ICanvasRenderingContext2D } from '../environment/canvas/ICanvasRenderingContext2D';\nimport type { System } from '../rendering/renderers/shared/system/System';\nimport type { Texture } from '../rendering/renderers/shared/texture/Texture';\nimport type { Container } from '../scene/container/Container';\nimport type { Filter } from './Filter';\nimport type { FilterInstruction } from './FilterSystem';\n\n/**\n * Interface for filters that can supply a CSS filter string for Canvas2D.\n * @category filters\n * @advanced\n */\nexport interface CanvasFilterCapable\n{\n /** Returns CSS filter string (e.g., 'blur(5px)') or null if not supported */\n getCanvasFilterString(): string | null;\n}\n\n/**\n * Check if a filter supports Canvas2D rendering.\n * @param filter - The filter to check\n * @returns True if the filter implements getCanvasFilterString()\n * @internal\n */\nexport function isCanvasFilterCapable(filter: Filter): filter is Filter & CanvasFilterCapable\n{\n return typeof (filter as unknown as CanvasFilterCapable).getCanvasFilterString === 'function';\n}\n\n/**\n * Internal data stored per filter stack entry.\n * @internal\n */\nclass CanvasFilterFrame\n{\n public skip = false;\n public useClip = false;\n public filters: Filter[] = null;\n public container: Container = null;\n public bounds = new Bounds();\n public cssFilterString = '';\n}\n\n/**\n * Canvas2D filter system that applies compatible filters using CSS filter strings.\n * Unsupported filters are skipped with a warn-once message.\n * @category rendering\n * @advanced\n */\nexport class CanvasFilterSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [ExtensionType.CanvasSystem],\n name: 'filter',\n } as const;\n\n /** The renderer this system is attached to */\n public readonly renderer: {\n canvasContext: {\n activeContext: ICanvasRenderingContext2D;\n activeResolution: number;\n };\n };\n\n private _filterStack: CanvasFilterFrame[] = [];\n private _filterStackIndex = 0;\n private _savedStates: { filter: string; alphaMultiplier: number }[] = [];\n private _alphaMultiplier = 1;\n private _warnedFilterTypes = new Set<string>();\n\n /**\n * @param renderer - The Canvas renderer\n * @param renderer.canvasContext\n * @param renderer.canvasContext.activeContext\n * @param renderer.canvasContext.activeResolution\n */\n constructor(renderer: {\n canvasContext: {\n activeContext: ICanvasRenderingContext2D;\n activeResolution: number;\n };\n })\n {\n this.renderer = renderer;\n }\n\n /**\n * Push a filter instruction onto the stack.\n * Called when entering a filtered container.\n * @param instruction - The filter instruction from FilterPipe\n */\n public push(instruction: FilterInstruction): void\n {\n const filterFrame = this._pushFilterFrame();\n const filters = instruction.filterEffect.filters as Filter[];\n\n filterFrame.skip = false;\n filterFrame.useClip = false;\n filterFrame.filters = filters;\n filterFrame.container = instruction.container;\n filterFrame.cssFilterString = '';\n\n if (filters.every((filter) => !filter.enabled))\n {\n filterFrame.skip = true;\n\n return;\n }\n\n const cssFilters: string[] = [];\n const alphaMultiplier = 1;\n\n for (const filter of filters)\n {\n if (!filter.enabled) continue;\n\n if (!isCanvasFilterCapable(filter))\n {\n this._warnUnsupportedFilter(filter);\n\n continue;\n }\n\n const cssString = filter.getCanvasFilterString();\n\n if (cssString === null)\n {\n this._warnUnsupportedFilter(filter);\n\n continue;\n }\n\n if (cssString)\n {\n cssFilters.push(cssString);\n }\n }\n\n if (cssFilters.length === 0 && alphaMultiplier === 1)\n {\n filterFrame.skip = true;\n\n return;\n }\n\n filterFrame.cssFilterString = cssFilters.join(' ');\n\n this._calculateFilterArea(instruction, filterFrame.bounds);\n filterFrame.useClip = !!instruction.filterEffect.filterArea;\n\n const context = this.renderer.canvasContext.activeContext;\n const previousFilter = context.filter || 'none';\n\n this._savedStates.push({ filter: previousFilter, alphaMultiplier: this._alphaMultiplier });\n\n if (filterFrame.useClip\n && Number.isFinite(filterFrame.bounds.width)\n && Number.isFinite(filterFrame.bounds.height)\n && filterFrame.bounds.width > 0\n && filterFrame.bounds.height > 0)\n {\n const resolution = this.renderer.canvasContext.activeResolution || 1;\n\n context.save();\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.beginPath();\n context.rect(\n filterFrame.bounds.x * resolution,\n filterFrame.bounds.y * resolution,\n filterFrame.bounds.width * resolution,\n filterFrame.bounds.height * resolution\n );\n context.clip();\n }\n else\n {\n filterFrame.useClip = false;\n }\n\n if (alphaMultiplier !== 1)\n {\n this._alphaMultiplier *= alphaMultiplier;\n }\n\n if (filterFrame.cssFilterString)\n {\n context.filter = previousFilter !== 'none'\n ? `${previousFilter} ${filterFrame.cssFilterString}`\n : filterFrame.cssFilterString;\n }\n }\n\n /** Pop a filter from the stack. Called when exiting a filtered container. */\n public pop(): void\n {\n const filterFrame = this._popFilterFrame();\n\n if (filterFrame.skip)\n {\n return;\n }\n\n const savedState = this._savedStates.pop();\n\n if (!savedState)\n {\n return;\n }\n\n const context = this.renderer.canvasContext.activeContext;\n\n if (filterFrame.useClip)\n {\n context.restore();\n }\n else\n {\n context.filter = savedState.filter;\n }\n\n this._alphaMultiplier = savedState.alphaMultiplier;\n }\n\n /**\n * Applies supported filters to a texture and returns a new texture.\n * Unsupported filters are skipped with a warn-once message.\n * @param params - The parameters for applying filters.\n * @param params.texture\n * @param params.filters\n * @returns The resulting texture after filters are applied.\n */\n public generateFilteredTexture({ texture, filters }: { texture: Texture; filters: Filter[] }): Texture\n {\n if (!filters?.length || filters.every((filter) => !filter.enabled))\n {\n return texture;\n }\n\n const cssFilters: string[] = [];\n const alphaMultiplier = 1;\n\n for (const filter of filters)\n {\n if (!filter.enabled) continue;\n\n if (!isCanvasFilterCapable(filter))\n {\n this._warnUnsupportedFilter(filter);\n\n continue;\n }\n\n const cssString = filter.getCanvasFilterString();\n\n if (cssString === null)\n {\n this._warnUnsupportedFilter(filter);\n\n continue;\n }\n\n if (cssString)\n {\n cssFilters.push(cssString);\n }\n }\n\n if (cssFilters.length === 0 && alphaMultiplier === 1)\n {\n return texture;\n }\n\n const source = canvasUtils.getCanvasSource(texture);\n\n if (!source)\n {\n return texture;\n }\n\n const frame = texture.frame;\n const resolution = texture.source._resolution ?? texture.source.resolution ?? 1;\n const width = frame.width;\n const height = frame.height;\n\n const canvasAndContext = CanvasPool.getOptimalCanvasAndContext(width, height, resolution);\n const { canvas, context } = canvasAndContext;\n\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n\n if (cssFilters.length)\n {\n context.filter = cssFilters.join(' ');\n }\n\n if (alphaMultiplier !== 1)\n {\n context.globalAlpha = alphaMultiplier;\n }\n\n const sx = frame.x * resolution;\n const sy = frame.y * resolution;\n const sw = width * resolution;\n const sh = height * resolution;\n\n context.drawImage(\n source,\n sx,\n sy,\n sw,\n sh,\n 0,\n 0,\n sw,\n sh\n );\n\n context.filter = 'none';\n context.globalAlpha = 1;\n\n return getPo2TextureFromSource(canvas, width, height, resolution);\n }\n\n /**\n * Calculate the filter area bounds.\n * @param instruction - Filter instruction\n * @param bounds - Bounds object to populate\n */\n private _calculateFilterArea(instruction: FilterInstruction, bounds: Bounds): void\n {\n if (instruction.renderables)\n {\n getGlobalRenderableBounds(instruction.renderables, bounds);\n }\n else if (instruction.filterEffect.filterArea)\n {\n bounds.clear();\n bounds.addRect(instruction.filterEffect.filterArea);\n bounds.applyMatrix(instruction.container.worldTransform);\n }\n else\n {\n instruction.container.getFastGlobalBounds(true, bounds);\n }\n\n if (instruction.container)\n {\n const renderGroup = instruction.container.renderGroup || instruction.container.parentRenderGroup;\n const filterFrameTransform = renderGroup?.cacheToLocalTransform;\n\n if (filterFrameTransform)\n {\n bounds.applyMatrix(filterFrameTransform);\n }\n }\n }\n\n private _warnUnsupportedFilter(filter: Filter): void\n {\n const filterName = filter?.constructor?.name || 'Filter';\n\n if (this._warnedFilterTypes.has(filterName))\n {\n return;\n }\n\n this._warnedFilterTypes.add(filterName);\n console.warn(\n `CanvasRenderer: filter \"${filterName}\" is not supported in Canvas2D and will be skipped.`\n );\n }\n\n public get alphaMultiplier(): number\n {\n return this._alphaMultiplier;\n }\n\n private _pushFilterFrame(): CanvasFilterFrame\n {\n let filterFrame = this._filterStack[this._filterStackIndex];\n\n if (!filterFrame)\n {\n filterFrame = this._filterStack[this._filterStackIndex] = new CanvasFilterFrame();\n }\n\n this._filterStackIndex++;\n\n return filterFrame;\n }\n\n private _popFilterFrame(): CanvasFilterFrame\n {\n if (this._filterStackIndex <= 0)\n {\n return this._filterStack[0];\n }\n\n this._filterStackIndex--;\n\n return this._filterStack[this._filterStackIndex];\n }\n\n /** Destroys the system */\n public destroy(): void\n {\n this._filterStack = null;\n this._savedStates = null;\n this._warnedFilterTypes = null;\n this._alphaMultiplier = 1;\n }\n}\n","import { ExtensionType } from '../extensions/Extensions';\nimport { PassthroughFilter } from '../filters/defaults/passthrough/PassthroughFilter';\nimport { Matrix } from '../maths/matrix/Matrix';\nimport { type Rectangle } from '../maths/shapes/Rectangle';\nimport { BindGroup } from '../rendering/renderers/gpu/shader/BindGroup';\nimport { Geometry } from '../rendering/renderers/shared/geometry/Geometry';\nimport { UniformGroup } from '../rendering/renderers/shared/shader/UniformGroup';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture';\nimport { TexturePool } from '../rendering/renderers/shared/texture/TexturePool';\nimport { RendererType } from '../rendering/renderers/types';\nimport { Bounds } from '../scene/container/bounds/Bounds';\nimport { getGlobalRenderableBounds } from '../scene/container/bounds/getRenderableBounds';\nimport { warn } from '../utils/logging/warn';\n\nimport type { WebGLRenderer } from '../rendering/renderers/gl/WebGLRenderer';\nimport type { WebGPURenderer } from '../rendering/renderers/gpu/WebGPURenderer';\nimport type { Instruction } from '../rendering/renderers/shared/instructions/Instruction';\nimport type { Renderable } from '../rendering/renderers/shared/Renderable';\nimport type { RenderTarget } from '../rendering/renderers/shared/renderTarget/RenderTarget';\nimport type { RenderSurface } from '../rendering/renderers/shared/renderTarget/RenderTargetSystem';\nimport type { System } from '../rendering/renderers/shared/system/System';\nimport type { Container } from '../scene/container/Container';\nimport type { Sprite } from '../scene/sprite/Sprite';\nimport type { Filter } from './Filter';\nimport type { FilterEffect } from './FilterEffect';\n\nconst quadGeometry = new Geometry({\n attributes: {\n aPosition: {\n buffer: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n format: 'float32x2',\n stride: 2 * 4,\n offset: 0,\n },\n },\n indexBuffer: new Uint32Array([0, 1, 2, 0, 2, 3]),\n});\n\n/**\n * The filter pipeline is responsible for applying filters scene items!\n *\n * KNOWN BUGS:\n * 1. Global bounds calculation is incorrect if it is used when flip flopping filters. The maths can be found below\n * eg: filters [noiseFilter, blurFilter] noiseFilter will calculate the global bounds incorrectly.\n *\n * 2. RenderGroups do not work with filters. This is because the renderGroup matrix is not currently taken into account.\n *\n * Implementation notes:\n * 1. Gotcha - nesting filters that require blending will not work correctly. This creates a chicken and egg problem\n * the complexity and performance required to do this is not worth it i feel.. but lets see if others agree!\n *\n * 2. Filters are designed to be changed on the fly, this is means that changing filter information each frame will\n * not trigger an instruction rebuild. If you are constantly turning a filter on and off.. its therefore better to set\n * enabled to true or false on the filter. Or setting an empty array.\n *\n * 3. Need to look at perhaps aliasing when flip flopping filters. Really we should only need to antialias the FIRST\n * Texture we render too. The rest can be non aliased. This might help performance.\n * Currently we flip flop with an antialiased texture if antialiasing is enabled on the filter.\n * @internal\n */\nexport interface FilterInstruction extends Instruction\n{\n renderPipeId: 'filter',\n action: 'pushFilter' | 'popFilter',\n container?: Container,\n renderables?: Renderable[],\n filterEffect: FilterEffect,\n}\n\n/**\n * Class representing the data required for applying filters.\n * This class holds various properties that are used during the filter application process.\n * @internal\n */\nclass FilterData\n{\n /**\n * Indicates whether the filter should be skipped.\n * @type {boolean}\n */\n public skip = false;\n\n /**\n * The texture to which the filter is applied.\n * @type {Texture}\n */\n public inputTexture: Texture = null;\n\n /**\n * The back texture used for blending, if required.\n * @type {Texture | null}\n */\n public backTexture?: Texture = null;\n\n /**\n * The list of filters to be applied.\n * @type {Filter[]}\n */\n public filters: Filter[] = null;\n\n /**\n * The bounds of the filter area.\n * @type {Bounds}\n */\n public bounds = new Bounds();\n\n /**\n * The container to which the filter is applied.\n * @type {Container}\n */\n public container: Container = null;\n\n /**\n * Indicates whether blending is required for the filter.\n * @type {boolean}\n */\n public blendRequired: boolean = false;\n\n /**\n * The render surface where the output of the filter is rendered.\n * @type {RenderSurface}\n */\n public outputRenderSurface: RenderSurface = null;\n\n /**\n * Indicates whether antialiasing is enabled for the filter.\n * @type {boolean}\n */\n public antialias: boolean;\n\n /**\n * The resolution of the filter.\n * @type {number}\n */\n public resolution: number;\n\n /** The first enabled filter index in the current filter list. */\n public firstEnabledIndex = -1;\n\n /** The last enabled filter index in the current filter list. */\n public lastEnabledIndex = -1;\n}\n\n/**\n * System that manages the filter pipeline\n * @category rendering\n * @advanced\n */\nexport class FilterSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ],\n name: 'filter',\n } as const;\n\n public readonly renderer: WebGLRenderer | WebGPURenderer;\n\n private _filterStackIndex = 0;\n private _filterStack: FilterData[] = [];\n\n private readonly _filterGlobalUniforms = new UniformGroup({\n uInputSize: { value: new Float32Array(4), type: 'vec4<f32>' },\n uInputPixel: { value: new Float32Array(4), type: 'vec4<f32>' },\n uInputClamp: { value: new Float32Array(4), type: 'vec4<f32>' },\n uOutputFrame: { value: new Float32Array(4), type: 'vec4<f32>' },\n uGlobalFrame: { value: new Float32Array(4), type: 'vec4<f32>' },\n uOutputTexture: { value: new Float32Array(4), type: 'vec4<f32>' },\n });\n\n private readonly _globalFilterBindGroup: BindGroup = new BindGroup({});\n private _activeFilterData: FilterData;\n private _passthroughFilter: Filter;\n\n constructor(renderer: WebGLRenderer | WebGPURenderer)\n {\n this.renderer = renderer;\n }\n\n /**\n * The back texture of the currently active filter. Requires the filter to have `blendRequired` set to true.\n * @readonly\n */\n public get activeBackTexture(): Texture | undefined\n {\n return this._activeFilterData?.backTexture;\n }\n\n /**\n * Pushes a filter instruction onto the filter stack.\n * @param instruction - The instruction containing the filter effect and container.\n * @internal\n */\n public push(instruction: FilterInstruction)\n {\n const renderer = this.renderer;\n\n const filters = instruction.filterEffect.filters;\n\n // get a filter data from the stack. They can be reused multiple times each frame,\n // so we don't need to worry about overwriting them in a single pass.\n const filterData = this._pushFilterData();\n\n filterData.skip = false;\n\n filterData.filters = filters as Filter[];\n filterData.container = instruction.container;\n filterData.outputRenderSurface = renderer.renderTarget.renderSurface;\n\n const colorTextureSource = renderer.renderTarget.renderTarget.colorTexture.source;\n\n const rootResolution = colorTextureSource.resolution;\n const rootAntialias = colorTextureSource.antialias;\n\n // if there are no filters, or all of them disabled, we skip the pass\n if (filters.every((filter) => !filter.enabled))\n {\n filterData.skip = true;\n\n return;\n }\n\n const bounds = filterData.bounds;\n\n this._calculateFilterArea(instruction, bounds);\n\n this._calculateFilterBounds(filterData, renderer.renderTarget.rootViewPort, rootAntialias, rootResolution, 1);\n\n if (filterData.skip)\n {\n return;\n }\n\n const previousFilterData = this._getPreviousFilterData();\n\n // set all the filter data\n\n this._setupFilterTextures(filterData, bounds, renderer, previousFilterData);\n }\n\n /**\n * Applies filters to a texture.\n *\n * This method takes a texture and a list of filters, applies the filters to the texture,\n * and returns the resulting texture.\n * @param {object} params - The parameters for applying filters.\n * @param {Texture} params.texture - The texture to apply filters to.\n * @param {Filter[]} params.filters - The filters to apply.\n * @returns {Texture} The resulting texture after all filters have been applied.\n * @example\n *\n * ```ts\n * // Create a texture and a list of filters\n * const texture = new Texture(...);\n * const filters = [new BlurFilter(), new ColorMatrixFilter()];\n *\n * // Apply the filters to the texture\n * const resultTexture = renderer.filter.generateFilteredTexture({ texture, filters });\n *\n * // Use the resulting texture\n * sprite.texture = resultTexture;\n * ```\n *\n * Key Points:\n * 1. padding is not currently supported here - so clipping may occur with filters that use padding.\n * 2. If all filters are disabled or skipped, the original texture is returned.\n */\n public generateFilteredTexture({ texture, filters }: {texture: Texture, filters: Filter[]}): Texture\n {\n // with no enabled filter there is nothing to apply, so return before taking a stack entry\n if (filters.every((filter) => !filter.enabled))\n {\n return texture;\n }\n\n // get a filter data from the stack. They can be reused multiple times each frame,\n // so we don't need to worry about overwriting them in a single pass.\n const filterData = this._pushFilterData();\n\n this._activeFilterData = filterData;\n filterData.skip = false;\n\n filterData.filters = filters;\n\n const colorTextureSource = texture.source;\n\n const rootResolution = colorTextureSource.resolution;\n const rootAntialias = colorTextureSource.antialias;\n\n const bounds = filterData.bounds;\n\n // this path is used by the blend modes mostly!\n // they collect all renderables and push them into a list.\n // this list is then used to calculate the bounds of the filter area\n\n bounds.clear();\n bounds.addRect(texture.frame);\n\n this._calculateFilterBounds(filterData, bounds.rectangle, rootAntialias, rootResolution, 0);\n\n if (filterData.skip)\n {\n this._popFilterData();\n\n return texture;\n }\n\n /// /////////\n\n // set all the filter data\n // get a power of two or screen sized texture from our pool...\n filterData.outputRenderSurface = TexturePool.getOptimalTexture({\n width: bounds.width,\n height: bounds.height,\n resolution: filterData.resolution,\n antialias: filterData.antialias,\n });\n\n filterData.backTexture = Texture.EMPTY;\n\n /// ///\n // bind...\n // TODO this might need looking at for padding!\n filterData.inputTexture = texture;\n\n /// ////////////// PART 2 POP //////////////////////\n\n const renderer = this.renderer;\n\n // required: resolves the bound target's MSAA content (GL blits to the resolve\n // framebuffer; WebGPU ends the pass) so the filter can sample what was just rendered\n renderer.renderTarget.finishRenderPass();\n\n // get a BufferResource from the uniformBatch.\n // this will batch the shader uniform data and give us a buffer resource we can\n // set on our globalUniform Bind Group\n this._applyFiltersToTexture(filterData, true);\n\n const outputTexture = filterData.outputRenderSurface as Texture;\n\n outputTexture.source.alphaMode = 'premultiplied-alpha';\n\n this._popFilterData();\n\n return outputTexture;\n }\n\n /** @internal */\n public pop()\n {\n const renderer = this.renderer;\n\n const filterData = this._popFilterData();\n\n // if we are skipping this filter then we just do nothing :D\n if (filterData.skip)\n {\n return;\n }\n\n renderer.globalUniforms.pop();\n\n renderer.renderTarget.finishRenderPass();\n\n this._activeFilterData = filterData;\n\n this._applyFiltersToTexture(filterData, false);\n\n // if we made a background texture, lets return that also\n if (filterData.blendRequired)\n {\n TexturePool.returnTexture(filterData.backTexture);\n }\n\n // return the texture to the pool so we can reuse the next frame\n TexturePool.returnTexture(filterData.inputTexture);\n }\n\n /**\n * Copies the last render surface to a texture.\n * @param lastRenderSurface - The last render surface to copy from.\n * @param bounds - The bounds of the area to copy.\n * @param previousBounds - The previous bounds to use for offsetting the copy.\n */\n public getBackTexture(lastRenderSurface: RenderTarget, bounds: Bounds, previousBounds?: Bounds)\n {\n const backgroundResolution = lastRenderSurface.colorTexture.source._resolution;\n\n const backTexture = TexturePool.getOptimalTexture({\n width: bounds.width,\n height: bounds.height,\n resolution: backgroundResolution,\n });\n\n let x = bounds.minX;\n let y = bounds.minY;\n\n if (previousBounds)\n {\n x -= previousBounds.minX;\n y -= previousBounds.minY;\n }\n\n x = Math.floor(x * backgroundResolution);\n y = Math.floor(y * backgroundResolution);\n\n const width = Math.ceil(bounds.width * backgroundResolution);\n const height = Math.ceil(bounds.height * backgroundResolution);\n\n this.renderer.renderTarget.copyToTexture(\n lastRenderSurface,\n backTexture,\n { x, y },\n { width, height },\n { x: 0, y: 0 }\n );\n\n return backTexture;\n }\n\n /**\n * Applies a filter to a texture.\n * @param filter - The filter to apply.\n * @param input - The input texture.\n * @param output - The output render surface.\n * @param clear - Whether to clear the output surface before applying the filter.\n */\n public applyFilter(filter: Filter, input: Texture, output: RenderSurface, clear: boolean)\n {\n const renderer = this.renderer;\n\n const filterData = this._activeFilterData;\n\n const outputRenderSurface = filterData.outputRenderSurface;\n\n const isFinalTarget = outputRenderSurface === output;\n\n const closestFilterData = this._findClosestFilterData();\n const resolution = closestFilterData\n ? closestFilterData.inputTexture.source._resolution\n : renderer.renderTarget.rootRenderTarget.colorTexture.source._resolution;\n\n // Calculate the offset for both outputFrame and globalFrame\n let offsetX = 0;\n let offsetY = 0;\n\n if (isFinalTarget && closestFilterData)\n {\n offsetX = closestFilterData.bounds.minX;\n offsetY = closestFilterData.bounds.minY;\n }\n\n this._updateFilterUniforms(input, output, filterData, offsetX, offsetY, resolution, isFinalTarget, clear);\n\n // If the filter is disabled, we still need to write something into the output surface.\n // Render a pass-through (copy) so the pipeline remains intact.\n const filterToApply = filter.enabled\n ? filter\n : this._getPassthroughFilter();\n\n this._setupBindGroupsAndRender(filterToApply, input, renderer);\n }\n\n /**\n * Multiply _input normalized coordinates_ to this matrix to get _sprite texture normalized coordinates_.\n *\n * Use `outputMatrix * vTextureCoord` in the shader.\n * @param outputMatrix - The matrix to output to.\n * @param {Sprite} sprite - The sprite to map to.\n * @returns The mapped matrix.\n */\n public calculateSpriteMatrix(outputMatrix: Matrix, sprite: Sprite): Matrix\n {\n const data = this._activeFilterData;\n\n const mappedMatrix = outputMatrix.set(\n data.inputTexture._source.width,\n 0, 0,\n data.inputTexture._source.height,\n data.bounds.minX, data.bounds.minY\n );\n\n const worldTransform = sprite.worldTransform.copyTo(Matrix.shared);\n\n const renderGroup = sprite.renderGroup || sprite.parentRenderGroup;\n\n if (renderGroup && renderGroup.cacheToLocalTransform)\n {\n // get the matrix relative to the render group..\n worldTransform.prepend(renderGroup.cacheToLocalTransform);\n }\n\n worldTransform.invert();\n mappedMatrix.prepend(worldTransform);\n mappedMatrix.scale(\n 1.0 / sprite.texture.orig.width,\n 1.0 / sprite.texture.orig.height\n );\n\n mappedMatrix.translate(sprite.anchor.x, sprite.anchor.y);\n\n return mappedMatrix;\n }\n\n public destroy(): void\n {\n this._passthroughFilter?.destroy(true);\n (this._passthroughFilter as null) = null;\n }\n\n private _getPassthroughFilter(): Filter\n {\n this._passthroughFilter ??= new PassthroughFilter();\n\n return this._passthroughFilter;\n }\n\n /**\n * Sets up the bind groups and renders the filter.\n * @param filter - The filter to apply\n * @param input - The input texture\n * @param renderer - The renderer instance\n */\n private _setupBindGroupsAndRender(filter: Filter, input: Texture, renderer: WebGLRenderer | WebGPURenderer): void\n {\n // TODO - should prolly use a adaptor...\n if ((renderer as WebGPURenderer).renderPipes.uniformBatch)\n {\n const batchUniforms = (renderer as WebGPURenderer).renderPipes.uniformBatch\n .getUboResource(this._filterGlobalUniforms);\n\n this._globalFilterBindGroup.setResource(batchUniforms, 0);\n }\n else\n {\n this._globalFilterBindGroup.setResource(this._filterGlobalUniforms, 0);\n }\n\n // now lets update the output texture...\n\n // set bind group..\n this._globalFilterBindGroup.setResource(input.source, 1);\n this._globalFilterBindGroup.setResource(input.source.style, 2);\n\n filter.groups[0] = this._globalFilterBindGroup;\n\n renderer.encoder.draw({\n geometry: quadGeometry,\n shader: filter,\n state: filter._state,\n topology: 'triangle-list'\n });\n\n // WebGPU blit's automatically, but WebGL does not!\n if (renderer.type === RendererType.WEBGL)\n {\n renderer.renderTarget.finishRenderPass();\n }\n }\n\n /**\n * Sets up the filter textures including input texture and back texture if needed.\n * @param filterData - The filter data to update\n * @param bounds - The bounds for the texture\n * @param renderer - The renderer instance\n * @param previousFilterData - The previous filter data for back texture calculation\n */\n private _setupFilterTextures(\n filterData: FilterData,\n bounds: Bounds,\n renderer: WebGLRenderer | WebGPURenderer,\n previousFilterData: FilterData | null\n ): void\n {\n // set all the filter data\n filterData.backTexture = Texture.EMPTY;\n\n /// ///\n // bind...\n // get a power of two or screen sized texture from our pool...\n filterData.inputTexture = TexturePool.getOptimalTexture({\n width: bounds.width,\n height: bounds.height,\n resolution: filterData.resolution,\n antialias: filterData.antialias,\n });\n\n // Very cryptic, but important(!) moment.\n //\n // If we try to pull texture from the pool for backTexture before inputTexture,\n // it will be unbounded later by startRenderPass. It happens because in such a case - the current backTexture\n // is actually inputTexture from the previous filter application (check `pop` method).\n //\n // So maintaining the order (inputTexture -> backTexture) helps us to prevent unwanted texture unbinding.\n if (filterData.blendRequired)\n {\n renderer.renderTarget.finishRenderPass();\n // this actually forces the current commandQueue to render everything so far.\n // if we don't do this, we won't be able to copy pixels for the background\n const renderTarget = renderer.renderTarget.getRenderTarget(filterData.outputRenderSurface);\n\n filterData.backTexture = this.getBackTexture(renderTarget, bounds, previousFilterData?.bounds);\n }\n\n renderer.renderTarget.bind({ target: filterData.inputTexture, clear: true });\n\n // set the global uniforms to take into account the bounds offset required\n renderer.globalUniforms.push({\n offset: bounds,\n });\n }\n\n /**\n * Updates the filter uniforms with the current filter state.\n * @param input - The input texture\n * @param output - The output render surface\n * @param filterData - The current filter data\n * @param offsetX - The X offset for positioning\n * @param offsetY - The Y offset for positioning\n * @param resolution - The current resolution\n * @param isFinalTarget - Whether this is the final render target\n * @param clear - Whether to clear the output surface\n */\n private _updateFilterUniforms(\n input: Texture,\n output: RenderSurface,\n filterData: FilterData,\n offsetX: number,\n offsetY: number,\n resolution: number,\n isFinalTarget: boolean,\n clear: boolean\n ): void\n {\n const uniforms = this._filterGlobalUniforms.uniforms;\n const outputFrame = uniforms.uOutputFrame;\n const inputSize = uniforms.uInputSize;\n const inputPixel = uniforms.uInputPixel;\n const inputClamp = uniforms.uInputClamp;\n const globalFrame = uniforms.uGlobalFrame;\n const outputTexture = uniforms.uOutputTexture;\n\n // are we rendering back to the original surface?\n if (isFinalTarget)\n {\n outputFrame[0] = filterData.bounds.minX - offsetX;\n outputFrame[1] = filterData.bounds.minY - offsetY;\n }\n else\n {\n outputFrame[0] = 0;\n outputFrame[1] = 0;\n }\n\n outputFrame[2] = input.frame.width;\n outputFrame[3] = input.frame.height;\n\n inputSize[0] = input.source.width;\n inputSize[1] = input.source.height;\n inputSize[2] = 1 / inputSize[0];\n inputSize[3] = 1 / inputSize[1];\n\n inputPixel[0] = input.source.pixelWidth;\n inputPixel[1] = input.source.pixelHeight;\n inputPixel[2] = 1.0 / inputPixel[0];\n inputPixel[3] = 1.0 / inputPixel[1];\n\n inputClamp[0] = 0.5 * inputPixel[2];\n inputClamp[1] = 0.5 * inputPixel[3];\n inputClamp[2] = (input.frame.width * inputSize[2]) - (0.5 * inputPixel[2]);\n inputClamp[3] = (input.frame.height * inputSize[3]) - (0.5 * inputPixel[3]);\n\n const rootTexture = this.renderer.renderTarget.rootRenderTarget.colorTexture;\n\n globalFrame[0] = offsetX * resolution;\n globalFrame[1] = offsetY * resolution;\n globalFrame[2] = rootTexture.source.width * resolution;\n globalFrame[3] = rootTexture.source.height * resolution;\n\n // we are going to overwrite resource we can set it to null!\n if (output instanceof Texture) output.source.resource = null;\n\n // set the output texture - this is where we are going to render to\n const renderTarget = this.renderer.renderTarget.getRenderTarget(output);\n\n this.renderer.renderTarget.bind({ target: output, clear: !!clear });\n\n if (output instanceof Texture)\n {\n outputTexture[0] = output.frame.width;\n outputTexture[1] = output.frame.height;\n }\n else\n {\n // this means a renderTarget was passed directly\n outputTexture[0] = renderTarget.width;\n outputTexture[1] = renderTarget.height;\n }\n\n outputTexture[2] = renderTarget.isRoot ? -1 : 1;\n\n this._filterGlobalUniforms.update();\n }\n\n /**\n * Finds the non-skipped entry closest to the top of the filter stack.\n *\n * `pop()` removes its entry before it applies the filters, so the result is the enclosing filter's entry.\n * `generateFilteredTexture()` applies the filters while its entry is still on the stack, so the result is that entry.\n * @returns The entry, or null if there is none\n */\n private _findClosestFilterData(): FilterData | null\n {\n for (let i = this._filterStackIndex - 1; i >= 0; i--)\n {\n const filterData = this._filterStack[i];\n\n if (!filterData.skip) return filterData;\n }\n\n return null;\n }\n\n /**\n * Calculates the filter area bounds based on the instruction type.\n * @param instruction - The filter instruction\n * @param bounds - The bounds object to populate\n */\n private _calculateFilterArea(instruction: FilterInstruction, bounds: Bounds): void\n {\n // this path is used by the blend modes mostly!\n // they collect all renderables and push them into a list.\n // this list is then used to calculate the bounds of the filter area\n if (instruction.renderables)\n {\n getGlobalRenderableBounds(instruction.renderables, bounds);\n }\n // if a filterArea is provided, we save our selves some measuring and just use that area supplied\n else if (instruction.filterEffect.filterArea)\n {\n bounds.clear();\n\n // transform the filterArea into global space..\n bounds.addRect(instruction.filterEffect.filterArea);\n\n // new for v8, we transform the bounds into the space of the container\n bounds.applyMatrix(instruction.container.worldTransform);\n }\n // classic filter path, we get the bounds of the container and use it by recursively\n // measuring.\n else\n {\n // we want to factor render layers to get the real visual bounds of this container.\n // so the last param is true..\n instruction.container.getFastGlobalBounds(true, bounds);\n }\n\n if (instruction.container)\n {\n // When a container is cached as a texture, its filters need to be applied relative to its\n // cached parent's coordinate space rather than world space. This transform adjustment ensures\n // filters are applied in the correct coordinate system.\n const renderGroup = instruction.container.renderGroup || instruction.container.parentRenderGroup;\n const filterFrameTransform = renderGroup.cacheToLocalTransform;\n\n if (filterFrameTransform)\n {\n bounds.applyMatrix(filterFrameTransform);\n }\n }\n }\n\n private _applyFiltersToTexture(filterData: FilterData, clear: boolean)\n {\n const inputTexture = filterData.inputTexture;\n\n const bounds = filterData.bounds;\n\n const filters = filterData.filters;\n const firstEnabled = filterData.firstEnabledIndex;\n const lastEnabled = filterData.lastEnabledIndex;\n\n // get a BufferResource from the uniformBatch.\n // this will batch the shader uniform data and give us a buffer resource we can\n // set on our globalUniform Bind Group\n // update the resources on the bind group...\n this._globalFilterBindGroup.setResource(inputTexture.source.style, 2);\n this._globalFilterBindGroup.setResource(filterData.backTexture.source, 3);\n\n if (firstEnabled === lastEnabled)\n {\n // render a single filter...\n filters[firstEnabled].apply(this, inputTexture, filterData.outputRenderSurface, clear);\n }\n else\n {\n let flip = filterData.inputTexture;\n\n const tempTexture = TexturePool.getOptimalTexture({\n width: bounds.width,\n height: bounds.height,\n resolution: flip.source._resolution,\n });\n\n // get another texture that we will render the next filter too\n let flop = tempTexture;\n\n // loop and apply the filters, omitting the last one as we will render that to the final target\n for (let i = firstEnabled; i < lastEnabled; i++)\n {\n const filter = filters[i];\n\n if (!filter.enabled) continue;\n\n filter.apply(this, flip, flop, true);\n const t = flip;\n\n flip = flop;\n flop = t;\n }\n // apply the last enabled filter to the output\n filters[lastEnabled].apply(this, flip, filterData.outputRenderSurface, clear);\n\n // return those textures for later!\n TexturePool.returnTexture(tempTexture);\n }\n }\n\n private _calculateFilterBounds(\n filterData: FilterData,\n viewPort: Rectangle,\n rootAntialias: boolean,\n rootResolution: number,\n // a multiplier padding for the bounds calculation\n // this prop is used when applying filters to textures\n // as the should have padding applied to them already (until we fix padding when applying them to textures)\n // set to 0 to remove padding from the bounds calculation\n paddingMultiplier: number\n )\n {\n const renderer = this.renderer;\n\n const bounds = filterData.bounds;\n const filters = filterData.filters;\n\n // get GLOBAL bounds of the item we are going to apply the filter to\n\n // next we get the settings for the filter\n // we need to find the LOWEST resolution for the filter list\n let resolution = Infinity;\n // Padding is additive to add padding to our padding\n let padding = 0;\n // if this is true for all filter, it should be true, and otherwise false\n let antialias = true;\n // true if any filter requires the previous render target\n let blendRequired = false;\n // true if any filter in the list is enabled\n let enabled = false;\n // false if any filter in the list has false\n let clipToViewport = true;\n // cache first/last enabled indices for later passes\n let firstEnabledIndex = -1;\n let lastEnabledIndex = -1;\n\n for (let i = 0; i < filters.length; i++)\n {\n const filter = filters[i];\n\n // Only enabled filters should influence pipeline characteristics\n if (!filter.enabled) continue;\n\n if (firstEnabledIndex === -1) firstEnabledIndex = i;\n lastEnabledIndex = i;\n resolution = Math.min(resolution, filter.resolution === 'inherit'\n ? rootResolution : filter.resolution);\n padding += filter.padding;\n\n if (filter.antialias === 'off')\n {\n antialias = false;\n }\n else if (filter.antialias === 'inherit')\n {\n antialias &&= rootAntialias;\n }\n\n if (!filter.clipToViewport)\n {\n clipToViewport = false;\n }\n\n const isCompatible = !!(filter.compatibleRenderers & renderer.type);\n\n if (!isCompatible)\n {\n enabled = false;\n break;\n }\n\n if (filter.blendRequired && !((renderer as WebGLRenderer).backBuffer?.useBackBuffer ?? true))\n {\n // #if _DEBUG\n // eslint-disable-next-line max-len\n warn('Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options.');\n // #endif\n\n enabled = false;\n break;\n }\n\n enabled = true;\n blendRequired ||= filter.blendRequired;\n }\n\n // if no filters are enabled lets skip!\n if (!enabled)\n {\n filterData.skip = true;\n\n return;\n }\n\n // here we constrain the bounds to the viewport we will render too\n // this should not take into account the x, y offset of the viewport - as this is\n // handled by the viewport on the gpu.\n if (clipToViewport)\n {\n bounds.fitBounds(0, viewPort.width / rootResolution, 0, viewPort.height / rootResolution);\n }\n\n // round the bounds to the nearest pixel\n bounds\n .scale(resolution)\n .ceil()\n .scale(1 / resolution)\n .pad((padding | 0) * paddingMultiplier);\n\n // skip if the bounds are negative or zero as this means they are\n // not visible on the screen\n if (!bounds.isPositive)\n {\n filterData.skip = true;\n\n return;\n }\n\n // store the values that will be used to apply the filters\n filterData.antialias = antialias;\n filterData.resolution = resolution;\n filterData.blendRequired = blendRequired;\n filterData.firstEnabledIndex = firstEnabledIndex;\n filterData.lastEnabledIndex = lastEnabledIndex;\n }\n\n private _popFilterData(): FilterData\n {\n this._filterStackIndex--;\n\n return this._filterStack[this._filterStackIndex];\n }\n\n /**\n * Finds the closest non-skipped entry that encloses the filter being pushed.\n *\n * `push()` has already added that filter's own entry, so the search starts one entry below it.\n * @returns The entry, or null if there is none\n */\n private _getPreviousFilterData(): FilterData | null\n {\n for (let i = this._filterStackIndex - 2; i >= 0; i--)\n {\n const filterData = this._filterStack[i];\n\n if (!filterData.skip) return filterData;\n }\n\n return null;\n }\n\n private _pushFilterData(): FilterData\n {\n let filterData = this._filterStack[this._filterStackIndex];\n\n if (!filterData)\n {\n filterData = this._filterStack[this._filterStackIndex] = new FilterData();\n }\n\n this._filterStackIndex++;\n\n return filterData;\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,3,4,5]}
@@ -0,0 +1,196 @@
1
+ (()=>{"use strict";module.exports=[77686,84239,a=>{let b={name:"local-uniform-bit",vertex:{header:`
2
+
3
+ struct LocalUniforms {
4
+ uTransformMatrix:mat3x3<f32>,
5
+ uColor:vec4<f32>,
6
+ uRound:f32,
7
+ }
8
+
9
+ @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;
10
+ `,main:`
11
+ vColor *= localUniforms.uColor;
12
+ modelMatrix *= localUniforms.uTransformMatrix;
13
+ `,end:`
14
+ if(localUniforms.uRound == 1)
15
+ {
16
+ vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
17
+ }
18
+ `}},c={...b,vertex:{...b.vertex,header:b.vertex.header.replace("group(1)","group(2)")}},d={name:"local-uniform-bit",vertex:{header:`
19
+
20
+ uniform mat3 uTransformMatrix;
21
+ uniform vec4 uColor;
22
+ uniform float uRound;
23
+ `,main:`
24
+ vColor *= uColor;
25
+ modelMatrix = uTransformMatrix;
26
+ `,end:`
27
+ if(uRound == 1.)
28
+ {
29
+ gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
30
+ }
31
+ `}};a.s(["q",0,b,"Y",0,d,"M",0,c],77686);let e={name:"texture-bit",vertex:{header:`
32
+
33
+ struct TextureUniforms {
34
+ uTextureMatrix:mat3x3<f32>,
35
+ }
36
+
37
+ @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;
38
+ `,main:`
39
+ uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;
40
+ `},fragment:{header:`
41
+ @group(2) @binding(0) var uTexture: texture_2d<f32>;
42
+ @group(2) @binding(1) var uSampler: sampler;
43
+
44
+
45
+ `,main:`
46
+ outColor = textureSample(uTexture, uSampler, vUV);
47
+ `}},f={name:"texture-bit",vertex:{header:`
48
+ uniform mat3 uTextureMatrix;
49
+ `,main:`
50
+ uv = (uTextureMatrix * vec3(uv, 1.0)).xy;
51
+ `},fragment:{header:`
52
+ uniform sampler2D uTexture;
53
+
54
+
55
+ `,main:`
56
+ outColor = texture(uTexture, vUV);
57
+ `}};a.s(["S",0,e,"X",0,f],84239)},80783,29477,a=>{var b=a.i(51983),c=a.i(70770);a.s(["f",0,function(a,d){for(let c in a.attributes){let e=a.attributes[c],f=d[c];f?(e.format??(e.format=f.format),e.offset??(e.offset=f.offset),e.instance??(e.instance=f.instance)):e.format||(0,b.f)(`Attribute ${c} is not present in the shader, but is present in the geometry. Unable to infer attribute details.`)}!function(a){let{buffers:b,attributes:d}=a,e={},f={};for(let a in b){let c=b[a];e[c.uid]=0,f[c.uid]=0}for(let a in d){let b=d[a];e[b.buffer.uid]+=(0,c.f)(b.format).stride}for(let a in d){let b=d[a];b.stride??(b.stride=e[b.buffer.uid]),b.start??(b.start=f[b.buffer.uid]),f[b.buffer.uid]+=(0,c.f)(b.format).stride}}(a)}],80783);var d=a.i(35990);let e=[];e[d.U.NONE]=void 0,e[d.U.DISABLED]={stencilWriteMask:0,stencilReadMask:0},e[d.U.RENDERING_MASK_ADD]={stencilFront:{compare:"equal",passOp:"increment-clamp"},stencilBack:{compare:"equal",passOp:"increment-clamp"}},e[d.U.RENDERING_MASK_REMOVE]={stencilFront:{compare:"equal",passOp:"decrement-clamp"},stencilBack:{compare:"equal",passOp:"decrement-clamp"}},e[d.U.MASK_ACTIVE]={stencilWriteMask:0,stencilFront:{compare:"equal",passOp:"keep"},stencilBack:{compare:"equal",passOp:"keep"}},e[d.U.INVERSE_MASK_ACTIVE]={stencilWriteMask:0,stencilFront:{compare:"not-equal",passOp:"keep"},stencilBack:{compare:"not-equal",passOp:"keep"}},a.s(["f",0,e],29477)},55164,51581,51169,37630,10961,a=>{var b=a.i(78064),c=a.i(42682),d=a.i(52776);a.s(["f",0,class{constructor(a){this._syncFunctionHash=Object.create(null),this._adaptor=a,this._systemCheck()}_systemCheck(){if(!(0,b.f)())throw Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}ensureUniformGroup(a){let b=this.getUniformGroupData(a);a.buffer||(a.buffer=new c.f({data:new Float32Array(b.layout.size/4),usage:d.f.UNIFORM|d.f.COPY_DST}))}getUniformGroupData(a){return this._syncFunctionHash[a._signature]||this._initUniformGroup(a)}_initUniformGroup(a){let b=a._signature,c=this._syncFunctionHash[b];if(!c){let d=Object.keys(a.uniformStructures).map(b=>a.uniformStructures[b]),e=this._adaptor.createUboElements(d),f=this._generateUboSync(e.uboElements);c=this._syncFunctionHash[b]={layout:e,syncFunction:f}}return this._syncFunctionHash[b]}_generateUboSync(a){return this._adaptor.generateUboSync(a)}syncUniformGroup(a,b,e){let f=this.getUniformGroupData(a);a.buffer||(a.buffer=new c.f({data:new Float32Array(f.layout.size/4),usage:d.f.UNIFORM|d.f.COPY_DST}));let g=null;return b||(b=a.buffer.data,g=a.buffer.dataInt32),e||(e=0),f.syncFunction(a.uniforms,b,g,e),!0}updateUniformGroup(a){if(a.isStatic&&!a._dirtyId)return!1;a._dirtyId=0;let b=this.syncUniformGroup(a);return a.buffer.update(),b}destroy(){this._syncFunctionHash=null}}],55164);let e=[{type:"mat3x3<f32>",test:a=>void 0!==a.value.a,ubo:`
58
+ var matrix = uv[name].toArray(true);
59
+ data[offset] = matrix[0];
60
+ data[offset + 1] = matrix[1];
61
+ data[offset + 2] = matrix[2];
62
+ data[offset + 4] = matrix[3];
63
+ data[offset + 5] = matrix[4];
64
+ data[offset + 6] = matrix[5];
65
+ data[offset + 8] = matrix[6];
66
+ data[offset + 9] = matrix[7];
67
+ data[offset + 10] = matrix[8];
68
+ `,uniform:`
69
+ gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));
70
+ `},{type:"vec4<f32>",test:a=>"vec4<f32>"===a.type&&1===a.size&&void 0!==a.value.width,ubo:`
71
+ v = uv[name];
72
+ data[offset] = v.x;
73
+ data[offset + 1] = v.y;
74
+ data[offset + 2] = v.width;
75
+ data[offset + 3] = v.height;
76
+ `,uniform:`
77
+ cv = ud[name].value;
78
+ v = uv[name];
79
+ if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {
80
+ cv[0] = v.x;
81
+ cv[1] = v.y;
82
+ cv[2] = v.width;
83
+ cv[3] = v.height;
84
+ gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);
85
+ }
86
+ `},{type:"vec2<f32>",test:a=>"vec2<f32>"===a.type&&1===a.size&&void 0!==a.value.x,ubo:`
87
+ v = uv[name];
88
+ data[offset] = v.x;
89
+ data[offset + 1] = v.y;
90
+ `,uniform:`
91
+ cv = ud[name].value;
92
+ v = uv[name];
93
+ if (cv[0] !== v.x || cv[1] !== v.y) {
94
+ cv[0] = v.x;
95
+ cv[1] = v.y;
96
+ gl.uniform2f(ud[name].location, v.x, v.y);
97
+ }
98
+ `},{type:"vec4<f32>",test:a=>"vec4<f32>"===a.type&&1===a.size&&void 0!==a.value.red,ubo:`
99
+ v = uv[name];
100
+ data[offset] = v.red;
101
+ data[offset + 1] = v.green;
102
+ data[offset + 2] = v.blue;
103
+ data[offset + 3] = v.alpha;
104
+ `,uniform:`
105
+ cv = ud[name].value;
106
+ v = uv[name];
107
+ if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {
108
+ cv[0] = v.red;
109
+ cv[1] = v.green;
110
+ cv[2] = v.blue;
111
+ cv[3] = v.alpha;
112
+ gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);
113
+ }
114
+ `},{type:"vec3<f32>",test:a=>"vec3<f32>"===a.type&&1===a.size&&void 0!==a.value.red,ubo:`
115
+ v = uv[name];
116
+ data[offset] = v.red;
117
+ data[offset + 1] = v.green;
118
+ data[offset + 2] = v.blue;
119
+ `,uniform:`
120
+ cv = ud[name].value;
121
+ v = uv[name];
122
+ if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {
123
+ cv[0] = v.red;
124
+ cv[1] = v.green;
125
+ cv[2] = v.blue;
126
+ gl.uniform3f(ud[name].location, v.red, v.green, v.blue);
127
+ }
128
+ `}];function f(a,b){return`
129
+ for (let i = 0; i < ${a*b}; i++) {
130
+ data[offset + (((i / ${a})|0) * 4) + (i % ${a})] = v[i];
131
+ }
132
+ `}a.s(["f",0,e],51581),a.s(["f",0,function(a,b,c){let d=[`
133
+ var v = null;
134
+ var v2 = null;
135
+ var t = 0;
136
+ var index = 0;
137
+ var name = null;
138
+ var arrayOffset = null;
139
+ `],f=0;for(let g=0;g<a.length;g++){let h=a[g],i=h.data.name,j=!1,k=0;for(let a=0;a<e.length;a++)if(e[a].test(h.data)){k=h.offset/4,d.push(`name = "${i}";`,`offset += ${k-f};`,e[a].ubo),j=!0;break}if(!j)if(h.data.size>1)k=h.offset/4,d.push(c(h,k-f));else{let a=b[h.data.type];k=h.offset/4,d.push(`
140
+ v = uv.${i};
141
+ offset += ${k-f};
142
+ ${a};
143
+ `)}f=k}return Function("uv","data","dataInt32","offset",d.join("\n"))}],51169);let g={f32:`
144
+ data[offset] = v;`,i32:`
145
+ dataInt32[offset] = v;`,u32:`
146
+ dataInt32[offset] = v;`,"vec2<f32>":`
147
+ data[offset] = v[0];
148
+ data[offset + 1] = v[1];`,"vec3<f32>":`
149
+ data[offset] = v[0];
150
+ data[offset + 1] = v[1];
151
+ data[offset + 2] = v[2];`,"vec4<f32>":`
152
+ data[offset] = v[0];
153
+ data[offset + 1] = v[1];
154
+ data[offset + 2] = v[2];
155
+ data[offset + 3] = v[3];`,"vec2<i32>":`
156
+ dataInt32[offset] = v[0];
157
+ dataInt32[offset + 1] = v[1];`,"vec3<i32>":`
158
+ dataInt32[offset] = v[0];
159
+ dataInt32[offset + 1] = v[1];
160
+ dataInt32[offset + 2] = v[2];`,"vec4<i32>":`
161
+ dataInt32[offset] = v[0];
162
+ dataInt32[offset + 1] = v[1];
163
+ dataInt32[offset + 2] = v[2];
164
+ dataInt32[offset + 3] = v[3];`,"vec2<u32>":`
165
+ dataInt32[offset] = v[0];
166
+ dataInt32[offset + 1] = v[1];`,"vec3<u32>":`
167
+ dataInt32[offset] = v[0];
168
+ dataInt32[offset + 1] = v[1];
169
+ dataInt32[offset + 2] = v[2];`,"vec4<u32>":`
170
+ dataInt32[offset] = v[0];
171
+ dataInt32[offset + 1] = v[1];
172
+ dataInt32[offset + 2] = v[2];
173
+ dataInt32[offset + 3] = v[3];`,"mat2x2<f32>":`
174
+ data[offset] = v[0];
175
+ data[offset + 1] = v[1];
176
+ data[offset + 4] = v[2];
177
+ data[offset + 5] = v[3];`,"mat3x3<f32>":`
178
+ data[offset] = v[0];
179
+ data[offset + 1] = v[1];
180
+ data[offset + 2] = v[2];
181
+ data[offset + 4] = v[3];
182
+ data[offset + 5] = v[4];
183
+ data[offset + 6] = v[5];
184
+ data[offset + 8] = v[6];
185
+ data[offset + 9] = v[7];
186
+ data[offset + 10] = v[8];`,"mat4x4<f32>":`
187
+ for (let i = 0; i < 16; i++) {
188
+ data[offset + i] = v[i];
189
+ }`,"mat3x2<f32>":f(3,2),"mat4x2<f32>":f(4,2),"mat2x3<f32>":f(2,3),"mat4x3<f32>":f(4,3),"mat2x4<f32>":f(2,4),"mat3x4<f32>":f(3,4)},h={...g,"mat2x2<f32>":`
190
+ data[offset] = v[0];
191
+ data[offset + 1] = v[1];
192
+ data[offset + 2] = v[2];
193
+ data[offset + 3] = v[3];
194
+ `};a.s(["E",0,g,"c",0,h],37630);var i=a.i(61607),j=a.i(90423);class k extends i.f{constructor({buffer:a,offset:b,size:c}){super(),this.uid=(0,j.f)("buffer"),this._resourceType="bufferResource",this._resourceId=(0,j.f)("resource"),this._bufferResource=!0,this.destroyed=!1,this.buffer=a,this.offset=0|b,this.size=c,this.buffer.on("change",this.onBufferChange,this)}get _gcLastUsed(){return this.buffer?._gcLastUsed??-1}set _gcLastUsed(a){this.buffer&&(this.buffer._gcLastUsed=a)}onBufferChange(){this._resourceId=(0,j.f)("resource"),this.emit("change",this)}destroy(a=!1){this.destroyed=!0,a&&this.buffer.destroy(),this.emit("change",this),this.buffer=null,this.removeAllListeners()}}a.s(["f",0,k],10961)},54274,a=>{a.s(["f",0,function(a,b,c,d,e){if((a=Math.max(0,a))>=(b=Math.min(b,c*d)))return 0;let f=Math.floor(a/c),g=a-f*c,h=Math.floor(b/c),i=b-h*c;if(f===h)return e[0].set(g,f,i-g,1),1;let j=0,k=f;return g>0&&(e[j++].set(g,f,c-g,1),k++),h>k&&e[j++].set(0,k,c,h-k),i>0&&e[j++].set(0,h,i,1),j}])}]})();
195
+
196
+ //# sourceMappingURL=node_modules_pixi_js_lib_rendering_1fkio2phhfvow._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/pixi.js/src/rendering/high-shader/shader-bits/textureBit.ts","../../../../node_modules/pixi.js/src/rendering/high-shader/shader-bits/localUniformBit.ts","../../../../node_modules/pixi.js/src/rendering/renderers/gpu/state/GpuStencilModesToPixi.ts","../../../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/ensureAttributes.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/shader/utils/uniformParsers.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/shader/utils/uboSyncFunctions.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/shader/utils/compileBufferSync.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/buffer/BufferResource.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/shader/UboSystem.ts","../../../../node_modules/pixi.js/src/rendering/renderers/shared/texture/utils/getTexelRangeRects.ts"],"sourcesContent":["/** @internal */\nexport const textureBit = {\n name: 'texture-bit',\n vertex: {\n header: /* wgsl */`\n\n struct TextureUniforms {\n uTextureMatrix:mat3x3<f32>,\n }\n\n @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;\n `,\n main: /* wgsl */`\n uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* wgsl */`\n @group(2) @binding(0) var uTexture: texture_2d<f32>;\n @group(2) @binding(1) var uSampler: sampler;\n\n\n `,\n main: /* wgsl */`\n outColor = textureSample(uTexture, uSampler, vUV);\n `\n }\n};\n\n/** @internal */\nexport const textureBitGl = {\n name: 'texture-bit',\n vertex: {\n header: /* glsl */`\n uniform mat3 uTextureMatrix;\n `,\n main: /* glsl */`\n uv = (uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* glsl */`\n uniform sampler2D uTexture;\n\n\n `,\n main: /* glsl */`\n outColor = texture(uTexture, vUV);\n `\n }\n};\n\n","/** @internal */\nexport const localUniformBit = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* wgsl */`\n\n struct LocalUniforms {\n uTransformMatrix:mat3x3<f32>,\n uColor:vec4<f32>,\n uRound:f32,\n }\n\n @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;\n `,\n main: /* wgsl */`\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n `,\n end: /* wgsl */`\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n },\n};\n\n// TODO this works, but i think down the road it will be better to manage groups automatically if there are clashes\n/** @internal */\nexport const localUniformBitGroup2 = {\n ...localUniformBit,\n vertex: {\n ...localUniformBit.vertex,\n // replace the group!\n header: localUniformBit.vertex.header.replace('group(1)', 'group(2)'),\n }\n};\n\n/** @internal */\nexport const localUniformBitGl = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* glsl */`\n\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n `,\n main: /* glsl */`\n vColor *= uColor;\n modelMatrix = uTransformMatrix;\n `,\n end: /* glsl */`\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n },\n};\n","import { STENCIL_MODES } from '../../shared/state/const';\n\n/**\n * The stencil state for the GPU renderer.\n * This is used to define how the stencil buffer should be configured.\n * @category rendering\n * @advanced\n */\nexport interface StencilState\n{\n stencilWriteMask?: number\n stencilReadMask?: number;\n stencilFront?: {\n compare: 'always' | 'equal' | 'not-equal';\n passOp: 'increment-clamp' | 'decrement-clamp' | 'keep' | 'replace';\n },\n stencilBack?: {\n compare: 'always' | 'equal' | 'not-equal';\n passOp: 'increment-clamp' | 'decrement-clamp' | 'keep' | 'replace';\n }\n}\n\n/** @internal */\nexport const GpuStencilModesToPixi: StencilState[] = [];\n\nGpuStencilModesToPixi[STENCIL_MODES.NONE] = undefined;\n\nGpuStencilModesToPixi[STENCIL_MODES.DISABLED] = {\n stencilWriteMask: 0,\n stencilReadMask: 0,\n};\n\nGpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_ADD] = {\n stencilFront: {\n compare: 'equal',\n passOp: 'increment-clamp',\n },\n stencilBack: {\n compare: 'equal',\n passOp: 'increment-clamp',\n },\n};\n\nGpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_REMOVE] = {\n stencilFront: {\n compare: 'equal',\n passOp: 'decrement-clamp',\n },\n stencilBack: {\n compare: 'equal',\n passOp: 'decrement-clamp',\n },\n};\n\nGpuStencilModesToPixi[STENCIL_MODES.MASK_ACTIVE] = {\n stencilWriteMask: 0,\n stencilFront: {\n compare: 'equal',\n passOp: 'keep',\n },\n stencilBack: {\n compare: 'equal',\n passOp: 'keep',\n },\n};\n\nGpuStencilModesToPixi[STENCIL_MODES.INVERSE_MASK_ACTIVE] = {\n stencilWriteMask: 0,\n stencilFront: {\n compare: 'not-equal',\n passOp: 'keep',\n },\n stencilBack: {\n compare: 'not-equal',\n passOp: 'keep',\n },\n};\n","import { warn } from '../../../../../utils/logging/warn';\nimport { getAttributeInfoFromFormat } from '../../../shared/geometry/utils/getAttributeInfoFromFormat';\n\nimport type { Geometry } from '../../../shared/geometry/Geometry';\nimport type { ExtractedAttributeData } from './extractAttributesFromGlProgram';\n\n/**\n * This function looks at the attribute information provided to the geometry and attempts\n * to fill in any gaps. We do this by looking at the extracted data from the shader and\n * making best guesses.\n *\n * Most of the time users don't need to provide all the attribute info beyond the data itself, so we\n * can fill in the gaps for them. If you are using attributes in a more advanced way,\n * don't forget to add all the info at creation!\n * @param geometry - the geometry to ensure attributes for\n * @param extractedData - the extracted data from the shader\n * @internal\n */\nexport function ensureAttributes(\n geometry: Geometry,\n extractedData: Record<string, ExtractedAttributeData>\n): void\n{\n for (const i in geometry.attributes)\n {\n const attribute = geometry.attributes[i];\n const attributeData = extractedData[i];\n\n if (attributeData)\n {\n attribute.format ??= attributeData.format;\n attribute.offset ??= attributeData.offset;\n attribute.instance ??= attributeData.instance;\n }\n else if (!attribute.format)\n {\n // eslint-disable-next-line max-len\n warn(`Attribute ${i} is not present in the shader, but is present in the geometry. Unable to infer attribute details.`);\n }\n }\n\n ensureStartAndStride(geometry);\n}\n\nfunction ensureStartAndStride(geometry: Geometry): void\n{\n const { buffers, attributes } = geometry;\n\n const tempStride: Record<string, number> = {};\n const tempStart: Record<string, number> = {};\n\n for (const j in buffers)\n {\n const buffer = buffers[j];\n\n tempStride[buffer.uid] = 0;\n tempStart[buffer.uid] = 0;\n }\n\n for (const j in attributes)\n {\n const attribute = attributes[j];\n\n tempStride[attribute.buffer.uid] += getAttributeInfoFromFormat(attribute.format).stride;\n }\n\n for (const j in attributes)\n {\n const attribute = attributes[j];\n\n attribute.stride ??= tempStride[attribute.buffer.uid];\n\n attribute.start ??= tempStart[attribute.buffer.uid];\n\n tempStart[attribute.buffer.uid] += getAttributeInfoFromFormat(attribute.format).stride;\n }\n}\n","// Parsers, each one of these will take a look at the type of shader property and uniform.\n// if they pass the test function then the code function is called that returns a the shader upload code for that uniform.\n// Shader upload code is automagically generated with these parsers.\n// If no parser is valid then the default upload functions are used.\n// exposing Parsers means that custom upload logic can be added to pixi's shaders.\n// A good example would be a pixi rectangle can be directly set on a uniform.\n// If the shader sees it it knows how to upload the rectangle structure as a vec4\n// format is as follows:\n//\n// {\n// test: (data, uniform) => {} <--- test is this code should be used for this uniform\n// code: (name, uniform) => {} <--- returns the string of the piece of code that uploads the uniform\n// codeUbo: (name, uniform) => {} <--- returns the string of the piece of code that uploads the\n// uniform to a uniform buffer\n// }\n// import { Texture } from '../../texture/Texture';\n\nimport type { Color } from '../../../../../color/Color';\nimport type { Matrix } from '../../../../../maths/matrix/Matrix';\nimport type { PointLike } from '../../../../../maths/point/PointLike';\nimport type { Rectangle } from '../../../../../maths/shapes/Rectangle';\nimport type { UNIFORM_TYPES, UniformData } from '../types';\n\ninterface UniformParserDefinition\n{\n type: UNIFORM_TYPES;\n test(data: UniformData): boolean;\n ubo?: string;\n uniform?: string;\n}\n\n/** @internal */\nexport const uniformParsers: UniformParserDefinition[] = [\n // uploading pixi matrix object to mat3\n {\n type: 'mat3x3<f32>',\n test: (data: UniformData): boolean =>\n {\n const value = data.value as Matrix;\n\n return value.a !== undefined;\n },\n ubo: `\n var matrix = uv[name].toArray(true);\n data[offset] = matrix[0];\n data[offset + 1] = matrix[1];\n data[offset + 2] = matrix[2];\n data[offset + 4] = matrix[3];\n data[offset + 5] = matrix[4];\n data[offset + 6] = matrix[5];\n data[offset + 8] = matrix[6];\n data[offset + 9] = matrix[7];\n data[offset + 10] = matrix[8];\n `,\n uniform: `\n gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));\n `\n },\n // uploading a pixi rectangle as a vec4\n {\n type: 'vec4<f32>',\n test: (data: UniformData): boolean =>\n data.type === 'vec4<f32>' && data.size === 1 && (data.value as Rectangle).width !== undefined,\n ubo: `\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n data[offset + 2] = v.width;\n data[offset + 3] = v.height;\n `,\n uniform: `\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);\n }\n `\n },\n // uploading a pixi point as a vec2\n {\n type: 'vec2<f32>',\n test: (data: UniformData): boolean =>\n data.type === 'vec2<f32>' && data.size === 1 && (data.value as PointLike).x !== undefined,\n ubo: `\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n `,\n uniform: `\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y) {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud[name].location, v.x, v.y);\n }\n `\n },\n // uploading a pixi color as a vec4\n {\n type: 'vec4<f32>',\n test: (data: UniformData): boolean =>\n data.type === 'vec4<f32>' && data.size === 1 && (data.value as Color).red !== undefined,\n ubo: `\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n data[offset + 3] = v.alpha;\n `,\n uniform: `\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);\n }\n `\n },\n // uploading a pixi color as a vec3\n {\n type: 'vec3<f32>',\n test: (data: UniformData): boolean =>\n data.type === 'vec3<f32>' && data.size === 1 && (data.value as Color).red !== undefined,\n ubo: `\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n `,\n uniform: `\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n gl.uniform3f(ud[name].location, v.red, v.green, v.blue);\n }\n `\n },\n];\n","import type { UNIFORM_TYPES_SINGLE } from '../types';\n\nfunction loopMatrix(col: number, row: number)\n{\n const total = col * row;\n\n return `\n for (let i = 0; i < ${total}; i++) {\n data[offset + (((i / ${col})|0) * 4) + (i % ${col})] = v[i];\n }\n `;\n}\n\n/** @internal */\nexport const uboSyncFunctionsSTD40: Record<UNIFORM_TYPES_SINGLE, string> = {\n f32: `\n data[offset] = v;`,\n i32: `\n dataInt32[offset] = v;`,\n u32: `\n dataInt32[offset] = v;`,\n 'vec2<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];`,\n 'vec3<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];`,\n 'vec4<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 3] = v[3];`,\n 'vec2<i32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];`,\n 'vec3<i32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];`,\n 'vec4<i32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];\n dataInt32[offset + 3] = v[3];`,\n 'vec2<u32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];`,\n 'vec3<u32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];`,\n 'vec4<u32>': `\n dataInt32[offset] = v[0];\n dataInt32[offset + 1] = v[1];\n dataInt32[offset + 2] = v[2];\n dataInt32[offset + 3] = v[3];`,\n 'mat2x2<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 4] = v[2];\n data[offset + 5] = v[3];`,\n 'mat3x3<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 4] = v[3];\n data[offset + 5] = v[4];\n data[offset + 6] = v[5];\n data[offset + 8] = v[6];\n data[offset + 9] = v[7];\n data[offset + 10] = v[8];`,\n 'mat4x4<f32>': `\n for (let i = 0; i < 16; i++) {\n data[offset + i] = v[i];\n }`,\n 'mat3x2<f32>': loopMatrix(3, 2),\n 'mat4x2<f32>': loopMatrix(4, 2),\n 'mat2x3<f32>': loopMatrix(2, 3),\n 'mat4x3<f32>': loopMatrix(4, 3),\n 'mat2x4<f32>': loopMatrix(2, 4),\n 'mat3x4<f32>': loopMatrix(3, 4),\n};\n\n/** @internal */\nexport const uboSyncFunctionsWGSL: Record<UNIFORM_TYPES_SINGLE, string> = {\n ...uboSyncFunctionsSTD40,\n 'mat2x2<f32>': `\n data[offset] = v[0];\n data[offset + 1] = v[1];\n data[offset + 2] = v[2];\n data[offset + 3] = v[3];\n `,\n};\n","import { uniformParsers } from './uniformParsers';\n\nimport type { UboElement, UNIFORM_TYPES_SINGLE, UniformsSyncCallback } from '../types';\n\n/**\n * Compiles a JIT sync function that walks a layout (`UboElement[]`) and writes the\n * matching values from a `uniforms` bag into a Float32Array / Int32Array buffer view\n * at a runtime-supplied offset.\n *\n * The compiled function takes `(uniforms, data, dataInt32, offset)` — note that `offset`\n * is a function argument, *not* a closure capture, so the same compiled function can be\n * reused across many slots in a shared buffer by supplying a different `offset` per call.\n *\n * Per-dialect variation lives in the inputs:\n * - `uboElements` come from the appropriate layout helper (`createUboElementsWGSL`,\n * `createUboElementsSTD40`) and encode the dialect's alignment / padding rules in\n * their offsets.\n * - `singleSettersMap` selects per-type writers (`uboSyncFunctionsWGSL` /\n * `uboSyncFunctionsSTD40`); only `mat2x2<f32>` differs between WGSL and STD40 today.\n * - `arrayGenerationFunction` selects per-dialect array stride emission.\n * @param uboElements - element layout (offsets in bytes) for each uniform in the schema\n * @param singleSettersMap - per-type write code strings keyed by uniform type\n * @param arrayGenerationFunction - emits write code for `size > 1` array uniforms\n * @internal\n */\nexport function compileBufferSync(\n uboElements: UboElement[],\n singleSettersMap: Record<UNIFORM_TYPES_SINGLE, string>,\n arrayGenerationFunction: (uboElement: UboElement, offsetToAdd: number) => string,\n): UniformsSyncCallback\n{\n const funcFragments = [`\n var v = null;\n var v2 = null;\n var t = 0;\n var index = 0;\n var name = null;\n var arrayOffset = null;\n `];\n\n let prev = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n const name = uboElement.data.name;\n\n let parsed = false;\n let offset = 0;\n\n for (let j = 0; j < uniformParsers.length; j++)\n {\n const uniformParser = uniformParsers[j];\n\n if (uniformParser.test(uboElement.data))\n {\n offset = uboElement.offset / 4;\n\n funcFragments.push(\n `name = \"${name}\";`,\n `offset += ${offset - prev};`,\n uniformParsers[j].ubo);\n parsed = true;\n\n break;\n }\n }\n\n if (!parsed)\n {\n if (uboElement.data.size > 1)\n {\n offset = uboElement.offset / 4;\n\n funcFragments.push(arrayGenerationFunction(uboElement, offset - prev));\n }\n else\n {\n const template = singleSettersMap[uboElement.data.type as UNIFORM_TYPES_SINGLE];\n\n offset = uboElement.offset / 4;\n\n funcFragments.push(/* wgsl */`\n v = uv.${name};\n offset += ${offset - prev};\n ${template};\n `);\n }\n }\n\n prev = offset;\n }\n\n const fragmentSrc = funcFragments.join('\\n');\n\n // eslint-disable-next-line no-new-func\n return new Function(\n 'uv',\n 'data',\n 'dataInt32',\n 'offset',\n fragmentSrc,\n ) as UniformsSyncCallback;\n}\n","import EventEmitter from 'eventemitter3';\nimport { uid } from '../../../../utils/data/uid';\n\nimport type { BindResource } from '../../gpu/shader/BindResource';\nimport type { Buffer } from './Buffer';\n\n/**\n * A resource that can be bound to a bind group and used in a shader.\n * Whilst a buffer can be used as a resource, this class allows you to specify an offset and size of the buffer to use.\n * This is useful if you have a large buffer and only part of it is used in a shader.\n *\n * This resource, will listen for changes on the underlying buffer and emit a itself if the buffer changes shape.\n * @example\n *\n * const buffer = new Buffer({\n * data: new Float32Array(1000),\n * usage: BufferUsage.UNIFORM,\n * });\n * // Create a buffer resource that uses the first 100 bytes of a buffer\n * const bufferResource = new BufferResource({\n * buffer,\n * offset: 0,\n * size: 100,\n * });\n * @category rendering\n * @advanced\n */\nexport class BufferResource extends EventEmitter<{\n change: BindResource,\n}> implements BindResource\n{\n /**\n * emits when the underlying buffer has changed shape (i.e. resized)\n * letting the renderer know that it needs to discard the old buffer on the GPU and create a new one\n * @event change\n */\n\n /** a unique id for this uniform group used through the renderer */\n public readonly uid: number = uid('buffer');\n\n /**\n * a resource type, used to identify how to handle it when its in a bind group / shader resource\n * @internal\n */\n public readonly _resourceType = 'bufferResource';\n\n /**\n * the resource id used internally by the renderer to build bind group keys\n * @internal\n */\n public _resourceId = uid('resource');\n\n /** the underlying buffer that this resource is using */\n public buffer: Buffer;\n /** the offset of the buffer this resource is using. If not provided, then it will use the offset of the buffer. */\n public readonly offset: number;\n /** the size of the buffer this resource is using. If not provided, then it will use the size of the buffer. */\n public readonly size: number;\n /**\n * A cheeky hint to the GL renderer to let it know this is a BufferResource\n * @internal\n */\n public readonly _bufferResource = true;\n\n /**\n * Has the Buffer resource been destroyed?\n * @readonly\n */\n public destroyed = false;\n\n /**\n * Create a new Buffer Resource.\n * @param options - The options for the buffer resource\n * @param options.buffer - The underlying buffer that this resource is using\n * @param options.offset - The offset of the buffer this resource is using.\n * If not provided, then it will use the offset of the buffer.\n * @param options.size - The size of the buffer this resource is using.\n * If not provided, then it will use the size of the buffer.\n */\n constructor({ buffer, offset, size }: { buffer: Buffer; offset?: number; size?: number; })\n {\n super();\n\n this.buffer = buffer;\n this.offset = offset | 0;\n this.size = size;\n\n this.buffer.on('change', this.onBufferChange, this);\n }\n\n /**\n * The GC tracks the underlying buffer, not this resource — a GC stamp here (see\n * BindGroup._touch) must land on the buffer, or the GC collects it while cached\n * bind groups still reference it.\n * @internal\n */\n get _gcLastUsed(): number\n {\n return this.buffer?._gcLastUsed ?? -1;\n }\n\n set _gcLastUsed(value: number)\n {\n if (this.buffer) this.buffer._gcLastUsed = value;\n }\n\n protected onBufferChange(): void\n {\n this._resourceId = uid('resource');\n\n this.emit('change', this);\n }\n\n /**\n * Destroys this resource. Make sure the underlying buffer is not used anywhere else\n * if you want to destroy it as well, or code will explode\n * @param destroyBuffer - Should the underlying buffer be destroyed as well?\n */\n public destroy(destroyBuffer = false): void\n {\n this.destroyed = true;\n\n if (destroyBuffer)\n {\n this.buffer.destroy();\n }\n\n this.emit('change', this);\n\n this.buffer = null;\n this.removeAllListeners();\n }\n}\n","import { unsafeEvalSupported } from '../../../../utils/browser/unsafeEvalSupported';\nimport { Buffer } from '../buffer/Buffer';\nimport { BufferUsage } from '../buffer/const';\n\nimport type { System } from '../system/System';\nimport type { UboElement, UboLayout, UniformData, UniformsSyncCallback } from './types';\nimport type { UniformGroup } from './UniformGroup';\n\n/** @internal */\nexport interface UboAdaptor\n{\n createUboElements: (uniformData: UniformData[]) => UboLayout;\n generateUboSync: (uboElements: UboElement[]) => UniformsSyncCallback;\n}\n\n/**\n * System plugin to the renderer to manage uniform buffers.\n * @category rendering\n * @advanced\n */\nexport class UboSystem implements System\n{\n /** Cache of uniform buffer layouts and sync functions, so we don't have to re-create them */\n private _syncFunctionHash: Record<string, {\n layout: UboLayout,\n syncFunction: (uniforms: Record<string, any>, data: Float32Array, dataInt32: Int32Array, offset: number) => void\n }> = Object.create(null);\n\n private readonly _adaptor: UboAdaptor;\n\n constructor(adaptor: UboAdaptor)\n {\n this._adaptor = adaptor;\n\n // Validation check that this environment support `new Function`\n this._systemCheck();\n }\n\n /**\n * Overridable function by `pixi.js/unsafe-eval` to silence\n * throwing an error if platform doesn't support unsafe-evals.\n * @private\n */\n private _systemCheck(): void\n {\n if (!unsafeEvalSupported())\n {\n throw new Error('Current environment does not allow unsafe-eval, '\n + 'please use pixi.js/unsafe-eval module to enable support.');\n }\n }\n\n public ensureUniformGroup(uniformGroup: UniformGroup): void\n {\n const uniformData = this.getUniformGroupData(uniformGroup);\n\n uniformGroup.buffer ||= new Buffer({\n data: new Float32Array(uniformData.layout.size / 4),\n usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST,\n });\n }\n\n public getUniformGroupData(uniformGroup: UniformGroup)\n {\n return this._syncFunctionHash[uniformGroup._signature] || this._initUniformGroup(uniformGroup);\n }\n\n private _initUniformGroup(uniformGroup: UniformGroup)\n {\n const uniformGroupSignature = uniformGroup._signature;\n\n let uniformData = this._syncFunctionHash[uniformGroupSignature];\n\n if (!uniformData)\n {\n const elements = Object.keys(uniformGroup.uniformStructures).map((i) => uniformGroup.uniformStructures[i]);\n\n const layout = this._adaptor.createUboElements(elements);\n\n const syncFunction = this._generateUboSync(layout.uboElements);\n\n uniformData = this._syncFunctionHash[uniformGroupSignature] = {\n layout,\n syncFunction\n };\n }\n\n return this._syncFunctionHash[uniformGroupSignature];\n }\n\n private _generateUboSync(\n uboElements: UboElement[],\n ): UniformsSyncCallback\n {\n return this._adaptor.generateUboSync(uboElements);\n }\n\n public syncUniformGroup(uniformGroup: UniformGroup, data?: Float32Array, offset?: number): boolean\n {\n const uniformGroupData = this.getUniformGroupData(uniformGroup);\n\n uniformGroup.buffer ||= new Buffer({\n data: new Float32Array(uniformGroupData.layout.size / 4),\n usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST,\n });\n\n let dataInt32: Int32Array = null;\n\n if (!data)\n {\n data = uniformGroup.buffer.data as Float32Array;\n dataInt32 = uniformGroup.buffer.dataInt32;\n }\n offset ||= 0;\n\n uniformGroupData.syncFunction(uniformGroup.uniforms, data, dataInt32, offset);\n\n return true;\n }\n\n public updateUniformGroup(uniformGroup: UniformGroup): boolean\n {\n if (uniformGroup.isStatic && !uniformGroup._dirtyId) return false;\n uniformGroup._dirtyId = 0;\n\n const synced = this.syncUniformGroup(uniformGroup);\n\n uniformGroup.buffer.update();\n\n return synced;\n }\n\n public destroy(): void\n {\n this._syncFunctionHash = null;\n }\n}\n","import type { Rectangle } from '../../../../../maths/shapes/Rectangle';\n\n/**\n * Splits a linear texel range of a row-major texture into at most three rectangles: the partial\n * first row, the whole rows in between, and the partial last row. Each rectangle is contiguous in\n * the source data, so the uploader copies it straight from the flat array without row-length\n * unpack state. That keeps the split valid on WebGL1, WebGL2 and WebGPU.\n *\n * The function clamps the range to the texture, so `end = Infinity` runs to the last texel.\n * @param start - index of the first texel in the range\n * @param end - index one past the last texel in the range (exclusive, like `TypedArray.subarray`)\n * @param width - texture width in texels\n * @param height - texture height in texels\n * @param out - at least three rectangles to write into\n * @returns the number of rectangles written to `out` (0 to 3)\n * @internal\n */\nexport function getTexelRangeRects(start: number, end: number, width: number, height: number, out: Rectangle[]): number\n{\n start = Math.max(0, start);\n end = Math.min(end, width * height);\n\n if (start >= end) return 0;\n\n const firstRow = Math.floor(start / width);\n const firstX = start - (firstRow * width);\n // end is exclusive, so lastRow holds lastX texels of the range\n const lastRow = Math.floor(end / width);\n const lastX = end - (lastRow * width);\n\n if (firstRow === lastRow)\n {\n out[0].set(firstX, firstRow, lastX - firstX, 1);\n\n return 1;\n }\n\n let count = 0;\n let firstFullRow = firstRow;\n\n if (firstX > 0)\n {\n out[count++].set(firstX, firstRow, width - firstX, 1);\n firstFullRow++;\n }\n\n if (lastRow > firstFullRow)\n {\n out[count++].set(0, firstFullRow, width, lastRow - firstFullRow);\n }\n\n if (lastX > 0)\n {\n out[count++].set(0, lastRow, lastX, 1);\n }\n\n return count;\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,8]}