@forgeax/engine-vfx 0.1.2

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 (108) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +214 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/__tests__/authoring-descriptor.unit.test.d.ts +2 -0
  5. package/dist/__tests__/authoring-descriptor.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/channel-input.unit.test.d.ts +2 -0
  7. package/dist/__tests__/channel-input.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/channel-inspect.unit.test.d.ts +2 -0
  9. package/dist/__tests__/channel-inspect.unit.test.d.ts.map +1 -0
  10. package/dist/__tests__/code-source-v2.unit.test.d.ts +2 -0
  11. package/dist/__tests__/code-source-v2.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/data-interface-contract.unit.test.d.ts +2 -0
  13. package/dist/__tests__/data-interface-contract.unit.test.d.ts.map +1 -0
  14. package/dist/__tests__/effect-contract.unit.test.d.ts +2 -0
  15. package/dist/__tests__/effect-contract.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/gpu-program-simulation-culling-owner.test-d.d.ts +2 -0
  17. package/dist/__tests__/gpu-program-simulation-culling-owner.test-d.d.ts.map +1 -0
  18. package/dist/__tests__/gpu-reflection-vocabulary-owner.test-d.d.ts +2 -0
  19. package/dist/__tests__/gpu-reflection-vocabulary-owner.test-d.d.ts.map +1 -0
  20. package/dist/__tests__/gpu-runtime.integration.test.d.ts +2 -0
  21. package/dist/__tests__/gpu-runtime.integration.test.d.ts.map +1 -0
  22. package/dist/__tests__/inspect-snapshot.unit.test.d.ts +2 -0
  23. package/dist/__tests__/inspect-snapshot.unit.test.d.ts.map +1 -0
  24. package/dist/__tests__/instance-public-api.unit.test.d.ts +2 -0
  25. package/dist/__tests__/instance-public-api.unit.test.d.ts.map +1 -0
  26. package/dist/__tests__/instance.unit.test.d.ts +2 -0
  27. package/dist/__tests__/instance.unit.test.d.ts.map +1 -0
  28. package/dist/__tests__/loader-v1-rejection.unit.test.d.ts +2 -0
  29. package/dist/__tests__/loader-v1-rejection.unit.test.d.ts.map +1 -0
  30. package/dist/__tests__/player-reflection.unit.test.d.ts +2 -0
  31. package/dist/__tests__/player-reflection.unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/player-type.test-d.d.ts +2 -0
  33. package/dist/__tests__/player-type.test-d.d.ts.map +1 -0
  34. package/dist/__tests__/renderer-source.unit.test.d.ts +2 -0
  35. package/dist/__tests__/renderer-source.unit.test.d.ts.map +1 -0
  36. package/dist/__tests__/replay-canonical.unit.test.d.ts +2 -0
  37. package/dist/__tests__/replay-canonical.unit.test.d.ts.map +1 -0
  38. package/dist/__tests__/runtime-dist-isolation.test.d.ts +2 -0
  39. package/dist/__tests__/runtime-dist-isolation.test.d.ts.map +1 -0
  40. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
  41. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
  42. package/dist/__tests__/stage-source.unit.test.d.ts +2 -0
  43. package/dist/__tests__/stage-source.unit.test.d.ts.map +1 -0
  44. package/dist/__tests__/vfx-data-interface-vocabulary-owner.test-d.d.ts +2 -0
  45. package/dist/__tests__/vfx-data-interface-vocabulary-owner.test-d.d.ts.map +1 -0
  46. package/dist/__tests__/vfx-performance-contract.unit.test.d.ts +2 -0
  47. package/dist/__tests__/vfx-performance-contract.unit.test.d.ts.map +1 -0
  48. package/dist/__tests__/vfx-value-type-owner.test-d.d.ts +2 -0
  49. package/dist/__tests__/vfx-value-type-owner.test-d.d.ts.map +1 -0
  50. package/dist/assets/particle-effect-decoder.d.ts +3 -0
  51. package/dist/assets/particle-effect-decoder.d.ts.map +1 -0
  52. package/dist/authoring-descriptor.d.ts +60 -0
  53. package/dist/authoring-descriptor.d.ts.map +1 -0
  54. package/dist/code-source.d.ts +140 -0
  55. package/dist/code-source.d.ts.map +1 -0
  56. package/dist/data-interface.d.ts +53 -0
  57. package/dist/data-interface.d.ts.map +1 -0
  58. package/dist/effect-contract.d.ts +57 -0
  59. package/dist/effect-contract.d.ts.map +1 -0
  60. package/dist/gpu-loader.d.ts +33 -0
  61. package/dist/gpu-loader.d.ts.map +1 -0
  62. package/dist/gpu-program.d.ts +80 -0
  63. package/dist/gpu-program.d.ts.map +1 -0
  64. package/dist/gpu-runtime.d.ts +174 -0
  65. package/dist/gpu-runtime.d.ts.map +1 -0
  66. package/dist/index.d.ts +21 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.mjs +1986 -0
  69. package/dist/index.mjs.map +1 -0
  70. package/dist/instance.d.ts +86 -0
  71. package/dist/instance.d.ts.map +1 -0
  72. package/dist/player.d.ts +17 -0
  73. package/dist/player.d.ts.map +1 -0
  74. package/package.json +66 -0
  75. package/src/__tests__/authoring-descriptor.unit.test.ts +138 -0
  76. package/src/__tests__/channel-input.unit.test.ts +65 -0
  77. package/src/__tests__/channel-inspect.unit.test.ts +65 -0
  78. package/src/__tests__/code-source-v2.unit.test.ts +121 -0
  79. package/src/__tests__/data-interface-contract.unit.test.ts +92 -0
  80. package/src/__tests__/effect-contract.unit.test.ts +62 -0
  81. package/src/__tests__/gpu-program-simulation-culling-owner.test-d.ts +58 -0
  82. package/src/__tests__/gpu-reflection-vocabulary-owner.test-d.ts +23 -0
  83. package/src/__tests__/gpu-runtime.integration.test.ts +549 -0
  84. package/src/__tests__/inspect-snapshot.unit.test.ts +51 -0
  85. package/src/__tests__/instance-public-api.unit.test.ts +27 -0
  86. package/src/__tests__/instance.unit.test.ts +107 -0
  87. package/src/__tests__/loader-v1-rejection.unit.test.ts +125 -0
  88. package/src/__tests__/player-reflection.unit.test.ts +91 -0
  89. package/src/__tests__/player-type.test-d.ts +54 -0
  90. package/src/__tests__/renderer-source.unit.test.ts +58 -0
  91. package/src/__tests__/replay-canonical.unit.test.ts +68 -0
  92. package/src/__tests__/runtime-dist-isolation.test.ts +100 -0
  93. package/src/__tests__/scriptable-pack-consumer.test-d.ts +9 -0
  94. package/src/__tests__/stage-source.unit.test.ts +64 -0
  95. package/src/__tests__/vfx-data-interface-vocabulary-owner.test-d.ts +34 -0
  96. package/src/__tests__/vfx-performance-contract.unit.test.ts +19 -0
  97. package/src/__tests__/vfx-value-type-owner.test-d.ts +32 -0
  98. package/src/assets/particle-effect-decoder.ts +34 -0
  99. package/src/authoring-descriptor.ts +355 -0
  100. package/src/code-source.ts +827 -0
  101. package/src/data-interface.ts +181 -0
  102. package/src/effect-contract.ts +220 -0
  103. package/src/gpu-loader.ts +279 -0
  104. package/src/gpu-program.ts +101 -0
  105. package/src/gpu-runtime.ts +807 -0
  106. package/src/index.ts +110 -0
  107. package/src/instance.ts +379 -0
  108. package/src/player.ts +21 -0
@@ -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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"}
@@ -0,0 +1,21 @@
1
+ export type { ParticleEffectAsset, ParticleEmitterDefinition } from '@forgeax/engine-types';
2
+ export { particleEffectContribution } from './assets/particle-effect-decoder.js';
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,qCAAqC,CAAC;AACjF,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"}