spine-html 0.4.0 → 0.5.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/NOTICE.md +4 -3
- package/README.md +141 -3
- package/dist/MeshGlBlitter.d.ts +43 -1
- package/dist/MeshGlBlitter.d.ts.map +1 -1
- package/dist/MeshGlBlitter.js +85 -8
- package/dist/MeshGlBlitter.js.map +1 -1
- package/dist/SpineHtmlRenderer.d.ts +129 -7
- package/dist/SpineHtmlRenderer.d.ts.map +1 -1
- package/dist/SpineHtmlRenderer.js +281 -32
- package/dist/SpineHtmlRenderer.js.map +1 -1
- package/dist/binary.d.ts +48 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +29 -0
- package/dist/binary.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/loadAtlasAssets.d.ts +73 -0
- package/dist/loadAtlasAssets.d.ts.map +1 -0
- package/dist/loadAtlasAssets.js +75 -0
- package/dist/loadAtlasAssets.js.map +1 -0
- package/dist/loadSkeletonAssets.d.ts +41 -22
- package/dist/loadSkeletonAssets.d.ts.map +1 -1
- package/dist/loadSkeletonAssets.js +48 -49
- package/dist/loadSkeletonAssets.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +243 -0
- package/dist/main.js.map +1 -0
- package/package.json +5 -1
package/dist/main.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { AnimationState, AnimationStateData, AtlasAttachmentLoader, Physics, Skeleton, SkeletonJson, TextureAtlas, } from '@esotericsoftware/spine-core';
|
|
2
|
+
import { DomTexture, unpackRegions } from './DomTexture.js';
|
|
3
|
+
import { SpineHtmlRenderer } from './SpineHtmlRenderer.js';
|
|
4
|
+
const ASSET_BASE = '/spineboy';
|
|
5
|
+
const SKELETONS = {
|
|
6
|
+
pro: 'spineboy-pro.json', // meshes (deform tier → per-part canvases)
|
|
7
|
+
ess: 'spineboy-ess.json', // region attachments only (rigid tier → pure DOM)
|
|
8
|
+
};
|
|
9
|
+
const STAGE_SCALE = 0.4;
|
|
10
|
+
// Debug knobs: ?skel=pro|ess &anim=walk &count=10 pick the scene;
|
|
11
|
+
// ?expand=0 shows the mesh cracks; ?tint=ff8080 tints the whole skeleton;
|
|
12
|
+
// ?dpr=2 overrides the mesh-canvas backing ratio; ?timescale=0 freezes the
|
|
13
|
+
// animation (isolates the dirty-skip path: every mesh should report reused);
|
|
14
|
+
// ?backend=webgl rasterizes meshes through the shared WebGL blitter;
|
|
15
|
+
// ?time=1.2 seeks every instance to the same pose (deterministic screenshots).
|
|
16
|
+
const params = new URLSearchParams(location.search);
|
|
17
|
+
function parseTint() {
|
|
18
|
+
const hex = params.get('tint');
|
|
19
|
+
if (!hex || !/^[0-9a-fA-F]{6}$/.test(hex))
|
|
20
|
+
return null;
|
|
21
|
+
return {
|
|
22
|
+
r: parseInt(hex.slice(0, 2), 16) / 255,
|
|
23
|
+
g: parseInt(hex.slice(2, 4), 16) / 255,
|
|
24
|
+
b: parseInt(hex.slice(4, 6), 16) / 255,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function loadImage(url) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const img = new Image();
|
|
30
|
+
img.onload = () => resolve(img);
|
|
31
|
+
img.onerror = () => reject(new Error(`Failed to load ${url}`));
|
|
32
|
+
img.src = url;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async function load() {
|
|
36
|
+
const [atlasText, proText, essText] = await Promise.all([
|
|
37
|
+
fetch(`${ASSET_BASE}/spineboy.atlas`).then((r) => r.text()),
|
|
38
|
+
fetch(`${ASSET_BASE}/${SKELETONS.pro}`).then((r) => r.text()),
|
|
39
|
+
fetch(`${ASSET_BASE}/${SKELETONS.ess}`).then((r) => r.text()),
|
|
40
|
+
]);
|
|
41
|
+
const atlas = new TextureAtlas(atlasText);
|
|
42
|
+
const pageImages = new Map();
|
|
43
|
+
for (const page of atlas.pages) {
|
|
44
|
+
const image = await loadImage(`${ASSET_BASE}/${page.name}`);
|
|
45
|
+
page.setTexture(new DomTexture(image));
|
|
46
|
+
pageImages.set(page.name, image);
|
|
47
|
+
}
|
|
48
|
+
const regionImages = await unpackRegions(atlas, pageImages);
|
|
49
|
+
const loader = new AtlasAttachmentLoader(atlas);
|
|
50
|
+
return {
|
|
51
|
+
data: {
|
|
52
|
+
pro: new SkeletonJson(loader).readSkeletonData(proText),
|
|
53
|
+
ess: new SkeletonJson(loader).readSkeletonData(essText),
|
|
54
|
+
},
|
|
55
|
+
regionImages,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function main(data, regionImages) {
|
|
59
|
+
const stage = document.getElementById('stage');
|
|
60
|
+
const skelSelect = document.getElementById('skel');
|
|
61
|
+
const animSelect = document.getElementById('anim');
|
|
62
|
+
const countInput = document.getElementById('count');
|
|
63
|
+
const backendSelect = document.getElementById('backend');
|
|
64
|
+
const stats = document.getElementById('stats');
|
|
65
|
+
backendSelect.value = params.get('backend') === 'webgl' ? 'webgl' : 'canvas2d';
|
|
66
|
+
const skelParam = params.get('skel');
|
|
67
|
+
let variant = skelParam === 'ess' ? 'ess' : 'pro';
|
|
68
|
+
skelSelect.value = variant;
|
|
69
|
+
let stateData = new AnimationStateData(data[variant]);
|
|
70
|
+
let instances = [];
|
|
71
|
+
const tint = parseTint();
|
|
72
|
+
function fillAnimations() {
|
|
73
|
+
animSelect.innerHTML = '';
|
|
74
|
+
for (const anim of data[variant].animations) {
|
|
75
|
+
const option = document.createElement('option');
|
|
76
|
+
option.value = anim.name;
|
|
77
|
+
option.textContent = anim.name;
|
|
78
|
+
animSelect.appendChild(option);
|
|
79
|
+
}
|
|
80
|
+
const names = data[variant].animations.map((a) => a.name);
|
|
81
|
+
animSelect.value = names.includes('walk') ? 'walk' : names[0];
|
|
82
|
+
}
|
|
83
|
+
function rebuild(count) {
|
|
84
|
+
for (const inst of instances) {
|
|
85
|
+
inst.renderer.dispose();
|
|
86
|
+
inst.container.remove();
|
|
87
|
+
}
|
|
88
|
+
instances = [];
|
|
89
|
+
for (let i = 0; i < count; i++) {
|
|
90
|
+
const container = document.createElement('div');
|
|
91
|
+
container.className = 'skeleton-root';
|
|
92
|
+
// Spread instances horizontally; each root is the skeleton origin
|
|
93
|
+
// (feet), so park it near the stage bottom.
|
|
94
|
+
const x = count === 1 ? 50 : 10 + (80 * i) / (count - 1);
|
|
95
|
+
container.style.left = `${x}%`;
|
|
96
|
+
container.style.transform = `scale(${STAGE_SCALE})`;
|
|
97
|
+
stage.appendChild(container);
|
|
98
|
+
const skeleton = new Skeleton(data[variant]);
|
|
99
|
+
if (tint)
|
|
100
|
+
skeleton.color.set(tint.r, tint.g, tint.b, 1);
|
|
101
|
+
const state = new AnimationState(stateData);
|
|
102
|
+
state.setAnimation(0, animSelect.value, true);
|
|
103
|
+
// Desync walk cycles so N instances don't look like one stamped sprite —
|
|
104
|
+
// unless ?time seeks them all to one pose (for deterministic captures).
|
|
105
|
+
const timeParam = params.get('time');
|
|
106
|
+
state.update(timeParam !== null ? Number(timeParam) || 0 : (i * 0.37) % 2);
|
|
107
|
+
const timescaleParam = params.get('timescale');
|
|
108
|
+
if (timescaleParam !== null)
|
|
109
|
+
state.timeScale = Number(timescaleParam) || 0;
|
|
110
|
+
const renderer = new SpineHtmlRenderer(container, regionImages);
|
|
111
|
+
renderer.meshBackend = backendSelect.value;
|
|
112
|
+
const expandParam = params.get('expand');
|
|
113
|
+
if (expandParam !== null)
|
|
114
|
+
renderer.triangleExpand = Number(expandParam) || 0;
|
|
115
|
+
// Mesh canvases raster at the effective on-screen resolution: device
|
|
116
|
+
// pixels × the stage downscale (a plain devicePixelRatio would
|
|
117
|
+
// oversample by 1/STAGE_SCALE).
|
|
118
|
+
const dprParam = params.get('dpr');
|
|
119
|
+
renderer.pixelRatio =
|
|
120
|
+
dprParam !== null ? Number(dprParam) || 1 : (window.devicePixelRatio || 1) * STAGE_SCALE;
|
|
121
|
+
instances.push({ skeleton, state, renderer, container });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
skelSelect.addEventListener('change', () => {
|
|
125
|
+
variant = skelSelect.value;
|
|
126
|
+
stateData = new AnimationStateData(data[variant]);
|
|
127
|
+
stateData.defaultMix = 0.2;
|
|
128
|
+
fillAnimations();
|
|
129
|
+
rebuild(instances.length || 1);
|
|
130
|
+
});
|
|
131
|
+
animSelect.addEventListener('change', () => {
|
|
132
|
+
for (const inst of instances)
|
|
133
|
+
inst.state.setAnimation(0, animSelect.value, true);
|
|
134
|
+
});
|
|
135
|
+
countInput.addEventListener('change', () => {
|
|
136
|
+
const count = Math.min(50, Math.max(1, Number(countInput.value) || 1));
|
|
137
|
+
countInput.value = String(count);
|
|
138
|
+
rebuild(count);
|
|
139
|
+
});
|
|
140
|
+
backendSelect.addEventListener('change', () => {
|
|
141
|
+
// Live switch: the backend signature re-dirties every mesh on its own.
|
|
142
|
+
for (const inst of instances)
|
|
143
|
+
inst.renderer.meshBackend = backendSelect.value;
|
|
144
|
+
});
|
|
145
|
+
stateData.defaultMix = 0.2;
|
|
146
|
+
fillAnimations();
|
|
147
|
+
const animParam = params.get('anim');
|
|
148
|
+
if (animParam && data[variant].animations.some((a) => a.name === animParam)) {
|
|
149
|
+
animSelect.value = animParam;
|
|
150
|
+
}
|
|
151
|
+
const initialCount = Math.min(50, Math.max(1, Number(params.get('count')) || 1));
|
|
152
|
+
countInput.value = String(initialCount);
|
|
153
|
+
rebuild(initialCount);
|
|
154
|
+
// Click the stats line to copy it (hand-selecting it mid-animation is fiddly).
|
|
155
|
+
stats.title = 'click to copy';
|
|
156
|
+
stats.addEventListener('click', async () => {
|
|
157
|
+
try {
|
|
158
|
+
await navigator.clipboard.writeText(stats.textContent ?? '');
|
|
159
|
+
stats.style.color = '#ffd166';
|
|
160
|
+
setTimeout(() => (stats.style.color = ''), 300);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Clipboard unavailable (non-secure context) — selecting stays possible.
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// --- frame loop with split timings (skeleton math vs DOM writes) ---
|
|
167
|
+
let last = performance.now();
|
|
168
|
+
let updateMs = 0;
|
|
169
|
+
let renderMs = 0;
|
|
170
|
+
let frames = 0;
|
|
171
|
+
let statsAt = last;
|
|
172
|
+
function frame(now) {
|
|
173
|
+
const delta = Math.min((now - last) / 1000, 1 / 15);
|
|
174
|
+
last = now;
|
|
175
|
+
const t0 = performance.now();
|
|
176
|
+
for (const inst of instances) {
|
|
177
|
+
inst.state.update(delta);
|
|
178
|
+
inst.state.apply(inst.skeleton);
|
|
179
|
+
inst.skeleton.update(delta);
|
|
180
|
+
inst.skeleton.updateWorldTransform(Physics.update);
|
|
181
|
+
}
|
|
182
|
+
const t1 = performance.now();
|
|
183
|
+
for (const inst of instances)
|
|
184
|
+
inst.renderer.render(inst.skeleton);
|
|
185
|
+
const t2 = performance.now();
|
|
186
|
+
updateMs += t1 - t0;
|
|
187
|
+
renderMs += t2 - t1;
|
|
188
|
+
frames++;
|
|
189
|
+
if (now - statsAt >= 500 && frames > 0) {
|
|
190
|
+
let meshes = 0;
|
|
191
|
+
let reused = 0;
|
|
192
|
+
let reallocs = 0;
|
|
193
|
+
let triangles = 0;
|
|
194
|
+
let clips = 0;
|
|
195
|
+
let backing = 0;
|
|
196
|
+
for (const inst of instances) {
|
|
197
|
+
meshes += inst.renderer.meshCount;
|
|
198
|
+
reused += inst.renderer.meshReuseCount;
|
|
199
|
+
reallocs += inst.renderer.canvasReallocCount;
|
|
200
|
+
triangles += inst.renderer.triangleCount;
|
|
201
|
+
clips += inst.renderer.clipSkipCount;
|
|
202
|
+
backing += inst.renderer.meshBackingPixels;
|
|
203
|
+
}
|
|
204
|
+
const reallocNote = reallocs ? ` / ${reallocs} realloc'd` : '';
|
|
205
|
+
// Allocated mesh-canvas pixels: what an oversampling stage (a scaled
|
|
206
|
+
// root whose scale is not folded into pixelRatio) shows first.
|
|
207
|
+
const backingNote = backing ? ` · backing ${(backing / 1e6).toFixed(1)} Mpx` : '';
|
|
208
|
+
const meshNote = meshes + reused
|
|
209
|
+
? ` · mesh canvases ${meshes} drawn (${triangles} tris) / ${reused} reused${reallocNote}${backingNote}`
|
|
210
|
+
: '';
|
|
211
|
+
const first = instances[0]?.renderer;
|
|
212
|
+
// Surface the backend that actually ran, so a perf reading proves its path.
|
|
213
|
+
const backendNote = first && first.meshBackend === 'webgl'
|
|
214
|
+
? first.meshBackendActive === 'webgl'
|
|
215
|
+
? ' · webgl'
|
|
216
|
+
: ' · webgl unavailable → canvas2d'
|
|
217
|
+
: '';
|
|
218
|
+
const clipNote = clips ? ` · ${clips} clips skipped` : '';
|
|
219
|
+
// Real fps from rAF cadence: catches bottlenecks that live outside the
|
|
220
|
+
// frame callback (compositing, page throttling) which the ms split
|
|
221
|
+
// cannot see.
|
|
222
|
+
const fps = (frames * 1000) / (now - statsAt);
|
|
223
|
+
stats.textContent =
|
|
224
|
+
`${instances.length} skeleton(s) · ${fps.toFixed(0)} fps · ` +
|
|
225
|
+
`skeleton ${(updateMs / frames).toFixed(2)}ms · ` +
|
|
226
|
+
`render ${(renderMs / frames).toFixed(2)}ms / frame${meshNote}${backendNote}${clipNote}`;
|
|
227
|
+
updateMs = renderMs = 0;
|
|
228
|
+
frames = 0;
|
|
229
|
+
statsAt = now;
|
|
230
|
+
}
|
|
231
|
+
requestAnimationFrame(frame);
|
|
232
|
+
}
|
|
233
|
+
requestAnimationFrame(frame);
|
|
234
|
+
}
|
|
235
|
+
load()
|
|
236
|
+
.then(({ data, regionImages }) => main(data, regionImages))
|
|
237
|
+
.catch((err) => {
|
|
238
|
+
const stats = document.getElementById('stats');
|
|
239
|
+
if (stats)
|
|
240
|
+
stats.textContent = `Load failed: ${err.message} — did you run bun run fetch-assets?`;
|
|
241
|
+
console.error(err);
|
|
242
|
+
});
|
|
243
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spine-html",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Render Spine skeletal animations as plain DOM — rigid slots as <img> posed by CSS matrix, deform meshes on small per-part canvases, interleaved in one stacking context.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
".": {
|
|
30
30
|
"types": "./dist/index.d.ts",
|
|
31
31
|
"import": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./binary": {
|
|
34
|
+
"types": "./dist/binary.d.ts",
|
|
35
|
+
"import": "./dist/binary.js"
|
|
32
36
|
}
|
|
33
37
|
},
|
|
34
38
|
"files": [
|