@forgeax/engine-vfx 0.1.27 → 0.1.29

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 (53) hide show
  1. package/README.md +62 -14
  2. package/dist/assets/particle-effect-decoder.d.ts.map +1 -1
  3. package/dist/authoring-descriptor.d.ts +4 -4
  4. package/dist/authoring-descriptor.d.ts.map +1 -1
  5. package/dist/code-source-v3.d.ts +101 -0
  6. package/dist/code-source-v3.d.ts.map +1 -0
  7. package/dist/code-source.d.ts +12 -11
  8. package/dist/code-source.d.ts.map +1 -1
  9. package/dist/data-interface.d.ts +17 -1
  10. package/dist/data-interface.d.ts.map +1 -1
  11. package/dist/effect-contract.d.ts +11 -1
  12. package/dist/effect-contract.d.ts.map +1 -1
  13. package/dist/gpu-loader.d.ts +5 -5
  14. package/dist/gpu-loader.d.ts.map +1 -1
  15. package/dist/gpu-program.d.ts +52 -27
  16. package/dist/gpu-program.d.ts.map +1 -1
  17. package/dist/gpu-runtime.d.ts +32 -7
  18. package/dist/gpu-runtime.d.ts.map +1 -1
  19. package/dist/index.d.ts +10 -6
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.mjs +647 -117
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/particle-layout.d.ts +62 -0
  24. package/dist/particle-layout.d.ts.map +1 -0
  25. package/package.json +5 -5
  26. package/src/__tests__/authoring-descriptor.unit.test.ts +18 -8
  27. package/src/__tests__/channel-input.unit.test.ts +4 -1
  28. package/src/__tests__/channel-overflow-policy-owner.test-d.ts +2 -2
  29. package/src/__tests__/code-source-v2.unit.test.ts +15 -14
  30. package/src/__tests__/data-interface-contract.unit.test.ts +41 -2
  31. package/src/__tests__/effect-contract.unit.test.ts +6 -3
  32. package/src/__tests__/gpu-program-simulation-culling-owner.test-d.ts +6 -6
  33. package/src/__tests__/gpu-reflection-vocabulary-owner.test-d.ts +2 -2
  34. package/src/__tests__/gpu-runtime.integration.test.ts +244 -11
  35. package/src/__tests__/instance-public-api.unit.test.ts +4 -1
  36. package/src/__tests__/instance.unit.test.ts +4 -1
  37. package/src/__tests__/loader-v1-rejection.unit.test.ts +14 -14
  38. package/src/__tests__/player-reflection.unit.test.ts +2 -2
  39. package/src/__tests__/player-type.test-d.ts +4 -1
  40. package/src/__tests__/renderer-source.unit.test.ts +6 -6
  41. package/src/__tests__/replay-canonical.unit.test.ts +4 -1
  42. package/src/__tests__/vfx-data-interface-vocabulary-owner.test-d.ts +3 -8
  43. package/src/assets/particle-effect-decoder.ts +4 -3
  44. package/src/authoring-descriptor.ts +26 -28
  45. package/src/code-source-v3.ts +460 -0
  46. package/src/code-source.ts +23 -27
  47. package/src/data-interface.ts +66 -1
  48. package/src/effect-contract.ts +73 -20
  49. package/src/gpu-loader.ts +61 -35
  50. package/src/gpu-program.ts +57 -35
  51. package/src/gpu-runtime.ts +115 -42
  52. package/src/index.ts +53 -9
  53. package/src/particle-layout.ts +214 -0
package/README.md CHANGED
@@ -24,10 +24,10 @@ artifact must be cold-cooked instead of being treated as current.
24
24
  ## Author source
25
25
 
26
26
  ```ts
27
- import { defineParticleEffectSourceV2 } from '@forgeax/engine-vfx';
27
+ import { defineParticleEffectSourceV3 } from '@forgeax/engine-vfx';
28
28
 
29
- export const sparks = defineParticleEffectSourceV2({
30
- schemaVersion: 2,
29
+ export const sparks = defineParticleEffectSourceV3({
30
+ schemaVersion: 3,
31
31
  emitters: [{
32
32
  id: 'sparks',
33
33
  capacity: 100_000,
@@ -57,6 +57,48 @@ A mesh renderer selects exactly one draw surface with `submesh` (default `0`):
57
57
  `{ kind: 'mesh', mesh, material, submesh: 2 }`. An out-of-range index fails
58
58
  preparation instead of silently drawing another submesh.
59
59
 
60
+ ## Program v3 data plane
61
+
62
+ The minimum-fidelity slice exposes a schema-driven Program v3 authoring boundary
63
+ through `defineParticleEffectSourceV3`. Its fixed Core record is 112 bytes
64
+ (`VfxParticle`); effect snapshot values live in `VfxParameters`, while optional
65
+ `VfxCustom` values use a persistent GPU storage record capped at four
66
+ `vec4`-equivalent lanes. The compiler derives the WGSL declarations, reflection,
67
+ host stride, and renderer projections from these schemas. Reflected member
68
+ offsets preserve authored WGSL declaration order. Custom storage array stride
69
+ uses the struct's natural WGSL alignment; the vec4 lane count is a budget,
70
+ not an extra padding requirement (one scalar has a 4-byte stride).
71
+
72
+ ```ts
73
+ import { defineParticleEffectSourceV3 } from '@forgeax/engine-vfx';
74
+
75
+ export const effect = defineParticleEffectSourceV3({
76
+ schemaVersion: 3,
77
+ emitters: [{
78
+ id: 'embers', capacity: 4096, backend: { required: 'gpu' }, space: 'world',
79
+ bounds: { kind: 'sphere', center: [0, 0, 0], radius: 8 },
80
+ schedule: { rate: 120 }, program: { module: 'embers.vfx.wgsl' },
81
+ renderers: [{
82
+ kind: 'billboard', material: 'ember-material', sorting: 'view-depth',
83
+ materialInputs: ['heat'],
84
+ }],
85
+ }],
86
+ });
87
+ ```
88
+
89
+ Program v3 keeps the existing bounded `channels`/`events` and sub-emitter
90
+ path. The unused `vfx:channel` Data Interface token is not part of the v3
91
+ vocabulary; `camera`, single-sample `scene-depth`, and `noise` are
92
+ generation-owned resources and must be supplied by the renderer host.
93
+ Scene-depth is intentionally accepted only with `sampleCount: 1`; no implicit
94
+ MSAA resolve is performed.
95
+
96
+ Mesh renderers expose semantic Quaternion/Scale3 attributes and Standard
97
+ lighting/shadow intent. Billboard, Ribbon, Trail, and Beam retain their
98
+ topology-specific projection paths. Invalid or missing semantic/material input
99
+ references fail at cook time, and undeclared Parameters, Custom, and data
100
+ interface resources do not allocate a GPU binding.
101
+
60
102
  ## Batch B renderers and control
61
103
 
62
104
  ```ts
@@ -65,7 +107,7 @@ renderers: [
65
107
  kind: 'billboard', material: SPARK_MATERIAL, blend: 'additive',
66
108
  capacity: 4096, overflow: 'drop-oldest',
67
109
  textureSheet: { columns: 4, rows: 4, frameRate: 12 },
68
- pivot: [0.5, 0.25], softParticle: { distance: 0.4 }, sorting: 'back-to-front',
110
+ pivot: [0.5, 0.25], softParticle: { fadeDistance: 0.4 }, sorting: 'view-depth',
69
111
  },
70
112
  { kind: 'ribbon', stripKey: 'alive-index', capacity: 1024, overflow: 'drop-newest', width: 0.2 },
71
113
  { kind: 'trail', historyLength: 8, capacity: 1024, overflow: 'drop-oldest', width: 0.15 },
@@ -92,13 +134,13 @@ scene-depth provider. Capacity overflow is reported through inspection.
92
134
 
93
135
  fn vfx_spawn(ctx: VfxSpawnContext, particle: ptr<function, VfxParticle>) {
94
136
  let angle = vfx_random_spawn(ctx, 0u) * 6.2831853;
95
- (*particle).velocity = vec4<f32>(cos(angle), 2.0, sin(angle), 0.0);
137
+ (*particle).velocity = vec3<f32>(cos(angle), 2.0, sin(angle));
96
138
  (*particle).lifetime = 1.5;
97
139
  }
98
140
 
99
141
  fn vfx_update(ctx: VfxUpdateContext, particle: ptr<function, VfxParticle>) {
100
142
  (*particle).velocity.y -= 9.8 * ctx.delta;
101
- (*particle).size_rotation.z += ctx.delta * 2.0;
143
+ (*particle).sprite_rotation += ctx.delta * 2.0;
102
144
  vfx_integrate(ctx, particle);
103
145
  }
104
146
  ```
@@ -107,11 +149,13 @@ The managed shell exposes this stable particle surface:
107
149
 
108
150
  | Field | Meaning |
109
151
  |:--|:--|
110
- | `position.xyz` | Emitter-local or world position; `.w` is available to author code |
111
- | `velocity.xyz` | Velocity used by `vfx_integrate`; `.w` is available to author code |
152
+ | `position` | Emitter-local or world position |
153
+ | `velocity` | Velocity used by `vfx_integrate` |
112
154
  | `color` | Linear HDR color and alpha |
113
- | `size_rotation.xy` | Billboard width/height; mesh uses `.x` as uniform scale |
114
- | `size_rotation.z` | Rotation in radians |
155
+ | `sprite_size` | Billboard width/height |
156
+ | `sprite_rotation` | Billboard rotation in radians |
157
+ | `mesh_orientation` / `mesh_scale` | Mesh Quaternion (x, y, z, w) and Scale3 |
158
+ | `material_random` | Stable material random scalar |
115
159
  | `age`, `lifetime` | Engine advances age and kills at `age >= lifetime` |
116
160
  | `alive` | Set to `0u` for explicit death |
117
161
  | `id` | Stable spawn identity for addressable random |
@@ -164,7 +208,8 @@ responsibility.
164
208
 
165
209
  > [!IMPORTANT]
166
210
  > The descriptor is an inspection/read-model contract, not a second authoring
167
- > language. Source v2 plus `.vfx.wgsl` remain authoritative.
211
+ > language. Program v3 source plus `.vfx.wgsl` is authoritative. Older payloads
212
+ > are rejected at the loader boundary and must be cold-cooked before publication.
168
213
 
169
214
  ## Runtime invariants
170
215
 
@@ -183,6 +228,8 @@ program/layout fingerprints, parameter generation, pending patch count, channel
183
228
  counters, `cameraVisible`, `sessionEnabled`, phase/global ticks, schedule, bounds, renderer/stage metadata and the latest
184
229
  committed tick intent per emitter. Observation never selects a single global
185
230
  “latest intent,” so two players and multi-emitter effects remain distinguishable.
231
+ The renderer may use `forEachEmitterSource()` to refresh frustum visibility from
232
+ live emitters even when a paused player has no pending fixed-tick intent.
186
233
 
187
234
  ## Culling policy
188
235
 
@@ -204,10 +251,11 @@ Camera culling and editor preview masking are independent runtime axes:
204
251
 
205
252
  | Code | Repair |
206
253
  |:--|:--|
207
- | `vfx-source-version-unsupported` | Migrate behavior to WGSL and cold-cook schema v2 |
254
+ | `vfx-source-version-unsupported` | Migrate behavior to WGSL and cold-cook the supported schema |
208
255
  | `vfx-source-invalid` | Repair `detail.path`; unknown and unsupported fields fail closed |
209
- | `vfx-asset-v2-program-missing` | Republish the asset-local `particle-effect/program.json` artifact |
210
- | `vfx-asset-v2-fingerprint-mismatch` | Cold-cook payload and program atomically |
256
+ | `vfx-asset-version-unsupported` | Cold-cook the older source and publish a Program v3 payload |
257
+ | `vfx-asset-v3-program-missing` | Republish the Program v3 asset-local `particle-effect/program.json` artifact |
258
+ | `vfx-asset-v3-fingerprint-mismatch` | Cold-cook the v3 payload and program atomically |
211
259
  | `vfx-effect-unavailable` | Load the shared effect before the first FixedUpdate |
212
260
  | `vfx-intent-queue-overflow` | Recover the Renderer or restart the player; inspect render readiness |
213
261
 
@@ -1 +1 @@
1
- {"version":3,"file":"particle-effect-decoder.d.ts","sourceRoot":"","sources":["../../src/assets/particle-effect-decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAI7B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,CAC/D,mBAAmB,EACnB,iBAAiB,CAuBlB,CAAC"}
1
+ {"version":3,"file":"particle-effect-decoder.d.ts","sourceRoot":"","sources":["../../src/assets/particle-effect-decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAI7B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,CAC/D,mBAAmB,EACnB,iBAAiB,CAwBlB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { VfxGpuEffectAsset } from './gpu-program.js';
1
+ import type { VfxGpuEffectAssetAny } from './gpu-program.js';
2
2
  export type VfxAuthoringValue = null | string | number | boolean | readonly VfxAuthoringValue[] | {
3
3
  readonly [key: string]: VfxAuthoringValue;
4
4
  };
@@ -43,7 +43,7 @@ export interface VfxAuthoringCapabilityDescriptor {
43
43
  export interface VfxAuthoringDescriptor {
44
44
  readonly version: 1;
45
45
  readonly assetGuid: string;
46
- readonly schemaVersion: 2;
46
+ readonly schemaVersion: 3;
47
47
  readonly artifactFingerprint: string;
48
48
  readonly emitters: readonly VfxAuthoringEmitterDescriptor[];
49
49
  readonly timeline: readonly VfxAuthoringTimelineDescriptor[];
@@ -54,7 +54,7 @@ export interface VfxAuthoringDescriptor {
54
54
  * the cooked program shape. This deliberately validates the stable producer
55
55
  * discriminants only; detailed artifact validation remains the pack loader's
56
56
  * responsibility. */
57
- export declare function isVfxGpuEffectAsset(value: unknown): value is VfxGpuEffectAsset;
57
+ export declare function isVfxGpuEffectAsset(value: unknown): value is VfxGpuEffectAssetAny;
58
58
  /** Project the cooked runtime asset into a compiler-free, UI-neutral authoring read model. */
59
- export declare function describeVfxGpuEffect(effect: VfxGpuEffectAsset): VfxAuthoringDescriptor;
59
+ export declare function describeVfxGpuEffect(effect: VfxGpuEffectAssetAny): VfxAuthoringDescriptor;
60
60
  //# sourceMappingURL=authoring-descriptor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-descriptor.d.ts","sourceRoot":"","sources":["../src/authoring-descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authoring-descriptor.d.ts","sourceRoot":"","sources":["../src/authoring-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAA2B,MAAM,kBAAkB,CAAC;AAEtF,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,iBAAiB,EAAE,GAC5B;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAElD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzE;AAED,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,SAAS,GACT,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,6BAA8B,SAAQ,0BAA0B;IAC/E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,gBAAgB,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC7D,QAAQ,CAAC,YAAY,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACnE,QAAQ,CAAC,YAAY,EAAE,SAAS,gCAAgC,EAAE,CAAC;CACpE;AAkBD;;;qBAGqB;AACrB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAejF;AA+ND,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,sBAAsB,CAsBzF"}
@@ -0,0 +1,101 @@
1
+ import { type Result } from '@forgeax/engine-types';
2
+ import { type ParticleBoundsSource, type ParticleChannelSource, type ParticleCodeSourceError, type ParticleEmitterSourceStructure, type ParticleEventSource, type ParticleRendererOverflowPolicy } from './code-source.js';
3
+ import type { VfxParticleCoreAttribute } from './particle-layout.js';
4
+ /** Renderer sorting modes in Program v3. Segment topology order is unaffected. */
5
+ export type ParticleRendererSortingV3 = 'none' | 'view-depth' | 'view-distance' | 'custom-ascending' | 'custom-descending';
6
+ export type ParticleAttributeRef = {
7
+ readonly source: 'core';
8
+ readonly name: VfxParticleCoreAttribute;
9
+ } | {
10
+ readonly source: 'custom';
11
+ readonly name: string;
12
+ };
13
+ /**
14
+ * Renderer fields with a concrete Program v3 projection. Keep this union
15
+ * execution-backed; renderer.materialInputs is the separate material bridge.
16
+ */
17
+ export type ParticleRendererSemantic = 'position' | 'color' | 'size' | 'rotation' | 'subImage' | 'age' | 'sort' | 'orientation' | 'scale' | 'visibility' | 'width' | 'taper' | 'endpoint';
18
+ export type ParticleRendererSemanticMap = Readonly<Partial<Record<ParticleRendererSemantic, ParticleAttributeRef>>>;
19
+ export interface ParticleRendererSourceV3Base {
20
+ readonly material: string;
21
+ readonly enabled?: boolean;
22
+ readonly capacity?: number;
23
+ readonly overflow?: ParticleRendererOverflowPolicy;
24
+ readonly width?: number;
25
+ readonly attributes?: ParticleRendererSemanticMap;
26
+ /** Names must match the cooked MaterialShaderArtifact particleInputs declaration. */
27
+ readonly materialInputs?: readonly string[];
28
+ }
29
+ export type ParticleRendererSourceV3 = (ParticleRendererSourceV3Base & {
30
+ readonly kind: 'billboard';
31
+ readonly blend?: 'additive' | 'alpha' | 'opaque-cutout';
32
+ readonly textureSheet?: {
33
+ readonly columns: number;
34
+ readonly rows: number;
35
+ readonly frameRate: number;
36
+ readonly frameCount?: number;
37
+ };
38
+ readonly pivot?: readonly [number, number];
39
+ readonly softParticle?: {
40
+ readonly fadeDistance: number;
41
+ };
42
+ readonly sorting?: ParticleRendererSortingV3;
43
+ }) | (ParticleRendererSourceV3Base & {
44
+ readonly kind: 'mesh';
45
+ readonly mesh: string;
46
+ readonly submesh?: number;
47
+ readonly lighting?: 'unlit' | 'standard';
48
+ readonly castShadows?: boolean;
49
+ readonly receiveShadows?: boolean;
50
+ }) | (ParticleRendererSourceV3Base & {
51
+ readonly kind: 'ribbon';
52
+ readonly stripKey: 'alive-index';
53
+ readonly capacity: number;
54
+ readonly twist?: number;
55
+ readonly facing?: 'camera' | 'velocity' | 'custom';
56
+ }) | (ParticleRendererSourceV3Base & {
57
+ readonly kind: 'trail';
58
+ readonly historyLength: number;
59
+ readonly capacity: number;
60
+ readonly taper?: number;
61
+ }) | (ParticleRendererSourceV3Base & {
62
+ readonly kind: 'beam';
63
+ readonly endpointField: 'velocity';
64
+ readonly capacity: number;
65
+ readonly taper?: number;
66
+ });
67
+ export interface ParticleEmitterSourceV3 {
68
+ readonly id: string;
69
+ readonly capacity: number;
70
+ readonly backend: {
71
+ readonly required: 'gpu';
72
+ };
73
+ readonly space: 'local' | 'world';
74
+ readonly bounds: ParticleBoundsSource;
75
+ readonly schedule: ParticleEmitterSourceStructure['schedule'];
76
+ readonly program: {
77
+ readonly module: string;
78
+ };
79
+ readonly renderers: readonly ParticleRendererSourceV3[];
80
+ /** Existing channels/events are intentionally carried unchanged into v3. */
81
+ readonly channels?: readonly ParticleChannelSource[];
82
+ readonly events?: readonly ParticleEventSource[];
83
+ readonly simulationWhenCulled?: ParticleEmitterSourceStructure['simulationWhenCulled'];
84
+ }
85
+ export interface ParticleEffectRootSourceV3 {
86
+ readonly schemaVersion: 3;
87
+ readonly emitters: readonly ParticleEmitterSourceV3[];
88
+ }
89
+ export type ParticleEffectSourceV3 = ParticleEffectRootSourceV3;
90
+ /**
91
+ * Renderer semantic vocabulary shared by source validation and compiler
92
+ * reflection. Keeping the allowed keys here prevents a parser/compiler drift
93
+ * where a typo is accepted by one boundary and ignored by the other.
94
+ */
95
+ export declare const PARTICLE_RENDERER_SEMANTICS: Readonly<Record<ParticleRendererSourceV3['kind'], readonly ParticleRendererSemantic[]>>;
96
+ /** Default mapping for fields with implicit runtime behavior; overrides merge in the compiler. */
97
+ export declare function defaultParticleRendererAttributes(kind: ParticleRendererSourceV3['kind']): ParticleRendererSemanticMap;
98
+ /** Parse the single Program v3 source shape. Older source versions are rejected. */
99
+ export declare function parseParticleEffectSourceV3(value: unknown): Result<ParticleEffectSourceV3, ParticleCodeSourceError>;
100
+ export declare function defineParticleEffectSourceV3<T extends ParticleEffectSourceV3>(source: T): T;
101
+ //# sourceMappingURL=code-source-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-source-v3.d.ts","sourceRoot":"","sources":["../src/code-source-v3.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@ export type ParticleBoundsSource = {
11
11
  readonly radius: number;
12
12
  };
13
13
  export type ParticleRendererOverflowPolicy = 'drop-newest' | 'drop-oldest';
14
- export type ParticleRendererSorting = 'none' | 'emitter' | 'back-to-front';
14
+ /** Internal structural projection used while validating the v3 source. */
15
+ export type ParticleRendererSortingStructure = 'none' | 'emitter' | 'back-to-front';
15
16
  export interface ParticleTextureSheetSource {
16
17
  readonly columns: number;
17
18
  readonly rows: number;
@@ -21,7 +22,7 @@ export interface ParticleTextureSheetSource {
21
22
  export interface ParticleSoftParticleSource {
22
23
  readonly fadeDistance: number;
23
24
  }
24
- export type ParticleRendererSource = {
25
+ export type ParticleRendererSourceStructure = {
25
26
  readonly kind: 'billboard';
26
27
  readonly material: string;
27
28
  readonly blend?: 'additive' | 'alpha' | 'opaque-cutout';
@@ -31,7 +32,7 @@ export type ParticleRendererSource = {
31
32
  readonly textureSheet?: ParticleTextureSheetSource;
32
33
  readonly pivot?: readonly [number, number];
33
34
  readonly softParticle?: ParticleSoftParticleSource;
34
- readonly sorting?: ParticleRendererSorting;
35
+ readonly sorting?: ParticleRendererSortingStructure;
35
36
  } | {
36
37
  readonly kind: 'mesh';
37
38
  readonly material: string;
@@ -92,7 +93,7 @@ export interface ParticleEventSource {
92
93
  readonly fanOut: number;
93
94
  readonly recursionDepth: number;
94
95
  }
95
- export interface ParticleEmitterSourceV2 {
96
+ export interface ParticleEmitterSourceStructure {
96
97
  readonly id: string;
97
98
  readonly capacity: number;
98
99
  readonly backend: {
@@ -111,16 +112,16 @@ export interface ParticleEmitterSourceV2 {
111
112
  readonly program: {
112
113
  readonly module: string;
113
114
  };
114
- readonly renderers: readonly ParticleRendererSource[];
115
+ readonly renderers: readonly ParticleRendererSourceStructure[];
115
116
  readonly channels?: readonly ParticleChannelSource[];
116
117
  readonly events?: readonly ParticleEventSource[];
117
118
  readonly simulationWhenCulled?: 'continue' | 'pause' | 'restart-on-visible';
118
119
  }
119
- export interface ParticleEffectRootSourceV2 {
120
- readonly schemaVersion: 2;
121
- readonly emitters: readonly ParticleEmitterSourceV2[];
120
+ export interface ParticleEffectRootSourceStructure {
121
+ readonly schemaVersion: 3;
122
+ readonly emitters: readonly ParticleEmitterSourceStructure[];
122
123
  }
123
- export type ParticleEffectSourceV2 = ParticleEffectRootSourceV2;
124
+ export type ParticleEffectSourceStructure = ParticleEffectRootSourceStructure;
124
125
  export interface ParticleCodeSourceInvalidDetail {
125
126
  readonly path: string;
126
127
  readonly emitterId?: string;
@@ -135,6 +136,6 @@ export interface ParticleCodeSourceError {
135
136
  }
136
137
  /** Parse compiler-owned stage metadata from authored WGSL comments. */
137
138
  export declare function parseVfxStageDeclarations(source: string): Result<readonly ParticleStageSource[], ParticleCodeSourceError>;
138
- export declare function parseParticleEffectSourceV2(value: unknown): Result<ParticleEffectSourceV2, ParticleCodeSourceError>;
139
- export declare function defineParticleEffectSourceV2<T extends ParticleEffectSourceV2>(source: T): T;
139
+ /** Validate the fields shared by the canonical Program v3 source parser. */
140
+ export declare function parseParticleEffectSourceStructure(value: unknown): Result<ParticleEffectSourceStructure, ParticleCodeSourceError>;
140
141
  //# sourceMappingURL=code-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-source.d.ts","sourceRoot":"","sources":["../src/code-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-source.d.ts","sourceRoot":"","sources":["../src/code-source.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,11 @@ import { type Result } from '@forgeax/engine-types';
2
2
  export type VfxDataInterfaceKind = keyof VfxDataInterfaceBindingTypeByKind;
3
3
  export type VfxDataInterfaceToken = `vfx:${VfxDataInterfaceKind}`;
4
4
  export type VfxDataInterfaceBindingType = VfxDataInterfaceBindingTypeByKind[VfxDataInterfaceKind];
5
+ export type VfxDataInterfaceResourceKind = 'buffer' | 'texture-view' | 'sampler';
5
6
  type VfxDataInterfaceBindingTypeByKind = {
6
7
  readonly camera: 'uniform';
7
8
  readonly 'scene-depth': 'sampled-depth';
8
9
  readonly noise: 'sampled-float';
9
- readonly channel: 'storage-read';
10
10
  };
11
11
  export type VfxDataInterfaceLifetime = 'generation';
12
12
  export interface VfxDataInterfaceRequirement {
@@ -15,12 +15,26 @@ export interface VfxDataInterfaceRequirement {
15
15
  readonly binding: number;
16
16
  readonly bindingType: VfxDataInterfaceBindingType;
17
17
  readonly lifetime: VfxDataInterfaceLifetime;
18
+ /** Scene-depth composition is intentionally proven only for single-sample targets. */
19
+ readonly sampleCount?: 1;
18
20
  }
19
21
  export interface VfxDataInterfaceResource {
20
22
  readonly token: VfxDataInterfaceToken;
21
23
  readonly kind: VfxDataInterfaceKind;
22
24
  readonly bindingType: VfxDataInterfaceBindingType;
23
25
  readonly generation: number;
26
+ readonly sampleCount?: number;
27
+ /**
28
+ * Provider-owned opaque resource. Render owners refine this to their typed
29
+ * prepared-resource reference; VFX never inspects a backend handle.
30
+ */
31
+ readonly resource?: {
32
+ readonly kind: 'buffer' | 'texture-view' | 'sampler';
33
+ readonly value: unknown;
34
+ /** Required when a provider supplies an external buffer to a compute bind group. */
35
+ readonly size?: number;
36
+ readonly usage?: 'uniform' | 'storage';
37
+ };
24
38
  }
25
39
  export interface VfxDataInterfaceErrorDetail {
26
40
  readonly token: VfxDataInterfaceToken;
@@ -29,6 +43,8 @@ export interface VfxDataInterfaceErrorDetail {
29
43
  readonly actualGeneration?: number;
30
44
  readonly expectedBindingType?: VfxDataInterfaceBindingType;
31
45
  readonly actualBindingType?: VfxDataInterfaceBindingType;
46
+ readonly expectedResourceKind?: VfxDataInterfaceResourceKind;
47
+ readonly actualResourceKind?: VfxDataInterfaceResourceKind;
32
48
  }
33
49
  export interface VfxDataInterfaceError {
34
50
  readonly code: 'vfx-data-interface-missing' | 'vfx-data-interface-wrong-type' | 'vfx-data-interface-stale' | 'vfx-data-interface-duplicate';
@@ -1 +1 @@
1
- {"version":3,"file":"data-interface.d.ts","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG,OAAO,oBAAoB,EAAE,CAAC;AAElE,MAAM,MAAM,2BAA2B,GAAG,iCAAiC,CAAC,oBAAoB,CAAC,CAAC;AAElG,KAAK,iCAAiC,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;IAC3D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;CAC1D;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EACT,4BAA4B,GAC5B,+BAA+B,GAC/B,0BAA0B,GAC1B,8BAA8B,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;CAC9C;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,IAAI;IAC5F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAC,CAAC;CACnG,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACzD;AAYD,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,2BAA2B,EAAE,EACpD,SAAS,EAAE,SAAS,wBAAwB,EAAE,EAC9C,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAoG3D"}
1
+ {"version":3,"file":"data-interface.d.ts","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type Result } from '@forgeax/engine-types';
2
2
  import type { VfxDataInterfaceRequirement } from './data-interface.js';
3
+ import type { VfxCustomLayout, VfxParticleCoreLayout } from './particle-layout.js';
3
4
  export type VfxValue = number | readonly number[];
4
5
  export type VfxValueMap = Readonly<Record<string, VfxValue>>;
5
6
  export interface VfxReflectedField {
@@ -17,9 +18,12 @@ export interface VfxReflectedStruct {
17
18
  readonly alignment: number;
18
19
  }
19
20
  export interface VfxEffectReflection {
20
- readonly version: 1;
21
+ /** The single executable particle data ABI. */
22
+ readonly version: 3;
21
23
  readonly parameters: VfxReflectedStruct;
22
24
  readonly custom: VfxReflectedStruct;
25
+ readonly core: VfxParticleCoreLayout;
26
+ readonly customLayout: VfxCustomLayout;
23
27
  readonly dataInterfaces?: readonly VfxDataInterfaceRequirement[];
24
28
  readonly fingerprint: string;
25
29
  }
@@ -37,10 +41,16 @@ export interface VfxEffectContract<Values extends VfxValueMap = VfxValueMap> {
37
41
  readonly reflection: VfxEffectReflection;
38
42
  readonly fingerprint: string;
39
43
  readonly packedSize: number;
44
+ /** Bytes in the effect-instance Parameters uniform. */
45
+ readonly parameterSize: number;
46
+ /** Bytes in one persistent per-particle Custom record. */
47
+ readonly customStride: number;
40
48
  readonly defaults: Values;
41
49
  createValues(initial?: Partial<Values>): Result<Values, VfxEffectContractError>;
42
50
  validateValues(values: VfxValueMap): Result<Values, VfxEffectContractError>;
43
51
  pack(values: Values): Result<Uint8Array, VfxEffectContractError>;
52
+ packParameters(values: Values): Result<Uint8Array, VfxEffectContractError>;
53
+ packCustom(values: VfxValueMap): Result<Uint8Array, VfxEffectContractError>;
44
54
  }
45
55
  declare const VECTOR_LENGTH: {
46
56
  f32: number;
@@ -1 +1 @@
1
- {"version":3,"file":"effect-contract.d.ts","sourceRoot":"","sources":["../src/effect-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAEvE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAClD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EACT,yBAAyB,GACzB,yBAAyB,GACzB,sBAAsB,GACtB,wBAAwB,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW;IACzE,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAChF,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC5E,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;CAClE;AAED,QAAA,MAAM,aAAa;;;;;;;CAOlB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AAgHtD,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,EAC9E,UAAU,EAAE,mBAAmB,GAC9B,iBAAiB,CAAC,MAAM,CAAC,CAiC3B;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,mBAAmB,EAC/B,MAAM,EAAE,WAAW,GAClB,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAE7C"}
1
+ {"version":3,"file":"effect-contract.d.ts","sourceRoot":"","sources":["../src/effect-contract.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { AssetRegistry as LegacyAssetRegistry, RuntimeAssetRegistry } from '@forgeax/engine-assets-runtime';
2
2
  import type { AssetDecoderContribution, LoadContext, Result } from '@forgeax/engine-types';
3
- import { type VfxGpuEffectAsset } from './gpu-program.js';
3
+ import { type VfxGpuEffectAssetAny } from './gpu-program.js';
4
4
  export interface VfxGpuAssetError {
5
- readonly code: 'vfx-asset-v2-invalid' | 'vfx-asset-v2-program-missing' | 'vfx-asset-v2-fingerprint-mismatch';
5
+ readonly code: 'vfx-asset-version-unsupported' | 'vfx-asset-v3-invalid' | 'vfx-asset-v3-program-missing' | 'vfx-asset-v3-fingerprint-mismatch';
6
6
  readonly expected: string;
7
7
  readonly hint: string;
8
8
  readonly detail: {
@@ -24,10 +24,10 @@ interface PackLoaderInput {
24
24
  }
25
25
  export declare const vfxGpuEffectPackLoader: {
26
26
  kind: string;
27
- load(input: PackLoaderInput, _context: LoadContext): Promise<Result<VfxGpuEffectAsset, VfxGpuAssetError>>;
27
+ load(input: PackLoaderInput, _context: LoadContext): Promise<Result<VfxGpuEffectAssetAny, VfxGpuAssetError>>;
28
28
  };
29
29
  /** VFX owner decoder contribution for the core registry's typed map. */
30
- export declare const vfxGpuEffectContribution: AssetDecoderContribution<VfxGpuEffectAsset, 'particle-effect'>;
31
- export declare function loadVfxGpuEffect(registry: LegacyAssetRegistry | RuntimeAssetRegistry, guid: string): Promise<Result<VfxGpuEffectAsset, unknown>>;
30
+ export declare const vfxGpuEffectContribution: AssetDecoderContribution<VfxGpuEffectAssetAny, 'particle-effect'>;
31
+ export declare function loadVfxGpuEffect(registry: LegacyAssetRegistry | RuntimeAssetRegistry, guid: string): Promise<Result<VfxGpuEffectAssetAny, unknown>>;
32
32
  export {};
33
33
  //# sourceMappingURL=gpu-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-loader.d.ts","sourceRoot":"","sources":["../src/gpu-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,mBAAmB,EACpC,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,wBAAwB,EAGxB,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EACT,sBAAsB,GACtB,8BAA8B,GAC9B,mCAAmC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAC1B,MAAM,CACJ,MAAM,EACN;QACE,QAAQ,CAAC,UAAU,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC5B,CACF,CACF,CAAC;CACH;AAuED,eAAO,MAAM,sBAAsB;;gBAGxB,eAAe,YACZ,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;CAmHxD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,wBAAwB,CAC7D,iBAAiB,EACjB,iBAAiB,CAoClB,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,mBAAmB,GAAG,oBAAoB,EACpD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAW7C"}
1
+ {"version":3,"file":"gpu-loader.d.ts","sourceRoot":"","sources":["../src/gpu-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,mBAAmB,EACpC,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,wBAAwB,EAGxB,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EACT,+BAA+B,GAC/B,sBAAsB,GACtB,8BAA8B,GAC9B,mCAAmC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAC1B,MAAM,CACJ,MAAM,EACN;QACE,QAAQ,CAAC,UAAU,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC5B,CACF,CACF,CAAC;CACH;AAmFD,eAAO,MAAM,sBAAsB;;gBAGxB,eAAe,YACZ,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;CAgI3D,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,wBAAwB,CAC7D,oBAAoB,EACpB,iBAAiB,CAoClB,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,mBAAmB,GAAG,oBAAoB,EACpD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAWhD"}