@flighthq/scene2d-gl 0.2.1-next.840.857425c
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/dist/enableGlColorAdjustmentGuards.d.ts +4 -0
- package/dist/enableGlColorAdjustmentGuards.d.ts.map +1 -0
- package/dist/enableGlColorAdjustmentGuards.js +21 -0
- package/dist/enableGlColorAdjustmentGuards.js.map +1 -0
- package/dist/glBitmap.d.ts +4 -0
- package/dist/glBitmap.d.ts.map +1 -0
- package/dist/glBitmap.js +93 -0
- package/dist/glBitmap.js.map +1 -0
- package/dist/glCache.d.ts +30 -0
- package/dist/glCache.d.ts.map +1 -0
- package/dist/glCache.js +196 -0
- package/dist/glCache.js.map +1 -0
- package/dist/glClip.d.ts +3 -0
- package/dist/glClip.d.ts.map +1 -0
- package/dist/glClip.js +46 -0
- package/dist/glClip.js.map +1 -0
- package/dist/glClipContours.d.ts +4 -0
- package/dist/glClipContours.d.ts.map +1 -0
- package/dist/glClipContours.js +148 -0
- package/dist/glClipContours.js.map +1 -0
- package/dist/glClipRectangle.d.ts +4 -0
- package/dist/glClipRectangle.d.ts.map +1 -0
- package/dist/glClipRectangle.js +68 -0
- package/dist/glClipRectangle.js.map +1 -0
- package/dist/glColorAdjustment.d.ts +3 -0
- package/dist/glColorAdjustment.d.ts.map +1 -0
- package/dist/glColorAdjustment.js +361 -0
- package/dist/glColorAdjustment.js.map +1 -0
- package/dist/glDefaultMaterial.d.ts +4 -0
- package/dist/glDefaultMaterial.d.ts.map +1 -0
- package/dist/glDefaultMaterial.js +20 -0
- package/dist/glDefaultMaterial.js.map +1 -0
- package/dist/glNode2D.d.ts +5 -0
- package/dist/glNode2D.d.ts.map +1 -0
- package/dist/glNode2D.js +41 -0
- package/dist/glNode2D.js.map +1 -0
- package/dist/glNode2DRegistration.d.ts +25 -0
- package/dist/glNode2DRegistration.d.ts.map +1 -0
- package/dist/glNode2DRegistration.js +51 -0
- package/dist/glNode2DRegistration.js.map +1 -0
- package/dist/glParticleEmitter2D.d.ts +4 -0
- package/dist/glParticleEmitter2D.d.ts.map +1 -0
- package/dist/glParticleEmitter2D.js +263 -0
- package/dist/glParticleEmitter2D.js.map +1 -0
- package/dist/glQuadBatch.d.ts +3 -0
- package/dist/glQuadBatch.d.ts.map +1 -0
- package/dist/glQuadBatch.js +92 -0
- package/dist/glQuadBatch.js.map +1 -0
- package/dist/glRichText.d.ts +8 -0
- package/dist/glRichText.d.ts.map +1 -0
- package/dist/glRichText.js +161 -0
- package/dist/glRichText.js.map +1 -0
- package/dist/glScale9Mapper.d.ts +3 -0
- package/dist/glScale9Mapper.d.ts.map +1 -0
- package/dist/glScale9Mapper.js +37 -0
- package/dist/glScale9Mapper.js.map +1 -0
- package/dist/glScale9Shape.d.ts +9 -0
- package/dist/glScale9Shape.d.ts.map +1 -0
- package/dist/glScale9Shape.js +118 -0
- package/dist/glScale9Shape.js.map +1 -0
- package/dist/glShape.d.ts +4 -0
- package/dist/glShape.d.ts.map +1 -0
- package/dist/glShape.js +146 -0
- package/dist/glShape.js.map +1 -0
- package/dist/glShapeMesh.d.ts +5 -0
- package/dist/glShapeMesh.d.ts.map +1 -0
- package/dist/glShapeMesh.js +114 -0
- package/dist/glShapeMesh.js.map +1 -0
- package/dist/glSprite.d.ts +3 -0
- package/dist/glSprite.d.ts.map +1 -0
- package/dist/glSprite.js +28 -0
- package/dist/glSprite.js.map +1 -0
- package/dist/glSpriteBatch.d.ts +11 -0
- package/dist/glSpriteBatch.d.ts.map +1 -0
- package/dist/glSpriteBatch.js +277 -0
- package/dist/glSpriteBatch.js.map +1 -0
- package/dist/glSpriteRenderer.d.ts +3 -0
- package/dist/glSpriteRenderer.d.ts.map +1 -0
- package/dist/glSpriteRenderer.js +54 -0
- package/dist/glSpriteRenderer.js.map +1 -0
- package/dist/glTestHelper.d.ts +9 -0
- package/dist/glTestHelper.d.ts.map +1 -0
- package/dist/glTestHelper.js +17 -0
- package/dist/glTestHelper.js.map +1 -0
- package/dist/glTextInput.d.ts +4 -0
- package/dist/glTextInput.d.ts.map +1 -0
- package/dist/glTextInput.js +43 -0
- package/dist/glTextInput.js.map +1 -0
- package/dist/glTextLabel.d.ts +4 -0
- package/dist/glTextLabel.d.ts.map +1 -0
- package/dist/glTextLabel.js +141 -0
- package/dist/glTextLabel.js.map +1 -0
- package/dist/glTilemap.d.ts +3 -0
- package/dist/glTilemap.d.ts.map +1 -0
- package/dist/glTilemap.js +79 -0
- package/dist/glTilemap.js.map +1 -0
- package/dist/glVelocity.d.ts +22 -0
- package/dist/glVelocity.d.ts.map +1 -0
- package/dist/glVelocity.js +319 -0
- package/dist/glVelocity.js.map +1 -0
- package/dist/glVideo.d.ts +6 -0
- package/dist/glVideo.d.ts.map +1 -0
- package/dist/glVideo.js +62 -0
- package/dist/glVideo.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/moduleMockTestHelper.d.ts +15 -0
- package/dist/moduleMockTestHelper.d.ts.map +1 -0
- package/dist/moduleMockTestHelper.js +25 -0
- package/dist/moduleMockTestHelper.js.map +1 -0
- package/package.json +60 -0
- package/src/enableGlColorAdjustmentGuards.test.ts +76 -0
- package/src/glBitmap.test.ts +136 -0
- package/src/glCache.test.ts +234 -0
- package/src/glClip.test.ts +101 -0
- package/src/glClipContours.test.ts +61 -0
- package/src/glClipRectangle.test.ts +47 -0
- package/src/glColorAdjustment.test.ts +166 -0
- package/src/glDefaultMaterial.test.ts +19 -0
- package/src/glNode2D.test.ts +85 -0
- package/src/glNode2DRegistration.test.ts +132 -0
- package/src/glParticleEmitter2D.test.ts +122 -0
- package/src/glQuadBatch.test.ts +132 -0
- package/src/glRichText.test.ts +140 -0
- package/src/glScale9Mapper.test.ts +20 -0
- package/src/glScale9Shape.test.ts +90 -0
- package/src/glShape.test.ts +116 -0
- package/src/glShapeMesh.test.ts +164 -0
- package/src/glSprite.test.ts +79 -0
- package/src/glSpriteBatch.test.ts +249 -0
- package/src/glSpriteRenderer.test.ts +89 -0
- package/src/glTextInput.test.ts +51 -0
- package/src/glTextLabel.test.ts +156 -0
- package/src/glTilemap.test.ts +127 -0
- package/src/glVelocity.test.ts +156 -0
- package/src/glVideo.test.ts +98 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { bindGlImageResourceTexture } from '@flighthq/render-gl';
|
|
2
|
+
import { createGlProgram } from '@flighthq/render-gl';
|
|
3
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl';
|
|
4
|
+
// Base per-instance layout (13 floats = 52 bytes, world-space transforms + per-instance alpha):
|
|
5
|
+
// [0-1] a, b — world-space 2D matrix column 1
|
|
6
|
+
// [2-3] c, d — world-space 2D matrix column 2
|
|
7
|
+
// [4-5] tx, ty — world-space translation
|
|
8
|
+
// [6-7] width, height — region size in pixels
|
|
9
|
+
// [8-11] u0,v0,u1,v1 — atlas UV rect
|
|
10
|
+
// [12] alpha — per-instance alpha
|
|
11
|
+
// Attribute locations 0 (a_corner) and 1-6 are a fixed contract; material shaders extend from
|
|
12
|
+
// location 7. The base buffer and a material's own per-instance buffer share only the instance
|
|
13
|
+
// count and divisor convention.
|
|
14
|
+
const SPRITE_INSTANCE_FLOATS = 13;
|
|
15
|
+
const SPRITE_INSTANCE_STRIDE = SPRITE_INSTANCE_FLOATS * 4;
|
|
16
|
+
// Highest per-instance attribute location any sprite-batch material or the opt-in color-adjustment
|
|
17
|
+
// fold (a_ctMult/a_ctOff at 7/8) may use. Divisors for locations 1..this are reset after each flush so
|
|
18
|
+
// later non-instanced draws are not corrupted.
|
|
19
|
+
const MAX_INSTANCE_ATTRIB_LOCATION = 8;
|
|
20
|
+
export const QUAD_BATCH_VS = `#version 300 es
|
|
21
|
+
precision mediump float;
|
|
22
|
+
|
|
23
|
+
layout(location = 0) in vec2 a_corner;
|
|
24
|
+
layout(location = 1) in vec2 a_matAB;
|
|
25
|
+
layout(location = 2) in vec2 a_matCD;
|
|
26
|
+
layout(location = 3) in vec2 a_matTXTY;
|
|
27
|
+
layout(location = 4) in vec2 a_size;
|
|
28
|
+
layout(location = 5) in vec4 a_uvRect;
|
|
29
|
+
layout(location = 6) in float a_alpha;
|
|
30
|
+
|
|
31
|
+
uniform mat3 u_world;
|
|
32
|
+
|
|
33
|
+
out vec2 v_texCoord;
|
|
34
|
+
out float v_alpha;
|
|
35
|
+
|
|
36
|
+
void main() {
|
|
37
|
+
vec2 local = a_corner * a_size;
|
|
38
|
+
vec2 worldPos = vec2(
|
|
39
|
+
a_matAB.x * local.x + a_matCD.x * local.y + a_matTXTY.x,
|
|
40
|
+
a_matAB.y * local.x + a_matCD.y * local.y + a_matTXTY.y
|
|
41
|
+
);
|
|
42
|
+
vec3 clip = u_world * vec3(worldPos, 1.0);
|
|
43
|
+
gl_Position = vec4(clip.xy, 0.0, 1.0);
|
|
44
|
+
v_texCoord = mix(a_uvRect.xy, a_uvRect.zw, a_corner);
|
|
45
|
+
v_alpha = a_alpha;
|
|
46
|
+
}`;
|
|
47
|
+
const QUAD_BATCH_FS = `#version 300 es
|
|
48
|
+
precision mediump float;
|
|
49
|
+
in vec2 v_texCoord;
|
|
50
|
+
in float v_alpha;
|
|
51
|
+
uniform sampler2D u_texture;
|
|
52
|
+
uniform bool u_straightTextureAlpha;
|
|
53
|
+
out vec4 fragColor;
|
|
54
|
+
void main() {
|
|
55
|
+
vec4 color = texture(u_texture, v_texCoord);
|
|
56
|
+
if (u_straightTextureAlpha) color.rgb *= color.a;
|
|
57
|
+
color *= clamp(v_alpha, 0.0, 1.0);
|
|
58
|
+
if (color.a <= 0.0) discard;
|
|
59
|
+
fragColor = color;
|
|
60
|
+
}`;
|
|
61
|
+
function compileSpriteBatchShader(gl) {
|
|
62
|
+
const program = createGlProgram(gl, QUAD_BATCH_VS, QUAD_BATCH_FS, 'Sprite-batch');
|
|
63
|
+
return {
|
|
64
|
+
program,
|
|
65
|
+
locCorner: 0,
|
|
66
|
+
locMatAB: 1,
|
|
67
|
+
locMatCD: 2,
|
|
68
|
+
locMatTXTY: 3,
|
|
69
|
+
locSize: 4,
|
|
70
|
+
locUvRect: 5,
|
|
71
|
+
locAlpha: 6,
|
|
72
|
+
locWorldMatrix: gl.getUniformLocation(program, 'u_world'),
|
|
73
|
+
locTexture: gl.getUniformLocation(program, 'u_texture'),
|
|
74
|
+
locStraightTextureAlpha: gl.getUniformLocation(program, 'u_straightTextureAlpha'),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Binds the corner buffer (location `locCorner`, divisor 0) and the base instance attributes
|
|
78
|
+
// (locations 1-6, divisor 1) from the active sprite-batch instance buffer. Shared by every
|
|
79
|
+
// sprite-batch material renderer regardless of its program, since the base layout is fixed.
|
|
80
|
+
export function bindGlQuadBatchBaseAttributes(state, locCorner) {
|
|
81
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
82
|
+
const gl = state.gl;
|
|
83
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchCornerBuffer);
|
|
84
|
+
gl.enableVertexAttribArray(locCorner);
|
|
85
|
+
gl.vertexAttribPointer(locCorner, 2, gl.FLOAT, false, 8, 0);
|
|
86
|
+
gl.vertexAttribDivisor(locCorner, 0);
|
|
87
|
+
const stride = SPRITE_INSTANCE_STRIDE;
|
|
88
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
|
|
89
|
+
gl.enableVertexAttribArray(1);
|
|
90
|
+
gl.vertexAttribPointer(1, 2, gl.FLOAT, false, stride, 0);
|
|
91
|
+
gl.vertexAttribDivisor(1, 1);
|
|
92
|
+
gl.enableVertexAttribArray(2);
|
|
93
|
+
gl.vertexAttribPointer(2, 2, gl.FLOAT, false, stride, 8);
|
|
94
|
+
gl.vertexAttribDivisor(2, 1);
|
|
95
|
+
gl.enableVertexAttribArray(3);
|
|
96
|
+
gl.vertexAttribPointer(3, 2, gl.FLOAT, false, stride, 16);
|
|
97
|
+
gl.vertexAttribDivisor(3, 1);
|
|
98
|
+
gl.enableVertexAttribArray(4);
|
|
99
|
+
gl.vertexAttribPointer(4, 2, gl.FLOAT, false, stride, 24);
|
|
100
|
+
gl.vertexAttribDivisor(4, 1);
|
|
101
|
+
gl.enableVertexAttribArray(5);
|
|
102
|
+
gl.vertexAttribPointer(5, 4, gl.FLOAT, false, stride, 32);
|
|
103
|
+
gl.vertexAttribDivisor(5, 1);
|
|
104
|
+
gl.enableVertexAttribArray(6);
|
|
105
|
+
gl.vertexAttribPointer(6, 1, gl.FLOAT, false, stride, 48);
|
|
106
|
+
gl.vertexAttribDivisor(6, 1);
|
|
107
|
+
}
|
|
108
|
+
export function ensureGlQuadBatchShader(state) {
|
|
109
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
110
|
+
if (runtime.quadBatchShader)
|
|
111
|
+
return runtime.quadBatchShader;
|
|
112
|
+
const gl = state.gl;
|
|
113
|
+
runtime.quadBatchShader = compileSpriteBatchShader(gl);
|
|
114
|
+
const cornerData = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
|
|
115
|
+
const cornerBuf = gl.createBuffer();
|
|
116
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, cornerBuf);
|
|
117
|
+
gl.bufferData(gl.ARRAY_BUFFER, cornerData, gl.STATIC_DRAW);
|
|
118
|
+
runtime.quadBatchCornerBuffer = cornerBuf;
|
|
119
|
+
return runtime.quadBatchShader;
|
|
120
|
+
}
|
|
121
|
+
export function flushGlSpriteBatch(state) {
|
|
122
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
123
|
+
const count = runtime.spriteBatchCount;
|
|
124
|
+
if (count === 0)
|
|
125
|
+
return;
|
|
126
|
+
const texture = runtime.spriteBatchTexture;
|
|
127
|
+
const blendMode = runtime.spriteBatchBlendMode;
|
|
128
|
+
const material = runtime.spriteBatchMaterial;
|
|
129
|
+
const renderer = runtime.spriteBatchMaterialRenderer;
|
|
130
|
+
const floats = runtime.spriteBatchMaterialFloats;
|
|
131
|
+
const smoothing = runtime.spriteBatchSmoothing;
|
|
132
|
+
runtime.spriteBatchCount = 0;
|
|
133
|
+
runtime.spriteBatchTexture = null;
|
|
134
|
+
runtime.spriteBatchSmoothing = null;
|
|
135
|
+
runtime.spriteBatchBlendMode = null;
|
|
136
|
+
runtime.spriteBatchMaterial = null;
|
|
137
|
+
runtime.spriteBatchMaterialRenderer = null;
|
|
138
|
+
runtime.spriteBatchMaterialFloats = 0;
|
|
139
|
+
const gl = state.gl;
|
|
140
|
+
if (runtime.spriteBatchInstanceBuffer === null) {
|
|
141
|
+
runtime.spriteBatchInstanceBuffer = gl.createBuffer();
|
|
142
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
|
|
143
|
+
gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceData.byteLength, gl.DYNAMIC_DRAW);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
|
|
147
|
+
}
|
|
148
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchInstanceData, 0, count * SPRITE_INSTANCE_FLOATS);
|
|
149
|
+
state.applyBlendMode?.(state, blendMode);
|
|
150
|
+
bindGlImageResourceTexture(state, texture, null, smoothing);
|
|
151
|
+
// The color-adjustment fold is opt-in (enableGlColorAdjustment): when installed it selects and binds
|
|
152
|
+
// its program for a tinted batch, returning true; when absent, or for an untinted batch, the lean
|
|
153
|
+
// material path runs and no fold code is linked into this module.
|
|
154
|
+
const ctHandled = runtime.glColorAdjustmentFold?.flush(state, count) ?? false;
|
|
155
|
+
if (!ctHandled) {
|
|
156
|
+
if (floats > 0) {
|
|
157
|
+
if (runtime.spriteBatchMaterialBuffer === null) {
|
|
158
|
+
runtime.spriteBatchMaterialBuffer = gl.createBuffer();
|
|
159
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
|
|
160
|
+
gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialData.byteLength, gl.DYNAMIC_DRAW);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
|
|
164
|
+
}
|
|
165
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchMaterialData, 0, count * floats);
|
|
166
|
+
}
|
|
167
|
+
// Resolved renderer owns program selection, uniforms, and all attribute setup (base + its own).
|
|
168
|
+
renderer.bind(state, material);
|
|
169
|
+
}
|
|
170
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, runtime.quadIndexBuffer);
|
|
171
|
+
gl.drawElementsInstanced(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0, count);
|
|
172
|
+
for (let loc = 1; loc <= MAX_INSTANCE_ATTRIB_LOCATION; loc++) {
|
|
173
|
+
gl.vertexAttribDivisor(loc, 0);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Writes one instance's per-instance material floats into the active material buffer at the given
|
|
177
|
+
// instance index, converting the supplied per-instance materialData. No-op for uniform-only
|
|
178
|
+
// materials (no packInstance / floats === 0). Color transform is folded separately by
|
|
179
|
+
// recordGlSpriteBatchColorTransform — it is not a material.
|
|
180
|
+
export function packGlSpriteBatchMaterialInstance(state, materialData, instanceIndex) {
|
|
181
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
182
|
+
const renderer = runtime.spriteBatchMaterialRenderer;
|
|
183
|
+
if (renderer === null || renderer.packInstance === undefined)
|
|
184
|
+
return;
|
|
185
|
+
renderer.packInstance(state, materialData, runtime.spriteBatchMaterialData, instanceIndex * runtime.spriteBatchMaterialFloats);
|
|
186
|
+
}
|
|
187
|
+
// Ensures the sprite batch can accept up to `maxInstances` more instances for the given texture,
|
|
188
|
+
// blend mode, material, and smoothing. Flushes the current batch when any of the four changes (material
|
|
189
|
+
// is compared by reference) or capacity is exceeded. `smoothing` is a per-bitmap sampling preference
|
|
190
|
+
// (`true`/`false` force LINEAR/NEAREST, `null` uses the global `allowSmoothing` default); it keys the
|
|
191
|
+
// batch because filtering is a per-texture-bind property. The color transform is orthogonal — it never
|
|
192
|
+
// keys the batch. Returns the float index in spriteBatchInstanceData where the caller should begin
|
|
193
|
+
// writing base instance data; the caller increments state.spriteBatchCount and records per-instance data.
|
|
194
|
+
export function prepareGlSpriteBatchWrite(state, texture, blendMode, material, materialRenderer, maxInstances, smoothing = null) {
|
|
195
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
196
|
+
if (texture !== runtime.spriteBatchTexture ||
|
|
197
|
+
blendMode !== runtime.spriteBatchBlendMode ||
|
|
198
|
+
material !== runtime.spriteBatchMaterial ||
|
|
199
|
+
smoothing !== runtime.spriteBatchSmoothing) {
|
|
200
|
+
flushGlSpriteBatch(state);
|
|
201
|
+
}
|
|
202
|
+
runtime.spriteBatchTexture = texture;
|
|
203
|
+
runtime.spriteBatchSmoothing = smoothing;
|
|
204
|
+
runtime.spriteBatchBlendMode = blendMode;
|
|
205
|
+
runtime.spriteBatchMaterial = material;
|
|
206
|
+
runtime.spriteBatchMaterialRenderer = materialRenderer;
|
|
207
|
+
const floats = materialRenderer.instanceFloatCount;
|
|
208
|
+
runtime.spriteBatchMaterialFloats = floats;
|
|
209
|
+
const needed = (runtime.spriteBatchCount + maxInstances) * SPRITE_INSTANCE_FLOATS;
|
|
210
|
+
if (needed > runtime.spriteBatchInstanceData.length) {
|
|
211
|
+
const newSize = Math.max(needed, runtime.spriteBatchInstanceData.length * 2);
|
|
212
|
+
runtime.spriteBatchInstanceData = new Float32Array(newSize);
|
|
213
|
+
if (runtime.spriteBatchInstanceBuffer !== null) {
|
|
214
|
+
const gl = state.gl;
|
|
215
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
|
|
216
|
+
gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (floats > 0) {
|
|
220
|
+
const materialNeeded = (runtime.spriteBatchCount + maxInstances) * floats;
|
|
221
|
+
if (materialNeeded > runtime.spriteBatchMaterialData.length) {
|
|
222
|
+
const newSize = Math.max(materialNeeded, runtime.spriteBatchMaterialData.length * 2);
|
|
223
|
+
runtime.spriteBatchMaterialData = new Float32Array(newSize);
|
|
224
|
+
if (runtime.spriteBatchMaterialBuffer !== null) {
|
|
225
|
+
const gl = state.gl;
|
|
226
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
|
|
227
|
+
gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return runtime.spriteBatchCount * SPRITE_INSTANCE_FLOATS;
|
|
232
|
+
}
|
|
233
|
+
// Folds instance `instanceIndex`'s effective color transform into the active batch through the opt-in
|
|
234
|
+
// color-adjustment fold, without ever splitting the batch. When the capability was not enabled
|
|
235
|
+
// (enableGlColorAdjustment), the fold slot is null and the tint is skipped — the batch draws untinted
|
|
236
|
+
// (the sentinel behavior); an installed guard reports the miss. `colorTransform` is null for an
|
|
237
|
+
// untinted instance, which is a no-op whether or not the fold is enabled.
|
|
238
|
+
export function recordGlSpriteBatchColorTransform(state, colorTransform, instanceIndex) {
|
|
239
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
240
|
+
const fold = runtime.glColorAdjustmentFold;
|
|
241
|
+
if (fold != null) {
|
|
242
|
+
fold.record(runtime, colorTransform, instanceIndex);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (colorTransform != null)
|
|
246
|
+
runtime.glColorAdjustmentGuard?.(state, colorTransform);
|
|
247
|
+
}
|
|
248
|
+
export function setGlQuadBatchWorldAndTexture(state, locWorldMatrix, locTexture, locStraightTextureAlpha) {
|
|
249
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
250
|
+
const gl = state.gl;
|
|
251
|
+
const viewport = runtime.renderTargetViewport ?? state.canvas;
|
|
252
|
+
const clipW = 2 / viewport.width;
|
|
253
|
+
const clipH = 2 / viewport.height;
|
|
254
|
+
const m = runtime.matrixArray;
|
|
255
|
+
m[0] = clipW;
|
|
256
|
+
m[1] = 0;
|
|
257
|
+
m[2] = 0;
|
|
258
|
+
m[3] = 0;
|
|
259
|
+
m[4] = -clipH;
|
|
260
|
+
m[5] = 0;
|
|
261
|
+
m[6] = -1;
|
|
262
|
+
m[7] = 1;
|
|
263
|
+
m[8] = 1;
|
|
264
|
+
gl.uniformMatrix3fv(locWorldMatrix, false, m);
|
|
265
|
+
gl.uniform1i(locTexture, 0);
|
|
266
|
+
if (locStraightTextureAlpha !== undefined) {
|
|
267
|
+
gl.uniform1i(locStraightTextureAlpha, runtime.currentTextureStraightAlpha ? 1 : 0);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export function useGlQuadBatchProgram(state, program) {
|
|
271
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
272
|
+
if (runtime.currentProgram !== program) {
|
|
273
|
+
state.gl.useProgram(program);
|
|
274
|
+
runtime.currentProgram = program;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=glSpriteBatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glSpriteBatch.js","sourceRoot":"","sources":["../src/glSpriteBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glSpriteRenderer.d.ts","sourceRoot":"","sources":["../src/glSpriteRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwC,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAsD5F,eAAO,MAAM,uBAAuB,EAAE,cAIrC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
2
|
+
import { noopRendererData } from '@flighthq/render';
|
|
3
|
+
import { resolveGlMaterialRenderer } from '@flighthq/render-gl';
|
|
4
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl';
|
|
5
|
+
import { BatchFormat } from '@flighthq/types';
|
|
6
|
+
import { ensureGlQuadBatchShader, packGlSpriteBatchMaterialInstance, prepareGlSpriteBatchWrite, recordGlSpriteBatchColorTransform, } from './glSpriteBatch';
|
|
7
|
+
function submitGlSpriteNode(state, spriteNode) {
|
|
8
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
9
|
+
const source = spriteNode.source;
|
|
10
|
+
const { atlas, id } = source.data;
|
|
11
|
+
if (atlas === null || atlas.image === null || !hasImageResourcePixels(atlas.image))
|
|
12
|
+
return;
|
|
13
|
+
const regions = atlas.regions;
|
|
14
|
+
if (id < 0 || id >= regions.length)
|
|
15
|
+
return;
|
|
16
|
+
const region = regions[id];
|
|
17
|
+
if (region.width <= 0 || region.height <= 0)
|
|
18
|
+
return;
|
|
19
|
+
ensureGlQuadBatchShader(state);
|
|
20
|
+
const iw = 1 / (atlas.image.width || 1);
|
|
21
|
+
const ih = 1 / (atlas.image.height || 1);
|
|
22
|
+
const t = spriteNode.transform2D;
|
|
23
|
+
const originX = -(region.pivotX ?? 0);
|
|
24
|
+
const originY = -(region.pivotY ?? 0);
|
|
25
|
+
const material = spriteNode.material;
|
|
26
|
+
const materialRenderer = resolveGlMaterialRenderer(state, material);
|
|
27
|
+
if (materialRenderer === null)
|
|
28
|
+
return;
|
|
29
|
+
const base = prepareGlSpriteBatchWrite(state, atlas.image, spriteNode.blendMode, material, materialRenderer, 1);
|
|
30
|
+
const instanceIndex = runtime.spriteBatchCount;
|
|
31
|
+
const d = runtime.spriteBatchInstanceData;
|
|
32
|
+
d[base] = t.a;
|
|
33
|
+
d[base + 1] = t.b;
|
|
34
|
+
d[base + 2] = t.c;
|
|
35
|
+
d[base + 3] = t.d;
|
|
36
|
+
d[base + 4] = t.tx + t.a * originX + t.c * originY;
|
|
37
|
+
d[base + 5] = t.ty + t.b * originX + t.d * originY;
|
|
38
|
+
d[base + 6] = region.width;
|
|
39
|
+
d[base + 7] = region.height;
|
|
40
|
+
d[base + 8] = region.x * iw;
|
|
41
|
+
d[base + 9] = region.y * ih;
|
|
42
|
+
d[base + 10] = (region.x + region.width) * iw;
|
|
43
|
+
d[base + 11] = (region.y + region.height) * ih;
|
|
44
|
+
d[base + 12] = spriteNode.alpha;
|
|
45
|
+
packGlSpriteBatchMaterialInstance(state, spriteNode.materialData, instanceIndex);
|
|
46
|
+
recordGlSpriteBatchColorTransform(state, spriteNode.colorTransform, instanceIndex);
|
|
47
|
+
runtime.spriteBatchCount++;
|
|
48
|
+
}
|
|
49
|
+
export const defaultGlSpriteRenderer = {
|
|
50
|
+
format: BatchFormat.Quad,
|
|
51
|
+
createData: noopRendererData,
|
|
52
|
+
submit: submitGlSpriteNode,
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=glSpriteRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glSpriteRenderer.js","sourceRoot":"","sources":["../src/glSpriteRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare function createGlState(options?: {
|
|
3
|
+
allowSmoothing?: boolean;
|
|
4
|
+
}): {
|
|
5
|
+
state: GlRenderState;
|
|
6
|
+
gl: WebGL2RenderingContext;
|
|
7
|
+
canvas: HTMLCanvasElement;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=glTestHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTestHelper.d.ts","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IACrE,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,sBAAsB,CAAC;IAC3B,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CASA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createGlRenderState } from '@flighthq/render-gl';
|
|
2
|
+
// Local test helper for scene2d-gl unit tests. Mirrors render-gl's own private
|
|
3
|
+
// glTestHelper pattern but builds the state through render-gl's PUBLIC createGlRenderState
|
|
4
|
+
// rather than reaching into render-gl internals. The jsdom webgl2Mock setup file patches
|
|
5
|
+
// HTMLCanvasElement.getContext('webgl2') to return a mock WebGL2RenderingContext, so
|
|
6
|
+
// createGlRenderState produces a fully-populated state with a working mock GL.
|
|
7
|
+
export function createGlState(options) {
|
|
8
|
+
const canvas = document.createElement('canvas');
|
|
9
|
+
canvas.width = 200;
|
|
10
|
+
canvas.height = 100;
|
|
11
|
+
const state = createGlRenderState(canvas, {
|
|
12
|
+
backgroundColor: 0x00000000,
|
|
13
|
+
imageSmoothingEnabled: options?.allowSmoothing ?? true,
|
|
14
|
+
});
|
|
15
|
+
return { state, gl: state.gl, canvas };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=glTestHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,+EAA+E;AAC/E,2FAA2F;AAC3F,yFAAyF;AACzF,qFAAqF;AACrF,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,OAAsC;IAKlE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE;QACxC,eAAe,EAAE,UAAU;QAC3B,qBAAqB,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI;KACvD,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RichText, TextLayoutResult } from '@flighthq/types';
|
|
2
|
+
export declare function drawGlTextInputOverlay(context: CanvasRenderingContext2D, source: RichText, result: TextLayoutResult, fieldW: number, fieldH: number, _text: string): void;
|
|
3
|
+
export declare function enableGlTextInput(): void;
|
|
4
|
+
//# sourceMappingURL=glTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTextInput.d.ts","sourceRoot":"","sources":["../src/glTextInput.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAC;AAM1F,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,IAAI,CAmCN;AAID,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
|
+
import { getTextInputCaretRectangle, getTextInputSelectionBeginIndex, getTextInputSelectionEndIndex, getTextInputSelectionRectangles, getTextInputState, } from '@flighthq/textinput';
|
|
3
|
+
import { getRichTextScrollYOffset } from '@flighthq/textlayout';
|
|
4
|
+
import { registerGlTextInputOverlay } from './glRichText';
|
|
5
|
+
// Rasterizes the editable-field overlay (selection highlight + caret) onto the offscreen field canvas of
|
|
6
|
+
// a RichText whose input slot is present. Passed into the Gl RichText rasterization pass.
|
|
7
|
+
export function drawGlTextInputOverlay(context, source, result, fieldW, fieldH, _text) {
|
|
8
|
+
const input = getTextInputState(source);
|
|
9
|
+
if (input === null || (!input.focused && !input.alwaysShowSelection))
|
|
10
|
+
return;
|
|
11
|
+
const firstVisibleLine = source.data.scrollV - 1;
|
|
12
|
+
const scrollYOffset = firstVisibleLine > 0 ? getRichTextScrollYOffset(result.lineHeights, firstVisibleLine) : 0;
|
|
13
|
+
const scrollXOffset = source.data.scrollH;
|
|
14
|
+
context.save();
|
|
15
|
+
context.beginPath();
|
|
16
|
+
context.rect(0, 0, fieldW, fieldH);
|
|
17
|
+
context.clip();
|
|
18
|
+
getTextInputSelectionRectangles(selectionRectangles, source, result);
|
|
19
|
+
if (selectionRectangles.length > 0) {
|
|
20
|
+
context.fillStyle = computeRgbHexString(input.selectionColor);
|
|
21
|
+
context.globalAlpha = input.selectionAlpha;
|
|
22
|
+
for (const rect of selectionRectangles) {
|
|
23
|
+
context.fillRect(rect.x - scrollXOffset, rect.y - scrollYOffset, rect.width, rect.height);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (input.focused && getTextInputSelectionBeginIndex(source) === getTextInputSelectionEndIndex(source)) {
|
|
27
|
+
getTextInputCaretRectangle(caretRectangle, source, result);
|
|
28
|
+
context.fillStyle = CARET_COLOR;
|
|
29
|
+
context.globalAlpha = 1;
|
|
30
|
+
context.fillRect(caretRectangle.x - scrollXOffset, caretRectangle.y - scrollYOffset, CARET_WIDTH, caretRectangle.height);
|
|
31
|
+
}
|
|
32
|
+
context.restore();
|
|
33
|
+
}
|
|
34
|
+
// Installs the caret/selection overlay onto the Gl RichText renderer. Importing this opts an app into
|
|
35
|
+
// text-input rendering; a static RichText leaves the slot null and pulls none of this module.
|
|
36
|
+
export function enableGlTextInput() {
|
|
37
|
+
registerGlTextInputOverlay(drawGlTextInputOverlay);
|
|
38
|
+
}
|
|
39
|
+
const CARET_COLOR = '#000000';
|
|
40
|
+
const CARET_WIDTH = 1;
|
|
41
|
+
const caretRectangle = { height: 0, lineIndex: 0, width: 0, x: 0, y: 0 };
|
|
42
|
+
const selectionRectangles = [];
|
|
43
|
+
//# sourceMappingURL=glTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTextInput.js","sourceRoot":"","sources":["../src/glTextInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Scene2DRenderer, GlRenderState, RenderProxy2D } from '@flighthq/types';
|
|
2
|
+
export declare function drawGlTextLabel(state: GlRenderState, renderProxy: RenderProxy2D): void;
|
|
3
|
+
export declare const defaultGlTextLabelRenderer: Scene2DRenderer;
|
|
4
|
+
//# sourceMappingURL=glTextLabel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTextLabel.d.ts","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAIb,aAAa,EAId,MAAM,iBAAiB,CAAC;AAgEzB,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAkGtF;AAED,eAAO,MAAM,0BAA0B,EAAE,eAKxC,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
|
+
import { createImageResource, setImageResourceSource } from '@flighthq/image';
|
|
3
|
+
import { getNodeLocalContentRevision } from '@flighthq/node';
|
|
4
|
+
import { resolveGlMaterialRenderer } from '@flighthq/render-gl';
|
|
5
|
+
import { getGlRenderStateRuntime } from '@flighthq/render-gl';
|
|
6
|
+
import { computeTextFormatFontString } from '@flighthq/text';
|
|
7
|
+
import { getTextLabelRuntime } from '@flighthq/text';
|
|
8
|
+
import { computeTextLayout, createTextFormatRange, getTextLayoutResult } from '@flighthq/textlayout';
|
|
9
|
+
import { BatchFormat } from '@flighthq/types';
|
|
10
|
+
import { ensureGlQuadBatchShader, packGlSpriteBatchMaterialInstance, prepareGlSpriteBatchWrite, recordGlSpriteBatchColorTransform, } from './glSpriteBatch';
|
|
11
|
+
function getGlTextLabelData(data) {
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
function toGlTextLabelRendererData(data) {
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
function createGlTextLabelData(_state, _source) {
|
|
18
|
+
const canvas = document.createElement('canvas');
|
|
19
|
+
canvas.width = 1;
|
|
20
|
+
canvas.height = 1;
|
|
21
|
+
const ctx = canvas.getContext('2d');
|
|
22
|
+
return toGlTextLabelRendererData({
|
|
23
|
+
canvas,
|
|
24
|
+
ctx,
|
|
25
|
+
image: createImageResource(canvas),
|
|
26
|
+
lastContentId: -1,
|
|
27
|
+
lastPixelRatio: 0,
|
|
28
|
+
logW: 0,
|
|
29
|
+
logH: 0,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// Free the GPU texture the batch uploaded for this node's canvas-backed resource when it is torn down.
|
|
33
|
+
function destroyGlTextLabelData(state, data) {
|
|
34
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
35
|
+
const { image } = getGlTextLabelData(data);
|
|
36
|
+
const entry = runtime.imageResourceTextureCache.get(image);
|
|
37
|
+
if (entry !== undefined) {
|
|
38
|
+
state.gl.deleteTexture(entry.texture);
|
|
39
|
+
runtime.imageResourceTextureCache.delete(image);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function drawGlTextLabel(state, renderProxy) {
|
|
43
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
44
|
+
const source = renderProxy.source;
|
|
45
|
+
const { text, textFormat, width: fieldWidth, height: fieldHeight } = source.data;
|
|
46
|
+
if (text.length === 0)
|
|
47
|
+
return;
|
|
48
|
+
if (renderProxy.rendererData === null)
|
|
49
|
+
return;
|
|
50
|
+
const material = renderProxy.material;
|
|
51
|
+
const materialRenderer = resolveGlMaterialRenderer(state, material);
|
|
52
|
+
if (materialRenderer === null)
|
|
53
|
+
return;
|
|
54
|
+
const textData = getGlTextLabelData(renderProxy.rendererData);
|
|
55
|
+
const pixelRatio = state.pixelRatio;
|
|
56
|
+
const version = getNodeLocalContentRevision(source);
|
|
57
|
+
if (version !== textData.lastContentId || pixelRatio !== textData.lastPixelRatio) {
|
|
58
|
+
const measure = (t, format) => {
|
|
59
|
+
textData.ctx.font = computeTextFormatFontString(format);
|
|
60
|
+
return textData.ctx.measureText(t).width;
|
|
61
|
+
};
|
|
62
|
+
const result = getTextLayoutResult(getTextLabelRuntime(source));
|
|
63
|
+
computeTextLayout(result, {
|
|
64
|
+
text,
|
|
65
|
+
formatRanges: [createTextFormatRange(textFormat, 0, text.length)],
|
|
66
|
+
width: fieldWidth,
|
|
67
|
+
height: fieldHeight,
|
|
68
|
+
measure,
|
|
69
|
+
verticalAlign: source.data.autoSize === 'none' ? source.data.verticalAlign : 'top',
|
|
70
|
+
});
|
|
71
|
+
textData.lastContentId = version;
|
|
72
|
+
textData.lastPixelRatio = pixelRatio;
|
|
73
|
+
textData.logW = 0;
|
|
74
|
+
textData.logH = 0;
|
|
75
|
+
if (result.groups.length === 0)
|
|
76
|
+
return;
|
|
77
|
+
let maxX = 0;
|
|
78
|
+
let maxY = 0;
|
|
79
|
+
for (const group of result.groups) {
|
|
80
|
+
const right = group.offsetX + group.width;
|
|
81
|
+
const bottom = group.offsetY + group.ascent + group.descent;
|
|
82
|
+
if (right > maxX)
|
|
83
|
+
maxX = right;
|
|
84
|
+
if (bottom > maxY)
|
|
85
|
+
maxY = bottom;
|
|
86
|
+
}
|
|
87
|
+
const w = Math.ceil(maxX);
|
|
88
|
+
const h = Math.ceil(maxY);
|
|
89
|
+
if (w <= 0 || h <= 0)
|
|
90
|
+
return;
|
|
91
|
+
const pw = Math.ceil(w * pixelRatio);
|
|
92
|
+
const ph = Math.ceil(h * pixelRatio);
|
|
93
|
+
textData.canvas.width = pw;
|
|
94
|
+
textData.canvas.height = ph;
|
|
95
|
+
const ctx = textData.ctx;
|
|
96
|
+
ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
|
|
97
|
+
ctx.clearRect(0, 0, w, h);
|
|
98
|
+
ctx.textBaseline = 'alphabetic';
|
|
99
|
+
ctx.textAlign = 'start';
|
|
100
|
+
for (const group of result.groups) {
|
|
101
|
+
ctx.font = computeTextFormatFontString(group.format);
|
|
102
|
+
ctx.fillStyle = computeRgbHexString(group.format.color ?? 0);
|
|
103
|
+
const slice = text.substring(group.startIndex, group.endIndex);
|
|
104
|
+
ctx.fillText(slice, group.offsetX, group.offsetY + group.ascent * 0.815);
|
|
105
|
+
}
|
|
106
|
+
// Re-read canvas dimensions and bump the resource version so the batch's version-aware cache re-uploads.
|
|
107
|
+
setImageResourceSource(textData.image, textData.canvas);
|
|
108
|
+
textData.logW = w;
|
|
109
|
+
textData.logH = h;
|
|
110
|
+
}
|
|
111
|
+
if (textData.logW <= 0 || textData.logH <= 0)
|
|
112
|
+
return;
|
|
113
|
+
ensureGlQuadBatchShader(state);
|
|
114
|
+
const startCount = runtime.spriteBatchCount;
|
|
115
|
+
const base = prepareGlSpriteBatchWrite(state, textData.image, renderProxy.blendMode, material, materialRenderer, 1);
|
|
116
|
+
const d = runtime.spriteBatchInstanceData;
|
|
117
|
+
const t = renderProxy.transform2D;
|
|
118
|
+
d[base] = t.a;
|
|
119
|
+
d[base + 1] = t.b;
|
|
120
|
+
d[base + 2] = t.c;
|
|
121
|
+
d[base + 3] = t.d;
|
|
122
|
+
d[base + 4] = t.tx;
|
|
123
|
+
d[base + 5] = t.ty;
|
|
124
|
+
d[base + 6] = textData.logW;
|
|
125
|
+
d[base + 7] = textData.logH;
|
|
126
|
+
d[base + 8] = 0;
|
|
127
|
+
d[base + 9] = 0;
|
|
128
|
+
d[base + 10] = 1;
|
|
129
|
+
d[base + 11] = 1;
|
|
130
|
+
d[base + 12] = renderProxy.alpha;
|
|
131
|
+
packGlSpriteBatchMaterialInstance(state, renderProxy.materialData, startCount);
|
|
132
|
+
recordGlSpriteBatchColorTransform(state, renderProxy.colorTransform, startCount);
|
|
133
|
+
runtime.spriteBatchCount++;
|
|
134
|
+
}
|
|
135
|
+
export const defaultGlTextLabelRenderer = {
|
|
136
|
+
format: BatchFormat.Quad,
|
|
137
|
+
createData: createGlTextLabelData,
|
|
138
|
+
destroyData: destroyGlTextLabelData,
|
|
139
|
+
submit: drawGlTextLabel,
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=glTextLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTextLabel.js","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glTilemap.d.ts","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgD,cAAc,EAAW,MAAM,iBAAiB,CAAC;AA6F7G,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAC"}
|