@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
|
@@ -21,13 +21,15 @@ var particleTexture: texture_2d<f32>;
|
|
|
21
21
|
@group(1) @binding(1)
|
|
22
22
|
var particleSampler: sampler;
|
|
23
23
|
|
|
24
|
-
// Per-instance attributes (one entry per particle,
|
|
24
|
+
// Per-instance attributes (one entry per particle, 40 bytes total).
|
|
25
25
|
struct VertexInput {
|
|
26
26
|
@location(0) unitPosition: vec2<f32>, // per-vertex (static unit quad)
|
|
27
27
|
@location(1) translation: vec2<f32>,
|
|
28
28
|
@location(2) scale: vec2<f32>,
|
|
29
29
|
@location(3) rotation: f32,
|
|
30
30
|
@location(4) color: vec4<f32>,
|
|
31
|
+
@location(5) uvMin: vec2<f32>, // pre-resolved frame UV (top-left)
|
|
32
|
+
@location(6) uvMax: vec2<f32>, // pre-resolved frame UV (bottom-right)
|
|
31
33
|
};
|
|
32
34
|
|
|
33
35
|
struct VertexOutput {
|
|
@@ -40,8 +42,6 @@ struct VertexOutput {
|
|
|
40
42
|
fn vertexMain(input: VertexInput) -> VertexOutput {
|
|
41
43
|
let quadMin = uniforms.localBounds.xy;
|
|
42
44
|
let quadSize = uniforms.localBounds.zw;
|
|
43
|
-
let uvMin = uniforms.uvBounds.xy;
|
|
44
|
-
let uvMax = uniforms.uvBounds.zw;
|
|
45
45
|
|
|
46
46
|
let localPosition = quadMin + (input.unitPosition * quadSize);
|
|
47
47
|
let radians = radians(input.rotation);
|
|
@@ -55,7 +55,7 @@ fn vertexMain(input: VertexInput) -> VertexOutput {
|
|
|
55
55
|
var output: VertexOutput;
|
|
56
56
|
|
|
57
57
|
output.position = uniforms.projection * uniforms.translation * vec4<f32>(rotated, 0.0, 1.0);
|
|
58
|
-
output.texcoord = uvMin + ((uvMax - uvMin) * input.unitPosition);
|
|
58
|
+
output.texcoord = input.uvMin + ((input.uvMax - input.uvMin) * input.unitPosition);
|
|
59
59
|
output.color = vec4(input.color.rgb * input.color.a, input.color.a);
|
|
60
60
|
|
|
61
61
|
return output;
|
|
@@ -70,8 +70,8 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
|
70
70
|
}
|
|
71
71
|
`;
|
|
72
72
|
const staticVertexStrideBytes = 8;
|
|
73
|
-
const instanceWords =
|
|
74
|
-
const instanceStrideBytes =
|
|
73
|
+
const instanceWords = 10;
|
|
74
|
+
const instanceStrideBytes = 40;
|
|
75
75
|
const indicesPerParticle = 6;
|
|
76
76
|
const uniformByteLength = 176;
|
|
77
77
|
const initialParticleCapacity = 1;
|
|
@@ -112,7 +112,7 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
112
112
|
|| texture.source === null
|
|
113
113
|
|| texture.width === 0
|
|
114
114
|
|| texture.height === 0
|
|
115
|
-
|| system.
|
|
115
|
+
|| system.liveCount === 0) {
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
118
|
backend.setBlendMode(system.blendMode);
|
|
@@ -174,7 +174,7 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
174
174
|
for (let drawCallIndex = 0; drawCallIndex < this._drawCallCount; drawCallIndex++) {
|
|
175
175
|
const drawCall = this._drawCalls[drawCallIndex];
|
|
176
176
|
const system = drawCall.system;
|
|
177
|
-
const particleCount = system.
|
|
177
|
+
const particleCount = system.liveCount;
|
|
178
178
|
if (particleCount === 0) {
|
|
179
179
|
continue;
|
|
180
180
|
}
|
|
@@ -190,10 +190,21 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
190
190
|
resource: textureBinding.sampler,
|
|
191
191
|
}],
|
|
192
192
|
});
|
|
193
|
-
this._ensureCapacity(particleCount);
|
|
194
|
-
this._writeInstanceData(system.vertices, system.texCoords, system.particles);
|
|
195
193
|
this._writeUniformData(backend, system, drawCall.texture);
|
|
196
|
-
|
|
194
|
+
// GPU mode: the system's compute pipeline already wrote the
|
|
195
|
+
// interleaved instance data into its own buffer. Bind it
|
|
196
|
+
// directly — no CPU pack, no writeBuffer for instance data.
|
|
197
|
+
// CPU mode: pack from CPU SoA into our owned instance buffer.
|
|
198
|
+
let drawInstanceCount = particleCount;
|
|
199
|
+
const instanceBuffer = (() => {
|
|
200
|
+
if (system.gpuMode && system.gpuState !== null) {
|
|
201
|
+
return system.gpuState.instanceBuffer;
|
|
202
|
+
}
|
|
203
|
+
this._ensureCapacity(particleCount);
|
|
204
|
+
drawInstanceCount = this._writeInstanceData(system);
|
|
205
|
+
device.queue.writeBuffer(this._instanceBuffer, 0, this._instanceData, 0, drawInstanceCount * instanceStrideBytes);
|
|
206
|
+
return this._instanceBuffer;
|
|
207
|
+
})();
|
|
197
208
|
device.queue.writeBuffer(uniformBuffer, 0, this._uniformData.buffer, this._uniformData.byteOffset, this._uniformData.byteLength);
|
|
198
209
|
const encoder = device.createCommandEncoder();
|
|
199
210
|
const pass = encoder.beginRenderPass({
|
|
@@ -207,9 +218,9 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
207
218
|
pass.setPipeline(pipeline);
|
|
208
219
|
pass.setBindGroup(1, textureBindGroup);
|
|
209
220
|
pass.setVertexBuffer(0, staticVertexBuffer);
|
|
210
|
-
pass.setVertexBuffer(1,
|
|
221
|
+
pass.setVertexBuffer(1, instanceBuffer);
|
|
211
222
|
pass.setIndexBuffer(indexBuffer, 'uint16');
|
|
212
|
-
pass.drawIndexed(indicesPerParticle,
|
|
223
|
+
pass.drawIndexed(indicesPerParticle, drawInstanceCount, 0, 0, 0);
|
|
213
224
|
backend.stats.batches++;
|
|
214
225
|
backend.stats.drawCalls++;
|
|
215
226
|
pass.end();
|
|
@@ -352,17 +363,82 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
352
363
|
uvMinX, uvMinY, uvMaxX, uvMaxY,
|
|
353
364
|
]);
|
|
354
365
|
}
|
|
355
|
-
_writeInstanceData(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
366
|
+
_writeInstanceData(system) {
|
|
367
|
+
const { posX, posY, scaleX, scaleY, rotations, color, textureIndex, alive, liveCount } = system;
|
|
368
|
+
const f32 = this._float32View;
|
|
369
|
+
const u32 = this._uint32View;
|
|
370
|
+
const { uvMins, uvMaxs } = this._computeFrameUvs(system);
|
|
371
|
+
const frameCount = uvMins.length / 2;
|
|
372
|
+
let writeIndex = 0;
|
|
373
|
+
for (let particleIndex = 0; particleIndex < liveCount; particleIndex++) {
|
|
374
|
+
// Skip dead slots — present in GPU-mode systems where the live
|
|
375
|
+
// range can carry holes filled in on next spawn.
|
|
376
|
+
if (alive[particleIndex] === 0) {
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
const targetIndex = writeIndex * instanceWords;
|
|
380
|
+
const frame = textureIndex[particleIndex] < frameCount ? textureIndex[particleIndex] : 0;
|
|
381
|
+
const uvBase = frame * 2;
|
|
382
|
+
f32[targetIndex + 0] = posX[particleIndex];
|
|
383
|
+
f32[targetIndex + 1] = posY[particleIndex];
|
|
384
|
+
f32[targetIndex + 2] = scaleX[particleIndex];
|
|
385
|
+
f32[targetIndex + 3] = scaleY[particleIndex];
|
|
386
|
+
f32[targetIndex + 4] = rotations[particleIndex];
|
|
387
|
+
u32[targetIndex + 5] = color[particleIndex];
|
|
388
|
+
f32[targetIndex + 6] = uvMins[uvBase + 0];
|
|
389
|
+
f32[targetIndex + 7] = uvMins[uvBase + 1];
|
|
390
|
+
f32[targetIndex + 8] = uvMaxs[uvBase + 0];
|
|
391
|
+
f32[targetIndex + 9] = uvMaxs[uvBase + 1];
|
|
392
|
+
writeIndex++;
|
|
393
|
+
}
|
|
394
|
+
return writeIndex;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Same atlas/UV-resolution as the WebGL2 path. Returns the per-frame
|
|
398
|
+
* (uvMin, uvMax) pairs derived from `system.frames` (or fallback to
|
|
399
|
+
* `system.textureFrame` when no atlas is declared), already flipY-
|
|
400
|
+
* adjusted for the current texture.
|
|
401
|
+
*/
|
|
402
|
+
_uvMinsScratch = new Float32Array(2);
|
|
403
|
+
_uvMaxsScratch = new Float32Array(2);
|
|
404
|
+
_computeFrameUvs(system) {
|
|
405
|
+
const frames = system.frames;
|
|
406
|
+
const tex = system.texture;
|
|
407
|
+
const texW = tex.width;
|
|
408
|
+
const texH = tex.height;
|
|
409
|
+
const flipY = tex.flipY;
|
|
410
|
+
const count = frames.length === 0 ? 1 : frames.length;
|
|
411
|
+
if (this._uvMinsScratch.length < count * 2) {
|
|
412
|
+
this._uvMinsScratch = new Float32Array(count * 2);
|
|
413
|
+
this._uvMaxsScratch = new Float32Array(count * 2);
|
|
414
|
+
}
|
|
415
|
+
const mins = this._uvMinsScratch;
|
|
416
|
+
const maxs = this._uvMaxsScratch;
|
|
417
|
+
if (frames.length === 0) {
|
|
418
|
+
const f = system.textureFrame;
|
|
419
|
+
const minU = f.left / texW;
|
|
420
|
+
const maxU = f.right / texW;
|
|
421
|
+
const topV = f.top / texH;
|
|
422
|
+
const bottomV = f.bottom / texH;
|
|
423
|
+
mins[0] = minU;
|
|
424
|
+
mins[1] = flipY ? bottomV : topV;
|
|
425
|
+
maxs[0] = maxU;
|
|
426
|
+
maxs[1] = flipY ? topV : bottomV;
|
|
427
|
+
return { uvMins: mins, uvMaxs: maxs };
|
|
365
428
|
}
|
|
429
|
+
for (let i = 0; i < frames.length; i++) {
|
|
430
|
+
const f = frames[i];
|
|
431
|
+
const o = i * 2;
|
|
432
|
+
const minU = f.left / texW;
|
|
433
|
+
const maxU = f.right / texW;
|
|
434
|
+
const topV = f.top / texH;
|
|
435
|
+
const bottomV = f.bottom / texH;
|
|
436
|
+
mins[o + 0] = minU;
|
|
437
|
+
mins[o + 1] = flipY ? bottomV : topV;
|
|
438
|
+
maxs[o + 0] = maxU;
|
|
439
|
+
maxs[o + 1] = flipY ? topV : bottomV;
|
|
440
|
+
}
|
|
441
|
+
return { uvMins: mins, uvMaxs: maxs };
|
|
366
442
|
}
|
|
367
443
|
_getPipeline(blendMode, format) {
|
|
368
444
|
const pipelineKey = `${blendMode}:${format}`;
|
|
@@ -401,6 +477,14 @@ class WebGpuParticleRenderer extends AbstractWebGpuRenderer {
|
|
|
401
477
|
shaderLocation: 4,
|
|
402
478
|
offset: 20,
|
|
403
479
|
format: 'unorm8x4',
|
|
480
|
+
}, {
|
|
481
|
+
shaderLocation: 5,
|
|
482
|
+
offset: 24,
|
|
483
|
+
format: 'float32x2',
|
|
484
|
+
}, {
|
|
485
|
+
shaderLocation: 6,
|
|
486
|
+
offset: 32,
|
|
487
|
+
format: 'float32x2',
|
|
404
488
|
}],
|
|
405
489
|
}],
|
|
406
490
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGpuParticleRenderer.js","sources":["../../../../../src/rendering/webgpu/WebGpuParticleRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WebGpuParticleRenderer.js","sources":["../../../../../src/rendering/webgpu/WebGpuParticleRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Description of a single buffer binding for a compute pipeline. Mirrors
|
|
3
|
+
* the WGSL `@group(0) @binding(N)` declaration.
|
|
4
|
+
*
|
|
5
|
+
* `binding` matches the WGSL binding number; `type` chooses the storage
|
|
6
|
+
* mode. `'storage'` is read-write (`var<storage, read_write>` in WGSL),
|
|
7
|
+
* `'storage-read'` is read-only (`var<storage, read>`), `'uniform'` is
|
|
8
|
+
* read-only and aligned to 16 bytes (`var<uniform>`).
|
|
9
|
+
*/
|
|
10
|
+
export interface ComputeBinding {
|
|
11
|
+
binding: number;
|
|
12
|
+
type: 'storage' | 'storage-read' | 'uniform';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Owning wrapper around a `GPUComputePipeline` plus its bind-group layout.
|
|
16
|
+
* Created once per shader; multiple bind groups can be bound per dispatch
|
|
17
|
+
* to render different particle systems with the same pipeline.
|
|
18
|
+
*
|
|
19
|
+
* Construct via {@link create}; do not call `new GPUComputePipeline`
|
|
20
|
+
* directly elsewhere.
|
|
21
|
+
*/
|
|
22
|
+
export declare class WebGpuComputePipeline {
|
|
23
|
+
readonly device: GPUDevice;
|
|
24
|
+
readonly pipeline: GPUComputePipeline;
|
|
25
|
+
readonly bindGroupLayout: GPUBindGroupLayout;
|
|
26
|
+
readonly workgroupSize: number;
|
|
27
|
+
constructor(device: GPUDevice, pipeline: GPUComputePipeline, bindGroupLayout: GPUBindGroupLayout, workgroupSize: number);
|
|
28
|
+
static create(device: GPUDevice, opts: {
|
|
29
|
+
wgsl: string;
|
|
30
|
+
entryPoint?: string;
|
|
31
|
+
workgroupSize?: number;
|
|
32
|
+
bindings: ReadonlyArray<ComputeBinding>;
|
|
33
|
+
label?: string;
|
|
34
|
+
}): WebGpuComputePipeline;
|
|
35
|
+
/**
|
|
36
|
+
* Construct a bind group from `entries` in the order matching the
|
|
37
|
+
* binding indices declared at pipeline creation. The caller is
|
|
38
|
+
* responsible for the buffers' lifecycle.
|
|
39
|
+
*/
|
|
40
|
+
createBindGroup(entries: ReadonlyArray<{
|
|
41
|
+
binding: number;
|
|
42
|
+
buffer: GPUBuffer;
|
|
43
|
+
offset?: number;
|
|
44
|
+
size?: number;
|
|
45
|
+
}>, label?: string): GPUBindGroup;
|
|
46
|
+
/**
|
|
47
|
+
* Dispatch this pipeline over `itemCount` items. Workgroups dispatched
|
|
48
|
+
* = `ceil(itemCount / workgroupSize)`. Caller must have set the bind
|
|
49
|
+
* group on the pass already.
|
|
50
|
+
*/
|
|
51
|
+
dispatch(passEncoder: GPUComputePassEncoder, itemCount: number): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owning wrapper around a `GPUBuffer` allocated with `STORAGE | COPY_DST | COPY_SRC`.
|
|
3
|
+
* Designed for the data-oriented ParticleSystem GPU path: one storage
|
|
4
|
+
* buffer per SoA channel, written to from CPU each spawn frame, read by
|
|
5
|
+
* compute shaders, and (optionally) read back to CPU for expire detection.
|
|
6
|
+
*
|
|
7
|
+
* Lifetime: the caller (typically `ParticleGpuState`) owns the buffer and
|
|
8
|
+
* must call {@link destroy} when the system is torn down.
|
|
9
|
+
*/
|
|
10
|
+
export declare class WebGpuStorageBuffer {
|
|
11
|
+
readonly device: GPUDevice;
|
|
12
|
+
readonly buffer: GPUBuffer;
|
|
13
|
+
readonly byteLength: number;
|
|
14
|
+
readonly label: string;
|
|
15
|
+
private _readbackBuffer;
|
|
16
|
+
constructor(device: GPUDevice, byteLength: number, label?: string);
|
|
17
|
+
/** Upload the contents of `data` to this buffer at `byteOffset`. */
|
|
18
|
+
write(data: ArrayBufferView, byteOffset?: number, byteSize?: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* Copy this buffer's contents into a CPU-mappable readback buffer and
|
|
21
|
+
* await the result. Allocates the readback buffer lazily on first call;
|
|
22
|
+
* subsequent calls re-use it.
|
|
23
|
+
*
|
|
24
|
+
* Caller passes `target` (a typed-array view) to be filled. Async; one
|
|
25
|
+
* frame of latency at minimum. Use sparingly — readback is a stall.
|
|
26
|
+
*/
|
|
27
|
+
read(target: ArrayBufferView, encoder?: GPUCommandEncoder): Promise<void>;
|
|
28
|
+
destroy(): void;
|
|
29
|
+
}
|
|
@@ -4,13 +4,16 @@ import type { CacheStore } from './CacheStore';
|
|
|
4
4
|
* {@link CacheStrategy} that checks every provided {@link CacheStore} before
|
|
5
5
|
* falling back to the network.
|
|
6
6
|
*
|
|
7
|
-
* On a cache hit the stored value is
|
|
7
|
+
* On a cache hit the stored value is fed directly to
|
|
8
8
|
* {@link AssetFactory.create | factory.create}; if that throws (stale or
|
|
9
9
|
* corrupt entry) the entry is deleted and the next store is tried. Only once
|
|
10
10
|
* all stores miss does the strategy fetch from the network and write the
|
|
11
|
-
*
|
|
12
|
-
* swallowed silently so that a full storage can never prevent an
|
|
13
|
-
* loading.
|
|
11
|
+
* processed source back to every store. Quota or serialisation errors during
|
|
12
|
+
* write are swallowed silently so that a full storage can never prevent an
|
|
13
|
+
* asset from loading.
|
|
14
|
+
*
|
|
15
|
+
* Returns the fully constructed resource — callers do not need to call
|
|
16
|
+
* {@link AssetFactory.create} again.
|
|
14
17
|
*/
|
|
15
18
|
export declare class CacheFirstStrategy implements CacheStrategy {
|
|
16
19
|
resolve(request: CacheRequest, stores: ReadonlyArray<CacheStore>): Promise<unknown>;
|
|
@@ -2,23 +2,25 @@
|
|
|
2
2
|
* {@link CacheStrategy} that checks every provided {@link CacheStore} before
|
|
3
3
|
* falling back to the network.
|
|
4
4
|
*
|
|
5
|
-
* On a cache hit the stored value is
|
|
5
|
+
* On a cache hit the stored value is fed directly to
|
|
6
6
|
* {@link AssetFactory.create | factory.create}; if that throws (stale or
|
|
7
7
|
* corrupt entry) the entry is deleted and the next store is tried. Only once
|
|
8
8
|
* all stores miss does the strategy fetch from the network and write the
|
|
9
|
-
*
|
|
10
|
-
* swallowed silently so that a full storage can never prevent an
|
|
11
|
-
* loading.
|
|
9
|
+
* processed source back to every store. Quota or serialisation errors during
|
|
10
|
+
* write are swallowed silently so that a full storage can never prevent an
|
|
11
|
+
* asset from loading.
|
|
12
|
+
*
|
|
13
|
+
* Returns the fully constructed resource — callers do not need to call
|
|
14
|
+
* {@link AssetFactory.create} again.
|
|
12
15
|
*/
|
|
13
16
|
class CacheFirstStrategy {
|
|
14
17
|
async resolve(request, stores) {
|
|
15
|
-
const { storageName, key, url, requestOptions, factory } = request;
|
|
18
|
+
const { storageName, key, url, requestOptions, factory, options } = request;
|
|
16
19
|
for (const store of stores) {
|
|
17
20
|
const cached = await store.load(storageName, key);
|
|
18
21
|
if (cached !== null && cached !== undefined) {
|
|
19
22
|
try {
|
|
20
|
-
await factory.create(cached);
|
|
21
|
-
return cached;
|
|
23
|
+
return await factory.create(cached, options);
|
|
22
24
|
}
|
|
23
25
|
catch {
|
|
24
26
|
await store.delete(storageName, key);
|
|
@@ -30,6 +32,7 @@ class CacheFirstStrategy {
|
|
|
30
32
|
throw new Error(`Failed to fetch "${url}" (${response.status} ${response.statusText}).`);
|
|
31
33
|
}
|
|
32
34
|
const source = await factory.process(response);
|
|
35
|
+
const resource = await factory.create(source, options);
|
|
33
36
|
for (const store of stores) {
|
|
34
37
|
try {
|
|
35
38
|
await store.save(storageName, key, source);
|
|
@@ -38,7 +41,7 @@ class CacheFirstStrategy {
|
|
|
38
41
|
// Quota exceeded or non-cloneable value — continue without caching.
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
|
-
return
|
|
44
|
+
return resource;
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheFirstStrategy.js","sources":["../../../../src/resources/CacheFirstStrategy.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"CacheFirstStrategy.js","sources":["../../../../src/resources/CacheFirstStrategy.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;AAcG;MACU,kBAAkB,CAAA;AAEpB,IAAA,MAAM,OAAO,CAAC,OAAqB,EAAE,MAAiC,EAAA;AACzE,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO;AAE3E,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;YAEjD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AACzC,gBAAA,IAAI;oBACA,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAChD;AAAE,gBAAA,MAAM;oBACJ,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;gBACxC;YACJ;QACJ;QAEA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC;AAEjD,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAA,GAAA,EAAM,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;QAC5F;QAEA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AAEtD,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI;gBACA,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC;YAC9C;AAAE,YAAA,MAAM;;YAER;QACJ;AAEA,QAAA,OAAO,QAAQ;IACnB;AACH;;;;"}
|
|
@@ -3,8 +3,9 @@ import type { CacheStore } from './CacheStore';
|
|
|
3
3
|
/**
|
|
4
4
|
* All the information a {@link CacheStrategy} needs to resolve a single asset.
|
|
5
5
|
*
|
|
6
|
-
* Bundles the target factory, cache namespace, lookup key,
|
|
7
|
-
* parameters into one value so strategies
|
|
6
|
+
* Bundles the target factory, cache namespace, lookup key, the fetch
|
|
7
|
+
* parameters, and any factory-specific options into one value so strategies
|
|
8
|
+
* remain stateless.
|
|
8
9
|
*/
|
|
9
10
|
export interface CacheRequest {
|
|
10
11
|
/** The {@link AssetFactory.storageName} used as the cache namespace. */
|
|
@@ -15,18 +16,25 @@ export interface CacheRequest {
|
|
|
15
16
|
readonly url: string;
|
|
16
17
|
readonly requestOptions: RequestInit;
|
|
17
18
|
readonly factory: AssetFactory;
|
|
19
|
+
/** Factory-specific options forwarded to {@link AssetFactory.create}. */
|
|
20
|
+
readonly options?: unknown;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Strategy interface that decides how assets are fetched and cached.
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
+
* Implementations own the full pipeline: cache check (if applicable) →
|
|
26
|
+
* network fetch (if needed) → factory.process → factory.create → cache
|
|
27
|
+
* write (if applicable). The returned value is the fully constructed
|
|
28
|
+
* resource (post-{@link AssetFactory.create}), not the intermediate source.
|
|
29
|
+
*
|
|
30
|
+
* ExoJS ships {@link CacheFirstStrategy} (default) and {@link NetworkOnlyStrategy};
|
|
31
|
+
* implement this interface to add custom policies such as network-first,
|
|
32
|
+
* stale-while-revalidate, or cache-only / offline-first.
|
|
25
33
|
*/
|
|
26
34
|
export interface CacheStrategy {
|
|
27
35
|
/**
|
|
28
36
|
* Resolves a single asset according to the strategy's caching policy and
|
|
29
|
-
* returns the
|
|
37
|
+
* returns the fully constructed resource.
|
|
30
38
|
*/
|
|
31
39
|
resolve(request: CacheRequest, stores: ReadonlyArray<CacheStore>): Promise<unknown>;
|
|
32
40
|
}
|
|
@@ -3,6 +3,7 @@ import { Json, TextAsset, SvgAsset, VttAsset } from './tokens';
|
|
|
3
3
|
import type { AssetFactory } from './AssetFactory';
|
|
4
4
|
import type { AssetConstructor } from './FactoryRegistry';
|
|
5
5
|
import type { CacheStore } from './CacheStore';
|
|
6
|
+
import type { CacheStrategy } from './CacheStrategy';
|
|
6
7
|
import type { AssetManifest, LoadBundleOptions } from './AssetManifest';
|
|
7
8
|
/**
|
|
8
9
|
* Any abstract or concrete constructor that can be used as an asset type token
|
|
@@ -23,14 +24,17 @@ export type LoadReturn<T> = T extends typeof Json ? unknown : T extends typeof T
|
|
|
23
24
|
* Construction options for {@link Loader}.
|
|
24
25
|
*
|
|
25
26
|
* `resourcePath` is prepended to relative asset paths at fetch time.
|
|
26
|
-
* `cache` accepts one or more {@link CacheStore} instances
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* `cache` accepts one or more {@link CacheStore} instances. `cacheStrategy`
|
|
28
|
+
* picks the policy used to consult them — defaults to
|
|
29
|
+
* {@link CacheFirstStrategy} (check stores → network → write back).
|
|
30
|
+
* `concurrency` caps the number of simultaneous background-queue fetches
|
|
31
|
+
* (default `6`).
|
|
29
32
|
*/
|
|
30
33
|
export interface LoaderOptions {
|
|
31
34
|
resourcePath?: string;
|
|
32
35
|
requestOptions?: RequestInit;
|
|
33
36
|
cache?: CacheStore | ReadonlyArray<CacheStore>;
|
|
37
|
+
cacheStrategy?: CacheStrategy;
|
|
34
38
|
concurrency?: number;
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
@@ -68,6 +72,7 @@ export declare class Loader {
|
|
|
68
72
|
private readonly _typeIds;
|
|
69
73
|
private readonly _preventStoreKeys;
|
|
70
74
|
private readonly _stores;
|
|
75
|
+
private readonly _cacheStrategy;
|
|
71
76
|
private _resourcePath;
|
|
72
77
|
private _requestOptions;
|
|
73
78
|
private _concurrency;
|
|
@@ -18,6 +18,7 @@ import { BinaryFactory } from './factories/BinaryFactory.js';
|
|
|
18
18
|
import { WasmFactory } from './factories/WasmFactory.js';
|
|
19
19
|
import { VttFactory } from './factories/VttFactory.js';
|
|
20
20
|
import { defineAssetManifest, BundleLoadError } from './AssetManifest.js';
|
|
21
|
+
import { CacheFirstStrategy } from './CacheFirstStrategy.js';
|
|
21
22
|
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
// Loader
|
|
@@ -57,6 +58,7 @@ class Loader {
|
|
|
57
58
|
_typeIds = new WeakMap();
|
|
58
59
|
_preventStoreKeys = new Set();
|
|
59
60
|
_stores;
|
|
61
|
+
_cacheStrategy;
|
|
60
62
|
_resourcePath;
|
|
61
63
|
_requestOptions;
|
|
62
64
|
_concurrency;
|
|
@@ -81,6 +83,7 @@ class Loader {
|
|
|
81
83
|
this._stores = options.cache
|
|
82
84
|
? (Array.isArray(options.cache) ? options.cache : [options.cache])
|
|
83
85
|
: [];
|
|
86
|
+
this._cacheStrategy = options.cacheStrategy ?? new CacheFirstStrategy();
|
|
84
87
|
this._registerBuiltinFactories();
|
|
85
88
|
}
|
|
86
89
|
// -----------------------------------------------------------------------
|
|
@@ -441,45 +444,24 @@ class Loader {
|
|
|
441
444
|
async _fetch(type, alias, path, options) {
|
|
442
445
|
const factory = this._registry.resolve(type);
|
|
443
446
|
const url = this._resolveUrl(path);
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// Network fetch
|
|
461
|
-
const response = await fetch(url, this._requestOptions);
|
|
462
|
-
if (!response.ok) {
|
|
463
|
-
throw new Error(`Failed to fetch "${alias}" from "${url}" (${response.status} ${response.statusText}).`);
|
|
464
|
-
}
|
|
465
|
-
source = await factory.process(response);
|
|
466
|
-
const resource = await factory.create(source, options).catch((error) => {
|
|
467
|
-
const cause = error instanceof Error ? error : new Error(String(error));
|
|
468
|
-
throw new Error(`Failed to create "${alias}" from "${url}": ${cause.message}`, {
|
|
469
|
-
cause,
|
|
447
|
+
try {
|
|
448
|
+
const resource = await this._cacheStrategy.resolve({
|
|
449
|
+
storageName: factory.storageName,
|
|
450
|
+
key: alias,
|
|
451
|
+
url,
|
|
452
|
+
requestOptions: this._requestOptions,
|
|
453
|
+
factory,
|
|
454
|
+
options,
|
|
455
|
+
}, this._stores);
|
|
456
|
+
this._storeResource(type, alias, resource);
|
|
457
|
+
return resource;
|
|
458
|
+
}
|
|
459
|
+
catch (error) {
|
|
460
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
461
|
+
throw new Error(`Failed to load "${alias}" from "${url}": ${message}`, {
|
|
462
|
+
cause: error,
|
|
470
463
|
});
|
|
471
|
-
});
|
|
472
|
-
// Write to caches
|
|
473
|
-
for (const store of this._stores) {
|
|
474
|
-
try {
|
|
475
|
-
await store.save(factory.storageName, alias, source);
|
|
476
|
-
}
|
|
477
|
-
catch {
|
|
478
|
-
// Quota exceeded or non-cloneable — continue without caching.
|
|
479
|
-
}
|
|
480
464
|
}
|
|
481
|
-
this._storeResource(type, alias, resource);
|
|
482
|
-
return resource;
|
|
483
465
|
}
|
|
484
466
|
// -----------------------------------------------------------------------
|
|
485
467
|
// Internal — background queue
|