@codexo/exojs 0.9.0 → 0.10.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 (209) hide show
  1. package/CHANGELOG.md +44 -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/index.d.ts +1 -0
  21. package/dist/esm/core/types.d.ts +1 -1
  22. package/dist/esm/core/utils.d.ts +12 -0
  23. package/dist/esm/core/utils.js +18 -1
  24. package/dist/esm/core/utils.js.map +1 -1
  25. package/dist/esm/index.js +14 -3
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/particles/ParticleSystem.d.ts +8 -5
  28. package/dist/esm/particles/ParticleSystem.js +9 -5
  29. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  30. package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
  31. package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
  32. package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
  33. package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
  34. package/dist/esm/particles/distributions/index.d.ts +2 -2
  35. package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
  36. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
  37. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  38. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
  39. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  40. package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
  41. package/dist/esm/particles/modules/UpdateModule.js +1 -1
  42. package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
  43. package/dist/esm/rendering/Camera.d.ts +33 -0
  44. package/dist/esm/rendering/Camera.js +38 -0
  45. package/dist/esm/rendering/Camera.js.map +1 -0
  46. package/dist/esm/rendering/Container.d.ts +5 -24
  47. package/dist/esm/rendering/Container.js +8 -71
  48. package/dist/esm/rendering/Container.js.map +1 -1
  49. package/dist/esm/rendering/Drawable.d.ts +8 -10
  50. package/dist/esm/rendering/Drawable.js +12 -20
  51. package/dist/esm/rendering/Drawable.js.map +1 -1
  52. package/dist/esm/rendering/RenderBackend.d.ts +18 -0
  53. package/dist/esm/rendering/RenderNode.d.ts +81 -8
  54. package/dist/esm/rendering/RenderNode.js +121 -144
  55. package/dist/esm/rendering/RenderNode.js.map +1 -1
  56. package/dist/esm/rendering/RenderTarget.d.ts +13 -0
  57. package/dist/esm/rendering/RenderTarget.js +13 -0
  58. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  59. package/dist/esm/rendering/RenderTargetPass.js +17 -0
  60. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  61. package/dist/esm/rendering/RenderingContext.d.ts +87 -0
  62. package/dist/esm/rendering/RenderingContext.js +157 -0
  63. package/dist/esm/rendering/RenderingContext.js.map +1 -0
  64. package/dist/esm/rendering/TransformBuffer.d.ts +38 -0
  65. package/dist/esm/rendering/TransformBuffer.js +116 -0
  66. package/dist/esm/rendering/TransformBuffer.js.map +1 -0
  67. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
  68. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  69. package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
  70. package/dist/esm/rendering/geometry/Geometry.js +228 -0
  71. package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
  72. package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
  73. package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
  74. package/dist/esm/rendering/gradient/Gradient.d.ts +34 -0
  75. package/dist/esm/rendering/gradient/Gradient.js +114 -0
  76. package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
  77. package/dist/esm/rendering/gradient/LinearGradient.d.ts +10 -0
  78. package/dist/esm/rendering/gradient/LinearGradient.js +26 -0
  79. package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
  80. package/dist/esm/rendering/gradient/RadialGradient.d.ts +10 -0
  81. package/dist/esm/rendering/gradient/RadialGradient.js +25 -0
  82. package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
  83. package/dist/esm/rendering/index.d.ts +16 -2
  84. package/dist/esm/rendering/material/Material.d.ts +114 -0
  85. package/dist/esm/rendering/material/Material.js +111 -0
  86. package/dist/esm/rendering/material/Material.js.map +1 -0
  87. package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
  88. package/dist/esm/rendering/material/MaterialKey.js +82 -0
  89. package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
  90. package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
  91. package/dist/esm/rendering/material/MeshMaterial.js +21 -0
  92. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
  93. package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +29 -62
  94. package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -62
  95. package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
  96. package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
  97. package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
  98. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
  99. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
  100. package/dist/esm/rendering/mesh/Mesh.js +122 -3
  101. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  102. package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
  103. package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
  104. package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
  105. package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
  106. package/dist/esm/rendering/plan/RenderCommand.d.ts +67 -0
  107. package/dist/esm/rendering/plan/RenderCommand.js +94 -0
  108. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
  109. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
  110. package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
  111. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
  112. package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
  113. package/dist/esm/rendering/plan/RenderPlan.js +12 -0
  114. package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
  115. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
  116. package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
  117. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
  118. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
  119. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
  120. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
  121. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +9 -0
  122. package/dist/esm/rendering/plan/RenderPlanPlayer.js +56 -0
  123. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
  124. package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
  125. package/dist/esm/rendering/plan/RenderScope.js +16 -0
  126. package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
  127. package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
  128. package/dist/esm/rendering/plan/playRenderTree.js +19 -0
  129. package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
  130. package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
  131. package/dist/esm/rendering/sprite/Sprite.js +33 -2
  132. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  133. package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +36 -0
  134. package/dist/esm/rendering/sprite/spriteMaterialSources.js +128 -0
  135. package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
  136. package/dist/esm/rendering/text/TextStyle.d.ts +1 -1
  137. package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
  138. package/dist/esm/rendering/texture/DataTexture.js +7 -0
  139. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  140. package/dist/esm/rendering/video/Video.d.ts +3 -7
  141. package/dist/esm/rendering/video/Video.js +3 -8
  142. package/dist/esm/rendering/video/Video.js.map +1 -1
  143. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +40 -0
  144. package/dist/esm/rendering/webgl2/WebGl2Backend.js +303 -22
  145. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  146. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
  147. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
  148. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  149. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
  150. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
  151. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
  152. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +12 -0
  153. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +214 -58
  154. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  155. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
  156. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
  157. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
  158. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +4 -0
  159. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  160. package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
  161. package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
  162. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
  163. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
  164. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
  165. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
  166. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +50 -0
  167. package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -19
  168. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  169. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
  170. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  171. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +24 -0
  172. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +488 -74
  173. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  174. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +13 -17
  175. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  176. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
  177. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
  178. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
  179. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +16 -0
  180. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +335 -26
  181. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  182. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
  183. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
  184. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
  185. package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
  186. package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
  187. package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
  188. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +14 -12
  189. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  190. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -0
  191. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +57 -0
  192. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
  193. package/dist/esm/resources/JsonStore.d.ts +18 -0
  194. package/dist/esm/resources/JsonStore.js +62 -0
  195. package/dist/esm/resources/JsonStore.js.map +1 -0
  196. package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
  197. package/dist/esm/resources/factories/ImageFactory.js +13 -6
  198. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  199. package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
  200. package/dist/esm/resources/factories/TextureFactory.js +8 -4
  201. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  202. package/dist/esm/resources/index.d.ts +1 -0
  203. package/dist/exo.esm.js +5424 -2205
  204. package/dist/exo.esm.js.map +1 -1
  205. package/package.json +30 -24
  206. package/dist/esm/particles/distributions/Gradient.js.map +0 -1
  207. package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
  208. package/dist/esm/vendor/webgl-debug.js +0 -1160
  209. package/dist/esm/vendor/webgl-debug.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ import { IndexedDbStore } from './IndexedDbStore.js';
2
+
3
+ const defaultDatabaseName = 'exojs-json-store';
4
+ const defaultStoreName = '__json_store';
5
+ /**
6
+ * JSON-first key-value store built on top of {@link IndexedDbStore}.
7
+ */
8
+ class JsonStore {
9
+ _storageName;
10
+ _store;
11
+ constructor(nameOrOptions = defaultDatabaseName) {
12
+ const options = typeof nameOrOptions === 'string' ? { name: nameOrOptions } : nameOrOptions;
13
+ const storageName = options.storeName ?? defaultStoreName;
14
+ this._storageName = storageName;
15
+ this._store = new IndexedDbStore({
16
+ name: options.name,
17
+ version: options.version,
18
+ migrations: options.migrations,
19
+ storeNames: [storageName],
20
+ });
21
+ }
22
+ async set(key, data) {
23
+ let payload;
24
+ try {
25
+ payload = JSON.stringify(data);
26
+ }
27
+ catch {
28
+ throw new Error('JsonStore.set() failed: data is not JSON-serializable.');
29
+ }
30
+ await this._store.save(this._storageName, key, payload);
31
+ }
32
+ async get(key) {
33
+ const payload = await this._store.load(this._storageName, key);
34
+ if (payload === null) {
35
+ return null;
36
+ }
37
+ if (typeof payload !== 'string') {
38
+ throw new Error('JsonStore.get() failed: stored payload is not a JSON string.');
39
+ }
40
+ try {
41
+ return JSON.parse(payload);
42
+ }
43
+ catch {
44
+ throw new Error(`JsonStore.get() failed: invalid JSON payload for key "${key}".`);
45
+ }
46
+ }
47
+ async delete(key) {
48
+ return this._store.delete(this._storageName, key);
49
+ }
50
+ async has(key) {
51
+ return (await this.get(key)) !== null;
52
+ }
53
+ async clear() {
54
+ return this._store.clear(this._storageName);
55
+ }
56
+ destroy() {
57
+ this._store.destroy();
58
+ }
59
+ }
60
+
61
+ export { JsonStore };
62
+ //# sourceMappingURL=JsonStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonStore.js","sources":["../../../../src/resources/JsonStore.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAMA,MAAM,mBAAmB,GAAG,kBAAkB;AAC9C,MAAM,gBAAgB,GAAG,cAAc;AAEvC;;AAEG;MACU,SAAS,CAAA;AACH,IAAA,YAAY;AACZ,IAAA,MAAM;AAEvB,IAAA,WAAA,CAAmB,gBAA2C,mBAAmB,EAAA;AAC/E,QAAA,MAAM,OAAO,GAAG,OAAO,aAAa,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,aAAa;AAC3F,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,gBAAgB;AAEzD,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC;YAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,CAAC,WAAW,CAAC;AAC1B,SAAA,CAAC;IACJ;AAEO,IAAA,MAAM,GAAG,CAAC,GAAW,EAAE,IAAa,EAAA;AACzC,QAAA,IAAI,OAAe;AAEnB,QAAA,IAAI;AACF,YAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAChC;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;QAC3E;AAEA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC;IACzD;IAEO,MAAM,GAAG,CAAc,GAAW,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;AAE9D,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;QACjF;AAEA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM;QACjC;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,GAAG,CAAA,EAAA,CAAI,CAAC;QACnF;IACF;IAEO,MAAM,MAAM,CAAC,GAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;IACnD;IAEO,MAAM,GAAG,CAAC,GAAW,EAAA;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI;IACvC;AAEO,IAAA,MAAM,KAAK,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IAC7C;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACvB;AACD;;;;"}
@@ -1,4 +1,6 @@
1
1
  import { AbstractAssetFactory } from '@/resources/AbstractAssetFactory';
2
+ /** Decoded image result from {@link ImageFactory.create}. */
3
+ export type DecodedImage = HTMLImageElement | ImageBitmap;
2
4
  /** Construction options for {@link ImageFactory.create}. */
3
5
  export interface ImageFactoryOptions {
4
6
  /**
@@ -10,13 +12,17 @@ export interface ImageFactoryOptions {
10
12
  }
11
13
  /**
12
14
  * {@link AssetFactory} implementation that loads PNG, JPG, WebP, AVIF, and
13
- * other browser-supported raster image formats and produces a decoded
14
- * {@link HTMLImageElement}.
15
+ * other browser-supported raster image formats and produces a decoded image.
16
+ *
17
+ * When `createImageBitmap` is available (all modern browsers) the factory
18
+ * returns an {@link ImageBitmap} — a zero-copy GPU-upload path that avoids
19
+ * the HTMLImageElement render-pipeline overhead. On older environments it
20
+ * falls back to an {@link HTMLImageElement}.
15
21
  *
16
22
  * MIME type detection is performed automatically from the buffer's magic bytes;
17
23
  * pass an explicit `mimeType` in options to override.
18
24
  */
19
- export declare class ImageFactory extends AbstractAssetFactory<HTMLImageElement> {
25
+ export declare class ImageFactory extends AbstractAssetFactory<DecodedImage> {
20
26
  readonly storageName = "image";
21
27
  /**
22
28
  * Reads the full response body as an {@link ArrayBuffer} for MIME-type
@@ -24,11 +30,11 @@ export declare class ImageFactory extends AbstractAssetFactory<HTMLImageElement>
24
30
  */
25
31
  process(response: Response): Promise<ArrayBuffer>;
26
32
  /**
27
- * Decodes image bytes into a fully loaded {@link HTMLImageElement}.
33
+ * Decodes image bytes into a {@link DecodedImage}.
28
34
  *
29
- * Creates a temporary object URL from the buffer, assigns it to an
30
- * `<img>` element, and revokes the URL once loading completes or fails.
31
- * Rejects if the browser reports a load error or the load is aborted.
35
+ * Prefers `createImageBitmap` for a zero-copy GPU-upload path. Falls back
36
+ * to a temporary object URL + `<img>` element on environments that do not
37
+ * support `createImageBitmap`.
32
38
  */
33
- create(source: ArrayBuffer, options?: ImageFactoryOptions): Promise<HTMLImageElement>;
39
+ create(source: ArrayBuffer, options?: ImageFactoryOptions): Promise<DecodedImage>;
34
40
  }
@@ -3,8 +3,12 @@ import { determineMimeType } from '../utils.js';
3
3
 
4
4
  /**
5
5
  * {@link AssetFactory} implementation that loads PNG, JPG, WebP, AVIF, and
6
- * other browser-supported raster image formats and produces a decoded
7
- * {@link HTMLImageElement}.
6
+ * other browser-supported raster image formats and produces a decoded image.
7
+ *
8
+ * When `createImageBitmap` is available (all modern browsers) the factory
9
+ * returns an {@link ImageBitmap} — a zero-copy GPU-upload path that avoids
10
+ * the HTMLImageElement render-pipeline overhead. On older environments it
11
+ * falls back to an {@link HTMLImageElement}.
8
12
  *
9
13
  * MIME type detection is performed automatically from the buffer's magic bytes;
10
14
  * pass an explicit `mimeType` in options to override.
@@ -19,14 +23,17 @@ class ImageFactory extends AbstractAssetFactory {
19
23
  return response.arrayBuffer();
20
24
  }
21
25
  /**
22
- * Decodes image bytes into a fully loaded {@link HTMLImageElement}.
26
+ * Decodes image bytes into a {@link DecodedImage}.
23
27
  *
24
- * Creates a temporary object URL from the buffer, assigns it to an
25
- * `<img>` element, and revokes the URL once loading completes or fails.
26
- * Rejects if the browser reports a load error or the load is aborted.
28
+ * Prefers `createImageBitmap` for a zero-copy GPU-upload path. Falls back
29
+ * to a temporary object URL + `<img>` element on environments that do not
30
+ * support `createImageBitmap`.
27
31
  */
28
32
  async create(source, options = {}) {
29
33
  const blob = new Blob([source], { type: options.mimeType ?? determineMimeType(source) });
34
+ if (typeof createImageBitmap === 'function') {
35
+ return createImageBitmap(blob);
36
+ }
30
37
  const objectUrl = this.createObjectUrl(blob);
31
38
  return new Promise((resolve, reject) => {
32
39
  const image = new Image();
@@ -1 +1 @@
1
- {"version":3,"file":"ImageFactory.js","sources":["../../../../../src/resources/factories/ImageFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAaA;;;;;;;AAOG;AACG,MAAO,YAAa,SAAQ,oBAAsC,CAAA;IACtD,WAAW,GAAG,OAAO;AAErC;;;AAGG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,MAAM,CAAC,MAAmB,EAAE,UAA+B,EAAE,EAAA;QACxE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAW;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACH,gBAAA,QAAQ,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,SAAS;AACvB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"ImageFactory.js","sources":["../../../../../src/resources/factories/ImageFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAgBA;;;;;;;;;;;AAWG;AACG,MAAO,YAAa,SAAQ,oBAAkC,CAAA;IAClD,WAAW,GAAG,OAAO;AAErC;;;AAGG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,MAAM,CAAC,MAAmB,EAAE,UAA+B,EAAE,EAAA;QACxE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AAExF,QAAA,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE;AAC3C,YAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC;QAChC;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAW;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACH,gBAAA,QAAQ,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,SAAS;AACvB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -28,11 +28,11 @@ export declare class TextureFactory extends AbstractAssetFactory<Texture> {
28
28
  */
29
29
  process(response: Response): Promise<ArrayBuffer>;
30
30
  /**
31
- * Decodes image bytes into a fully loaded {@link HTMLImageElement} and
32
- * wraps it in a {@link Texture} with the given sampler options.
31
+ * Decodes image bytes and wraps the result in a {@link Texture}.
33
32
  *
34
- * Creates a temporary object URL, resolves when the image's `load` event
35
- * fires, and revokes the URL regardless of outcome.
33
+ * Prefers `createImageBitmap` for a zero-copy GPU-upload path. Falls back
34
+ * to a temporary object URL + `<img>` element on environments that do not
35
+ * support `createImageBitmap`.
36
36
  */
37
37
  create(source: ArrayBuffer, options?: TextureFactoryOptions): Promise<Texture>;
38
38
  }
@@ -21,15 +21,19 @@ class TextureFactory extends AbstractAssetFactory {
21
21
  return response.arrayBuffer();
22
22
  }
23
23
  /**
24
- * Decodes image bytes into a fully loaded {@link HTMLImageElement} and
25
- * wraps it in a {@link Texture} with the given sampler options.
24
+ * Decodes image bytes and wraps the result in a {@link Texture}.
26
25
  *
27
- * Creates a temporary object URL, resolves when the image's `load` event
28
- * fires, and revokes the URL regardless of outcome.
26
+ * Prefers `createImageBitmap` for a zero-copy GPU-upload path. Falls back
27
+ * to a temporary object URL + `<img>` element on environments that do not
28
+ * support `createImageBitmap`.
29
29
  */
30
30
  async create(source, options = {}) {
31
31
  const { mimeType, samplerOptions } = options;
32
32
  const blob = new Blob([source], { type: mimeType ?? determineMimeType(source) });
33
+ if (typeof createImageBitmap === 'function') {
34
+ const bitmap = await createImageBitmap(blob);
35
+ return new Texture(bitmap, samplerOptions);
36
+ }
33
37
  const objectUrl = this.createObjectUrl(blob);
34
38
  return new Promise((resolve, reject) => {
35
39
  const image = new Image();
@@ -1 +1 @@
1
- {"version":3,"file":"TextureFactory.js","sources":["../../../../../src/resources/factories/TextureFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAgBA;;;;;;;;AAQG;AACG,MAAO,cAAe,SAAQ,oBAA6B,CAAA;IAC/C,WAAW,GAAG,SAAS;AAEvC;;;AAGG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,MAAM,CAAC,MAAmB,EAAE,UAAiC,EAAE,EAAA;AAC1E,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO;QAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAW;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACH,gBAAA,QAAQ,EAAE;gBACV,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC7C,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,SAAS;AACvB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"TextureFactory.js","sources":["../../../../../src/resources/factories/TextureFactory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAgBA;;;;;;;;AAQG;AACG,MAAO,cAAe,SAAQ,oBAA6B,CAAA;IAC/C,WAAW,GAAG,SAAS;AAEvC;;;AAGG;IACI,MAAM,OAAO,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,MAAM,CAAC,MAAmB,EAAE,UAAiC,EAAE,EAAA;AAC1E,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO;QAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AAEhF,QAAA,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC;AAC5C,YAAA,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC;QAC5C;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAW;AAC1B,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACH,gBAAA,QAAQ,EAAE;gBACV,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC7C,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AACD,YAAA,KAAK,CAAC,gBAAgB,CACpB,OAAO,EACP,MAAK;AACH,gBAAA,QAAQ,EAAE;AACV,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClD,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,SAAS;AACvB,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -26,6 +26,7 @@ export * from './factories/XmlFactory';
26
26
  export * from './FactoryRegistry';
27
27
  export * from './IndexedDbDatabase';
28
28
  export * from './IndexedDbStore';
29
+ export * from './JsonStore';
29
30
  export * from './Loader';
30
31
  export * from './LoadingQueue';
31
32
  export * from './NetworkOnlyStrategy';