@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 @@
1
+ {"version":3,"file":"authoring-descriptor.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/authoring-descriptor.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel-input.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-input.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/channel-input.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel-inspect.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-inspect.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/channel-inspect.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-source-v2.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-source-v2.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/code-source-v2.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-interface-contract.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-interface-contract.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/data-interface-contract.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=effect-contract.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-contract.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/effect-contract.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gpu-program-simulation-culling-owner.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-program-simulation-culling-owner.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/gpu-program-simulation-culling-owner.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gpu-reflection-vocabulary-owner.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-reflection-vocabulary-owner.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/gpu-reflection-vocabulary-owner.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gpu-runtime.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-runtime.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gpu-runtime.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspect-snapshot.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-snapshot.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inspect-snapshot.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=instance-public-api.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-public-api.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/instance-public-api.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=instance.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/instance.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loader-v1-rejection.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-v1-rejection.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/loader-v1-rejection.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=player-reflection.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-reflection.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/player-reflection.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=player-type.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-type.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/player-type.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderer-source.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-source.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/renderer-source.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replay-canonical.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-canonical.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/replay-canonical.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime-dist-isolation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-dist-isolation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/runtime-dist-isolation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scriptable-pack-consumer.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptable-pack-consumer.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/scriptable-pack-consumer.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stage-source.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-source.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stage-source.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vfx-data-interface-vocabulary-owner.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-data-interface-vocabulary-owner.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/vfx-data-interface-vocabulary-owner.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vfx-performance-contract.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-performance-contract.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vfx-performance-contract.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vfx-value-type-owner.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-value-type-owner.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/vfx-value-type-owner.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { type AssetDecoderContribution, type ParticleEffectAsset } from '@forgeax/engine-types';
2
+ export declare const particleEffectContribution: AssetDecoderContribution<ParticleEffectAsset, 'particle-effect'>;
3
+ //# sourceMappingURL=particle-effect-decoder.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,60 @@
1
+ import type { VfxGpuEffectAsset } from './gpu-program.js';
2
+ export type VfxAuthoringValue = null | string | number | boolean | readonly VfxAuthoringValue[] | {
3
+ readonly [key: string]: VfxAuthoringValue;
4
+ };
5
+ export interface VfxAuthoringFieldDescriptor {
6
+ readonly path: string;
7
+ readonly label: string;
8
+ readonly value: VfxAuthoringValue;
9
+ readonly valueType: 'text' | 'number' | 'boolean' | 'vector' | 'object';
10
+ }
11
+ export type VfxAuthoringNodeRole = 'emitter' | 'program' | 'parameters' | 'custom' | 'stage' | 'channel' | 'event' | 'renderer';
12
+ export interface VfxAuthoringNodeDescriptor {
13
+ readonly id: string;
14
+ readonly role: VfxAuthoringNodeRole;
15
+ readonly label: string;
16
+ readonly sourcePath: string;
17
+ readonly fields: readonly VfxAuthoringFieldDescriptor[];
18
+ readonly children: readonly VfxAuthoringNodeDescriptor[];
19
+ }
20
+ export interface VfxAuthoringEmitterDescriptor extends VfxAuthoringNodeDescriptor {
21
+ readonly role: 'emitter';
22
+ readonly module: string;
23
+ }
24
+ export interface VfxAuthoringTimelineDescriptor {
25
+ readonly emitterId: string;
26
+ readonly rate: number;
27
+ readonly bursts: readonly {
28
+ readonly time: number;
29
+ readonly count: number;
30
+ }[];
31
+ readonly loopDuration?: number;
32
+ }
33
+ export interface VfxAuthoringDependencyDescriptor {
34
+ readonly kind: 'asset' | 'module' | 'data-interface';
35
+ readonly identity: string;
36
+ readonly sourcePath: string;
37
+ }
38
+ export interface VfxAuthoringCapabilityDescriptor {
39
+ readonly id: string;
40
+ readonly state: 'executable' | 'partial' | 'unavailable';
41
+ readonly reason?: string;
42
+ }
43
+ export interface VfxAuthoringDescriptor {
44
+ readonly version: 1;
45
+ readonly assetGuid: string;
46
+ readonly schemaVersion: 2;
47
+ readonly artifactFingerprint: string;
48
+ readonly emitters: readonly VfxAuthoringEmitterDescriptor[];
49
+ readonly timeline: readonly VfxAuthoringTimelineDescriptor[];
50
+ readonly dependencies: readonly VfxAuthoringDependencyDescriptor[];
51
+ readonly capabilities: readonly VfxAuthoringCapabilityDescriptor[];
52
+ }
53
+ /** Narrow an AssetRegistry payload without making editor consumers duplicate
54
+ * the cooked program shape. This deliberately validates the stable producer
55
+ * discriminants only; detailed artifact validation remains the pack loader's
56
+ * responsibility. */
57
+ export declare function isVfxGpuEffectAsset(value: unknown): value is VfxGpuEffectAsset;
58
+ /** Project the cooked runtime asset into a compiler-free, UI-neutral authoring read model. */
59
+ export declare function describeVfxGpuEffect(effect: VfxGpuEffectAsset): VfxAuthoringDescriptor;
60
+ //# sourceMappingURL=authoring-descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-descriptor.d.ts","sourceRoot":"","sources":["../src/authoring-descriptor.ts"],"names":[],"mappings":"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"}
@@ -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 = 'drop-newest' | 'drop-oldest';
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":"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"}
@@ -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 } 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 single runtime decoder map. */
30
+ export declare const vfxGpuEffectContribution: AssetDecoderContribution<VfxGpuEffectAsset, 'particle-effect'>;
31
+ export declare function loadVfxGpuEffect(registry: AssetRegistry, 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,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,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,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,EAAE,wBAAwB,CAC7D,iBAAiB,EACjB,iBAAiB,CAoClB,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAE7C"}