@forgeax/engine-vfx 0.0.0-dev.8d955ade1c79
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.
- package/LICENSE +202 -0
- package/README.md +214 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/authoring-descriptor.unit.test.d.ts +2 -0
- package/dist/__tests__/authoring-descriptor.unit.test.d.ts.map +1 -0
- package/dist/__tests__/channel-input.unit.test.d.ts +2 -0
- package/dist/__tests__/channel-input.unit.test.d.ts.map +1 -0
- package/dist/__tests__/channel-inspect.unit.test.d.ts +2 -0
- package/dist/__tests__/channel-inspect.unit.test.d.ts.map +1 -0
- package/dist/__tests__/channel-overflow-policy-owner.test-d.d.ts +2 -0
- package/dist/__tests__/channel-overflow-policy-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/code-source-v2.unit.test.d.ts +2 -0
- package/dist/__tests__/code-source-v2.unit.test.d.ts.map +1 -0
- package/dist/__tests__/data-interface-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/data-interface-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/effect-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/effect-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-program-simulation-culling-owner.test-d.d.ts +2 -0
- package/dist/__tests__/gpu-program-simulation-culling-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/gpu-reflection-vocabulary-owner.test-d.d.ts +2 -0
- package/dist/__tests__/gpu-reflection-vocabulary-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/gpu-runtime.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-runtime.integration.test.d.ts.map +1 -0
- package/dist/__tests__/inspect-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/inspect-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/instance-public-api.unit.test.d.ts +2 -0
- package/dist/__tests__/instance-public-api.unit.test.d.ts.map +1 -0
- package/dist/__tests__/instance.unit.test.d.ts +2 -0
- package/dist/__tests__/instance.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loader-v1-rejection.unit.test.d.ts +2 -0
- package/dist/__tests__/loader-v1-rejection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/player-reflection.unit.test.d.ts +2 -0
- package/dist/__tests__/player-reflection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/player-type.test-d.d.ts +2 -0
- package/dist/__tests__/player-type.test-d.d.ts.map +1 -0
- package/dist/__tests__/renderer-source.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-source.unit.test.d.ts.map +1 -0
- package/dist/__tests__/replay-canonical.unit.test.d.ts +2 -0
- package/dist/__tests__/replay-canonical.unit.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-dist-isolation.test.d.ts +2 -0
- package/dist/__tests__/runtime-dist-isolation.test.d.ts.map +1 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/stage-source.unit.test.d.ts +2 -0
- package/dist/__tests__/stage-source.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vfx-data-interface-vocabulary-owner.test-d.d.ts +2 -0
- package/dist/__tests__/vfx-data-interface-vocabulary-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/vfx-performance-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/vfx-performance-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vfx-value-type-owner.test-d.d.ts +2 -0
- package/dist/__tests__/vfx-value-type-owner.test-d.d.ts.map +1 -0
- package/dist/assets/particle-effect-decoder.d.ts +3 -0
- package/dist/assets/particle-effect-decoder.d.ts.map +1 -0
- package/dist/authoring-descriptor.d.ts +60 -0
- package/dist/authoring-descriptor.d.ts.map +1 -0
- package/dist/code-source.d.ts +140 -0
- package/dist/code-source.d.ts.map +1 -0
- package/dist/data-interface.d.ts +53 -0
- package/dist/data-interface.d.ts.map +1 -0
- package/dist/effect-contract.d.ts +57 -0
- package/dist/effect-contract.d.ts.map +1 -0
- package/dist/gpu-loader.d.ts +33 -0
- package/dist/gpu-loader.d.ts.map +1 -0
- package/dist/gpu-program.d.ts +80 -0
- package/dist/gpu-program.d.ts.map +1 -0
- package/dist/gpu-runtime.d.ts +174 -0
- package/dist/gpu-runtime.d.ts.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +1995 -0
- package/dist/index.mjs.map +1 -0
- package/dist/instance.d.ts +86 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/player.d.ts +17 -0
- package/dist/player.d.ts.map +1 -0
- package/package.json +66 -0
- package/src/__tests__/authoring-descriptor.unit.test.ts +138 -0
- package/src/__tests__/channel-input.unit.test.ts +65 -0
- package/src/__tests__/channel-inspect.unit.test.ts +65 -0
- package/src/__tests__/channel-overflow-policy-owner.test-d.ts +55 -0
- package/src/__tests__/code-source-v2.unit.test.ts +121 -0
- package/src/__tests__/data-interface-contract.unit.test.ts +92 -0
- package/src/__tests__/effect-contract.unit.test.ts +62 -0
- package/src/__tests__/gpu-program-simulation-culling-owner.test-d.ts +58 -0
- package/src/__tests__/gpu-reflection-vocabulary-owner.test-d.ts +23 -0
- package/src/__tests__/gpu-runtime.integration.test.ts +549 -0
- package/src/__tests__/inspect-snapshot.unit.test.ts +51 -0
- package/src/__tests__/instance-public-api.unit.test.ts +27 -0
- package/src/__tests__/instance.unit.test.ts +107 -0
- package/src/__tests__/loader-v1-rejection.unit.test.ts +105 -0
- package/src/__tests__/player-reflection.unit.test.ts +91 -0
- package/src/__tests__/player-type.test-d.ts +54 -0
- package/src/__tests__/renderer-source.unit.test.ts +58 -0
- package/src/__tests__/replay-canonical.unit.test.ts +68 -0
- package/src/__tests__/runtime-dist-isolation.test.ts +100 -0
- package/src/__tests__/scriptable-pack-consumer.test-d.ts +9 -0
- package/src/__tests__/stage-source.unit.test.ts +64 -0
- package/src/__tests__/vfx-data-interface-vocabulary-owner.test-d.ts +34 -0
- package/src/__tests__/vfx-performance-contract.unit.test.ts +19 -0
- package/src/__tests__/vfx-value-type-owner.test-d.ts +32 -0
- package/src/assets/particle-effect-decoder.ts +34 -0
- package/src/authoring-descriptor.ts +355 -0
- package/src/code-source.ts +827 -0
- package/src/data-interface.ts +181 -0
- package/src/effect-contract.ts +220 -0
- package/src/gpu-loader.ts +291 -0
- package/src/gpu-program.ts +101 -0
- package/src/gpu-runtime.ts +807 -0
- package/src/index.ts +110 -0
- package/src/instance.ts +379 -0
- package/src/player.ts +21 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-types';
|
|
2
|
+
/** Engine-owned seed module used by newly-authored particle effects. */
|
|
3
|
+
export declare const PARTICLE_CODE_DEFAULT_MODULE_ID: "forgeax_vfx::default";
|
|
4
|
+
export type ParticleBoundsSource = {
|
|
5
|
+
readonly kind: 'aabb';
|
|
6
|
+
readonly min: readonly [number, number, number];
|
|
7
|
+
readonly max: readonly [number, number, number];
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'sphere';
|
|
10
|
+
readonly center: readonly [number, number, number];
|
|
11
|
+
readonly radius: number;
|
|
12
|
+
};
|
|
13
|
+
export type ParticleRendererOverflowPolicy = 'drop-newest' | 'drop-oldest';
|
|
14
|
+
export type ParticleRendererSorting = 'none' | 'emitter' | 'back-to-front';
|
|
15
|
+
export interface ParticleTextureSheetSource {
|
|
16
|
+
readonly columns: number;
|
|
17
|
+
readonly rows: number;
|
|
18
|
+
readonly frameRate: number;
|
|
19
|
+
readonly frameCount?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface ParticleSoftParticleSource {
|
|
22
|
+
readonly fadeDistance: number;
|
|
23
|
+
}
|
|
24
|
+
export type ParticleRendererSource = {
|
|
25
|
+
readonly kind: 'billboard';
|
|
26
|
+
readonly material: string;
|
|
27
|
+
readonly blend?: 'additive' | 'alpha' | 'opaque-cutout';
|
|
28
|
+
readonly enabled?: boolean;
|
|
29
|
+
readonly capacity?: number;
|
|
30
|
+
readonly overflow?: ParticleRendererOverflowPolicy;
|
|
31
|
+
readonly textureSheet?: ParticleTextureSheetSource;
|
|
32
|
+
readonly pivot?: readonly [number, number];
|
|
33
|
+
readonly softParticle?: ParticleSoftParticleSource;
|
|
34
|
+
readonly sorting?: ParticleRendererSorting;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: 'mesh';
|
|
37
|
+
readonly material: string;
|
|
38
|
+
readonly mesh: string;
|
|
39
|
+
readonly submesh?: number;
|
|
40
|
+
readonly enabled?: boolean;
|
|
41
|
+
} | {
|
|
42
|
+
readonly kind: 'ribbon';
|
|
43
|
+
readonly material: string;
|
|
44
|
+
readonly stripKey: 'alive-index';
|
|
45
|
+
readonly capacity: number;
|
|
46
|
+
readonly overflow?: ParticleRendererOverflowPolicy;
|
|
47
|
+
readonly enabled?: boolean;
|
|
48
|
+
readonly width?: number;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: 'trail';
|
|
51
|
+
readonly material: string;
|
|
52
|
+
readonly historyLength: number;
|
|
53
|
+
readonly capacity: number;
|
|
54
|
+
readonly overflow?: ParticleRendererOverflowPolicy;
|
|
55
|
+
readonly enabled?: boolean;
|
|
56
|
+
readonly width?: number;
|
|
57
|
+
} | {
|
|
58
|
+
readonly kind: 'beam';
|
|
59
|
+
readonly material: string;
|
|
60
|
+
readonly endpointField: 'velocity';
|
|
61
|
+
readonly capacity: number;
|
|
62
|
+
readonly overflow?: ParticleRendererOverflowPolicy;
|
|
63
|
+
readonly enabled?: boolean;
|
|
64
|
+
readonly width?: number;
|
|
65
|
+
};
|
|
66
|
+
export type ParticleChannelOverflowPolicy = ParticleRendererOverflowPolicy;
|
|
67
|
+
export type ParticleStageDomain = 'particle';
|
|
68
|
+
export type ParticleStageResourceAccess = 'read' | 'write' | 'read-write';
|
|
69
|
+
export interface ParticleStageResourceSource {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
readonly access: ParticleStageResourceAccess;
|
|
72
|
+
}
|
|
73
|
+
export interface ParticleStageSource {
|
|
74
|
+
readonly id: string;
|
|
75
|
+
readonly entry: string;
|
|
76
|
+
readonly domain: ParticleStageDomain;
|
|
77
|
+
readonly resources: readonly ParticleStageResourceSource[];
|
|
78
|
+
readonly dependsOn: readonly string[];
|
|
79
|
+
readonly iterationBudget: number;
|
|
80
|
+
}
|
|
81
|
+
export declare const PARTICLE_STAGE_RESOURCE_NAMES: readonly ["particles", "runtime", "aliveIndices", "counters", "indirect", "scratch", "billboardInstances", "channelInputs", "events", "eventCounters"];
|
|
82
|
+
export interface ParticleChannelSource {
|
|
83
|
+
readonly id: string;
|
|
84
|
+
readonly payload?: 'impact';
|
|
85
|
+
readonly capacity: number;
|
|
86
|
+
readonly overflow: ParticleChannelOverflowPolicy;
|
|
87
|
+
}
|
|
88
|
+
export interface ParticleEventSource {
|
|
89
|
+
readonly id: string;
|
|
90
|
+
readonly channel: string;
|
|
91
|
+
readonly subEmitter: string;
|
|
92
|
+
readonly fanOut: number;
|
|
93
|
+
readonly recursionDepth: number;
|
|
94
|
+
}
|
|
95
|
+
export interface ParticleEmitterSourceV2 {
|
|
96
|
+
readonly id: string;
|
|
97
|
+
readonly capacity: number;
|
|
98
|
+
readonly backend: {
|
|
99
|
+
readonly required: 'gpu';
|
|
100
|
+
};
|
|
101
|
+
readonly space: 'local' | 'world';
|
|
102
|
+
readonly bounds: ParticleBoundsSource;
|
|
103
|
+
readonly schedule: {
|
|
104
|
+
readonly rate: number;
|
|
105
|
+
readonly bursts?: readonly {
|
|
106
|
+
readonly time: number;
|
|
107
|
+
readonly count: number;
|
|
108
|
+
}[];
|
|
109
|
+
readonly loopDuration?: number;
|
|
110
|
+
};
|
|
111
|
+
readonly program: {
|
|
112
|
+
readonly module: string;
|
|
113
|
+
};
|
|
114
|
+
readonly renderers: readonly ParticleRendererSource[];
|
|
115
|
+
readonly channels?: readonly ParticleChannelSource[];
|
|
116
|
+
readonly events?: readonly ParticleEventSource[];
|
|
117
|
+
readonly simulationWhenCulled?: 'continue' | 'pause' | 'restart-on-visible';
|
|
118
|
+
}
|
|
119
|
+
export interface ParticleEffectRootSourceV2 {
|
|
120
|
+
readonly schemaVersion: 2;
|
|
121
|
+
readonly emitters: readonly ParticleEmitterSourceV2[];
|
|
122
|
+
}
|
|
123
|
+
export type ParticleEffectSourceV2 = ParticleEffectRootSourceV2;
|
|
124
|
+
export interface ParticleCodeSourceInvalidDetail {
|
|
125
|
+
readonly path: string;
|
|
126
|
+
readonly emitterId?: string;
|
|
127
|
+
readonly stageId?: string;
|
|
128
|
+
readonly resource?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface ParticleCodeSourceError {
|
|
131
|
+
readonly code: 'vfx-source-invalid' | 'vfx-source-version-unsupported' | 'vfx-source-channel-invalid' | 'vfx-source-event-invalid' | 'vfx-source-stage-invalid' | 'vfx-source-renderer-invalid';
|
|
132
|
+
readonly expected: string;
|
|
133
|
+
readonly hint: string;
|
|
134
|
+
readonly detail: ParticleCodeSourceInvalidDetail;
|
|
135
|
+
}
|
|
136
|
+
/** Parse compiler-owned stage metadata from authored WGSL comments. */
|
|
137
|
+
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;
|
|
140
|
+
//# sourceMappingURL=code-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-source.d.ts","sourceRoot":"","sources":["../src/code-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wEAAwE;AACxE,eAAO,MAAM,+BAA+B,EAAG,sBAA+B,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,8BAA8B,GAAG,aAAa,GAAG,aAAa,CAAC;AAC3E,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;AAE3E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,eAAe,CAAC;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;CAC5C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,6BAA6B,GAAG,8BAA8B,CAAC;AAE3E,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAC7C,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,eAAO,MAAM,6BAA6B,wJAW/B,CAAC;AAEZ,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC/E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,oBAAoB,CAAC;CAC7E;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACvD;AAED,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEhE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EACT,oBAAoB,GACpB,gCAAgC,GAChC,4BAA4B,GAC5B,0BAA0B,GAC1B,0BAA0B,GAC1B,6BAA6B,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;CAClD;AA2GD,uEAAuE;AACvE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,SAAS,mBAAmB,EAAE,EAAE,uBAAuB,CAAC,CAiFjE;AAwZD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAkDzD;AAED,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,sBAAsB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAI3F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-types';
|
|
2
|
+
export type VfxDataInterfaceKind = keyof VfxDataInterfaceBindingTypeByKind;
|
|
3
|
+
export type VfxDataInterfaceToken = `vfx:${VfxDataInterfaceKind}`;
|
|
4
|
+
export type VfxDataInterfaceBindingType = VfxDataInterfaceBindingTypeByKind[VfxDataInterfaceKind];
|
|
5
|
+
type VfxDataInterfaceBindingTypeByKind = {
|
|
6
|
+
readonly camera: 'uniform';
|
|
7
|
+
readonly 'scene-depth': 'sampled-depth';
|
|
8
|
+
readonly noise: 'sampled-float';
|
|
9
|
+
readonly channel: 'storage-read';
|
|
10
|
+
};
|
|
11
|
+
export type VfxDataInterfaceLifetime = 'generation';
|
|
12
|
+
export interface VfxDataInterfaceRequirement {
|
|
13
|
+
readonly token: VfxDataInterfaceToken;
|
|
14
|
+
readonly kind: VfxDataInterfaceKind;
|
|
15
|
+
readonly binding: number;
|
|
16
|
+
readonly bindingType: VfxDataInterfaceBindingType;
|
|
17
|
+
readonly lifetime: VfxDataInterfaceLifetime;
|
|
18
|
+
}
|
|
19
|
+
export interface VfxDataInterfaceResource {
|
|
20
|
+
readonly token: VfxDataInterfaceToken;
|
|
21
|
+
readonly kind: VfxDataInterfaceKind;
|
|
22
|
+
readonly bindingType: VfxDataInterfaceBindingType;
|
|
23
|
+
readonly generation: number;
|
|
24
|
+
}
|
|
25
|
+
export interface VfxDataInterfaceErrorDetail {
|
|
26
|
+
readonly token: VfxDataInterfaceToken;
|
|
27
|
+
readonly providerId?: string;
|
|
28
|
+
readonly expectedGeneration?: number;
|
|
29
|
+
readonly actualGeneration?: number;
|
|
30
|
+
readonly expectedBindingType?: VfxDataInterfaceBindingType;
|
|
31
|
+
readonly actualBindingType?: VfxDataInterfaceBindingType;
|
|
32
|
+
}
|
|
33
|
+
export interface VfxDataInterfaceError {
|
|
34
|
+
readonly code: 'vfx-data-interface-missing' | 'vfx-data-interface-wrong-type' | 'vfx-data-interface-stale' | 'vfx-data-interface-duplicate';
|
|
35
|
+
readonly expected: string;
|
|
36
|
+
readonly hint: string;
|
|
37
|
+
readonly detail: VfxDataInterfaceErrorDetail;
|
|
38
|
+
}
|
|
39
|
+
export type VfxDataInterfaceProvider<K extends VfxDataInterfaceKind = VfxDataInterfaceKind> = {
|
|
40
|
+
readonly id: string;
|
|
41
|
+
readonly token: `vfx:${K}`;
|
|
42
|
+
readonly kind: K;
|
|
43
|
+
readonly bindingType: VfxDataInterfaceBindingTypeByKind[K];
|
|
44
|
+
readonly provide: (generation: number) => Result<VfxDataInterfaceResource, VfxDataInterfaceError>;
|
|
45
|
+
};
|
|
46
|
+
export interface VfxDataInterfaceResolution {
|
|
47
|
+
readonly generation: number;
|
|
48
|
+
readonly readiness: 'ready';
|
|
49
|
+
readonly resources: readonly VfxDataInterfaceResource[];
|
|
50
|
+
}
|
|
51
|
+
export declare function resolveVfxDataInterfaces(requirements: readonly VfxDataInterfaceRequirement[], providers: readonly VfxDataInterfaceProvider[], generation: number): Result<VfxDataInterfaceResolution, VfxDataInterfaceError>;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=data-interface.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-types';
|
|
2
|
+
import type { VfxDataInterfaceRequirement } from './data-interface.js';
|
|
3
|
+
export type VfxValue = number | readonly number[];
|
|
4
|
+
export type VfxValueMap = Readonly<Record<string, VfxValue>>;
|
|
5
|
+
export interface VfxReflectedField {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly type: VfxValueType;
|
|
8
|
+
readonly offset: number;
|
|
9
|
+
readonly size: number;
|
|
10
|
+
readonly alignment: number;
|
|
11
|
+
readonly defaultValue?: VfxValue;
|
|
12
|
+
}
|
|
13
|
+
export interface VfxReflectedStruct {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly fields: readonly VfxReflectedField[];
|
|
16
|
+
readonly size: number;
|
|
17
|
+
readonly alignment: number;
|
|
18
|
+
}
|
|
19
|
+
export interface VfxEffectReflection {
|
|
20
|
+
readonly version: 1;
|
|
21
|
+
readonly parameters: VfxReflectedStruct;
|
|
22
|
+
readonly custom: VfxReflectedStruct;
|
|
23
|
+
readonly dataInterfaces?: readonly VfxDataInterfaceRequirement[];
|
|
24
|
+
readonly fingerprint: string;
|
|
25
|
+
}
|
|
26
|
+
export interface VfxEffectContractErrorDetail {
|
|
27
|
+
readonly path: string;
|
|
28
|
+
readonly actual?: unknown;
|
|
29
|
+
}
|
|
30
|
+
export interface VfxEffectContractError {
|
|
31
|
+
readonly code: 'vfx-value-unknown-field' | 'vfx-value-type-mismatch' | 'vfx-value-not-finite' | 'vfx-reflection-invalid';
|
|
32
|
+
readonly expected: string;
|
|
33
|
+
readonly hint: string;
|
|
34
|
+
readonly detail: VfxEffectContractErrorDetail;
|
|
35
|
+
}
|
|
36
|
+
export interface VfxEffectContract<Values extends VfxValueMap = VfxValueMap> {
|
|
37
|
+
readonly reflection: VfxEffectReflection;
|
|
38
|
+
readonly fingerprint: string;
|
|
39
|
+
readonly packedSize: number;
|
|
40
|
+
readonly defaults: Values;
|
|
41
|
+
createValues(initial?: Partial<Values>): Result<Values, VfxEffectContractError>;
|
|
42
|
+
validateValues(values: VfxValueMap): Result<Values, VfxEffectContractError>;
|
|
43
|
+
pack(values: Values): Result<Uint8Array, VfxEffectContractError>;
|
|
44
|
+
}
|
|
45
|
+
declare const VECTOR_LENGTH: {
|
|
46
|
+
f32: number;
|
|
47
|
+
i32: number;
|
|
48
|
+
u32: number;
|
|
49
|
+
'vec2<f32>': number;
|
|
50
|
+
'vec3<f32>': number;
|
|
51
|
+
'vec4<f32>': number;
|
|
52
|
+
};
|
|
53
|
+
export type VfxValueType = keyof typeof VECTOR_LENGTH;
|
|
54
|
+
export declare function createVfxEffectContract<Values extends VfxValueMap = VfxValueMap>(reflection: VfxEffectReflection): VfxEffectContract<Values>;
|
|
55
|
+
export declare function validateVfxEffectValues(reflection: VfxEffectReflection, values: VfxValueMap): Result<VfxValueMap, VfxEffectContractError>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=effect-contract.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AssetRegistry as LegacyAssetRegistry, RuntimeAssetRegistry } from '@forgeax/engine-assets-runtime';
|
|
2
|
+
import type { AssetDecoderContribution, LoadContext, Result } from '@forgeax/engine-types';
|
|
3
|
+
import { type VfxGpuEffectAsset } from './gpu-program.js';
|
|
4
|
+
export interface VfxGpuAssetError {
|
|
5
|
+
readonly code: 'vfx-asset-v2-invalid' | 'vfx-asset-v2-program-missing' | 'vfx-asset-v2-fingerprint-mismatch';
|
|
6
|
+
readonly expected: string;
|
|
7
|
+
readonly hint: string;
|
|
8
|
+
readonly detail: {
|
|
9
|
+
readonly guid: string;
|
|
10
|
+
readonly path: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
interface PackLoaderInput {
|
|
14
|
+
readonly guid: string;
|
|
15
|
+
readonly kind: string;
|
|
16
|
+
readonly payload: Record<string, unknown>;
|
|
17
|
+
readonly artifacts: Readonly<Record<string, {
|
|
18
|
+
readonly descriptor: {
|
|
19
|
+
readonly path: string;
|
|
20
|
+
readonly mediaType: string;
|
|
21
|
+
};
|
|
22
|
+
readonly bytes: Uint8Array;
|
|
23
|
+
}>>;
|
|
24
|
+
}
|
|
25
|
+
export declare const vfxGpuEffectPackLoader: {
|
|
26
|
+
kind: string;
|
|
27
|
+
load(input: PackLoaderInput, _context: LoadContext): Promise<Result<VfxGpuEffectAsset, VfxGpuAssetError>>;
|
|
28
|
+
};
|
|
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>>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=gpu-loader.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { BindGroupLayoutDescriptor, ParticleEffectAsset, ParticleEffectProgram, ParticleEffectProgramEmitter } from '@forgeax/engine-types';
|
|
2
|
+
import type { ParticleChannelSource, ParticleEmitterSourceV2, ParticleEventSource, ParticleRendererOverflowPolicy, ParticleRendererSorting, ParticleRendererSource, ParticleStageDomain, ParticleStageResourceAccess } from './code-source.js';
|
|
3
|
+
import type { VfxDataInterfaceRequirement } from './data-interface.js';
|
|
4
|
+
import type { VfxEffectReflection } from './effect-contract.js';
|
|
5
|
+
export declare const VFX_GPU_PROGRAM_FORMAT: "forgeax-vfx-program-2";
|
|
6
|
+
export declare const VFX_GPU_PROGRAM_ARTIFACT_KEY: "particle-effect/program.json";
|
|
7
|
+
export interface VfxGpuStageReflection {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly entry: string;
|
|
10
|
+
readonly entryPoint: string;
|
|
11
|
+
readonly domain: ParticleStageDomain;
|
|
12
|
+
readonly resources: readonly {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly access: ParticleStageResourceAccess;
|
|
15
|
+
}[];
|
|
16
|
+
readonly dependsOn: readonly string[];
|
|
17
|
+
readonly iterationBudget: number;
|
|
18
|
+
}
|
|
19
|
+
export interface VfxGpuRendererReflection {
|
|
20
|
+
readonly topology: ParticleRendererSource['kind'];
|
|
21
|
+
readonly resource: string;
|
|
22
|
+
readonly capacity: number;
|
|
23
|
+
readonly overflow: ParticleRendererOverflowPolicy;
|
|
24
|
+
readonly enabled: boolean;
|
|
25
|
+
readonly shaderInputs: readonly string[];
|
|
26
|
+
readonly textureSheet?: {
|
|
27
|
+
readonly columns: number;
|
|
28
|
+
readonly rows: number;
|
|
29
|
+
readonly frameRate: number;
|
|
30
|
+
readonly frameCount: number;
|
|
31
|
+
};
|
|
32
|
+
readonly pivot?: readonly [number, number];
|
|
33
|
+
readonly softParticle?: {
|
|
34
|
+
readonly fadeDistance: number;
|
|
35
|
+
readonly requiresDepth: true;
|
|
36
|
+
};
|
|
37
|
+
readonly sorting?: ParticleRendererSorting;
|
|
38
|
+
readonly stripKey?: 'alive-index';
|
|
39
|
+
readonly historyLength?: number;
|
|
40
|
+
readonly endpointField?: 'velocity';
|
|
41
|
+
}
|
|
42
|
+
export interface VfxGpuProgramReflection {
|
|
43
|
+
readonly hooks: readonly ['vfx_spawn', 'vfx_update'];
|
|
44
|
+
readonly imports: readonly string[];
|
|
45
|
+
readonly resources: readonly string[];
|
|
46
|
+
readonly entryPoints: readonly string[];
|
|
47
|
+
readonly bindings: readonly BindGroupLayoutDescriptor[];
|
|
48
|
+
readonly layout?: VfxEffectReflection;
|
|
49
|
+
readonly dataInterfaces?: readonly VfxDataInterfaceRequirement[];
|
|
50
|
+
readonly eventChannels?: readonly ParticleChannelSource[];
|
|
51
|
+
readonly events?: readonly ParticleEventSource[];
|
|
52
|
+
readonly eventEntryPoint?: 'forgeax_vfx_event_main';
|
|
53
|
+
readonly stages?: readonly VfxGpuStageReflection[];
|
|
54
|
+
readonly renderers?: readonly VfxGpuRendererReflection[];
|
|
55
|
+
}
|
|
56
|
+
export interface VfxGpuEmitterProgram extends Omit<ParticleEffectProgramEmitter, 'schedule' | 'bounds' | 'renderers' | 'reflection' | 'channels' | 'events'> {
|
|
57
|
+
readonly id: string;
|
|
58
|
+
readonly module: string;
|
|
59
|
+
readonly capacity: number;
|
|
60
|
+
readonly backend: ParticleEmitterSourceV2['backend'];
|
|
61
|
+
readonly space: ParticleEmitterSourceV2['space'];
|
|
62
|
+
readonly schedule: ParticleEmitterSourceV2['schedule'];
|
|
63
|
+
readonly bounds: ParticleEmitterSourceV2['bounds'];
|
|
64
|
+
readonly renderers: ParticleEmitterSourceV2['renderers'];
|
|
65
|
+
readonly channels?: readonly ParticleChannelSource[];
|
|
66
|
+
readonly events?: readonly ParticleEventSource[];
|
|
67
|
+
readonly simulationWhenCulled: NonNullable<ParticleEmitterSourceV2['simulationWhenCulled']>;
|
|
68
|
+
readonly wgsl: string;
|
|
69
|
+
readonly reflection: VfxGpuProgramReflection;
|
|
70
|
+
}
|
|
71
|
+
export interface VfxGpuProgram extends Omit<ParticleEffectProgram, 'emitters'> {
|
|
72
|
+
readonly format: typeof VFX_GPU_PROGRAM_FORMAT;
|
|
73
|
+
readonly fingerprint: string;
|
|
74
|
+
readonly emitters: readonly VfxGpuEmitterProgram[];
|
|
75
|
+
}
|
|
76
|
+
export interface VfxGpuEffectAsset extends ParticleEffectAsset {
|
|
77
|
+
readonly guid: string;
|
|
78
|
+
readonly program: VfxGpuProgram;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=gpu-program.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-program.d.ts","sourceRoot":"","sources":["../src/gpu-program.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { type EntityHandle, type World } from '@forgeax/engine-ecs';
|
|
2
|
+
import type { Plugin } from '@forgeax/engine-plugin';
|
|
3
|
+
import { type Handle } from '@forgeax/engine-types';
|
|
4
|
+
import type { VfxValueMap } from './effect-contract.js';
|
|
5
|
+
import type { VfxGpuEmitterProgram } from './gpu-program.js';
|
|
6
|
+
import { ParticleEffectInstance, type VfxChannelCounters, type VfxReplayInput } from './instance.js';
|
|
7
|
+
export declare const VFX_GPU_RUNTIME_RESOURCE_KEY = "VfxGpuRuntime";
|
|
8
|
+
export interface VfxInspectSnapshotInput {
|
|
9
|
+
readonly layoutFingerprint: string;
|
|
10
|
+
readonly parameterGeneration: number;
|
|
11
|
+
readonly patchCount: number;
|
|
12
|
+
readonly dataInterfaces?: unknown;
|
|
13
|
+
readonly channels?: unknown;
|
|
14
|
+
readonly stages?: unknown;
|
|
15
|
+
readonly renderers?: unknown;
|
|
16
|
+
readonly hmr?: unknown;
|
|
17
|
+
readonly gpuTiming?: unknown;
|
|
18
|
+
readonly error?: {
|
|
19
|
+
readonly code: string;
|
|
20
|
+
readonly expected: string;
|
|
21
|
+
readonly hint: string;
|
|
22
|
+
readonly detail: unknown;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function createVfxInspectSnapshot(input: VfxInspectSnapshotInput): {
|
|
26
|
+
readonly error?: {
|
|
27
|
+
readonly code: string;
|
|
28
|
+
readonly expected: string;
|
|
29
|
+
readonly hint: string;
|
|
30
|
+
readonly detail: unknown;
|
|
31
|
+
};
|
|
32
|
+
readonly gpuTiming?: {} | null;
|
|
33
|
+
readonly hmr?: {} | null;
|
|
34
|
+
readonly renderers?: {} | null;
|
|
35
|
+
readonly stages?: {} | null;
|
|
36
|
+
readonly channels?: {} | null;
|
|
37
|
+
readonly dataInterfaces?: {} | null;
|
|
38
|
+
readonly layout: {
|
|
39
|
+
readonly fingerprint: string;
|
|
40
|
+
};
|
|
41
|
+
readonly values: {
|
|
42
|
+
readonly generation: number;
|
|
43
|
+
readonly patchCount: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export interface VfxGpuTickIntent {
|
|
47
|
+
readonly sequence: number;
|
|
48
|
+
readonly player: EntityHandle;
|
|
49
|
+
readonly emitter: VfxGpuEmitterProgram;
|
|
50
|
+
readonly programFingerprint: string;
|
|
51
|
+
readonly reset: boolean;
|
|
52
|
+
readonly fixedDelta: number;
|
|
53
|
+
/** Effect-relative fixed tick. Resets to zero for replay and restart-on-visible. */
|
|
54
|
+
readonly phaseTick: number;
|
|
55
|
+
/** World-global FixedTime tick retained for renderer ring selection and correlation. */
|
|
56
|
+
readonly tick: number;
|
|
57
|
+
readonly seed: number;
|
|
58
|
+
readonly playCycle: number;
|
|
59
|
+
readonly spawnCount: number;
|
|
60
|
+
readonly firstParticleId: number;
|
|
61
|
+
readonly instanceGeneration: number;
|
|
62
|
+
readonly instancePatchCount: number;
|
|
63
|
+
readonly parameterBlock: Uint8Array;
|
|
64
|
+
readonly canonicalPayload: Uint8Array;
|
|
65
|
+
readonly replayInput: VfxReplayInput<VfxValueMap>;
|
|
66
|
+
readonly channelInputs: VfxReplayInput<VfxValueMap>['channelInputs'];
|
|
67
|
+
readonly eventCounters: VfxChannelCounters;
|
|
68
|
+
}
|
|
69
|
+
export interface VfxGpuEmitterInspectSnapshot {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly module: string;
|
|
72
|
+
readonly capacity: number;
|
|
73
|
+
/** Renderer-owned camera-frustum result. This is not an editor mute/isolate control. */
|
|
74
|
+
readonly cameraVisible: boolean;
|
|
75
|
+
/** Session-only preview mask. False suppresses both simulation and retained rendering. */
|
|
76
|
+
readonly sessionEnabled: boolean;
|
|
77
|
+
readonly phaseTick: number | null;
|
|
78
|
+
readonly tick: number | null;
|
|
79
|
+
readonly playCycle: number | null;
|
|
80
|
+
readonly spawnCount: number;
|
|
81
|
+
readonly firstParticleId: number;
|
|
82
|
+
readonly reset: boolean;
|
|
83
|
+
readonly schedule: VfxGpuEmitterProgram['schedule'];
|
|
84
|
+
readonly bounds: VfxGpuEmitterProgram['bounds'];
|
|
85
|
+
readonly simulationWhenCulled: VfxGpuEmitterProgram['simulationWhenCulled'];
|
|
86
|
+
readonly renderers: readonly {
|
|
87
|
+
readonly index: number;
|
|
88
|
+
readonly kind: VfxGpuEmitterProgram['renderers'][number]['kind'];
|
|
89
|
+
readonly enabled: boolean;
|
|
90
|
+
}[];
|
|
91
|
+
readonly stages: readonly string[];
|
|
92
|
+
readonly dataInterfaces: readonly string[];
|
|
93
|
+
}
|
|
94
|
+
export interface VfxGpuCommittedInspectSnapshot {
|
|
95
|
+
readonly sequence: number;
|
|
96
|
+
readonly tick: number;
|
|
97
|
+
readonly phaseTick: number;
|
|
98
|
+
readonly playCycle: number;
|
|
99
|
+
readonly spawnCount: number;
|
|
100
|
+
readonly firstParticleId: number;
|
|
101
|
+
readonly reset: boolean;
|
|
102
|
+
readonly instanceGeneration: number;
|
|
103
|
+
readonly instancePatchCount: number;
|
|
104
|
+
}
|
|
105
|
+
export interface VfxGpuPlayerInspectSnapshot {
|
|
106
|
+
readonly player: EntityHandle;
|
|
107
|
+
readonly assetGuid: string;
|
|
108
|
+
readonly programFingerprint: string;
|
|
109
|
+
readonly seed: number;
|
|
110
|
+
readonly fixedDelta: number;
|
|
111
|
+
readonly playing: boolean;
|
|
112
|
+
readonly values: {
|
|
113
|
+
readonly layoutFingerprint: string;
|
|
114
|
+
readonly generation: number;
|
|
115
|
+
readonly pendingPatchCount: number;
|
|
116
|
+
};
|
|
117
|
+
readonly queuedIntents: number;
|
|
118
|
+
readonly queuedTicks: number;
|
|
119
|
+
readonly lastCommitted: VfxGpuCommittedInspectSnapshot | null;
|
|
120
|
+
readonly channels: VfxChannelCounters;
|
|
121
|
+
readonly emitters: readonly VfxGpuEmitterInspectSnapshot[];
|
|
122
|
+
readonly diagnostics: readonly VfxGpuRuntimeDiagnostic[];
|
|
123
|
+
}
|
|
124
|
+
export interface VfxGpuRuntimeDiagnostic {
|
|
125
|
+
readonly code: 'vfx-intent-queue-overflow' | 'vfx-effect-unavailable' | 'vfx-player-invalid' | 'vfx-instance-commit-failed';
|
|
126
|
+
readonly expected: string;
|
|
127
|
+
readonly hint: string;
|
|
128
|
+
readonly detail: {
|
|
129
|
+
readonly player: EntityHandle;
|
|
130
|
+
readonly maxQueuedTicks?: number;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export interface VfxGpuRuntimeOptions {
|
|
134
|
+
readonly maxQueuedTicks?: number;
|
|
135
|
+
}
|
|
136
|
+
export declare class VfxGpuRuntime {
|
|
137
|
+
#private;
|
|
138
|
+
constructor(options?: VfxGpuRuntimeOptions);
|
|
139
|
+
/** Resource generation owned by the current VFX render attachment. */
|
|
140
|
+
get renderGeneration(): number;
|
|
141
|
+
snapshot(): readonly VfxGpuTickIntent[];
|
|
142
|
+
diagnostics(): readonly VfxGpuRuntimeDiagnostic[];
|
|
143
|
+
lastCommitted(player: EntityHandle): VfxGpuTickIntent | undefined;
|
|
144
|
+
inspectPlayers(): readonly VfxGpuPlayerInspectSnapshot[];
|
|
145
|
+
inspectPlayer(player: EntityHandle): VfxGpuPlayerInspectSnapshot | undefined;
|
|
146
|
+
eventCounters(player: EntityHandle): VfxChannelCounters;
|
|
147
|
+
markEventDispatched(player: EntityHandle, counters: VfxChannelCounters): void;
|
|
148
|
+
hasPlayer(player: EntityHandle): boolean;
|
|
149
|
+
attachInstance(player: EntityHandle, instance: ParticleEffectInstance): void;
|
|
150
|
+
detachInstance(player: EntityHandle): void;
|
|
151
|
+
getInstance(player: EntityHandle): ParticleEffectInstance | undefined;
|
|
152
|
+
setEmitterCameraVisibility(player: EntityHandle, emitterId: string, visible: boolean): void;
|
|
153
|
+
setEmitterSessionEnabled(player: EntityHandle, emitterId: string, enabled: boolean): void;
|
|
154
|
+
isEmitterSessionEnabled(player: EntityHandle, emitterId: string): boolean;
|
|
155
|
+
/** Restart from tick zero without changing authored `ParticleEffectPlayer.playing`. */
|
|
156
|
+
replay(player: EntityHandle, input?: VfxReplayInput<VfxValueMap>): void;
|
|
157
|
+
commit(sequence: number): void;
|
|
158
|
+
reset(player: EntityHandle): void;
|
|
159
|
+
/**
|
|
160
|
+
* Drop every generation-owned VFX runtime value after device recovery.
|
|
161
|
+
* Authored ParticleEffectPlayer state remains the restart source on the next
|
|
162
|
+
* FixedUpdate; no queued intent or stale instance crosses the boundary.
|
|
163
|
+
*/
|
|
164
|
+
recover(): void;
|
|
165
|
+
advance(world: World, tick: number, fixedDelta: number, players: readonly {
|
|
166
|
+
readonly player: EntityHandle;
|
|
167
|
+
readonly effect: Handle<'ParticleEffectAsset', 'shared'>;
|
|
168
|
+
readonly playing: boolean;
|
|
169
|
+
readonly seed: number;
|
|
170
|
+
readonly timeScale: number;
|
|
171
|
+
}[]): void;
|
|
172
|
+
}
|
|
173
|
+
export declare function vfxGpuRuntimePlugin(options?: VfxGpuRuntimeOptions): Plugin;
|
|
174
|
+
//# sourceMappingURL=gpu-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-runtime.d.ts","sourceRoot":"","sources":["../src/gpu-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type { ParticleEffectAsset, ParticleEmitterDefinition } from '@forgeax/engine-types';
|
|
2
|
+
export { particleEffectContribution } from './assets/particle-effect-decoder';
|
|
3
|
+
export type { VfxAuthoringCapabilityDescriptor, VfxAuthoringDependencyDescriptor, VfxAuthoringDescriptor, VfxAuthoringEmitterDescriptor, VfxAuthoringFieldDescriptor, VfxAuthoringNodeDescriptor, VfxAuthoringNodeRole, VfxAuthoringTimelineDescriptor, VfxAuthoringValue, } from './authoring-descriptor.js';
|
|
4
|
+
export { describeVfxGpuEffect, isVfxGpuEffectAsset } from './authoring-descriptor.js';
|
|
5
|
+
export type { ParticleBoundsSource, ParticleChannelOverflowPolicy, ParticleChannelSource, ParticleCodeSourceError, ParticleCodeSourceInvalidDetail, ParticleEffectRootSourceV2, ParticleEffectSourceV2, ParticleEmitterSourceV2, ParticleEventSource, ParticleRendererOverflowPolicy, ParticleRendererSorting, ParticleRendererSource, ParticleStageDomain, ParticleStageResourceAccess, ParticleStageResourceSource, ParticleStageSource, } from './code-source.js';
|
|
6
|
+
export { defineParticleEffectSourceV2, PARTICLE_CODE_DEFAULT_MODULE_ID, PARTICLE_STAGE_RESOURCE_NAMES, parseParticleEffectSourceV2, parseVfxStageDeclarations, } from './code-source.js';
|
|
7
|
+
export type { VfxDataInterfaceBindingType, VfxDataInterfaceError, VfxDataInterfaceErrorDetail, VfxDataInterfaceKind, VfxDataInterfaceLifetime, VfxDataInterfaceProvider, VfxDataInterfaceRequirement, VfxDataInterfaceResolution, VfxDataInterfaceResource, VfxDataInterfaceToken, } from './data-interface.js';
|
|
8
|
+
export { resolveVfxDataInterfaces } from './data-interface.js';
|
|
9
|
+
export type { VfxEffectContract, VfxEffectContractError, VfxEffectContractErrorDetail, VfxEffectReflection, VfxReflectedField, VfxReflectedStruct, VfxValue, VfxValueMap, VfxValueType, } from './effect-contract.js';
|
|
10
|
+
export { createVfxEffectContract, validateVfxEffectValues } from './effect-contract.js';
|
|
11
|
+
export type { VfxGpuAssetError } from './gpu-loader.js';
|
|
12
|
+
export { loadVfxGpuEffect, vfxGpuEffectContribution, vfxGpuEffectPackLoader, } from './gpu-loader.js';
|
|
13
|
+
export type { VfxGpuEffectAsset, VfxGpuEmitterProgram, VfxGpuProgram, VfxGpuProgramReflection, VfxGpuStageReflection, } from './gpu-program.js';
|
|
14
|
+
export { VFX_GPU_PROGRAM_ARTIFACT_KEY, VFX_GPU_PROGRAM_FORMAT } from './gpu-program.js';
|
|
15
|
+
export type { VfxGpuEmitterInspectSnapshot, VfxGpuPlayerInspectSnapshot, VfxGpuRuntimeDiagnostic, VfxGpuRuntimeOptions, VfxGpuTickIntent, } from './gpu-runtime.js';
|
|
16
|
+
export { createVfxInspectSnapshot, VFX_GPU_RUNTIME_RESOURCE_KEY, VfxGpuRuntime, vfxGpuRuntimePlugin, } from './gpu-runtime.js';
|
|
17
|
+
export type { VfxChannelCounters, VfxChannelInput, VfxChannelPayload, VfxInstanceCommit, VfxInstanceCommitOptions, VfxInstanceError, VfxInstanceOptions, VfxInstanceParent, VfxReplayInput, } from './instance.js';
|
|
18
|
+
export { createParticleEffectInstance, ParticleEffectInstance, } from './instance.js';
|
|
19
|
+
export type { ParticleEffectPlayerData } from './player.js';
|
|
20
|
+
export { ParticleEffectPlayer } from './player.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EACV,gCAAgC,EAChC,gCAAgC,EAChC,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,8BAA8B,EAC9B,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACtF,YAAY,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACxF,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,aAAa,EACb,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|