@codexo/exojs 0.7.12 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +737 -0
- package/dist/esm/core/Application.d.ts +3 -1
- package/dist/esm/core/Application.js +7 -6
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +30 -0
- package/dist/esm/core/Scene.js +56 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.js +2 -2
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/debug/DebugOverlay.js +2 -2
- package/dist/esm/debug/DebugOverlay.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +1 -1
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/index.js +32 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/ArcadeStickGamepadMapping.js +18 -19
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +164 -62
- package/dist/esm/input/Gamepad.js +290 -134
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.d.ts +120 -0
- package/dist/esm/input/GamepadAxis.js +106 -0
- package/dist/esm/input/GamepadAxis.js.map +1 -0
- package/dist/esm/input/GamepadButton.d.ts +110 -0
- package/dist/esm/input/GamepadButton.js +99 -0
- package/dist/esm/input/GamepadButton.js.map +1 -0
- package/dist/esm/input/GamepadDefinitions.js +4 -0
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +28 -24
- package/dist/esm/input/GamepadMapping.js +33 -16
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +10 -8
- package/dist/esm/input/GamepadPromptLayouts.js +21 -20
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +6 -3
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +55 -46
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/InputBinding.d.ts +74 -0
- package/dist/esm/input/InputBinding.js +100 -0
- package/dist/esm/input/InputBinding.js.map +1 -0
- package/dist/esm/input/InputManager.d.ts +79 -33
- package/dist/esm/input/InputManager.js +229 -104
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +1 -1
- package/dist/esm/input/InteractionManager.js +13 -13
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +14 -9
- package/dist/esm/input/JoyConLeftGamepadMapping.js +39 -9
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +14 -9
- package/dist/esm/input/JoyConRightGamepadMapping.js +35 -9
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +84 -71
- package/dist/esm/input/Pointer.js +71 -71
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamDeckGamepadMapping.d.ts +18 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js +76 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -0
- package/dist/esm/input/index.d.ts +7 -4
- package/dist/esm/input/types.d.ts +0 -76
- package/dist/esm/input/types.js +1 -80
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +180 -83
- package/dist/esm/particles/ParticleSystem.js +446 -133
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/distributions/BoxArea.d.ts +17 -0
- package/dist/esm/particles/distributions/BoxArea.js +48 -0
- package/dist/esm/particles/distributions/BoxArea.js.map +1 -0
- package/dist/esm/particles/distributions/CircleArea.d.ts +19 -0
- package/dist/esm/particles/distributions/CircleArea.js +33 -0
- package/dist/esm/particles/distributions/CircleArea.js.map +1 -0
- package/dist/esm/particles/distributions/ConeDirection.d.ts +28 -0
- package/dist/esm/particles/distributions/ConeDirection.js +44 -0
- package/dist/esm/particles/distributions/ConeDirection.js.map +1 -0
- package/dist/esm/particles/distributions/Constant.d.ts +17 -0
- package/dist/esm/particles/distributions/Constant.js +35 -0
- package/dist/esm/particles/distributions/Constant.js.map +1 -0
- package/dist/esm/particles/distributions/Curve.d.ts +30 -0
- package/dist/esm/particles/distributions/Curve.js +53 -0
- package/dist/esm/particles/distributions/Curve.js.map +1 -0
- package/dist/esm/particles/distributions/Distribution.d.ts +45 -0
- package/dist/esm/particles/distributions/Gradient.d.ts +40 -0
- package/dist/esm/particles/distributions/Gradient.js +72 -0
- package/dist/esm/particles/distributions/Gradient.js.map +1 -0
- package/dist/esm/particles/distributions/LineSegment.d.ts +15 -0
- package/dist/esm/particles/distributions/LineSegment.js +27 -0
- package/dist/esm/particles/distributions/LineSegment.js.map +1 -0
- package/dist/esm/particles/distributions/Range.d.ts +12 -0
- package/dist/esm/particles/distributions/Range.js +19 -0
- package/dist/esm/particles/distributions/Range.js.map +1 -0
- package/dist/esm/particles/distributions/VectorRange.d.ts +20 -0
- package/dist/esm/particles/distributions/VectorRange.js +31 -0
- package/dist/esm/particles/distributions/VectorRange.js.map +1 -0
- package/dist/esm/particles/distributions/index.d.ts +12 -0
- package/dist/esm/particles/gpu/ParticleGpuState.d.ts +57 -0
- package/dist/esm/particles/gpu/ParticleGpuState.js +508 -0
- package/dist/esm/particles/gpu/ParticleGpuState.js.map +1 -0
- package/dist/esm/particles/index.d.ts +2 -10
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +24 -0
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +60 -0
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ApplyForce.d.ts +20 -0
- package/dist/esm/particles/modules/ApplyForce.js +48 -0
- package/dist/esm/particles/modules/ApplyForce.js.map +1 -0
- package/dist/esm/particles/modules/AttractToPoint.d.ts +27 -0
- package/dist/esm/particles/modules/AttractToPoint.js +73 -0
- package/dist/esm/particles/modules/AttractToPoint.js.map +1 -0
- package/dist/esm/particles/modules/BurstSpawn.d.ts +53 -0
- package/dist/esm/particles/modules/BurstSpawn.js +94 -0
- package/dist/esm/particles/modules/BurstSpawn.js.map +1 -0
- package/dist/esm/particles/modules/ColorOverLifetime.d.ts +22 -0
- package/dist/esm/particles/modules/ColorOverLifetime.js +65 -0
- package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ColorOverSpeed.d.ts +27 -0
- package/dist/esm/particles/modules/ColorOverSpeed.js +86 -0
- package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -0
- package/dist/esm/particles/modules/DeathModule.d.ts +24 -0
- package/dist/esm/particles/modules/DeathModule.js +25 -0
- package/dist/esm/particles/modules/DeathModule.js.map +1 -0
- package/dist/esm/particles/modules/Drag.d.ts +20 -0
- package/dist/esm/particles/modules/Drag.js +45 -0
- package/dist/esm/particles/modules/Drag.js.map +1 -0
- package/dist/esm/particles/modules/OrbitalForce.d.ts +28 -0
- package/dist/esm/particles/modules/OrbitalForce.js +65 -0
- package/dist/esm/particles/modules/OrbitalForce.js.map +1 -0
- package/dist/esm/particles/modules/RateSpawn.d.ts +41 -0
- package/dist/esm/particles/modules/RateSpawn.js +76 -0
- package/dist/esm/particles/modules/RateSpawn.js.map +1 -0
- package/dist/esm/particles/modules/RepelFromPoint.d.ts +24 -0
- package/dist/esm/particles/modules/RepelFromPoint.js +76 -0
- package/dist/esm/particles/modules/RepelFromPoint.js.map +1 -0
- package/dist/esm/particles/modules/RotateOverLifetime.d.ts +20 -0
- package/dist/esm/particles/modules/RotateOverLifetime.js +43 -0
- package/dist/esm/particles/modules/RotateOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.d.ts +26 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.js +59 -0
- package/dist/esm/particles/modules/ScaleOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/SpawnModule.d.ts +30 -0
- package/dist/esm/particles/modules/SpawnModule.js +31 -0
- package/dist/esm/particles/modules/SpawnModule.js.map +1 -0
- package/dist/esm/particles/modules/SpawnOnDeath.d.ts +24 -0
- package/dist/esm/particles/modules/SpawnOnDeath.js +47 -0
- package/dist/esm/particles/modules/SpawnOnDeath.js.map +1 -0
- package/dist/esm/particles/modules/Turbulence.d.ts +30 -0
- package/dist/esm/particles/modules/Turbulence.js +122 -0
- package/dist/esm/particles/modules/Turbulence.js.map +1 -0
- package/dist/esm/particles/modules/UpdateModule.d.ts +95 -0
- package/dist/esm/particles/modules/UpdateModule.js +66 -0
- package/dist/esm/particles/modules/UpdateModule.js.map +1 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.d.ts +30 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.js +84 -0
- package/dist/esm/particles/modules/VelocityOverLifetime.js.map +1 -0
- package/dist/esm/particles/modules/WgslContribution.d.ts +81 -0
- package/dist/esm/particles/modules/WgslContribution.js +34 -0
- package/dist/esm/particles/modules/WgslContribution.js.map +1 -0
- package/dist/esm/particles/modules/index.d.ts +22 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +9 -14
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +90 -61
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/particle.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +9 -0
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +107 -23
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.d.ts +52 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +29 -0
- package/dist/esm/rendering/webgpu/compute/index.d.ts +3 -0
- package/dist/esm/resources/CacheFirstStrategy.d.ts +7 -4
- package/dist/esm/resources/CacheFirstStrategy.js +11 -8
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStrategy.d.ts +14 -6
- package/dist/esm/resources/Loader.d.ts +8 -3
- package/dist/esm/resources/Loader.js +19 -37
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +3 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +8 -3
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.d.ts +2 -2
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +2 -2
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +3 -3
- package/dist/esm/resources/factories/VttFactory.js +83 -6
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/exo.esm.js +4028 -1518
- package/dist/exo.esm.js.map +1 -1
- package/package.json +2 -1
- package/dist/esm/input/GamepadChannels.d.ts +0 -47
- package/dist/esm/input/GamepadChannels.js +0 -53
- package/dist/esm/input/GamepadChannels.js.map +0 -1
- package/dist/esm/input/GamepadControl.d.ts +0 -33
- package/dist/esm/input/GamepadControl.js +0 -42
- package/dist/esm/input/GamepadControl.js.map +0 -1
- package/dist/esm/input/Input.d.ts +0 -52
- package/dist/esm/input/Input.js +0 -90
- package/dist/esm/input/Input.js.map +0 -1
- package/dist/esm/particles/Particle.d.ts +0 -77
- package/dist/esm/particles/Particle.js +0 -143
- package/dist/esm/particles/Particle.js.map +0 -1
- package/dist/esm/particles/ParticleProperties.d.ts +0 -29
- package/dist/esm/particles/affectors/ColorAffector.d.ts +0 -30
- package/dist/esm/particles/affectors/ColorAffector.js +0 -55
- package/dist/esm/particles/affectors/ColorAffector.js.map +0 -1
- package/dist/esm/particles/affectors/ForceAffector.d.ts +0 -24
- package/dist/esm/particles/affectors/ForceAffector.js +0 -39
- package/dist/esm/particles/affectors/ForceAffector.js.map +0 -1
- package/dist/esm/particles/affectors/ParticleAffector.d.ts +0 -19
- package/dist/esm/particles/affectors/ScaleAffector.d.ts +0 -23
- package/dist/esm/particles/affectors/ScaleAffector.js +0 -38
- package/dist/esm/particles/affectors/ScaleAffector.js.map +0 -1
- package/dist/esm/particles/affectors/TorqueAffector.d.ts +0 -23
- package/dist/esm/particles/affectors/TorqueAffector.js +0 -37
- package/dist/esm/particles/affectors/TorqueAffector.js.map +0 -1
- package/dist/esm/particles/emitters/ParticleEmitter.d.ts +0 -19
- package/dist/esm/particles/emitters/ParticleOptions.d.ts +0 -62
- package/dist/esm/particles/emitters/ParticleOptions.js +0 -120
- package/dist/esm/particles/emitters/ParticleOptions.js.map +0 -1
- package/dist/esm/particles/emitters/UniversalEmitter.d.ts +0 -40
- package/dist/esm/particles/emitters/UniversalEmitter.js +0 -68
- package/dist/esm/particles/emitters/UniversalEmitter.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WGSL primitive types accepted in {@link WgslUniformField} declarations.
|
|
3
|
+
* The codegen emits matching WGSL field declarations; the writeUniforms
|
|
4
|
+
* implementation must produce bytes in the layout WGSL expects (see
|
|
5
|
+
* https://www.w3.org/TR/WGSL/#alignment-and-size).
|
|
6
|
+
*
|
|
7
|
+
* Common pitfalls:
|
|
8
|
+
* - `vec2<f32>` aligns to 8 bytes; pad with `f32` or use `vec4<f32>`.
|
|
9
|
+
* - `vec3<f32>` aligns to 16 bytes (so does `vec4<f32>`); avoid `vec3` for tight packing.
|
|
10
|
+
*
|
|
11
|
+
* For now the supported subset covers what the built-in modules need. Add
|
|
12
|
+
* more types here as new modules require them.
|
|
13
|
+
*/
|
|
14
|
+
export type WgslPrimitive = 'f32' | 'i32' | 'u32' | 'vec2<f32>' | 'vec4<f32>';
|
|
15
|
+
/** A named uniform field within a module's struct. Order matters — defines memory layout. */
|
|
16
|
+
export interface WgslUniformField {
|
|
17
|
+
name: string;
|
|
18
|
+
type: WgslPrimitive;
|
|
19
|
+
}
|
|
20
|
+
/** A 1D texture binding (used by Curve / Gradient lookups). */
|
|
21
|
+
export interface WgslTextureBinding {
|
|
22
|
+
/** Field name within the module — referenced in WGSL as `u_${moduleKey}_${name}`. */
|
|
23
|
+
name: string;
|
|
24
|
+
/** WGSL texture format. `r32float` for Curve, `rgba8unorm` for Gradient. */
|
|
25
|
+
format: 'r32float' | 'rgba8unorm';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* What an {@link UpdateModule} contributes to the system's composite compute
|
|
29
|
+
* shader. `body` runs once per particle in the inner main function, with
|
|
30
|
+
* these locals in scope:
|
|
31
|
+
*
|
|
32
|
+
* - `idx: u32` — the particle slot index (already gated on `< sim.liveCount`
|
|
33
|
+
* and skip-on-dead via `timing[idx].y < 0.0`).
|
|
34
|
+
* - `dt: f32` — frame delta in seconds (mirrors `sim.dt`).
|
|
35
|
+
* - **Packed SoA bindings** (see body of doc) — channels are packed into
|
|
36
|
+
* `vec2<f32>`-typed storage buffers to fit within WebGPU's default 8-buffer
|
|
37
|
+
* limit. Access x/y components for the per-axis values:
|
|
38
|
+
* - `positions[idx].x` / `.y` (was posX/posY)
|
|
39
|
+
* - `velocities[idx].x` / `.y` (was velX/velY)
|
|
40
|
+
* - `scales[idx].x` / `.y` (was scaleX/scaleY)
|
|
41
|
+
* - `rotInfo[idx].x` / `.y` (rotation, rotationSpeed)
|
|
42
|
+
* - `timing[idx].x` / `.y` (elapsed, lifetime — y is set to -1 when expired)
|
|
43
|
+
* - `color[idx]` — packed RGBA u32, single channel (no .x/.y)
|
|
44
|
+
* - `sim: SimUniforms` — `{ dt: f32, liveCount: u32 }`.
|
|
45
|
+
* - `modules.u_${key}: ${Key}Uniforms` — your module's uniform struct (if declared).
|
|
46
|
+
* - `u_${key}_${textureName}` and `u_${key}_${textureName}_sampler` — texture bindings (if any).
|
|
47
|
+
*
|
|
48
|
+
* The body should not declare new functions or top-level statements; it
|
|
49
|
+
* runs inline in the main function. Use comments and parentheses generously
|
|
50
|
+
* — composition concatenates several module bodies and any syntax mistake
|
|
51
|
+
* surfaces only at pipeline-creation time.
|
|
52
|
+
*/
|
|
53
|
+
export interface WgslContribution {
|
|
54
|
+
/** Unique key per module *class* (e.g. `'ApplyForce'`). Two ApplyForce instances on one system aren't supported — combine into one. */
|
|
55
|
+
key: string;
|
|
56
|
+
uniforms?: ReadonlyArray<WgslUniformField>;
|
|
57
|
+
textures?: ReadonlyArray<WgslTextureBinding>;
|
|
58
|
+
/**
|
|
59
|
+
* Optional WGSL declarations (functions, constants) emitted at module
|
|
60
|
+
* scope before `main()`. Use this for noise/hash helpers or any
|
|
61
|
+
* supporting function the {@link body} calls. Multiple modules can
|
|
62
|
+
* declare preludes; they're concatenated in registration order. Naming
|
|
63
|
+
* collisions across modules are the author's problem — prefix helpers
|
|
64
|
+
* with the module key (e.g. `myModule_hash`) to avoid clashes.
|
|
65
|
+
*/
|
|
66
|
+
prelude?: string;
|
|
67
|
+
body: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Compute the byte size of a uniform struct from its declared fields,
|
|
71
|
+
* respecting WGSL std140-like alignment rules. Each field aligns to its
|
|
72
|
+
* natural alignment; the struct itself rounds to its largest alignment.
|
|
73
|
+
*
|
|
74
|
+
* Used by the codegen to size the system's combined uniform buffer.
|
|
75
|
+
*/
|
|
76
|
+
export declare const wgslUniformByteSize: (fields: ReadonlyArray<WgslUniformField>) => number;
|
|
77
|
+
/** Per-WGSL-primitive size and alignment in bytes. */
|
|
78
|
+
export declare const wgslFieldLayout: (type: WgslPrimitive) => {
|
|
79
|
+
size: number;
|
|
80
|
+
align: number;
|
|
81
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the byte size of a uniform struct from its declared fields,
|
|
3
|
+
* respecting WGSL std140-like alignment rules. Each field aligns to its
|
|
4
|
+
* natural alignment; the struct itself rounds to its largest alignment.
|
|
5
|
+
*
|
|
6
|
+
* Used by the codegen to size the system's combined uniform buffer.
|
|
7
|
+
*/
|
|
8
|
+
const wgslUniformByteSize = (fields) => {
|
|
9
|
+
let offset = 0;
|
|
10
|
+
let maxAlign = 4;
|
|
11
|
+
for (const field of fields) {
|
|
12
|
+
const { size, align } = wgslFieldLayout(field.type);
|
|
13
|
+
offset = Math.ceil(offset / align) * align;
|
|
14
|
+
offset += size;
|
|
15
|
+
maxAlign = Math.max(maxAlign, align);
|
|
16
|
+
}
|
|
17
|
+
return Math.ceil(offset / maxAlign) * maxAlign;
|
|
18
|
+
};
|
|
19
|
+
/** Per-WGSL-primitive size and alignment in bytes. */
|
|
20
|
+
const wgslFieldLayout = (type) => {
|
|
21
|
+
switch (type) {
|
|
22
|
+
case 'f32':
|
|
23
|
+
case 'i32':
|
|
24
|
+
case 'u32':
|
|
25
|
+
return { size: 4, align: 4 };
|
|
26
|
+
case 'vec2<f32>':
|
|
27
|
+
return { size: 8, align: 8 };
|
|
28
|
+
case 'vec4<f32>':
|
|
29
|
+
return { size: 16, align: 16 };
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { wgslFieldLayout, wgslUniformByteSize };
|
|
34
|
+
//# sourceMappingURL=WgslContribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WgslContribution.js","sources":["../../../../../src/particles/modules/WgslContribution.ts"],"sourcesContent":[null],"names":[],"mappings":"AAwEA;;;;;;AAMG;AACI,MAAM,mBAAmB,GAAG,CAAC,MAAuC,KAAY;IACnF,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,QAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAEnD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK;QAC1C,MAAM,IAAI,IAAI;QACd,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;IACxC;IAEA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,QAAQ;AAClD;AAEA;AACO,MAAM,eAAe,GAAG,CAAC,IAAmB,KAAqC;IACpF,QAAQ,IAAI;AACR,QAAA,KAAK,KAAK;AAAE,QAAA,KAAK,KAAK;AAAE,QAAA,KAAK,KAAK;YAC9B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAChC,QAAA,KAAK,WAAW;YACZ,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAChC,QAAA,KAAK,WAAW;YACZ,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;;AAE1C;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { SpawnModule } from './SpawnModule';
|
|
2
|
+
export { UpdateModule } from './UpdateModule';
|
|
3
|
+
export { DeathModule } from './DeathModule';
|
|
4
|
+
export type { WgslContribution, WgslPrimitive, WgslUniformField, WgslTextureBinding } from './WgslContribution';
|
|
5
|
+
export { wgslUniformByteSize, wgslFieldLayout } from './WgslContribution';
|
|
6
|
+
export { RateSpawn } from './RateSpawn';
|
|
7
|
+
export type { RateSpawnConfig } from './RateSpawn';
|
|
8
|
+
export { BurstSpawn } from './BurstSpawn';
|
|
9
|
+
export type { BurstSpawnConfig, BurstSchedule } from './BurstSpawn';
|
|
10
|
+
export { ApplyForce } from './ApplyForce';
|
|
11
|
+
export { Drag } from './Drag';
|
|
12
|
+
export { ColorOverLifetime } from './ColorOverLifetime';
|
|
13
|
+
export { ColorOverSpeed } from './ColorOverSpeed';
|
|
14
|
+
export { ScaleOverLifetime } from './ScaleOverLifetime';
|
|
15
|
+
export { RotateOverLifetime } from './RotateOverLifetime';
|
|
16
|
+
export { AlphaFadeOverLifetime } from './AlphaFadeOverLifetime';
|
|
17
|
+
export { VelocityOverLifetime } from './VelocityOverLifetime';
|
|
18
|
+
export { AttractToPoint } from './AttractToPoint';
|
|
19
|
+
export { RepelFromPoint } from './RepelFromPoint';
|
|
20
|
+
export { OrbitalForce } from './OrbitalForce';
|
|
21
|
+
export { Turbulence } from './Turbulence';
|
|
22
|
+
export { SpawnOnDeath } from './SpawnOnDeath';
|
|
@@ -18,24 +18,19 @@ export declare class WebGl2ParticleRenderer extends AbstractWebGl2Renderer<Parti
|
|
|
18
18
|
private _connection;
|
|
19
19
|
constructor(batchSize: number);
|
|
20
20
|
render(system: ParticleSystem): this;
|
|
21
|
+
/**
|
|
22
|
+
* Compute (uvMin, uvMax) pairs for every declared frame on the system.
|
|
23
|
+
* Pulled lazily and cached per (system, texture-version) to avoid the
|
|
24
|
+
* arithmetic in the hot pack loop. Falls back to a single entry from
|
|
25
|
+
* `system.textureFrame` when no atlas is declared.
|
|
26
|
+
*/
|
|
27
|
+
private _computeFrameUvs;
|
|
28
|
+
private _uvMinsScratch;
|
|
29
|
+
private _uvMaxsScratch;
|
|
21
30
|
flush(): void;
|
|
22
31
|
protected onConnect(backend: WebGl2Backend): void;
|
|
23
32
|
protected onDisconnect(): void;
|
|
24
33
|
destroy(): void;
|
|
25
|
-
/**
|
|
26
|
-
* Convert the system's per-corner packed-u32 texCoords into the
|
|
27
|
-
* (uMin, vMin, uMax, vMax) bounds the new vertex shader expects.
|
|
28
|
-
* Already accounts for flipY (the system's `texCoords` baked it in).
|
|
29
|
-
*
|
|
30
|
-
* The four packed u32s, by corner index, are:
|
|
31
|
-
* [0] TL = (uMin/uMax | vMin/vMax depending on flipY)
|
|
32
|
-
* [1] TR
|
|
33
|
-
* [2] BR
|
|
34
|
-
* [3] BL
|
|
35
|
-
* We need (uMin, vMin, uMax, vMax) — the corner-extreme values.
|
|
36
|
-
*/
|
|
37
|
-
private _uvBoundsScratch;
|
|
38
|
-
private _unpackUvBounds;
|
|
39
34
|
private _createConnection;
|
|
40
35
|
private _createBufferRuntime;
|
|
41
36
|
private _createVaoRuntime;
|
|
@@ -12,30 +12,26 @@ import fragmentSource from './glsl/particle.frag.js';
|
|
|
12
12
|
*
|
|
13
13
|
* One ParticleSystem = one batch. Each `render(system)` flushes any
|
|
14
14
|
* pending batch, sets the system-level uniforms (transform, local
|
|
15
|
-
* bounds,
|
|
16
|
-
*
|
|
17
|
-
* `drawElementsInstanced` for that system.
|
|
15
|
+
* bounds, texture), and packs every active particle into the per-instance
|
|
16
|
+
* buffer. The next `flush()` issues a single `drawElementsInstanced`.
|
|
18
17
|
*
|
|
19
|
-
* Per-instance layout (
|
|
18
|
+
* Per-instance layout (40 bytes per particle, 6 attributes):
|
|
20
19
|
* ```
|
|
21
20
|
* translation f32x2 (offset 0, 8 bytes) particle position (system-local)
|
|
22
21
|
* scale f32x2 (offset 8, 8 bytes)
|
|
23
22
|
* rotation f32 (offset 16, 4 bytes) degrees
|
|
24
23
|
* color u8x4 (offset 20, 4 bytes) RGBA tint, normalised
|
|
24
|
+
* uvMin f32x2 (offset 24, 8 bytes) pre-resolved frame uvMin
|
|
25
|
+
* uvMax f32x2 (offset 32, 8 bytes) pre-resolved frame uvMax
|
|
25
26
|
* ```
|
|
26
27
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* The system transform stays as a uniform — mixing systems in one
|
|
33
|
-
* batch would require either a per-instance transform matrix (more
|
|
34
|
-
* bandwidth) or per-particle texture-slot indexing (multi-texture
|
|
35
|
-
* support similar to the sprite renderer). Both are follow-ups; the
|
|
36
|
-
* current pattern keeps the renderer focused on the per-particle win.
|
|
28
|
+
* UVs are baked per-particle so the system can carry an atlas of frames
|
|
29
|
+
* — `system.frames` declares the rectangles; each particle's
|
|
30
|
+
* `textureIndex` selects one. The pack loop resolves frame-rectangle to
|
|
31
|
+
* UVs once per particle per frame; no per-instance shader-side indexing
|
|
32
|
+
* needed.
|
|
37
33
|
*/
|
|
38
|
-
const instanceStrideBytes =
|
|
34
|
+
const instanceStrideBytes = 40;
|
|
39
35
|
const wordsPerInstance = instanceStrideBytes / Uint32Array.BYTES_PER_ELEMENT;
|
|
40
36
|
const indicesPerQuad = 6;
|
|
41
37
|
const quadIndices = new Uint16Array([0, 1, 2, 0, 2, 3]);
|
|
@@ -64,7 +60,7 @@ class WebGl2ParticleRenderer extends AbstractWebGl2Renderer {
|
|
|
64
60
|
}
|
|
65
61
|
render(system) {
|
|
66
62
|
const backend = this.getBackend();
|
|
67
|
-
const { texture,
|
|
63
|
+
const { texture, blendMode } = system;
|
|
68
64
|
const textureChanged = texture !== this._currentTexture;
|
|
69
65
|
const blendModeChanged = blendMode !== this._currentBlendMode;
|
|
70
66
|
// System transform / texture / UV / local-bounds are uniforms, so
|
|
@@ -82,32 +78,94 @@ class WebGl2ParticleRenderer extends AbstractWebGl2Renderer {
|
|
|
82
78
|
// System-level uniforms are set before packing so the eventual
|
|
83
79
|
// flush() can sync them in one go.
|
|
84
80
|
const localBounds = system.vertices;
|
|
85
|
-
const uvBounds = this._unpackUvBounds(system);
|
|
86
81
|
this._shader
|
|
87
82
|
.getUniform('u_systemTransform')
|
|
88
83
|
.setValue(system.getGlobalTransform().toArray(false));
|
|
89
84
|
this._shader
|
|
90
85
|
.getUniform('u_localBounds')
|
|
91
86
|
.setValue(localBounds);
|
|
92
|
-
this._shader
|
|
93
|
-
.getUniform('u_uvBounds')
|
|
94
|
-
.setValue(uvBounds);
|
|
95
87
|
const f32 = this._instanceFloat32;
|
|
96
88
|
const u32 = this._instanceUint32;
|
|
97
|
-
const
|
|
89
|
+
const { posX, posY, scaleX, scaleY, rotations, color, textureIndex, alive } = system;
|
|
90
|
+
const limit = Math.min(system.liveCount, this._batchSize);
|
|
91
|
+
// Pre-compute frame UVs from system.frames + texture; falls back
|
|
92
|
+
// to the system.textureFrame when no atlas is declared.
|
|
93
|
+
const { uvMins, uvMaxs } = this._computeFrameUvs(system);
|
|
94
|
+
const frameCount = uvMins.length / 2;
|
|
95
|
+
const fallbackFrame = frameCount > 0 ? 0 : 0;
|
|
96
|
+
let writeIndex = 0;
|
|
98
97
|
for (let i = 0; i < limit; i++) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
// Skip dead slots in GPU-mode systems where the live range can
|
|
99
|
+
// contain holes.
|
|
100
|
+
if (alive[i] === 0) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const offset = writeIndex * wordsPerInstance;
|
|
104
|
+
const frame = textureIndex[i] < frameCount ? textureIndex[i] : fallbackFrame;
|
|
105
|
+
const uvBase = frame * 2;
|
|
106
|
+
f32[offset + 0] = posX[i];
|
|
107
|
+
f32[offset + 1] = posY[i];
|
|
108
|
+
f32[offset + 2] = scaleX[i];
|
|
109
|
+
f32[offset + 3] = scaleY[i];
|
|
110
|
+
f32[offset + 4] = rotations[i];
|
|
111
|
+
u32[offset + 5] = color[i];
|
|
112
|
+
f32[offset + 6] = uvMins[uvBase + 0];
|
|
113
|
+
f32[offset + 7] = uvMins[uvBase + 1];
|
|
114
|
+
f32[offset + 8] = uvMaxs[uvBase + 0];
|
|
115
|
+
f32[offset + 9] = uvMaxs[uvBase + 1];
|
|
116
|
+
writeIndex++;
|
|
107
117
|
}
|
|
108
|
-
this._instanceCount =
|
|
118
|
+
this._instanceCount = writeIndex;
|
|
109
119
|
return this;
|
|
110
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Compute (uvMin, uvMax) pairs for every declared frame on the system.
|
|
123
|
+
* Pulled lazily and cached per (system, texture-version) to avoid the
|
|
124
|
+
* arithmetic in the hot pack loop. Falls back to a single entry from
|
|
125
|
+
* `system.textureFrame` when no atlas is declared.
|
|
126
|
+
*/
|
|
127
|
+
_computeFrameUvs(system) {
|
|
128
|
+
const frames = system.frames;
|
|
129
|
+
const tex = system.texture;
|
|
130
|
+
const texW = tex.width;
|
|
131
|
+
const texH = tex.height;
|
|
132
|
+
const flipY = tex.flipY;
|
|
133
|
+
const count = frames.length === 0 ? 1 : frames.length;
|
|
134
|
+
// Re-allocate scratch when capacity grows.
|
|
135
|
+
if (this._uvMinsScratch.length < count * 2) {
|
|
136
|
+
this._uvMinsScratch = new Float32Array(count * 2);
|
|
137
|
+
this._uvMaxsScratch = new Float32Array(count * 2);
|
|
138
|
+
}
|
|
139
|
+
const mins = this._uvMinsScratch;
|
|
140
|
+
const maxs = this._uvMaxsScratch;
|
|
141
|
+
if (frames.length === 0) {
|
|
142
|
+
const f = system.textureFrame;
|
|
143
|
+
const minU = f.left / texW;
|
|
144
|
+
const maxU = f.right / texW;
|
|
145
|
+
const topV = f.top / texH;
|
|
146
|
+
const bottomV = f.bottom / texH;
|
|
147
|
+
mins[0] = minU;
|
|
148
|
+
mins[1] = flipY ? bottomV : topV;
|
|
149
|
+
maxs[0] = maxU;
|
|
150
|
+
maxs[1] = flipY ? topV : bottomV;
|
|
151
|
+
return { uvMins: mins, uvMaxs: maxs };
|
|
152
|
+
}
|
|
153
|
+
for (let i = 0; i < frames.length; i++) {
|
|
154
|
+
const f = frames[i];
|
|
155
|
+
const o = i * 2;
|
|
156
|
+
const minU = f.left / texW;
|
|
157
|
+
const maxU = f.right / texW;
|
|
158
|
+
const topV = f.top / texH;
|
|
159
|
+
const bottomV = f.bottom / texH;
|
|
160
|
+
mins[o + 0] = minU;
|
|
161
|
+
mins[o + 1] = flipY ? bottomV : topV;
|
|
162
|
+
maxs[o + 0] = maxU;
|
|
163
|
+
maxs[o + 1] = flipY ? topV : bottomV;
|
|
164
|
+
}
|
|
165
|
+
return { uvMins: mins, uvMaxs: maxs };
|
|
166
|
+
}
|
|
167
|
+
_uvMinsScratch = new Float32Array(2);
|
|
168
|
+
_uvMaxsScratch = new Float32Array(2);
|
|
111
169
|
flush() {
|
|
112
170
|
const backend = this.getBackendOrNull();
|
|
113
171
|
const instanceBuffer = this._instanceBuffer;
|
|
@@ -147,6 +205,8 @@ class WebGl2ParticleRenderer extends AbstractWebGl2Renderer {
|
|
|
147
205
|
.addAttribute(this._instanceBuffer, this._shader.getAttribute('a_scale'), gl.FLOAT, false, instanceStrideBytes, 8, false, 1)
|
|
148
206
|
.addAttribute(this._instanceBuffer, this._shader.getAttribute('a_rotation'), gl.FLOAT, false, instanceStrideBytes, 16, false, 1)
|
|
149
207
|
.addAttribute(this._instanceBuffer, this._shader.getAttribute('a_color'), gl.UNSIGNED_BYTE, true, instanceStrideBytes, 20, false, 1)
|
|
208
|
+
.addAttribute(this._instanceBuffer, this._shader.getAttribute('a_uvMin'), gl.FLOAT, false, instanceStrideBytes, 24, false, 1)
|
|
209
|
+
.addAttribute(this._instanceBuffer, this._shader.getAttribute('a_uvMax'), gl.FLOAT, false, instanceStrideBytes, 32, false, 1)
|
|
150
210
|
.connect(this._createVaoRuntime(this._connection));
|
|
151
211
|
}
|
|
152
212
|
onDisconnect() {
|
|
@@ -168,37 +228,6 @@ class WebGl2ParticleRenderer extends AbstractWebGl2Renderer {
|
|
|
168
228
|
this.disconnect();
|
|
169
229
|
this._shader.destroy();
|
|
170
230
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Convert the system's per-corner packed-u32 texCoords into the
|
|
173
|
-
* (uMin, vMin, uMax, vMax) bounds the new vertex shader expects.
|
|
174
|
-
* Already accounts for flipY (the system's `texCoords` baked it in).
|
|
175
|
-
*
|
|
176
|
-
* The four packed u32s, by corner index, are:
|
|
177
|
-
* [0] TL = (uMin/uMax | vMin/vMax depending on flipY)
|
|
178
|
-
* [1] TR
|
|
179
|
-
* [2] BR
|
|
180
|
-
* [3] BL
|
|
181
|
-
* We need (uMin, vMin, uMax, vMax) — the corner-extreme values.
|
|
182
|
-
*/
|
|
183
|
-
_uvBoundsScratch = new Float32Array(4);
|
|
184
|
-
_unpackUvBounds(system) {
|
|
185
|
-
const texCoords = system.texCoords;
|
|
186
|
-
// Each packed u32: low 16 bits = U normalised to 0..65535,
|
|
187
|
-
// high 16 bits = V normalised.
|
|
188
|
-
const uTopLeft = (texCoords[0] & 0xFFFF) / 0xFFFF;
|
|
189
|
-
const vTopLeft = ((texCoords[0] >>> 16) & 0xFFFF) / 0xFFFF;
|
|
190
|
-
const uBottomRight = (texCoords[2] & 0xFFFF) / 0xFFFF;
|
|
191
|
-
const vBottomRight = ((texCoords[2] >>> 16) & 0xFFFF) / 0xFFFF;
|
|
192
|
-
// For flipY: TL.v becomes vMax (was minY → maxY). The shader picks
|
|
193
|
-
// (cornerY == 0 ? vMin : vMax); writing TL.v into vMin and BR.v into
|
|
194
|
-
// vMax matches the original per-corner ordering whether or not flipY
|
|
195
|
-
// was applied at texCoords pack time.
|
|
196
|
-
this._uvBoundsScratch[0] = uTopLeft;
|
|
197
|
-
this._uvBoundsScratch[1] = vTopLeft;
|
|
198
|
-
this._uvBoundsScratch[2] = uBottomRight;
|
|
199
|
-
this._uvBoundsScratch[3] = vBottomRight;
|
|
200
|
-
return this._uvBoundsScratch;
|
|
201
|
-
}
|
|
202
231
|
_createConnection(gl) {
|
|
203
232
|
const vaoHandle = gl.createVertexArray();
|
|
204
233
|
if (vaoHandle === null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGl2ParticleRenderer.js","sources":["../../../../../src/rendering/webgl2/WebGl2ParticleRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WebGl2ParticleRenderer.js","sources":["../../../../../src/rendering/webgl2/WebGl2ParticleRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var vertexSource = "#version 300 es\nprecision lowp float;\nprecision lowp int;\n\n// Per-instance attributes (one entry per particle,
|
|
1
|
+
var vertexSource = "#version 300 es\nprecision lowp float;\nprecision lowp int;\n\n// Per-instance attributes (one entry per particle, 40 bytes total).\nlayout(location = 0) in vec2 a_translation; // particle position in system-local space\nlayout(location = 1) in vec2 a_scale; // particle scale\nlayout(location = 2) in float a_rotation; // particle rotation in degrees\nlayout(location = 3) in vec4 a_color; // RGBA tint\nlayout(location = 4) in vec2 a_uvMin; // top-left UV (u, v) — pre-resolved per instance\nlayout(location = 5) in vec2 a_uvMax; // bottom-right UV (u, v) — pre-resolved per instance\n\nuniform mat3 u_projection;\nuniform mat3 u_systemTransform;\nuniform vec4 u_localBounds; // left, top, right, bottom (system.vertices)\n\nout vec2 v_texcoord;\nout vec4 v_color;\n\nvoid main(void) {\n // Static index buffer is [0,1,2,0,2,3] (triangle-list), so gl_VertexID 0..3\n // maps to TL, TR, BR, BL via the same bit math the sprite renderer uses.\n int vid = gl_VertexID;\n int cornerX = ((vid + 1) >> 1) & 1;\n int cornerY = vid >> 1;\n\n float localX = (cornerX == 0) ? u_localBounds.x : u_localBounds.z;\n float localY = (cornerY == 0) ? u_localBounds.y : u_localBounds.w;\n\n // Per-particle scale + rotation.\n vec2 rotation = vec2(sin(radians(a_rotation)), cos(radians(a_rotation)));\n vec2 transformed = vec2(\n (localX * (a_scale.x * rotation.y)) + (localY * (a_scale.y * rotation.x)),\n (localX * (a_scale.x * -rotation.x)) + (localY * (a_scale.y * rotation.y))\n );\n\n vec3 worldPos = vec3(transformed + a_translation, 1.0);\n\n gl_Position = vec4((u_projection * u_systemTransform * worldPos).xy, 0.0, 1.0);\n\n float u = (cornerX == 0) ? a_uvMin.x : a_uvMax.x;\n float v = (cornerY == 0) ? a_uvMin.y : a_uvMax.y;\n v_texcoord = vec2(u, v);\n\n v_color = vec4(a_color.rgb * a_color.a, a_color.a);\n}\n";
|
|
2
2
|
|
|
3
3
|
export { vertexSource as default };
|
|
4
4
|
//# sourceMappingURL=particle.vert.js.map
|
|
@@ -28,5 +28,14 @@ export declare class WebGpuParticleRenderer extends AbstractWebGpuRenderer<Parti
|
|
|
28
28
|
private _ensureCapacity;
|
|
29
29
|
private _writeUniformData;
|
|
30
30
|
private _writeInstanceData;
|
|
31
|
+
/**
|
|
32
|
+
* Same atlas/UV-resolution as the WebGL2 path. Returns the per-frame
|
|
33
|
+
* (uvMin, uvMax) pairs derived from `system.frames` (or fallback to
|
|
34
|
+
* `system.textureFrame` when no atlas is declared), already flipY-
|
|
35
|
+
* adjusted for the current texture.
|
|
36
|
+
*/
|
|
37
|
+
private _uvMinsScratch;
|
|
38
|
+
private _uvMaxsScratch;
|
|
39
|
+
private _computeFrameUvs;
|
|
31
40
|
private _getPipeline;
|
|
32
41
|
}
|