@codexo/exojs 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +14 -14
  3. package/dist/esm/core/Application.d.ts +25 -6
  4. package/dist/esm/core/Application.js +42 -8
  5. package/dist/esm/core/Application.js.map +1 -1
  6. package/dist/esm/core/Perf.d.ts +23 -0
  7. package/dist/esm/core/Perf.js +49 -0
  8. package/dist/esm/core/Perf.js.map +1 -0
  9. package/dist/esm/core/Scene.d.ts +8 -8
  10. package/dist/esm/core/Scene.js +7 -7
  11. package/dist/esm/core/Scene.js.map +1 -1
  12. package/dist/esm/core/SceneManager.js +2 -2
  13. package/dist/esm/core/SceneManager.js.map +1 -1
  14. package/dist/esm/core/SceneNode.d.ts +0 -3
  15. package/dist/esm/core/SceneNode.js +0 -9
  16. package/dist/esm/core/SceneNode.js.map +1 -1
  17. package/dist/esm/core/capabilities.d.ts +2 -0
  18. package/dist/esm/core/capabilities.js +15 -0
  19. package/dist/esm/core/capabilities.js.map +1 -1
  20. package/dist/esm/core/dev.d.ts +21 -0
  21. package/dist/esm/core/dev.js +18 -0
  22. package/dist/esm/core/dev.js.map +1 -0
  23. package/dist/esm/core/index.d.ts +1 -0
  24. package/dist/esm/core/types.d.ts +1 -1
  25. package/dist/esm/core/utils.d.ts +12 -0
  26. package/dist/esm/core/utils.js +18 -1
  27. package/dist/esm/core/utils.js.map +1 -1
  28. package/dist/esm/index.js +14 -3
  29. package/dist/esm/index.js.map +1 -1
  30. package/dist/esm/particles/ParticleSystem.d.ts +8 -5
  31. package/dist/esm/particles/ParticleSystem.js +9 -5
  32. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  33. package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
  34. package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
  35. package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
  36. package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
  37. package/dist/esm/particles/distributions/index.d.ts +2 -2
  38. package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
  39. package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +2 -2
  40. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +5 -1
  41. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
  42. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
  43. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  44. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
  45. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  46. package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
  47. package/dist/esm/particles/modules/UpdateModule.js +1 -1
  48. package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
  49. package/dist/esm/rendering/Camera.d.ts +33 -0
  50. package/dist/esm/rendering/Camera.js +38 -0
  51. package/dist/esm/rendering/Camera.js.map +1 -0
  52. package/dist/esm/rendering/Container.d.ts +5 -24
  53. package/dist/esm/rendering/Container.js +8 -71
  54. package/dist/esm/rendering/Container.js.map +1 -1
  55. package/dist/esm/rendering/Drawable.d.ts +8 -10
  56. package/dist/esm/rendering/Drawable.js +12 -20
  57. package/dist/esm/rendering/Drawable.js.map +1 -1
  58. package/dist/esm/rendering/RenderBackend.d.ts +18 -0
  59. package/dist/esm/rendering/RenderNode.d.ts +81 -8
  60. package/dist/esm/rendering/RenderNode.js +121 -144
  61. package/dist/esm/rendering/RenderNode.js.map +1 -1
  62. package/dist/esm/rendering/RenderTarget.d.ts +13 -0
  63. package/dist/esm/rendering/RenderTarget.js +13 -0
  64. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  65. package/dist/esm/rendering/RenderTargetPass.js +17 -0
  66. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  67. package/dist/esm/rendering/RenderingContext.d.ts +87 -0
  68. package/dist/esm/rendering/RenderingContext.js +157 -0
  69. package/dist/esm/rendering/RenderingContext.js.map +1 -0
  70. package/dist/esm/rendering/TransformBuffer.d.ts +82 -0
  71. package/dist/esm/rendering/TransformBuffer.js +180 -0
  72. package/dist/esm/rendering/TransformBuffer.js.map +1 -0
  73. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
  74. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  75. package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
  76. package/dist/esm/rendering/geometry/Geometry.js +228 -0
  77. package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
  78. package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
  79. package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
  80. package/dist/esm/rendering/gradient/Gradient.d.ts +67 -0
  81. package/dist/esm/rendering/gradient/Gradient.js +160 -0
  82. package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
  83. package/dist/esm/rendering/gradient/LinearGradient.d.ts +18 -0
  84. package/dist/esm/rendering/gradient/LinearGradient.js +49 -0
  85. package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
  86. package/dist/esm/rendering/gradient/RadialGradient.d.ts +18 -0
  87. package/dist/esm/rendering/gradient/RadialGradient.js +44 -0
  88. package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
  89. package/dist/esm/rendering/index.d.ts +16 -2
  90. package/dist/esm/rendering/material/Material.d.ts +114 -0
  91. package/dist/esm/rendering/material/Material.js +111 -0
  92. package/dist/esm/rendering/material/Material.js.map +1 -0
  93. package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
  94. package/dist/esm/rendering/material/MaterialKey.js +82 -0
  95. package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
  96. package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
  97. package/dist/esm/rendering/material/MeshMaterial.js +21 -0
  98. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
  99. package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +29 -62
  100. package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -62
  101. package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
  102. package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
  103. package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
  104. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
  105. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
  106. package/dist/esm/rendering/mesh/Mesh.js +122 -3
  107. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  108. package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
  109. package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
  110. package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
  111. package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
  112. package/dist/esm/rendering/plan/RenderCommand.d.ts +86 -0
  113. package/dist/esm/rendering/plan/RenderCommand.js +127 -0
  114. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
  115. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
  116. package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
  117. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
  118. package/dist/esm/rendering/plan/RenderInstruction.d.ts +51 -0
  119. package/dist/esm/rendering/plan/RenderInstruction.js +45 -0
  120. package/dist/esm/rendering/plan/RenderInstruction.js.map +1 -0
  121. package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
  122. package/dist/esm/rendering/plan/RenderPlan.js +12 -0
  123. package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
  124. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
  125. package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
  126. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
  127. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
  128. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
  129. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
  130. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +13 -0
  131. package/dist/esm/rendering/plan/RenderPlanPlayer.js +107 -0
  132. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
  133. package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
  134. package/dist/esm/rendering/plan/RenderScope.js +16 -0
  135. package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
  136. package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
  137. package/dist/esm/rendering/plan/playRenderTree.js +19 -0
  138. package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
  139. package/dist/esm/rendering/primitives/Graphics.d.ts +70 -5
  140. package/dist/esm/rendering/primitives/Graphics.js +172 -14
  141. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  142. package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
  143. package/dist/esm/rendering/sprite/Sprite.js +33 -2
  144. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  145. package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +41 -0
  146. package/dist/esm/rendering/sprite/spriteMaterialSources.js +149 -0
  147. package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
  148. package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
  149. package/dist/esm/rendering/text/BitmapText.js +8 -1
  150. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  151. package/dist/esm/rendering/text/BmFont.js +3 -0
  152. package/dist/esm/rendering/text/BmFont.js.map +1 -1
  153. package/dist/esm/rendering/text/GlyphSdf.d.ts +14 -0
  154. package/dist/esm/rendering/text/GlyphSdf.js +41 -11
  155. package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
  156. package/dist/esm/rendering/text/TextStyle.d.ts +6 -1
  157. package/dist/esm/rendering/text/TextStyle.js +1 -1
  158. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  159. package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
  160. package/dist/esm/rendering/texture/DataTexture.js +7 -0
  161. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  162. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
  163. package/dist/esm/rendering/video/Video.d.ts +3 -7
  164. package/dist/esm/rendering/video/Video.js +3 -8
  165. package/dist/esm/rendering/video/Video.js.map +1 -1
  166. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +62 -0
  167. package/dist/esm/rendering/webgl2/WebGl2Backend.js +352 -21
  168. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  169. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
  170. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
  171. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  172. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +8 -0
  173. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +8 -0
  174. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
  175. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
  176. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
  177. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
  178. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +14 -0
  179. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +257 -78
  180. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  181. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
  182. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
  183. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
  184. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +7 -0
  185. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +11 -0
  186. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  187. package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
  188. package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
  189. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +1 -1
  190. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
  191. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
  192. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
  193. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
  194. package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +1 -1
  195. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +63 -0
  196. package/dist/esm/rendering/webgpu/WebGpuBackend.js +180 -19
  197. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  198. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
  199. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  200. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +24 -0
  201. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +524 -98
  202. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  203. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +7 -0
  204. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +24 -22
  205. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  206. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
  207. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
  208. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
  209. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +25 -1
  210. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +430 -76
  211. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  212. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
  213. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
  214. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
  215. package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
  216. package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
  217. package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
  218. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +7 -0
  219. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +30 -19
  220. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  221. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +48 -0
  222. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +103 -0
  223. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
  224. package/dist/esm/resources/JsonStore.d.ts +18 -0
  225. package/dist/esm/resources/JsonStore.js +62 -0
  226. package/dist/esm/resources/JsonStore.js.map +1 -0
  227. package/dist/esm/resources/Loader.js +1 -1
  228. package/dist/esm/resources/Loader.js.map +1 -1
  229. package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
  230. package/dist/esm/resources/factories/ImageFactory.js +13 -6
  231. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  232. package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
  233. package/dist/esm/resources/factories/TextureFactory.js +8 -4
  234. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  235. package/dist/esm/resources/index.d.ts +1 -0
  236. package/dist/exo.esm.js +6326 -2350
  237. package/dist/exo.esm.js.map +1 -1
  238. package/package.json +34 -24
  239. package/dist/esm/particles/distributions/Gradient.js.map +0 -1
  240. package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
  241. package/dist/esm/vendor/webgl-debug.js +0 -1160
  242. package/dist/esm/vendor/webgl-debug.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Geometric clip kind for a {@link RenderNode}'s `clip`/`clipShape`. Distinct
3
+ * from `maskSource` (alpha/visibility masking): `Rect` uses the GPU scissor
4
+ * fast path, `Stencil` writes a {@link Geometry} silhouette into the stencil
5
+ * buffer. `maskSource` continues to drive the separate alpha-mask machinery.
6
+ * @internal
7
+ */
8
+ var ClipKind;
9
+ (function (ClipKind) {
10
+ ClipKind[ClipKind["None"] = 0] = "None";
11
+ ClipKind[ClipKind["Rect"] = 1] = "Rect";
12
+ ClipKind[ClipKind["Stencil"] = 2] = "Stencil";
13
+ })(ClipKind || (ClipKind = {}));
14
+
15
+ export { ClipKind };
16
+ //# sourceMappingURL=RenderScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderScope.js","sources":["../../../../../src/rendering/plan/RenderScope.ts"],"sourcesContent":[null],"names":[],"mappings":"AAQA;;;;;;AAMG;IACe;AAAlB,CAAA,UAAkB,QAAQ,EAAA;AACxB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAJiB,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;;;"}
@@ -0,0 +1,4 @@
1
+ import type { RenderBackend } from '@/rendering/RenderBackend';
2
+ import type { RenderNode } from '@/rendering/RenderNode';
3
+ /** @internal — single source of truth for plan build→optimize→play. */
4
+ export declare function playRenderTree(node: RenderNode, backend: RenderBackend): void;
@@ -0,0 +1,19 @@
1
+ import { RenderPlanBuilder } from './RenderPlanBuilder.js';
2
+ import { RenderPlanOptimizer } from './RenderPlanOptimizer.js';
3
+ import { RenderPlanPlayer } from './RenderPlanPlayer.js';
4
+
5
+ /** @internal — single source of truth for plan build→optimize→play. */
6
+ function playRenderTree(node, backend) {
7
+ const builder = RenderPlanBuilder.acquire();
8
+ try {
9
+ const plan = builder.build(node, backend);
10
+ RenderPlanOptimizer.optimize(plan);
11
+ RenderPlanPlayer.play(plan, backend);
12
+ }
13
+ finally {
14
+ RenderPlanBuilder.release(builder);
15
+ }
16
+ }
17
+
18
+ export { playRenderTree };
19
+ //# sourceMappingURL=playRenderTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playRenderTree.js","sources":["../../../../../src/rendering/plan/playRenderTree.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOA;AACM,SAAU,cAAc,CAAC,IAAgB,EAAE,OAAsB,EAAA;AACrE,IAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE;AAE3C,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;AAEzC,QAAA,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClC,QAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;IACtC;YAAU;AACR,QAAA,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC;AACF;;;;"}
@@ -1,32 +1,79 @@
1
1
  import { Color } from '@/core/Color';
2
2
  import { Vector } from '@/math/Vector';
3
3
  import { Container } from '@/rendering/Container';
4
+ import type { Gradient } from '@/rendering/gradient/Gradient';
4
5
  import { Mesh } from '@/rendering/mesh/Mesh';
5
6
  import type { RenderNode } from '@/rendering/RenderNode';
6
7
  /**
7
8
  * Immediate-mode 2D shape API backed by {@link Mesh} children.
8
9
  *
9
10
  * Each draw call (e.g. `drawCircle`, `drawRectangle`, `drawLine`) appends a
10
- * new {@link Mesh} child colored with the current `fillColor` or `lineColor`.
11
+ * new {@link Mesh} child painted with the active fill or stroke style. A style
12
+ * is either a solid {@link Color} or a {@link Gradient}, assigned through
13
+ * {@link fillStyle} / {@link strokeStyle}. The {@link fillColor} /
14
+ * {@link lineColor} accessors are color-only conveniences over those styles.
11
15
  * The active `lineWidth` controls stroke thickness for path and outline draws.
12
16
  * Path commands (`moveTo`, `lineTo`, `quadraticCurveTo`, etc.) track a cursor
13
17
  * point and flush a Mesh on each segment.
14
18
  *
19
+ * Gradient styles are rasterized once to a {@link DataTexture} via
20
+ * {@link Gradient.toTexture} and sampled across each shape's local bounding
21
+ * box, so {@link LinearGradient} and {@link RadialGradient} render through the
22
+ * same texture path as a textured Mesh. The textures are owned by the Graphics
23
+ * and released on {@link clear} / {@link destroy}.
24
+ *
15
25
  * Call {@link clear} to remove all child meshes and reset pen state. Because
16
26
  * each shape is a separate Mesh, `Graphics` inherits full filter, blend,
17
27
  * tint, and mask support from {@link Container}.
18
28
  */
19
29
  export declare class Graphics extends Container {
20
30
  private _lineWidth;
21
- private _lineColor;
22
- private _fillColor;
31
+ private readonly _fillColor;
32
+ private readonly _lineColor;
33
+ private _fillStyle;
34
+ private _strokeStyle;
35
+ private _fillStyleTexture;
36
+ private _strokeStyleTexture;
37
+ private readonly _ownedTextures;
23
38
  private _currentPoint;
24
39
  get lineWidth(): number;
25
40
  set lineWidth(lineWidth: number);
41
+ /** Solid stroke color slot: the last solid color assigned to the stroke. */
26
42
  get lineColor(): Color;
43
+ /**
44
+ * Convenience solid-color setter for the stroke. Copies `lineColor` into the
45
+ * color slot and makes it the active {@link strokeStyle}, replacing any
46
+ * gradient stroke style.
47
+ */
27
48
  set lineColor(lineColor: Color);
49
+ /** Solid fill color slot: the last solid color assigned to the fill. */
28
50
  get fillColor(): Color;
51
+ /**
52
+ * Convenience solid-color setter for the fill. Copies `fillColor` into the
53
+ * color slot and makes it the active {@link fillStyle}, replacing any
54
+ * gradient fill style.
55
+ */
29
56
  set fillColor(fillColor: Color);
57
+ /** Active fill style: a solid {@link Color} or a {@link Gradient}. */
58
+ get fillStyle(): Color | Gradient;
59
+ /**
60
+ * Set the fill style. Accepts a solid {@link Color}, a {@link Gradient}
61
+ * (cloned on assignment and rasterized lazily on first fill), or `null` to
62
+ * revert to the solid color held by {@link fillColor}. A {@link Color} value
63
+ * is copied into the {@link fillColor} slot; the most recently assigned style
64
+ * wins.
65
+ */
66
+ set fillStyle(style: Color | Gradient | null);
67
+ /** Active stroke style: a solid {@link Color} or a {@link Gradient}. */
68
+ get strokeStyle(): Color | Gradient;
69
+ /**
70
+ * Set the stroke style. Accepts a solid {@link Color}, a {@link Gradient}
71
+ * (cloned on assignment and rasterized lazily on first stroke), or `null` to
72
+ * revert to the solid color held by {@link lineColor}. A {@link Color} value
73
+ * is copied into the {@link lineColor} slot; the most recently assigned style
74
+ * wins.
75
+ */
76
+ set strokeStyle(style: Color | Gradient | null);
30
77
  get currentPoint(): Vector;
31
78
  getChildAt(index: number): Mesh;
32
79
  addChild(child: RenderNode): this;
@@ -64,8 +111,26 @@ export declare class Graphics extends Container {
64
111
  * `innerRadius` defaults to half of `radius`.
65
112
  */
66
113
  drawStar(centerX: number, centerY: number, points: number, radius: number, innerRadius?: number, rotation?: number): this;
67
- /** Remove all child meshes and reset pen state (position, colors, line width). */
114
+ /** Remove all child meshes and reset pen state (position, fill/stroke styles, line width). */
68
115
  clear(): this;
69
116
  destroy(): void;
70
- private _createMesh;
117
+ /**
118
+ * Resolve an assigned style into the stored paint. A {@link Color} is copied
119
+ * into the solid `colorSlot` (keeping the {@link fillColor} / {@link lineColor}
120
+ * convenience getters in sync) and that slot is returned; `null` reverts to
121
+ * the slot; a {@link Gradient} is cloned so later external mutation cannot
122
+ * change the stored paint.
123
+ */
124
+ private _resolveStyle;
125
+ private _createFillMesh;
126
+ private _createStrokeMesh;
127
+ private _createSolidMesh;
128
+ /**
129
+ * Build a textured mesh whose UVs span the shape's local bounding box, so the
130
+ * gradient texture samples across the filled/stroked geometry. The default
131
+ * white tint and vertex color leave the sampled gradient color unmodulated.
132
+ */
133
+ private _createGradientMesh;
134
+ private _rasterizeGradient;
135
+ private _destroyOwnedTextures;
71
136
  }
@@ -4,24 +4,45 @@ import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js
4
4
  import { Vector } from '../../math/Vector.js';
5
5
  import { Container } from '../Container.js';
6
6
  import { Mesh } from '../mesh/Mesh.js';
7
+ import { ScaleModes } from '../types.js';
7
8
 
9
+ /**
10
+ * Edge length of the square gradient texture rasterized for gradient paints.
11
+ * The full 2D UV field is baked so both linear and radial gradients map across
12
+ * the filled shape's bounding box without per-axis special-casing.
13
+ */
14
+ const gradientTextureSize = 256;
8
15
  /**
9
16
  * Immediate-mode 2D shape API backed by {@link Mesh} children.
10
17
  *
11
18
  * Each draw call (e.g. `drawCircle`, `drawRectangle`, `drawLine`) appends a
12
- * new {@link Mesh} child colored with the current `fillColor` or `lineColor`.
19
+ * new {@link Mesh} child painted with the active fill or stroke style. A style
20
+ * is either a solid {@link Color} or a {@link Gradient}, assigned through
21
+ * {@link fillStyle} / {@link strokeStyle}. The {@link fillColor} /
22
+ * {@link lineColor} accessors are color-only conveniences over those styles.
13
23
  * The active `lineWidth` controls stroke thickness for path and outline draws.
14
24
  * Path commands (`moveTo`, `lineTo`, `quadraticCurveTo`, etc.) track a cursor
15
25
  * point and flush a Mesh on each segment.
16
26
  *
27
+ * Gradient styles are rasterized once to a {@link DataTexture} via
28
+ * {@link Gradient.toTexture} and sampled across each shape's local bounding
29
+ * box, so {@link LinearGradient} and {@link RadialGradient} render through the
30
+ * same texture path as a textured Mesh. The textures are owned by the Graphics
31
+ * and released on {@link clear} / {@link destroy}.
32
+ *
17
33
  * Call {@link clear} to remove all child meshes and reset pen state. Because
18
34
  * each shape is a separate Mesh, `Graphics` inherits full filter, blend,
19
35
  * tint, and mask support from {@link Container}.
20
36
  */
21
37
  class Graphics extends Container {
22
38
  _lineWidth = 0;
23
- _lineColor = new Color();
24
39
  _fillColor = new Color();
40
+ _lineColor = new Color();
41
+ _fillStyle = this._fillColor;
42
+ _strokeStyle = this._lineColor;
43
+ _fillStyleTexture = null;
44
+ _strokeStyleTexture = null;
45
+ _ownedTextures = new Set();
25
46
  _currentPoint = new Vector(0, 0);
26
47
  get lineWidth() {
27
48
  return this._lineWidth;
@@ -29,17 +50,59 @@ class Graphics extends Container {
29
50
  set lineWidth(lineWidth) {
30
51
  this._lineWidth = lineWidth;
31
52
  }
53
+ /** Solid stroke color slot: the last solid color assigned to the stroke. */
32
54
  get lineColor() {
33
55
  return this._lineColor;
34
56
  }
57
+ /**
58
+ * Convenience solid-color setter for the stroke. Copies `lineColor` into the
59
+ * color slot and makes it the active {@link strokeStyle}, replacing any
60
+ * gradient stroke style.
61
+ */
35
62
  set lineColor(lineColor) {
36
- this._lineColor.copy(lineColor);
63
+ this.strokeStyle = lineColor;
37
64
  }
65
+ /** Solid fill color slot: the last solid color assigned to the fill. */
38
66
  get fillColor() {
39
67
  return this._fillColor;
40
68
  }
69
+ /**
70
+ * Convenience solid-color setter for the fill. Copies `fillColor` into the
71
+ * color slot and makes it the active {@link fillStyle}, replacing any
72
+ * gradient fill style.
73
+ */
41
74
  set fillColor(fillColor) {
42
- this._fillColor.copy(fillColor);
75
+ this.fillStyle = fillColor;
76
+ }
77
+ /** Active fill style: a solid {@link Color} or a {@link Gradient}. */
78
+ get fillStyle() {
79
+ return this._fillStyle;
80
+ }
81
+ /**
82
+ * Set the fill style. Accepts a solid {@link Color}, a {@link Gradient}
83
+ * (cloned on assignment and rasterized lazily on first fill), or `null` to
84
+ * revert to the solid color held by {@link fillColor}. A {@link Color} value
85
+ * is copied into the {@link fillColor} slot; the most recently assigned style
86
+ * wins.
87
+ */
88
+ set fillStyle(style) {
89
+ this._fillStyle = this._resolveStyle(style, this._fillColor);
90
+ this._fillStyleTexture = null;
91
+ }
92
+ /** Active stroke style: a solid {@link Color} or a {@link Gradient}. */
93
+ get strokeStyle() {
94
+ return this._strokeStyle;
95
+ }
96
+ /**
97
+ * Set the stroke style. Accepts a solid {@link Color}, a {@link Gradient}
98
+ * (cloned on assignment and rasterized lazily on first stroke), or `null` to
99
+ * revert to the solid color held by {@link lineColor}. A {@link Color} value
100
+ * is copied into the {@link lineColor} slot; the most recently assigned style
101
+ * wins.
102
+ */
103
+ set strokeStyle(style) {
104
+ this._strokeStyle = this._resolveStyle(style, this._lineColor);
105
+ this._strokeStyleTexture = null;
43
106
  }
44
107
  get currentPoint() {
45
108
  return this._currentPoint;
@@ -163,19 +226,19 @@ class Graphics extends Container {
163
226
  /** Draw a stroked line between two explicit points, independent of the current pen position. */
164
227
  drawLine(startX, startY, endX, endY) {
165
228
  const data = buildLine(startX, startY, endX, endY, this._lineWidth);
166
- this.addChild(this._createMesh(data, this._lineColor));
229
+ this.addChild(this._createStrokeMesh(data));
167
230
  return this;
168
231
  }
169
232
  /** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
170
233
  drawPath(path) {
171
234
  const data = buildPath(path, this._lineWidth);
172
- this.addChild(this._createMesh(data, this._lineColor));
235
+ this.addChild(this._createStrokeMesh(data));
173
236
  return this;
174
237
  }
175
238
  /** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
176
239
  drawPolygon(path) {
177
240
  const data = buildPolygon(path);
178
- this.addChild(this._createMesh(data, this._fillColor));
241
+ this.addChild(this._createFillMesh(data));
179
242
  if (this._lineWidth > 0) {
180
243
  this.drawPath(data.points);
181
244
  }
@@ -184,7 +247,7 @@ class Graphics extends Container {
184
247
  /** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
185
248
  drawCircle(centerX, centerY, radius) {
186
249
  const data = buildCircle(centerX, centerY, radius);
187
- this.addChild(this._createMesh(data, this._fillColor));
250
+ this.addChild(this._createFillMesh(data));
188
251
  if (this._lineWidth > 0) {
189
252
  this.drawPath(data.points);
190
253
  }
@@ -193,7 +256,7 @@ class Graphics extends Container {
193
256
  /** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
194
257
  drawEllipse(centerX, centerY, radiusX, radiusY) {
195
258
  const data = buildEllipse(centerX, centerY, radiusX, radiusY);
196
- this.addChild(this._createMesh(data, this._fillColor));
259
+ this.addChild(this._createFillMesh(data));
197
260
  if (this._lineWidth > 0) {
198
261
  this.drawPath(data.points);
199
262
  }
@@ -202,7 +265,7 @@ class Graphics extends Container {
202
265
  /** Fill a rectangle and optionally stroke its outline if `lineWidth > 0`. */
203
266
  drawRectangle(x, y, width, height) {
204
267
  const data = buildRectangle(x, y, width, height);
205
- this.addChild(this._createMesh(data, this._fillColor));
268
+ this.addChild(this._createFillMesh(data));
206
269
  if (this._lineWidth > 0) {
207
270
  this.drawPath(data.points);
208
271
  }
@@ -214,18 +277,23 @@ class Graphics extends Container {
214
277
  */
215
278
  drawStar(centerX, centerY, points, radius, innerRadius = radius / 2, rotation = 0) {
216
279
  const data = buildStar(centerX, centerY, points, radius, innerRadius, rotation);
217
- this.addChild(this._createMesh(data, this._fillColor));
280
+ this.addChild(this._createFillMesh(data));
218
281
  if (this._lineWidth > 0) {
219
282
  this.drawPath(data.points);
220
283
  }
221
284
  return this;
222
285
  }
223
- /** Remove all child meshes and reset pen state (position, colors, line width). */
286
+ /** Remove all child meshes and reset pen state (position, fill/stroke styles, line width). */
224
287
  clear() {
225
288
  this.removeChildren();
226
289
  this._lineWidth = 0;
227
- this._lineColor.copy(Color.black);
228
290
  this._fillColor.copy(Color.black);
291
+ this._lineColor.copy(Color.black);
292
+ this._fillStyle = this._fillColor;
293
+ this._strokeStyle = this._lineColor;
294
+ this._fillStyleTexture = null;
295
+ this._strokeStyleTexture = null;
296
+ this._destroyOwnedTextures();
229
297
  this._currentPoint.set(0, 0);
230
298
  return this;
231
299
  }
@@ -236,7 +304,38 @@ class Graphics extends Container {
236
304
  this._fillColor.destroy();
237
305
  this._currentPoint.destroy();
238
306
  }
239
- _createMesh(data, color) {
307
+ /**
308
+ * Resolve an assigned style into the stored paint. A {@link Color} is copied
309
+ * into the solid `colorSlot` (keeping the {@link fillColor} / {@link lineColor}
310
+ * convenience getters in sync) and that slot is returned; `null` reverts to
311
+ * the slot; a {@link Gradient} is cloned so later external mutation cannot
312
+ * change the stored paint.
313
+ */
314
+ _resolveStyle(style, colorSlot) {
315
+ if (style === null) {
316
+ return colorSlot;
317
+ }
318
+ if (style instanceof Color) {
319
+ colorSlot.copy(style);
320
+ return colorSlot;
321
+ }
322
+ return style.clone();
323
+ }
324
+ _createFillMesh(data) {
325
+ if (this._fillStyle instanceof Color) {
326
+ return this._createSolidMesh(data, this._fillStyle);
327
+ }
328
+ this._fillStyleTexture ??= this._rasterizeGradient(this._fillStyle);
329
+ return this._createGradientMesh(data, this._fillStyleTexture);
330
+ }
331
+ _createStrokeMesh(data) {
332
+ if (this._strokeStyle instanceof Color) {
333
+ return this._createSolidMesh(data, this._strokeStyle);
334
+ }
335
+ this._strokeStyleTexture ??= this._rasterizeGradient(this._strokeStyle);
336
+ return this._createGradientMesh(data, this._strokeStyleTexture);
337
+ }
338
+ _createSolidMesh(data, color) {
240
339
  const mesh = new Mesh({
241
340
  vertices: data.vertices,
242
341
  indices: data.indices,
@@ -244,7 +343,66 @@ class Graphics extends Container {
244
343
  mesh.tint = color;
245
344
  return mesh;
246
345
  }
346
+ /**
347
+ * Build a textured mesh whose UVs span the shape's local bounding box, so the
348
+ * gradient texture samples across the filled/stroked geometry. The default
349
+ * white tint and vertex color leave the sampled gradient color unmodulated.
350
+ */
351
+ _createGradientMesh(data, texture) {
352
+ return new Mesh({
353
+ vertices: data.vertices,
354
+ indices: data.indices,
355
+ uvs: computeBoundsUvs(data.vertices),
356
+ texture,
357
+ });
358
+ }
359
+ _rasterizeGradient(gradient) {
360
+ const texture = gradient.toTexture(gradientTextureSize, gradientTextureSize, {
361
+ samplerOptions: { scaleMode: ScaleModes.Linear },
362
+ });
363
+ this._ownedTextures.add(texture);
364
+ return texture;
365
+ }
366
+ _destroyOwnedTextures() {
367
+ for (const texture of this._ownedTextures) {
368
+ texture.destroy();
369
+ }
370
+ this._ownedTextures.clear();
371
+ }
247
372
  }
373
+ /**
374
+ * Normalize each `(x, y)` vertex into `0..1` UV space relative to the flat
375
+ * vertex array's axis-aligned bounding box. Degenerate (zero-width/height)
376
+ * spans collapse to `0` to avoid division by zero.
377
+ */
378
+ const computeBoundsUvs = (vertices) => {
379
+ let minX = Infinity;
380
+ let minY = Infinity;
381
+ let maxX = -Infinity;
382
+ let maxY = -Infinity;
383
+ for (let i = 0; i < vertices.length; i += 2) {
384
+ const x = vertices[i];
385
+ const y = vertices[i + 1];
386
+ if (x < minX)
387
+ minX = x;
388
+ if (x > maxX)
389
+ maxX = x;
390
+ if (y < minY)
391
+ minY = y;
392
+ if (y > maxY)
393
+ maxY = y;
394
+ }
395
+ const spanX = maxX - minX;
396
+ const spanY = maxY - minY;
397
+ const invX = spanX > 0 ? 1 / spanX : 0;
398
+ const invY = spanY > 0 ? 1 / spanY : 0;
399
+ const uvs = new Float32Array(vertices.length);
400
+ for (let i = 0; i < vertices.length; i += 2) {
401
+ uvs[i] = (vertices[i] - minX) * invX;
402
+ uvs[i + 1] = (vertices[i + 1] - minY) * invY;
403
+ }
404
+ return uvs;
405
+ };
248
406
 
249
407
  export { Graphics };
250
408
  //# sourceMappingURL=Graphics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Graphics.js","sources":["../../../../../src/rendering/primitives/Graphics.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Graphics.js","sources":["../../../../../src/rendering/primitives/Graphics.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { Interval } from '@/math/Interval';
2
2
  import { Rectangle } from '@/math/Rectangle';
3
3
  import { Vector } from '@/math/Vector';
4
4
  import { Drawable } from '@/rendering/Drawable';
5
+ import type { SpriteMaterial } from '@/rendering/material/SpriteMaterial';
5
6
  import type { RenderTexture } from '@/rendering/texture/RenderTexture';
6
7
  import type { Texture } from '@/rendering/texture/Texture';
7
8
  /**
@@ -42,6 +43,7 @@ export declare enum SpriteFlags {
42
43
  export declare class Sprite extends Drawable {
43
44
  private _texture;
44
45
  private _textureFrame;
46
+ private _material;
45
47
  private _vertices;
46
48
  private _texCoords;
47
49
  private readonly _normals;
@@ -50,6 +52,16 @@ export declare class Sprite extends Drawable {
50
52
  set texture(texture: Texture | RenderTexture | null);
51
53
  get textureFrame(): Rectangle;
52
54
  set textureFrame(frame: Rectangle);
55
+ /**
56
+ * Custom material giving this sprite its own fragment program, uniforms, and
57
+ * extra texture bindings, or `null` for the default multi-texture sprite path.
58
+ *
59
+ * Sprites that share the same material instance and base texture still batch
60
+ * into a single instanced draw call; the base texture stays on the sprite and
61
+ * is bound per batch. Assigning a non-sprite material throws.
62
+ */
63
+ get material(): SpriteMaterial | null;
64
+ set material(material: SpriteMaterial | null);
53
65
  get width(): number;
54
66
  set width(value: number);
55
67
  get height(): number;
@@ -67,7 +79,16 @@ export declare class Sprite extends Drawable {
67
79
  * texture is assigned.
68
80
  */
69
81
  get texCoords(): Uint32Array;
70
- /** Assign a new texture, refreshing the texture frame to the full texture dimensions. */
82
+ /**
83
+ * Assign a new texture, refreshing the texture frame to the full texture dimensions.
84
+ *
85
+ * Does **not** bump the texture's version. That signal means "the source data
86
+ * has been mutated"; replacing the sprite's texture reference is not that.
87
+ * Bumping it here would force the backend to re-allocate the GPU texture on
88
+ * the next bind — destroying any FBO content already rendered into a
89
+ * {@link RenderTexture} (the cacheAsBitmap and filter capture pipelines).
90
+ * Call {@link updateTexture} explicitly when you mutate the source.
91
+ */
71
92
  setTexture(texture: Texture | RenderTexture | null): this;
72
93
  /** Signal the GPU backend that the underlying texture source has changed and reset the frame to full dimensions. */
73
94
  updateTexture(): this;
@@ -43,6 +43,7 @@ var SpriteFlags;
43
43
  class Sprite extends Drawable {
44
44
  _texture = null;
45
45
  _textureFrame = new Rectangle();
46
+ _material = null;
46
47
  _vertices = new Float32Array(8);
47
48
  _texCoords = new Uint32Array(4);
48
49
  _normals = [new Vector(), new Vector(), new Vector(), new Vector()];
@@ -66,6 +67,24 @@ class Sprite extends Drawable {
66
67
  set textureFrame(frame) {
67
68
  this.setTextureFrame(frame);
68
69
  }
70
+ /**
71
+ * Custom material giving this sprite its own fragment program, uniforms, and
72
+ * extra texture bindings, or `null` for the default multi-texture sprite path.
73
+ *
74
+ * Sprites that share the same material instance and base texture still batch
75
+ * into a single instanced draw call; the base texture stays on the sprite and
76
+ * is bound per batch. Assigning a non-sprite material throws.
77
+ */
78
+ get material() {
79
+ return this._material;
80
+ }
81
+ set material(material) {
82
+ if (material !== null && material.target !== 'sprite') {
83
+ throw new Error(`Sprite requires a SpriteMaterial (got a ${material.target} material).`);
84
+ }
85
+ this._material = material;
86
+ this.invalidateCache();
87
+ }
69
88
  get width() {
70
89
  return Math.abs(this.scale.x) * this._textureFrame.width;
71
90
  }
@@ -131,11 +150,22 @@ class Sprite extends Drawable {
131
150
  }
132
151
  return this._texCoords;
133
152
  }
134
- /** Assign a new texture, refreshing the texture frame to the full texture dimensions. */
153
+ /**
154
+ * Assign a new texture, refreshing the texture frame to the full texture dimensions.
155
+ *
156
+ * Does **not** bump the texture's version. That signal means "the source data
157
+ * has been mutated"; replacing the sprite's texture reference is not that.
158
+ * Bumping it here would force the backend to re-allocate the GPU texture on
159
+ * the next bind — destroying any FBO content already rendered into a
160
+ * {@link RenderTexture} (the cacheAsBitmap and filter capture pipelines).
161
+ * Call {@link updateTexture} explicitly when you mutate the source.
162
+ */
135
163
  setTexture(texture) {
136
164
  if (this._texture !== texture) {
137
165
  this._texture = texture;
138
- this.updateTexture();
166
+ if (texture !== null) {
167
+ this.resetTextureFrame();
168
+ }
139
169
  this.invalidateCache();
140
170
  }
141
171
  return this;
@@ -257,6 +287,7 @@ class Sprite extends Drawable {
257
287
  }
258
288
  this._textureFrame.destroy();
259
289
  this._texture = null;
290
+ this._material = null;
260
291
  }
261
292
  }
262
293
  RenderNode.setInternalSpriteFactory(() => new Sprite(null));