@codexo/exojs 0.10.0 → 0.11.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 +83 -0
- package/dist/esm/core/dev.d.ts +21 -0
- package/dist/esm/core/dev.js +18 -0
- package/dist/esm/core/dev.js.map +1 -0
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +5 -1
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts +44 -0
- package/dist/esm/rendering/TransformBuffer.js +64 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/gradient/Gradient.d.ts +35 -2
- package/dist/esm/rendering/gradient/Gradient.js +51 -5
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -1
- package/dist/esm/rendering/gradient/LinearGradient.d.ts +11 -3
- package/dist/esm/rendering/gradient/LinearGradient.js +23 -0
- package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -1
- package/dist/esm/rendering/gradient/RadialGradient.d.ts +11 -3
- package/dist/esm/rendering/gradient/RadialGradient.js +19 -0
- package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -1
- package/dist/esm/rendering/index.d.ts +1 -1
- package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +2 -2
- package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +2 -2
- package/dist/esm/rendering/pass/RenderPassDescriptor.js +1 -1
- package/dist/esm/rendering/plan/RenderCommand.d.ts +21 -2
- package/dist/esm/rendering/plan/RenderCommand.js +34 -1
- package/dist/esm/rendering/plan/RenderCommand.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +51 -0
- package/dist/esm/rendering/plan/RenderInstruction.js +45 -0
- package/dist/esm/rendering/plan/RenderInstruction.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +4 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +58 -7
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +70 -5
- package/dist/esm/rendering/primitives/Graphics.js +172 -14
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +13 -8
- package/dist/esm/rendering/sprite/spriteMaterialSources.js +35 -14
- package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
- package/dist/esm/rendering/text/BitmapText.js +8 -1
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/BmFont.js +3 -0
- package/dist/esm/rendering/text/BmFont.js.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.d.ts +14 -0
- package/dist/esm/rendering/text/GlyphSdf.js +41 -11
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +5 -0
- package/dist/esm/rendering/text/TextStyle.js +1 -1
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +23 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +50 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +3 -3
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +8 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +8 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +62 -39
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +7 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +1 -1
- package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +16 -3
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +49 -4
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +53 -41
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +17 -11
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +2 -2
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +2 -2
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +9 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +122 -77
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +22 -13
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +32 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +58 -12
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/resources/Loader.js +1 -1
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/exo.esm.js +1022 -265
- package/dist/exo.esm.js.map +1 -1
- package/package.json +9 -5
|
@@ -4,24 +4,45 @@ import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js
|
|
|
4
4
|
import { Vector } from '../../math/Vector.js';
|
|
5
5
|
import { Container } from '../Container.js';
|
|
6
6
|
import { Mesh } from '../mesh/Mesh.js';
|
|
7
|
+
import { ScaleModes } from '../types.js';
|
|
7
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Edge length of the square gradient texture rasterized for gradient paints.
|
|
11
|
+
* The full 2D UV field is baked so both linear and radial gradients map across
|
|
12
|
+
* the filled shape's bounding box without per-axis special-casing.
|
|
13
|
+
*/
|
|
14
|
+
const gradientTextureSize = 256;
|
|
8
15
|
/**
|
|
9
16
|
* Immediate-mode 2D shape API backed by {@link Mesh} children.
|
|
10
17
|
*
|
|
11
18
|
* Each draw call (e.g. `drawCircle`, `drawRectangle`, `drawLine`) appends a
|
|
12
|
-
* new {@link Mesh} child
|
|
19
|
+
* new {@link Mesh} child painted with the active fill or stroke style. A style
|
|
20
|
+
* is either a solid {@link Color} or a {@link Gradient}, assigned through
|
|
21
|
+
* {@link fillStyle} / {@link strokeStyle}. The {@link fillColor} /
|
|
22
|
+
* {@link lineColor} accessors are color-only conveniences over those styles.
|
|
13
23
|
* The active `lineWidth` controls stroke thickness for path and outline draws.
|
|
14
24
|
* Path commands (`moveTo`, `lineTo`, `quadraticCurveTo`, etc.) track a cursor
|
|
15
25
|
* point and flush a Mesh on each segment.
|
|
16
26
|
*
|
|
27
|
+
* Gradient styles are rasterized once to a {@link DataTexture} via
|
|
28
|
+
* {@link Gradient.toTexture} and sampled across each shape's local bounding
|
|
29
|
+
* box, so {@link LinearGradient} and {@link RadialGradient} render through the
|
|
30
|
+
* same texture path as a textured Mesh. The textures are owned by the Graphics
|
|
31
|
+
* and released on {@link clear} / {@link destroy}.
|
|
32
|
+
*
|
|
17
33
|
* Call {@link clear} to remove all child meshes and reset pen state. Because
|
|
18
34
|
* each shape is a separate Mesh, `Graphics` inherits full filter, blend,
|
|
19
35
|
* tint, and mask support from {@link Container}.
|
|
20
36
|
*/
|
|
21
37
|
class Graphics extends Container {
|
|
22
38
|
_lineWidth = 0;
|
|
23
|
-
_lineColor = new Color();
|
|
24
39
|
_fillColor = new Color();
|
|
40
|
+
_lineColor = new Color();
|
|
41
|
+
_fillStyle = this._fillColor;
|
|
42
|
+
_strokeStyle = this._lineColor;
|
|
43
|
+
_fillStyleTexture = null;
|
|
44
|
+
_strokeStyleTexture = null;
|
|
45
|
+
_ownedTextures = new Set();
|
|
25
46
|
_currentPoint = new Vector(0, 0);
|
|
26
47
|
get lineWidth() {
|
|
27
48
|
return this._lineWidth;
|
|
@@ -29,17 +50,59 @@ class Graphics extends Container {
|
|
|
29
50
|
set lineWidth(lineWidth) {
|
|
30
51
|
this._lineWidth = lineWidth;
|
|
31
52
|
}
|
|
53
|
+
/** Solid stroke color slot: the last solid color assigned to the stroke. */
|
|
32
54
|
get lineColor() {
|
|
33
55
|
return this._lineColor;
|
|
34
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Convenience solid-color setter for the stroke. Copies `lineColor` into the
|
|
59
|
+
* color slot and makes it the active {@link strokeStyle}, replacing any
|
|
60
|
+
* gradient stroke style.
|
|
61
|
+
*/
|
|
35
62
|
set lineColor(lineColor) {
|
|
36
|
-
this.
|
|
63
|
+
this.strokeStyle = lineColor;
|
|
37
64
|
}
|
|
65
|
+
/** Solid fill color slot: the last solid color assigned to the fill. */
|
|
38
66
|
get fillColor() {
|
|
39
67
|
return this._fillColor;
|
|
40
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Convenience solid-color setter for the fill. Copies `fillColor` into the
|
|
71
|
+
* color slot and makes it the active {@link fillStyle}, replacing any
|
|
72
|
+
* gradient fill style.
|
|
73
|
+
*/
|
|
41
74
|
set fillColor(fillColor) {
|
|
42
|
-
this.
|
|
75
|
+
this.fillStyle = fillColor;
|
|
76
|
+
}
|
|
77
|
+
/** Active fill style: a solid {@link Color} or a {@link Gradient}. */
|
|
78
|
+
get fillStyle() {
|
|
79
|
+
return this._fillStyle;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Set the fill style. Accepts a solid {@link Color}, a {@link Gradient}
|
|
83
|
+
* (cloned on assignment and rasterized lazily on first fill), or `null` to
|
|
84
|
+
* revert to the solid color held by {@link fillColor}. A {@link Color} value
|
|
85
|
+
* is copied into the {@link fillColor} slot; the most recently assigned style
|
|
86
|
+
* wins.
|
|
87
|
+
*/
|
|
88
|
+
set fillStyle(style) {
|
|
89
|
+
this._fillStyle = this._resolveStyle(style, this._fillColor);
|
|
90
|
+
this._fillStyleTexture = null;
|
|
91
|
+
}
|
|
92
|
+
/** Active stroke style: a solid {@link Color} or a {@link Gradient}. */
|
|
93
|
+
get strokeStyle() {
|
|
94
|
+
return this._strokeStyle;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Set the stroke style. Accepts a solid {@link Color}, a {@link Gradient}
|
|
98
|
+
* (cloned on assignment and rasterized lazily on first stroke), or `null` to
|
|
99
|
+
* revert to the solid color held by {@link lineColor}. A {@link Color} value
|
|
100
|
+
* is copied into the {@link lineColor} slot; the most recently assigned style
|
|
101
|
+
* wins.
|
|
102
|
+
*/
|
|
103
|
+
set strokeStyle(style) {
|
|
104
|
+
this._strokeStyle = this._resolveStyle(style, this._lineColor);
|
|
105
|
+
this._strokeStyleTexture = null;
|
|
43
106
|
}
|
|
44
107
|
get currentPoint() {
|
|
45
108
|
return this._currentPoint;
|
|
@@ -163,19 +226,19 @@ class Graphics extends Container {
|
|
|
163
226
|
/** Draw a stroked line between two explicit points, independent of the current pen position. */
|
|
164
227
|
drawLine(startX, startY, endX, endY) {
|
|
165
228
|
const data = buildLine(startX, startY, endX, endY, this._lineWidth);
|
|
166
|
-
this.addChild(this.
|
|
229
|
+
this.addChild(this._createStrokeMesh(data));
|
|
167
230
|
return this;
|
|
168
231
|
}
|
|
169
232
|
/** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
|
|
170
233
|
drawPath(path) {
|
|
171
234
|
const data = buildPath(path, this._lineWidth);
|
|
172
|
-
this.addChild(this.
|
|
235
|
+
this.addChild(this._createStrokeMesh(data));
|
|
173
236
|
return this;
|
|
174
237
|
}
|
|
175
238
|
/** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
|
|
176
239
|
drawPolygon(path) {
|
|
177
240
|
const data = buildPolygon(path);
|
|
178
|
-
this.addChild(this.
|
|
241
|
+
this.addChild(this._createFillMesh(data));
|
|
179
242
|
if (this._lineWidth > 0) {
|
|
180
243
|
this.drawPath(data.points);
|
|
181
244
|
}
|
|
@@ -184,7 +247,7 @@ class Graphics extends Container {
|
|
|
184
247
|
/** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
|
|
185
248
|
drawCircle(centerX, centerY, radius) {
|
|
186
249
|
const data = buildCircle(centerX, centerY, radius);
|
|
187
|
-
this.addChild(this.
|
|
250
|
+
this.addChild(this._createFillMesh(data));
|
|
188
251
|
if (this._lineWidth > 0) {
|
|
189
252
|
this.drawPath(data.points);
|
|
190
253
|
}
|
|
@@ -193,7 +256,7 @@ class Graphics extends Container {
|
|
|
193
256
|
/** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
|
|
194
257
|
drawEllipse(centerX, centerY, radiusX, radiusY) {
|
|
195
258
|
const data = buildEllipse(centerX, centerY, radiusX, radiusY);
|
|
196
|
-
this.addChild(this.
|
|
259
|
+
this.addChild(this._createFillMesh(data));
|
|
197
260
|
if (this._lineWidth > 0) {
|
|
198
261
|
this.drawPath(data.points);
|
|
199
262
|
}
|
|
@@ -202,7 +265,7 @@ class Graphics extends Container {
|
|
|
202
265
|
/** Fill a rectangle and optionally stroke its outline if `lineWidth > 0`. */
|
|
203
266
|
drawRectangle(x, y, width, height) {
|
|
204
267
|
const data = buildRectangle(x, y, width, height);
|
|
205
|
-
this.addChild(this.
|
|
268
|
+
this.addChild(this._createFillMesh(data));
|
|
206
269
|
if (this._lineWidth > 0) {
|
|
207
270
|
this.drawPath(data.points);
|
|
208
271
|
}
|
|
@@ -214,18 +277,23 @@ class Graphics extends Container {
|
|
|
214
277
|
*/
|
|
215
278
|
drawStar(centerX, centerY, points, radius, innerRadius = radius / 2, rotation = 0) {
|
|
216
279
|
const data = buildStar(centerX, centerY, points, radius, innerRadius, rotation);
|
|
217
|
-
this.addChild(this.
|
|
280
|
+
this.addChild(this._createFillMesh(data));
|
|
218
281
|
if (this._lineWidth > 0) {
|
|
219
282
|
this.drawPath(data.points);
|
|
220
283
|
}
|
|
221
284
|
return this;
|
|
222
285
|
}
|
|
223
|
-
/** Remove all child meshes and reset pen state (position,
|
|
286
|
+
/** Remove all child meshes and reset pen state (position, fill/stroke styles, line width). */
|
|
224
287
|
clear() {
|
|
225
288
|
this.removeChildren();
|
|
226
289
|
this._lineWidth = 0;
|
|
227
|
-
this._lineColor.copy(Color.black);
|
|
228
290
|
this._fillColor.copy(Color.black);
|
|
291
|
+
this._lineColor.copy(Color.black);
|
|
292
|
+
this._fillStyle = this._fillColor;
|
|
293
|
+
this._strokeStyle = this._lineColor;
|
|
294
|
+
this._fillStyleTexture = null;
|
|
295
|
+
this._strokeStyleTexture = null;
|
|
296
|
+
this._destroyOwnedTextures();
|
|
229
297
|
this._currentPoint.set(0, 0);
|
|
230
298
|
return this;
|
|
231
299
|
}
|
|
@@ -236,7 +304,38 @@ class Graphics extends Container {
|
|
|
236
304
|
this._fillColor.destroy();
|
|
237
305
|
this._currentPoint.destroy();
|
|
238
306
|
}
|
|
239
|
-
|
|
307
|
+
/**
|
|
308
|
+
* Resolve an assigned style into the stored paint. A {@link Color} is copied
|
|
309
|
+
* into the solid `colorSlot` (keeping the {@link fillColor} / {@link lineColor}
|
|
310
|
+
* convenience getters in sync) and that slot is returned; `null` reverts to
|
|
311
|
+
* the slot; a {@link Gradient} is cloned so later external mutation cannot
|
|
312
|
+
* change the stored paint.
|
|
313
|
+
*/
|
|
314
|
+
_resolveStyle(style, colorSlot) {
|
|
315
|
+
if (style === null) {
|
|
316
|
+
return colorSlot;
|
|
317
|
+
}
|
|
318
|
+
if (style instanceof Color) {
|
|
319
|
+
colorSlot.copy(style);
|
|
320
|
+
return colorSlot;
|
|
321
|
+
}
|
|
322
|
+
return style.clone();
|
|
323
|
+
}
|
|
324
|
+
_createFillMesh(data) {
|
|
325
|
+
if (this._fillStyle instanceof Color) {
|
|
326
|
+
return this._createSolidMesh(data, this._fillStyle);
|
|
327
|
+
}
|
|
328
|
+
this._fillStyleTexture ??= this._rasterizeGradient(this._fillStyle);
|
|
329
|
+
return this._createGradientMesh(data, this._fillStyleTexture);
|
|
330
|
+
}
|
|
331
|
+
_createStrokeMesh(data) {
|
|
332
|
+
if (this._strokeStyle instanceof Color) {
|
|
333
|
+
return this._createSolidMesh(data, this._strokeStyle);
|
|
334
|
+
}
|
|
335
|
+
this._strokeStyleTexture ??= this._rasterizeGradient(this._strokeStyle);
|
|
336
|
+
return this._createGradientMesh(data, this._strokeStyleTexture);
|
|
337
|
+
}
|
|
338
|
+
_createSolidMesh(data, color) {
|
|
240
339
|
const mesh = new Mesh({
|
|
241
340
|
vertices: data.vertices,
|
|
242
341
|
indices: data.indices,
|
|
@@ -244,7 +343,66 @@ class Graphics extends Container {
|
|
|
244
343
|
mesh.tint = color;
|
|
245
344
|
return mesh;
|
|
246
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Build a textured mesh whose UVs span the shape's local bounding box, so the
|
|
348
|
+
* gradient texture samples across the filled/stroked geometry. The default
|
|
349
|
+
* white tint and vertex color leave the sampled gradient color unmodulated.
|
|
350
|
+
*/
|
|
351
|
+
_createGradientMesh(data, texture) {
|
|
352
|
+
return new Mesh({
|
|
353
|
+
vertices: data.vertices,
|
|
354
|
+
indices: data.indices,
|
|
355
|
+
uvs: computeBoundsUvs(data.vertices),
|
|
356
|
+
texture,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
_rasterizeGradient(gradient) {
|
|
360
|
+
const texture = gradient.toTexture(gradientTextureSize, gradientTextureSize, {
|
|
361
|
+
samplerOptions: { scaleMode: ScaleModes.Linear },
|
|
362
|
+
});
|
|
363
|
+
this._ownedTextures.add(texture);
|
|
364
|
+
return texture;
|
|
365
|
+
}
|
|
366
|
+
_destroyOwnedTextures() {
|
|
367
|
+
for (const texture of this._ownedTextures) {
|
|
368
|
+
texture.destroy();
|
|
369
|
+
}
|
|
370
|
+
this._ownedTextures.clear();
|
|
371
|
+
}
|
|
247
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Normalize each `(x, y)` vertex into `0..1` UV space relative to the flat
|
|
375
|
+
* vertex array's axis-aligned bounding box. Degenerate (zero-width/height)
|
|
376
|
+
* spans collapse to `0` to avoid division by zero.
|
|
377
|
+
*/
|
|
378
|
+
const computeBoundsUvs = (vertices) => {
|
|
379
|
+
let minX = Infinity;
|
|
380
|
+
let minY = Infinity;
|
|
381
|
+
let maxX = -Infinity;
|
|
382
|
+
let maxY = -Infinity;
|
|
383
|
+
for (let i = 0; i < vertices.length; i += 2) {
|
|
384
|
+
const x = vertices[i];
|
|
385
|
+
const y = vertices[i + 1];
|
|
386
|
+
if (x < minX)
|
|
387
|
+
minX = x;
|
|
388
|
+
if (x > maxX)
|
|
389
|
+
maxX = x;
|
|
390
|
+
if (y < minY)
|
|
391
|
+
minY = y;
|
|
392
|
+
if (y > maxY)
|
|
393
|
+
maxY = y;
|
|
394
|
+
}
|
|
395
|
+
const spanX = maxX - minX;
|
|
396
|
+
const spanY = maxY - minY;
|
|
397
|
+
const invX = spanX > 0 ? 1 / spanX : 0;
|
|
398
|
+
const invY = spanY > 0 ? 1 / spanY : 0;
|
|
399
|
+
const uvs = new Float32Array(vertices.length);
|
|
400
|
+
for (let i = 0; i < vertices.length; i += 2) {
|
|
401
|
+
uvs[i] = (vertices[i] - minX) * invX;
|
|
402
|
+
uvs[i + 1] = (vertices[i + 1] - minY) * invY;
|
|
403
|
+
}
|
|
404
|
+
return uvs;
|
|
405
|
+
};
|
|
248
406
|
|
|
249
407
|
export { Graphics };
|
|
250
408
|
//# sourceMappingURL=Graphics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graphics.js","sources":["../../../../../src/rendering/primitives/Graphics.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AASA;;;;;;;;;;;;AAYG;AACG,MAAO,QAAS,SAAQ,SAAS,CAAA;IAC7B,UAAU,GAAG,CAAC;AACd,IAAA,UAAU,GAAU,IAAI,KAAK,EAAE;AAC/B,IAAA,UAAU,GAAU,IAAI,KAAK,EAAE;IAC/B,aAAa,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhD,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,IAAW,SAAS,CAAC,SAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;AAEA,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,IAAW,SAAS,CAAC,SAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC;AAEA,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,IAAW,SAAS,CAAC,SAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC;AAEA,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEgB,IAAA,UAAU,CAAC,KAAa,EAAA;AACtC,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAS;IACxC;AAEgB,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxC,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;QAC7D;AAEA,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC9B;IAEgB,UAAU,CAAC,KAAiB,EAAE,KAAa,EAAA;AACzD,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;QAC7D;QAEA,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IACvC;;IAGO,MAAM,CAAC,CAAS,EAAE,CAAS,EAAA;QAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,QAAA,OAAO,IAAI;IACb;;IAGO,MAAM,CAAC,GAAW,EAAE,GAAW,EAAA;AACpC,QAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa;AAEjD,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AAErB,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,gBAAgB,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAA;AACxE,QAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa;AAEjD,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AAErB,QAAA,OAAO,IAAI;IACb;;IAGO,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAA;AACnG,QAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa;QAEjD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AAErB,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;IACI,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc,EAAA;AACzE,QAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YACzE,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;QAC5B;AAEA,QAAA,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK;AACtB,QAAA,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK;AACtB,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE;AACpB,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QAErC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;QAC5B;AAEA,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK;AAC1B,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM;AAC7B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAE5B,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;QAC5B;AAEA,QAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,GAAG,KAAK,IAAI,iBAAiB,GAAG,MAAM,EAAE;YAClG,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;QAC5B;AAEA,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,iBAAiB;AAC9C,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,iBAAiB;AAC9C,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,iBAAiB;AAC7C,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,iBAAiB;QAC7C,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO;AACjD,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC1B,QAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM;AAC3C,QAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM;AAC3C,QAAA,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC;AACpC,QAAA,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;AACjE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC;AAE3D,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAE3B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC1E;;AAGO,IAAA,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,UAAkB,EAAE,QAAgB,EAAE,aAAa,GAAG,KAAK,EAAA;QAC9G,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAE1B,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,KAAK,GAAG,QAAQ,GAAG,UAAU;AAEjC,QAAA,IAAI,CAAC,aAAa,IAAI,KAAK,GAAG,CAAC,EAAE;YAC/B,KAAK,IAAI,GAAG;QACd;AAAO,aAAA,IAAI,aAAa,IAAI,KAAK,GAAG,CAAC,EAAE;YACrC,KAAK,IAAI,GAAG;QACd;AAEA,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,IAAI,GAAa,EAAE;AAEzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ;AAC1B,YAAA,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK;YAExC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7D;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzD,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,IAAY,EAAE,IAAY,EAAA;AACxE,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAEnE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,QAAQ,CAAC,IAAc,EAAA;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAE7C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,WAAW,CAAC,IAAc,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;AAE/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,UAAU,CAAC,OAAe,EAAE,OAAe,EAAE,MAAc,EAAA;QAChE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AAElD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,WAAW,CAAC,OAAe,EAAE,OAAe,EAAE,OAAe,EAAE,OAAe,EAAA;AACnF,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;;AAGO,IAAA,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAA;AACtE,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAEhD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACI,IAAA,QAAQ,CAAC,OAAe,EAAE,OAAe,EAAE,MAAc,EAAE,MAAc,EAAE,WAAA,GAAsB,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAA;AAC9H,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;AAE/E,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;;IAGO,KAAK,GAAA;QACV,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,QAAA,OAAO,IAAI;IACb;IAEgB,OAAO,GAAA;QACrB,KAAK,CAAC,OAAO,EAAE;QAEf,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;IAC9B;IAEQ,WAAW,CAAC,IAAsB,EAAE,KAAY,EAAA;AACtD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAEjB,QAAA,OAAO,IAAI;IACb;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"Graphics.js","sources":["../../../../../src/rendering/primitives/Graphics.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,15 @@
|
|
|
8
8
|
* `WebGl2SpriteRenderer` pairs {@link spriteVertexGlsl} with the material's
|
|
9
9
|
* fragment (ignoring any author-supplied `glsl.vertex`), and
|
|
10
10
|
* `WebGpuSpriteRenderer` prepends {@link spriteVertexWgsl} to the material's
|
|
11
|
-
* fragment WGSL. Both pin the per-instance attribute locations
|
|
11
|
+
* fragment WGSL. Both pin the per-instance attribute locations and the
|
|
12
12
|
* projection binding exactly as the default sprite path does, so a custom
|
|
13
13
|
* material keeps the single `drawArraysInstanced` / `drawIndexed` batch.
|
|
14
14
|
*
|
|
15
|
+
* Both paths (locations 0, 3, 4, 5, 6) fetch each instance's world transform
|
|
16
|
+
* from the shared transform storage keyed by `a_nodeIndex` / `nodeIndex`: the
|
|
17
|
+
* WebGL2 path samples the `u_transforms` texture, the WGSL path reads the
|
|
18
|
+
* `transforms` storage buffer (group(0) binding(1)).
|
|
19
|
+
*
|
|
15
20
|
* A custom fragment receives the interpolated `v_texcoord` and premultiplied
|
|
16
21
|
* `v_color`, plus the per-batch base texture bound as `u_texture` (WebGL2 unit 0
|
|
17
22
|
* / WGSL group(1) binding 0). Material uniforms and additional textures bind on
|
|
@@ -22,15 +27,15 @@
|
|
|
22
27
|
* corner expansion and attribute contract to the default sprite vertex shader.
|
|
23
28
|
* @internal
|
|
24
29
|
*/
|
|
25
|
-
export declare const spriteVertexGlsl = "#version 300 es\nprecision highp float;\nprecision highp int;\n\n// Per-instance attributes (divisor = 1). Each Sprite contributes one entry\n// to the per-instance buffer; gl_VertexID 0..3 selects which corner of the\n// quad this invocation is computing.\nlayout(location = 0) in vec4 a_localBounds; // left, top, right, bottom (local space)\nlayout(location =
|
|
30
|
+
export declare const spriteVertexGlsl = "#version 300 es\nprecision highp float;\nprecision highp int;\n\n// Per-instance attributes (divisor = 1). Each Sprite contributes one entry\n// to the per-instance buffer; gl_VertexID 0..3 selects which corner of the\n// quad this invocation is computing.\nlayout(location = 0) in vec4 a_localBounds; // left, top, right, bottom (local space)\nlayout(location = 3) in vec4 a_uvBounds; // uMin, vMin, uMax, vMax (normalised, already flipY-swapped)\nlayout(location = 4) in vec4 a_color; // RGBA tint\nlayout(location = 5) in uint a_textureSlot;\nlayout(location = 6) in uint a_nodeIndex; // row into the shared transform buffer\n\nuniform mat3 u_projection;\nuniform sampler2D u_transforms; // shared per-frame transform buffer (3 texels/row)\n\nout vec2 v_texcoord;\nout vec4 v_color;\nflat out uint v_textureSlot;\n\nvoid main(void) {\n // gl_VertexID 0..3 \u2192 corner: 0=TL, 1=TR, 2=BL, 3=BR (TRIANGLE_STRIP order)\n int vid = gl_VertexID;\n int cornerX = vid & 1;\n int cornerY = (vid >> 1) & 1;\n\n float localX = (cornerX == 0) ? a_localBounds.x : a_localBounds.z;\n float localY = (cornerY == 0) ? a_localBounds.y : a_localBounds.w;\n\n // Fetch the per-instance world transform from the shared buffer (row =\n // a_nodeIndex): texel 0 = (a, b, c, d), texel 1 = (tx, ty, 0, 0).\n int row = int(a_nodeIndex);\n vec4 m0 = texelFetch(u_transforms, ivec2(0, row), 0);\n vec4 m1 = texelFetch(u_transforms, ivec2(1, row), 0);\n\n float worldX = (m0.x * localX) + (m0.y * localY) + m1.x;\n float worldY = (m0.z * localX) + (m0.w * localY) + m1.y;\n\n gl_Position = vec4((u_projection * vec3(worldX, worldY, 1.0)).xy, 0.0, 1.0);\n\n float u = (cornerX == 0) ? a_uvBounds.x : a_uvBounds.z;\n float v = (cornerY == 0) ? a_uvBounds.y : a_uvBounds.w;\n v_texcoord = vec2(u, v);\n\n v_color = vec4(a_color.rgb * a_color.a, a_color.a);\n v_textureSlot = a_textureSlot;\n}\n";
|
|
26
31
|
/**
|
|
27
32
|
* WGSL vertex stage + shared bindings for the custom sprite-material path.
|
|
28
33
|
* Prepend to a material's fragment WGSL: it declares the per-instance
|
|
29
|
-
* `VertexInput` (locations 0
|
|
30
|
-
* consumes, the group(0) projection uniform
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* `VertexOutput`.
|
|
34
|
+
* `VertexInput` (locations 0, 3, 4, 5, 6), the `VertexOutput` a custom
|
|
35
|
+
* `@fragment` consumes, the group(0) projection uniform + shared transform
|
|
36
|
+
* storage buffer, the group(1) base texture and sampler (`u_texture` /
|
|
37
|
+
* `u_sampler`), and the `vertexMain` entry point. The fragment author adds their
|
|
38
|
+
* group(2) bindings and a `fragmentMain` reading `VertexOutput`.
|
|
34
39
|
* @internal
|
|
35
40
|
*/
|
|
36
|
-
export declare const spriteVertexWgsl = "\nstruct ProjectionUniforms {\n matrix: mat4x4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> projection: ProjectionUniforms;\n\n@group(1) @binding(0) var u_texture: texture_2d<f32>;\n@group(1) @binding(1) var u_sampler: sampler;\n\nstruct VertexInput {\n @location(0) localBounds: vec4<f32>,\n @location(
|
|
41
|
+
export declare const spriteVertexWgsl = "\nstruct ProjectionUniforms {\n matrix: mat4x4<f32>,\n};\n\nstruct TransformSlot {\n m0: vec4<f32>,\n m1: vec4<f32>,\n m2: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> projection: ProjectionUniforms;\n@group(0) @binding(1) var<storage, read> transforms: array<TransformSlot>;\n\n@group(1) @binding(0) var u_texture: texture_2d<f32>;\n@group(1) @binding(1) var u_sampler: sampler;\n\nstruct VertexInput {\n @location(0) localBounds: vec4<f32>,\n @location(3) uvBounds: vec4<f32>,\n @location(4) color: vec4<f32>,\n @location(5) textureSlot: u32,\n @location(6) nodeIndex: u32,\n};\n\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) texcoord: vec2<f32>,\n @location(1) color: vec4<f32>,\n};\n\n@vertex\nfn vertexMain(input: VertexInput, @builtin(vertex_index) vid: u32) -> VertexOutput {\n var output: VertexOutput;\n\n let cornerX = ((vid + 1u) >> 1u) & 1u;\n let cornerY = vid >> 1u;\n\n let localX = select(input.localBounds.x, input.localBounds.z, cornerX == 1u);\n let localY = select(input.localBounds.y, input.localBounds.w, cornerY == 1u);\n\n // Fetch this instance's world transform from the shared storage buffer,\n // keyed by nodeIndex: m0 = (a, b, c, d), m1 = (tx, ty, 0, 0). (m2 carries the\n // node tint, unused here \u2014 the sprite keeps its own per-instance color.)\n let slot = transforms[input.nodeIndex];\n let worldX = slot.m0.x * localX + slot.m0.y * localY + slot.m1.x;\n let worldY = slot.m0.z * localX + slot.m0.w * localY + slot.m1.y;\n\n output.position = projection.matrix * vec4<f32>(worldX, worldY, 0.0, 1.0);\n\n let u = select(input.uvBounds.x, input.uvBounds.z, cornerX == 1u);\n let v = select(input.uvBounds.y, input.uvBounds.w, cornerY == 1u);\n output.texcoord = vec2<f32>(u, v);\n\n output.color = vec4<f32>(input.color.rgb * input.color.a, input.color.a);\n\n return output;\n}\n";
|
|
@@ -8,10 +8,15 @@
|
|
|
8
8
|
* `WebGl2SpriteRenderer` pairs {@link spriteVertexGlsl} with the material's
|
|
9
9
|
* fragment (ignoring any author-supplied `glsl.vertex`), and
|
|
10
10
|
* `WebGpuSpriteRenderer` prepends {@link spriteVertexWgsl} to the material's
|
|
11
|
-
* fragment WGSL. Both pin the per-instance attribute locations
|
|
11
|
+
* fragment WGSL. Both pin the per-instance attribute locations and the
|
|
12
12
|
* projection binding exactly as the default sprite path does, so a custom
|
|
13
13
|
* material keeps the single `drawArraysInstanced` / `drawIndexed` batch.
|
|
14
14
|
*
|
|
15
|
+
* Both paths (locations 0, 3, 4, 5, 6) fetch each instance's world transform
|
|
16
|
+
* from the shared transform storage keyed by `a_nodeIndex` / `nodeIndex`: the
|
|
17
|
+
* WebGL2 path samples the `u_transforms` texture, the WGSL path reads the
|
|
18
|
+
* `transforms` storage buffer (group(0) binding(1)).
|
|
19
|
+
*
|
|
15
20
|
* A custom fragment receives the interpolated `v_texcoord` and premultiplied
|
|
16
21
|
* `v_color`, plus the per-batch base texture bound as `u_texture` (WebGL2 unit 0
|
|
17
22
|
* / WGSL group(1) binding 0). Material uniforms and additional textures bind on
|
|
@@ -30,13 +35,13 @@ precision highp int;
|
|
|
30
35
|
// to the per-instance buffer; gl_VertexID 0..3 selects which corner of the
|
|
31
36
|
// quad this invocation is computing.
|
|
32
37
|
layout(location = 0) in vec4 a_localBounds; // left, top, right, bottom (local space)
|
|
33
|
-
layout(location = 1) in vec3 a_transformAB; // a, b, x — first row of 2D affine
|
|
34
|
-
layout(location = 2) in vec3 a_transformCD; // c, d, y — second row
|
|
35
38
|
layout(location = 3) in vec4 a_uvBounds; // uMin, vMin, uMax, vMax (normalised, already flipY-swapped)
|
|
36
39
|
layout(location = 4) in vec4 a_color; // RGBA tint
|
|
37
40
|
layout(location = 5) in uint a_textureSlot;
|
|
41
|
+
layout(location = 6) in uint a_nodeIndex; // row into the shared transform buffer
|
|
38
42
|
|
|
39
43
|
uniform mat3 u_projection;
|
|
44
|
+
uniform sampler2D u_transforms; // shared per-frame transform buffer (3 texels/row)
|
|
40
45
|
|
|
41
46
|
out vec2 v_texcoord;
|
|
42
47
|
out vec4 v_color;
|
|
@@ -51,8 +56,14 @@ void main(void) {
|
|
|
51
56
|
float localX = (cornerX == 0) ? a_localBounds.x : a_localBounds.z;
|
|
52
57
|
float localY = (cornerY == 0) ? a_localBounds.y : a_localBounds.w;
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
// Fetch the per-instance world transform from the shared buffer (row =
|
|
60
|
+
// a_nodeIndex): texel 0 = (a, b, c, d), texel 1 = (tx, ty, 0, 0).
|
|
61
|
+
int row = int(a_nodeIndex);
|
|
62
|
+
vec4 m0 = texelFetch(u_transforms, ivec2(0, row), 0);
|
|
63
|
+
vec4 m1 = texelFetch(u_transforms, ivec2(1, row), 0);
|
|
64
|
+
|
|
65
|
+
float worldX = (m0.x * localX) + (m0.y * localY) + m1.x;
|
|
66
|
+
float worldY = (m0.z * localX) + (m0.w * localY) + m1.y;
|
|
56
67
|
|
|
57
68
|
gl_Position = vec4((u_projection * vec3(worldX, worldY, 1.0)).xy, 0.0, 1.0);
|
|
58
69
|
|
|
@@ -67,11 +78,11 @@ void main(void) {
|
|
|
67
78
|
/**
|
|
68
79
|
* WGSL vertex stage + shared bindings for the custom sprite-material path.
|
|
69
80
|
* Prepend to a material's fragment WGSL: it declares the per-instance
|
|
70
|
-
* `VertexInput` (locations 0
|
|
71
|
-
* consumes, the group(0) projection uniform
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* `VertexOutput`.
|
|
81
|
+
* `VertexInput` (locations 0, 3, 4, 5, 6), the `VertexOutput` a custom
|
|
82
|
+
* `@fragment` consumes, the group(0) projection uniform + shared transform
|
|
83
|
+
* storage buffer, the group(1) base texture and sampler (`u_texture` /
|
|
84
|
+
* `u_sampler`), and the `vertexMain` entry point. The fragment author adds their
|
|
85
|
+
* group(2) bindings and a `fragmentMain` reading `VertexOutput`.
|
|
75
86
|
* @internal
|
|
76
87
|
*/
|
|
77
88
|
const spriteVertexWgsl = `
|
|
@@ -79,18 +90,24 @@ struct ProjectionUniforms {
|
|
|
79
90
|
matrix: mat4x4<f32>,
|
|
80
91
|
};
|
|
81
92
|
|
|
93
|
+
struct TransformSlot {
|
|
94
|
+
m0: vec4<f32>,
|
|
95
|
+
m1: vec4<f32>,
|
|
96
|
+
m2: vec4<f32>,
|
|
97
|
+
};
|
|
98
|
+
|
|
82
99
|
@group(0) @binding(0) var<uniform> projection: ProjectionUniforms;
|
|
100
|
+
@group(0) @binding(1) var<storage, read> transforms: array<TransformSlot>;
|
|
83
101
|
|
|
84
102
|
@group(1) @binding(0) var u_texture: texture_2d<f32>;
|
|
85
103
|
@group(1) @binding(1) var u_sampler: sampler;
|
|
86
104
|
|
|
87
105
|
struct VertexInput {
|
|
88
106
|
@location(0) localBounds: vec4<f32>,
|
|
89
|
-
@location(1) transformAB: vec3<f32>,
|
|
90
|
-
@location(2) transformCD: vec3<f32>,
|
|
91
107
|
@location(3) uvBounds: vec4<f32>,
|
|
92
108
|
@location(4) color: vec4<f32>,
|
|
93
109
|
@location(5) textureSlot: u32,
|
|
110
|
+
@location(6) nodeIndex: u32,
|
|
94
111
|
};
|
|
95
112
|
|
|
96
113
|
struct VertexOutput {
|
|
@@ -109,8 +126,12 @@ fn vertexMain(input: VertexInput, @builtin(vertex_index) vid: u32) -> VertexOutp
|
|
|
109
126
|
let localX = select(input.localBounds.x, input.localBounds.z, cornerX == 1u);
|
|
110
127
|
let localY = select(input.localBounds.y, input.localBounds.w, cornerY == 1u);
|
|
111
128
|
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
// Fetch this instance's world transform from the shared storage buffer,
|
|
130
|
+
// keyed by nodeIndex: m0 = (a, b, c, d), m1 = (tx, ty, 0, 0). (m2 carries the
|
|
131
|
+
// node tint, unused here — the sprite keeps its own per-instance color.)
|
|
132
|
+
let slot = transforms[input.nodeIndex];
|
|
133
|
+
let worldX = slot.m0.x * localX + slot.m0.y * localY + slot.m1.x;
|
|
134
|
+
let worldY = slot.m0.z * localX + slot.m0.w * localY + slot.m1.y;
|
|
114
135
|
|
|
115
136
|
output.position = projection.matrix * vec4<f32>(worldX, worldY, 0.0, 1.0);
|
|
116
137
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteMaterialSources.js","sources":["../../../../../src/rendering/sprite/spriteMaterialSources.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"spriteMaterialSources.js","sources":["../../../../../src/rendering/sprite/spriteMaterialSources.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AAEH;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDhC;;;;;;;;;AASG;AACI,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -35,6 +35,8 @@ export declare class BmFontAdapter implements GlyphProvider {
|
|
|
35
35
|
private readonly _scale;
|
|
36
36
|
/** Fallback advance for characters not present in the font (≈ ½ line height). */
|
|
37
37
|
private readonly _fallbackAdvance;
|
|
38
|
+
/** Identifier used as part of the warnOnce key — derived from the first page filename. */
|
|
39
|
+
private readonly _fontId;
|
|
38
40
|
constructor(fontData: BmFontData, textures: readonly Texture[], scale: number);
|
|
39
41
|
getGlyph(char: string, _fontSize: number): GlyphInfo;
|
|
40
42
|
getKerning(prev: string, next: string, _fontSize: number): number;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warnOnce, assert } from '../../core/dev.js';
|
|
1
2
|
import { AbstractText } from './AbstractText.js';
|
|
2
3
|
import { layoutText, buildTextPageQuads } from './TextLayout.js';
|
|
3
4
|
import { TextStyle } from './TextStyle.js';
|
|
@@ -19,11 +20,14 @@ class BmFontAdapter {
|
|
|
19
20
|
_scale;
|
|
20
21
|
/** Fallback advance for characters not present in the font (≈ ½ line height). */
|
|
21
22
|
_fallbackAdvance;
|
|
23
|
+
/** Identifier used as part of the warnOnce key — derived from the first page filename. */
|
|
24
|
+
_fontId;
|
|
22
25
|
constructor(fontData, textures, scale) {
|
|
23
26
|
this._fontData = fontData;
|
|
24
27
|
this._textures = textures;
|
|
25
28
|
this._scale = scale;
|
|
26
29
|
this._fallbackAdvance = fontData.lineHeight * scale * 0.5;
|
|
30
|
+
this._fontId = fontData.pages[0] ?? 'unknown';
|
|
27
31
|
}
|
|
28
32
|
getGlyph(char, _fontSize) {
|
|
29
33
|
const cp = char.codePointAt(0) ?? 0;
|
|
@@ -32,7 +36,9 @@ class BmFontAdapter {
|
|
|
32
36
|
const lh = this._fontData.lineHeight;
|
|
33
37
|
const base = this._fontData.base;
|
|
34
38
|
if (g === undefined) {
|
|
35
|
-
// Unknown glyph —
|
|
39
|
+
// Unknown glyph — warn once per font + codepoint, then return an invisible
|
|
40
|
+
// placeholder with a cursor advance so layout still makes progress.
|
|
41
|
+
warnOnce(`bitmaptext:${this._fontId}:${cp}`, `BitmapText: missing glyph U+${cp.toString(16).toUpperCase().padStart(4, '0')} ('${char}') in "${this._fontId}"`);
|
|
36
42
|
return {
|
|
37
43
|
x: 0,
|
|
38
44
|
y: 0,
|
|
@@ -47,6 +53,7 @@ class BmFontAdapter {
|
|
|
47
53
|
uvBottom: 0,
|
|
48
54
|
};
|
|
49
55
|
}
|
|
56
|
+
assert(g.page < this._textures.length, `BitmapText: glyph page index ${g.page} is out of range — font "${this._fontId}" has ${this._textures.length} page(s)`);
|
|
50
57
|
const texW = this._textures[g.page]?.width ?? 1;
|
|
51
58
|
const texH = this._textures[g.page]?.height ?? 1;
|
|
52
59
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitmapText.js","sources":["../../../../../src/rendering/text/BitmapText.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BitmapText.js","sources":["../../../../../src/rendering/text/BitmapText.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { assert } from '../../core/dev.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* A loaded BMFont asset: the parsed descriptor plus all page textures.
|
|
3
5
|
*
|
|
@@ -15,6 +17,7 @@ class BmFont {
|
|
|
15
17
|
fontData;
|
|
16
18
|
textures;
|
|
17
19
|
constructor(fontData, textures) {
|
|
20
|
+
assert(textures.length === fontData.pages.length, `BmFont: texture count (${textures.length}) must match page count (${fontData.pages.length})`);
|
|
18
21
|
this.fontData = fontData;
|
|
19
22
|
this.textures = textures;
|
|
20
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BmFont.js","sources":["../../../../../src/rendering/text/BmFont.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BmFont.js","sources":["../../../../../src/rendering/text/BmFont.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAoCA;;;;;;;;;;;;AAYG;MACU,MAAM,CAAA;AACD,IAAA,QAAQ;AACR,IAAA,QAAQ;IAExB,WAAA,CAAmB,QAAoB,EAAE,QAA4B,EAAA;QACnE,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,0BAA0B,QAAQ,CAAC,MAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;AAChJ,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;;;;"}
|
|
@@ -69,6 +69,10 @@ export declare class GlyphSdf {
|
|
|
69
69
|
private readonly _radius;
|
|
70
70
|
private readonly _cutoff;
|
|
71
71
|
private readonly _font;
|
|
72
|
+
private readonly _fontSize;
|
|
73
|
+
private _fontAscent;
|
|
74
|
+
private _fontDescent;
|
|
75
|
+
private _metricsReady;
|
|
72
76
|
private _canvasW;
|
|
73
77
|
private _canvasH;
|
|
74
78
|
private readonly _canvas;
|
|
@@ -88,5 +92,15 @@ export declare class GlyphSdf {
|
|
|
88
92
|
* fresh `Uint8ClampedArray`; the caller may hold a reference to it safely
|
|
89
93
|
* across subsequent `draw()` calls.
|
|
90
94
|
*/
|
|
95
|
+
/**
|
|
96
|
+
* Ensure font-level ascent/descent are measured. Called once per GlyphSdf
|
|
97
|
+
* instance — deferred to the first draw() so the canvas context is ready.
|
|
98
|
+
* Uses `fontBoundingBoxAscent/Descent` when available; falls back to
|
|
99
|
+
* `actualBoundingBoxAscent/Descent` measured from a reference string that
|
|
100
|
+
* covers ascenders ('H'), descenders ('g'), and diacritics ('É').
|
|
101
|
+
* Either way the same values are used for EVERY glyph so all tiles share a
|
|
102
|
+
* consistent height and a consistent baseline position within the tile.
|
|
103
|
+
*/
|
|
104
|
+
private _ensureFontMetrics;
|
|
91
105
|
draw(char: string): GlyphSdfResult;
|
|
92
106
|
}
|