@flighthq/displayobject-gl 0.1.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.
Files changed (143) hide show
  1. package/dist/glBitmap.d.ts +4 -0
  2. package/dist/glBitmap.d.ts.map +1 -0
  3. package/dist/glBitmap.js +106 -0
  4. package/dist/glBitmap.js.map +1 -0
  5. package/dist/glCache.d.ts +30 -0
  6. package/dist/glCache.d.ts.map +1 -0
  7. package/dist/glCache.js +185 -0
  8. package/dist/glCache.js.map +1 -0
  9. package/dist/glClip.d.ts +3 -0
  10. package/dist/glClip.d.ts.map +1 -0
  11. package/dist/glClip.js +46 -0
  12. package/dist/glClip.js.map +1 -0
  13. package/dist/glClipContours.d.ts +4 -0
  14. package/dist/glClipContours.d.ts.map +1 -0
  15. package/dist/glClipContours.js +148 -0
  16. package/dist/glClipContours.js.map +1 -0
  17. package/dist/glClipRectangle.d.ts +4 -0
  18. package/dist/glClipRectangle.d.ts.map +1 -0
  19. package/dist/glClipRectangle.js +68 -0
  20. package/dist/glClipRectangle.js.map +1 -0
  21. package/dist/glColorTransformMaterial.d.ts +4 -0
  22. package/dist/glColorTransformMaterial.d.ts.map +1 -0
  23. package/dist/glColorTransformMaterial.js +116 -0
  24. package/dist/glColorTransformMaterial.js.map +1 -0
  25. package/dist/glDefaultMaterial.d.ts +4 -0
  26. package/dist/glDefaultMaterial.d.ts.map +1 -0
  27. package/dist/glDefaultMaterial.js +20 -0
  28. package/dist/glDefaultMaterial.js.map +1 -0
  29. package/dist/glDisplayObject.d.ts +5 -0
  30. package/dist/glDisplayObject.d.ts.map +1 -0
  31. package/dist/glDisplayObject.js +41 -0
  32. package/dist/glDisplayObject.js.map +1 -0
  33. package/dist/glDisplayObjectRegistration.d.ts +25 -0
  34. package/dist/glDisplayObjectRegistration.d.ts.map +1 -0
  35. package/dist/glDisplayObjectRegistration.js +51 -0
  36. package/dist/glDisplayObjectRegistration.js.map +1 -0
  37. package/dist/glMaterials.d.ts +4 -0
  38. package/dist/glMaterials.d.ts.map +1 -0
  39. package/dist/glMaterials.js +97 -0
  40. package/dist/glMaterials.js.map +1 -0
  41. package/dist/glParticleEmitter.d.ts +4 -0
  42. package/dist/glParticleEmitter.d.ts.map +1 -0
  43. package/dist/glParticleEmitter.js +258 -0
  44. package/dist/glParticleEmitter.js.map +1 -0
  45. package/dist/glQuadBatch.d.ts +3 -0
  46. package/dist/glQuadBatch.d.ts.map +1 -0
  47. package/dist/glQuadBatch.js +88 -0
  48. package/dist/glQuadBatch.js.map +1 -0
  49. package/dist/glRichText.d.ts +9 -0
  50. package/dist/glRichText.d.ts.map +1 -0
  51. package/dist/glRichText.js +149 -0
  52. package/dist/glRichText.js.map +1 -0
  53. package/dist/glScale9Mapper.d.ts +3 -0
  54. package/dist/glScale9Mapper.d.ts.map +1 -0
  55. package/dist/glScale9Mapper.js +37 -0
  56. package/dist/glScale9Mapper.js.map +1 -0
  57. package/dist/glScale9Shape.d.ts +9 -0
  58. package/dist/glScale9Shape.d.ts.map +1 -0
  59. package/dist/glScale9Shape.js +118 -0
  60. package/dist/glScale9Shape.js.map +1 -0
  61. package/dist/glShape.d.ts +4 -0
  62. package/dist/glShape.d.ts.map +1 -0
  63. package/dist/glShape.js +125 -0
  64. package/dist/glShape.js.map +1 -0
  65. package/dist/glShapeMesh.d.ts +9 -0
  66. package/dist/glShapeMesh.d.ts.map +1 -0
  67. package/dist/glShapeMesh.js +90 -0
  68. package/dist/glShapeMesh.js.map +1 -0
  69. package/dist/glSprite.d.ts +3 -0
  70. package/dist/glSprite.d.ts.map +1 -0
  71. package/dist/glSprite.js +28 -0
  72. package/dist/glSprite.js.map +1 -0
  73. package/dist/glSpriteBatch.d.ts +11 -0
  74. package/dist/glSpriteBatch.d.ts.map +1 -0
  75. package/dist/glSpriteBatch.js +241 -0
  76. package/dist/glSpriteBatch.js.map +1 -0
  77. package/dist/glSpriteRenderer.d.ts +3 -0
  78. package/dist/glSpriteRenderer.d.ts.map +1 -0
  79. package/dist/glSpriteRenderer.js +50 -0
  80. package/dist/glSpriteRenderer.js.map +1 -0
  81. package/dist/glTestHelper.d.ts +9 -0
  82. package/dist/glTestHelper.d.ts.map +1 -0
  83. package/dist/glTestHelper.js +17 -0
  84. package/dist/glTestHelper.js.map +1 -0
  85. package/dist/glTextInput.d.ts +4 -0
  86. package/dist/glTextInput.d.ts.map +1 -0
  87. package/dist/glTextInput.js +43 -0
  88. package/dist/glTextInput.js.map +1 -0
  89. package/dist/glTextLabel.d.ts +4 -0
  90. package/dist/glTextLabel.d.ts.map +1 -0
  91. package/dist/glTextLabel.js +130 -0
  92. package/dist/glTextLabel.js.map +1 -0
  93. package/dist/glTilemap.d.ts +3 -0
  94. package/dist/glTilemap.d.ts.map +1 -0
  95. package/dist/glTilemap.js +74 -0
  96. package/dist/glTilemap.js.map +1 -0
  97. package/dist/glUniformColorTransformMaterial.d.ts +4 -0
  98. package/dist/glUniformColorTransformMaterial.d.ts.map +1 -0
  99. package/dist/glUniformColorTransformMaterial.js +56 -0
  100. package/dist/glUniformColorTransformMaterial.js.map +1 -0
  101. package/dist/glVelocity.d.ts +22 -0
  102. package/dist/glVelocity.d.ts.map +1 -0
  103. package/dist/glVelocity.js +319 -0
  104. package/dist/glVelocity.js.map +1 -0
  105. package/dist/glVideo.d.ts +6 -0
  106. package/dist/glVideo.d.ts.map +1 -0
  107. package/dist/glVideo.js +60 -0
  108. package/dist/glVideo.js.map +1 -0
  109. package/dist/index.d.ts +28 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +29 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/moduleMockTestHelper.d.ts +15 -0
  114. package/dist/moduleMockTestHelper.d.ts.map +1 -0
  115. package/dist/moduleMockTestHelper.js +25 -0
  116. package/dist/moduleMockTestHelper.js.map +1 -0
  117. package/package.json +51 -0
  118. package/src/glBitmap.test.ts +128 -0
  119. package/src/glCache.test.ts +230 -0
  120. package/src/glClip.test.ts +101 -0
  121. package/src/glClipContours.test.ts +61 -0
  122. package/src/glClipRectangle.test.ts +47 -0
  123. package/src/glColorTransformMaterial.test.ts +45 -0
  124. package/src/glDefaultMaterial.test.ts +19 -0
  125. package/src/glDisplayObject.test.ts +85 -0
  126. package/src/glDisplayObjectRegistration.test.ts +130 -0
  127. package/src/glMaterials.test.ts +91 -0
  128. package/src/glParticleEmitter.test.ts +98 -0
  129. package/src/glQuadBatch.test.ts +132 -0
  130. package/src/glRichText.test.ts +135 -0
  131. package/src/glScale9Mapper.test.ts +20 -0
  132. package/src/glScale9Shape.test.ts +90 -0
  133. package/src/glShape.test.ts +115 -0
  134. package/src/glShapeMesh.test.ts +64 -0
  135. package/src/glSprite.test.ts +79 -0
  136. package/src/glSpriteBatch.test.ts +153 -0
  137. package/src/glSpriteRenderer.test.ts +75 -0
  138. package/src/glTextInput.test.ts +51 -0
  139. package/src/glTextLabel.test.ts +151 -0
  140. package/src/glTilemap.test.ts +127 -0
  141. package/src/glUniformColorTransformMaterial.test.ts +24 -0
  142. package/src/glVelocity.test.ts +155 -0
  143. package/src/glVideo.test.ts +65 -0
@@ -0,0 +1,241 @@
1
+ import { bindGlTexture } 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 may use. Divisors for
17
+ // locations 1..this are reset after each flush so later non-instanced draws are not corrupted.
18
+ const MAX_INSTANCE_ATTRIB_LOCATION = 8;
19
+ export const QUAD_BATCH_VS = `#version 300 es
20
+ precision mediump float;
21
+
22
+ layout(location = 0) in vec2 a_corner;
23
+ layout(location = 1) in vec2 a_matAB;
24
+ layout(location = 2) in vec2 a_matCD;
25
+ layout(location = 3) in vec2 a_matTXTY;
26
+ layout(location = 4) in vec2 a_size;
27
+ layout(location = 5) in vec4 a_uvRect;
28
+ layout(location = 6) in float a_alpha;
29
+
30
+ uniform mat3 u_world;
31
+
32
+ out vec2 v_texCoord;
33
+ out float v_alpha;
34
+
35
+ void main() {
36
+ vec2 local = a_corner * a_size;
37
+ vec2 worldPos = vec2(
38
+ a_matAB.x * local.x + a_matCD.x * local.y + a_matTXTY.x,
39
+ a_matAB.y * local.x + a_matCD.y * local.y + a_matTXTY.y
40
+ );
41
+ vec3 clip = u_world * vec3(worldPos, 1.0);
42
+ gl_Position = vec4(clip.xy, 0.0, 1.0);
43
+ v_texCoord = mix(a_uvRect.xy, a_uvRect.zw, a_corner);
44
+ v_alpha = a_alpha;
45
+ }`;
46
+ const QUAD_BATCH_FS = `#version 300 es
47
+ precision mediump float;
48
+ in vec2 v_texCoord;
49
+ in float v_alpha;
50
+ uniform sampler2D u_texture;
51
+ out vec4 fragColor;
52
+ void main() {
53
+ vec4 color = texture(u_texture, v_texCoord) * clamp(v_alpha, 0.0, 1.0);
54
+ if (color.a <= 0.0) discard;
55
+ fragColor = color;
56
+ }`;
57
+ function compileSpriteBatchShader(gl) {
58
+ const program = createGlProgram(gl, QUAD_BATCH_VS, QUAD_BATCH_FS, 'Sprite-batch');
59
+ return {
60
+ program,
61
+ locCorner: 0,
62
+ locMatAB: 1,
63
+ locMatCD: 2,
64
+ locMatTXTY: 3,
65
+ locSize: 4,
66
+ locUvRect: 5,
67
+ locAlpha: 6,
68
+ locWorldMatrix: gl.getUniformLocation(program, 'u_world'),
69
+ locTexture: gl.getUniformLocation(program, 'u_texture'),
70
+ };
71
+ }
72
+ // Binds the corner buffer (location `locCorner`, divisor 0) and the base instance attributes
73
+ // (locations 1-6, divisor 1) from the active sprite-batch instance buffer. Shared by every
74
+ // sprite-batch material renderer regardless of its program, since the base layout is fixed.
75
+ export function bindGlQuadBatchBaseAttributes(state, locCorner) {
76
+ const runtime = getGlRenderStateRuntime(state);
77
+ const gl = state.gl;
78
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.quadBatchCornerBuffer);
79
+ gl.enableVertexAttribArray(locCorner);
80
+ gl.vertexAttribPointer(locCorner, 2, gl.FLOAT, false, 8, 0);
81
+ gl.vertexAttribDivisor(locCorner, 0);
82
+ const stride = SPRITE_INSTANCE_STRIDE;
83
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
84
+ gl.enableVertexAttribArray(1);
85
+ gl.vertexAttribPointer(1, 2, gl.FLOAT, false, stride, 0);
86
+ gl.vertexAttribDivisor(1, 1);
87
+ gl.enableVertexAttribArray(2);
88
+ gl.vertexAttribPointer(2, 2, gl.FLOAT, false, stride, 8);
89
+ gl.vertexAttribDivisor(2, 1);
90
+ gl.enableVertexAttribArray(3);
91
+ gl.vertexAttribPointer(3, 2, gl.FLOAT, false, stride, 16);
92
+ gl.vertexAttribDivisor(3, 1);
93
+ gl.enableVertexAttribArray(4);
94
+ gl.vertexAttribPointer(4, 2, gl.FLOAT, false, stride, 24);
95
+ gl.vertexAttribDivisor(4, 1);
96
+ gl.enableVertexAttribArray(5);
97
+ gl.vertexAttribPointer(5, 4, gl.FLOAT, false, stride, 32);
98
+ gl.vertexAttribDivisor(5, 1);
99
+ gl.enableVertexAttribArray(6);
100
+ gl.vertexAttribPointer(6, 1, gl.FLOAT, false, stride, 48);
101
+ gl.vertexAttribDivisor(6, 1);
102
+ }
103
+ export function ensureGlQuadBatchShader(state) {
104
+ const runtime = getGlRenderStateRuntime(state);
105
+ if (runtime.quadBatchShader)
106
+ return runtime.quadBatchShader;
107
+ const gl = state.gl;
108
+ runtime.quadBatchShader = compileSpriteBatchShader(gl);
109
+ const cornerData = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
110
+ const cornerBuf = gl.createBuffer();
111
+ gl.bindBuffer(gl.ARRAY_BUFFER, cornerBuf);
112
+ gl.bufferData(gl.ARRAY_BUFFER, cornerData, gl.STATIC_DRAW);
113
+ runtime.quadBatchCornerBuffer = cornerBuf;
114
+ return runtime.quadBatchShader;
115
+ }
116
+ export function flushGlSpriteBatch(state) {
117
+ const runtime = getGlRenderStateRuntime(state);
118
+ const count = runtime.spriteBatchCount;
119
+ if (count === 0)
120
+ return;
121
+ const texture = runtime.spriteBatchTexture;
122
+ const blendMode = runtime.spriteBatchBlendMode;
123
+ const material = runtime.spriteBatchMaterial;
124
+ const renderer = runtime.spriteBatchMaterialRenderer;
125
+ const floats = runtime.spriteBatchMaterialFloats;
126
+ runtime.spriteBatchCount = 0;
127
+ runtime.spriteBatchTexture = null;
128
+ runtime.spriteBatchBlendMode = null;
129
+ runtime.spriteBatchMaterial = null;
130
+ runtime.spriteBatchMaterialRenderer = null;
131
+ runtime.spriteBatchMaterialFloats = 0;
132
+ const gl = state.gl;
133
+ if (runtime.spriteBatchInstanceBuffer === null) {
134
+ runtime.spriteBatchInstanceBuffer = gl.createBuffer();
135
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
136
+ gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceData.byteLength, gl.DYNAMIC_DRAW);
137
+ }
138
+ else {
139
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
140
+ }
141
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchInstanceData, 0, count * SPRITE_INSTANCE_FLOATS);
142
+ if (floats > 0) {
143
+ if (runtime.spriteBatchMaterialBuffer === null) {
144
+ runtime.spriteBatchMaterialBuffer = gl.createBuffer();
145
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
146
+ gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialData.byteLength, gl.DYNAMIC_DRAW);
147
+ }
148
+ else {
149
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
150
+ }
151
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, runtime.spriteBatchMaterialData, 0, count * floats);
152
+ }
153
+ state.applyBlendMode?.(state, blendMode);
154
+ bindGlTexture(state, texture);
155
+ // Resolved renderer owns program selection, uniforms, and all attribute setup (base + its own).
156
+ renderer.bind(state, material);
157
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, runtime.quadIndexBuffer);
158
+ gl.drawElementsInstanced(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0, count);
159
+ for (let loc = 1; loc <= MAX_INSTANCE_ATTRIB_LOCATION; loc++) {
160
+ gl.vertexAttribDivisor(loc, 0);
161
+ }
162
+ }
163
+ // Writes one instance's per-instance material floats into the active material buffer at the given
164
+ // instance index, converting the supplied per-instance materialData. No-op for uniform-only
165
+ // materials (no packInstance / floats === 0).
166
+ export function packGlSpriteBatchMaterialInstance(state, materialData, instanceIndex) {
167
+ const runtime = getGlRenderStateRuntime(state);
168
+ const renderer = runtime.spriteBatchMaterialRenderer;
169
+ if (renderer === null || renderer.packInstance === undefined)
170
+ return;
171
+ renderer.packInstance(state, materialData, runtime.spriteBatchMaterialData, instanceIndex * runtime.spriteBatchMaterialFloats);
172
+ }
173
+ // Ensures the sprite batch can accept up to `maxInstances` more instances for the given texture,
174
+ // blend mode, and material. Flushes the current batch when any of the three changes (material is
175
+ // compared by reference) or capacity is exceeded. Returns the float index in
176
+ // spriteBatchInstanceData where the caller should begin writing base instance data; the caller
177
+ // increments state.spriteBatchCount and calls packGlSpriteBatchMaterialInstance per instance.
178
+ export function prepareGlSpriteBatchWrite(state, texture, blendMode, material, materialRenderer, maxInstances) {
179
+ const runtime = getGlRenderStateRuntime(state);
180
+ if (texture !== runtime.spriteBatchTexture ||
181
+ blendMode !== runtime.spriteBatchBlendMode ||
182
+ material !== runtime.spriteBatchMaterial) {
183
+ flushGlSpriteBatch(state);
184
+ }
185
+ runtime.spriteBatchTexture = texture;
186
+ runtime.spriteBatchBlendMode = blendMode;
187
+ runtime.spriteBatchMaterial = material;
188
+ runtime.spriteBatchMaterialRenderer = materialRenderer;
189
+ const floats = materialRenderer.instanceFloatCount;
190
+ runtime.spriteBatchMaterialFloats = floats;
191
+ const needed = (runtime.spriteBatchCount + maxInstances) * SPRITE_INSTANCE_FLOATS;
192
+ if (needed > runtime.spriteBatchInstanceData.length) {
193
+ const newSize = Math.max(needed, runtime.spriteBatchInstanceData.length * 2);
194
+ runtime.spriteBatchInstanceData = new Float32Array(newSize);
195
+ if (runtime.spriteBatchInstanceBuffer !== null) {
196
+ const gl = state.gl;
197
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchInstanceBuffer);
198
+ gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
199
+ }
200
+ }
201
+ if (floats > 0) {
202
+ const materialNeeded = (runtime.spriteBatchCount + maxInstances) * floats;
203
+ if (materialNeeded > runtime.spriteBatchMaterialData.length) {
204
+ const newSize = Math.max(materialNeeded, runtime.spriteBatchMaterialData.length * 2);
205
+ runtime.spriteBatchMaterialData = new Float32Array(newSize);
206
+ if (runtime.spriteBatchMaterialBuffer !== null) {
207
+ const gl = state.gl;
208
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchMaterialBuffer);
209
+ gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
210
+ }
211
+ }
212
+ }
213
+ return runtime.spriteBatchCount * SPRITE_INSTANCE_FLOATS;
214
+ }
215
+ export function setGlQuadBatchWorldAndTexture(state, locWorldMatrix, locTexture) {
216
+ const runtime = getGlRenderStateRuntime(state);
217
+ const gl = state.gl;
218
+ const viewport = runtime.renderTargetViewport ?? state.canvas;
219
+ const clipW = 2 / viewport.width;
220
+ const clipH = 2 / viewport.height;
221
+ const m = runtime.matrixArray;
222
+ m[0] = clipW;
223
+ m[1] = 0;
224
+ m[2] = 0;
225
+ m[3] = 0;
226
+ m[4] = -clipH;
227
+ m[5] = 0;
228
+ m[6] = -1;
229
+ m[7] = 1;
230
+ m[8] = 1;
231
+ gl.uniformMatrix3fv(locWorldMatrix, false, m);
232
+ gl.uniform1i(locTexture, 0);
233
+ }
234
+ export function useGlQuadBatchProgram(state, program) {
235
+ const runtime = getGlRenderStateRuntime(state);
236
+ if (runtime.currentProgram !== program) {
237
+ state.gl.useProgram(program);
238
+ runtime.currentProgram = program;
239
+ }
240
+ }
241
+ //# 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,3 @@
1
+ import type { SpriteRenderer } from '@flighthq/types';
2
+ export declare const defaultGlSpriteRenderer: SpriteRenderer;
3
+ //# sourceMappingURL=glSpriteRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glSpriteRenderer.d.ts","sourceRoot":"","sources":["../src/glSpriteRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAwC,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAqD5F,eAAO,MAAM,uBAAuB,EAAE,cAIrC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { noopRendererData } from '@flighthq/render';
2
+ import { resolveGlMaterialRenderer } from '@flighthq/render-gl';
3
+ import { getGlRenderStateRuntime } from '@flighthq/render-gl';
4
+ import { BatchFormat } from '@flighthq/types';
5
+ import { ensureGlQuadBatchShader, packGlSpriteBatchMaterialInstance, prepareGlSpriteBatchWrite } from './glSpriteBatch';
6
+ function submitGlSpriteNode(state, spriteNode) {
7
+ const runtime = getGlRenderStateRuntime(state);
8
+ const source = spriteNode.source;
9
+ const { atlas, id } = source.data;
10
+ if (atlas === null || atlas.image === null || atlas.image.source === null)
11
+ return;
12
+ const regions = atlas.regions;
13
+ if (id < 0 || id >= regions.length)
14
+ return;
15
+ const region = regions[id];
16
+ if (region.width <= 0 || region.height <= 0)
17
+ return;
18
+ ensureGlQuadBatchShader(state);
19
+ const iw = 1 / (atlas.image.width || 1);
20
+ const ih = 1 / (atlas.image.height || 1);
21
+ const t = spriteNode.transform2D;
22
+ const material = spriteNode.material;
23
+ const materialRenderer = resolveGlMaterialRenderer(state, material);
24
+ if (materialRenderer === null)
25
+ return;
26
+ const base = prepareGlSpriteBatchWrite(state, atlas.image.source, spriteNode.blendMode, material, materialRenderer, 1);
27
+ const instanceIndex = runtime.spriteBatchCount;
28
+ const d = runtime.spriteBatchInstanceData;
29
+ d[base] = t.a;
30
+ d[base + 1] = t.b;
31
+ d[base + 2] = t.c;
32
+ d[base + 3] = t.d;
33
+ d[base + 4] = t.tx;
34
+ d[base + 5] = t.ty;
35
+ d[base + 6] = region.width;
36
+ d[base + 7] = region.height;
37
+ d[base + 8] = region.x * iw;
38
+ d[base + 9] = region.y * ih;
39
+ d[base + 10] = (region.x + region.width) * iw;
40
+ d[base + 11] = (region.y + region.height) * ih;
41
+ d[base + 12] = spriteNode.alpha;
42
+ packGlSpriteBatchMaterialInstance(state, spriteNode.materialData, instanceIndex);
43
+ runtime.spriteBatchCount++;
44
+ }
45
+ export const defaultGlSpriteRenderer = {
46
+ format: BatchFormat.Quad,
47
+ createData: noopRendererData,
48
+ submit: submitGlSpriteNode,
49
+ };
50
+ //# 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 displayobject-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,qFAAqF;AACrF,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/materials';
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 { DisplayObjectRenderer, GlRenderState, RenderProxy2D } from '@flighthq/types';
2
+ export declare function drawGlTextLabel(state: GlRenderState, renderProxy: RenderProxy2D): void;
3
+ export declare const defaultGlTextLabelRenderer: DisplayObjectRenderer;
4
+ //# sourceMappingURL=glTextLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glTextLabel.d.ts","sourceRoot":"","sources":["../src/glTextLabel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EAGb,aAAa,EAId,MAAM,iBAAiB,CAAC;AAgDzB,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAgGtF;AAED,eAAO,MAAM,0BAA0B,EAAE,qBAKxC,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { computeRgbHexString } from '@flighthq/materials';
2
+ import { getNodeLocalContentRevision } from '@flighthq/node';
3
+ import { resolveGlMaterialRenderer } from '@flighthq/render-gl';
4
+ import { getGlRenderStateRuntime } from '@flighthq/render-gl';
5
+ import { computeTextFormatFontString } from '@flighthq/text';
6
+ import { getTextLabelRuntime } from '@flighthq/text';
7
+ import { computeTextLayout, createTextFormatRange, getTextLayoutResult } from '@flighthq/textlayout';
8
+ import { BatchFormat } from '@flighthq/types';
9
+ import { ensureGlQuadBatchShader, packGlSpriteBatchMaterialInstance, prepareGlSpriteBatchWrite } from './glSpriteBatch';
10
+ function getGlTextLabelData(data) {
11
+ return data;
12
+ }
13
+ function toGlTextLabelRendererData(data) {
14
+ return data;
15
+ }
16
+ function createGlTextLabelData(_state, _source) {
17
+ const canvas = document.createElement('canvas');
18
+ canvas.width = 1;
19
+ canvas.height = 1;
20
+ const ctx = canvas.getContext('2d');
21
+ return toGlTextLabelRendererData({ canvas, ctx, lastContentId: -1, lastPixelRatio: 0, logW: 0, logH: 0 });
22
+ }
23
+ // Free the GPU texture the batch uploaded for this node's canvas when the text node is torn down.
24
+ function destroyGlTextLabelData(state, data) {
25
+ const runtime = getGlRenderStateRuntime(state);
26
+ const { canvas } = getGlTextLabelData(data);
27
+ const texture = runtime.textureCache.get(canvas);
28
+ if (texture !== undefined) {
29
+ state.gl.deleteTexture(texture);
30
+ runtime.textureCache.delete(canvas);
31
+ }
32
+ }
33
+ export function drawGlTextLabel(state, renderProxy) {
34
+ const runtime = getGlRenderStateRuntime(state);
35
+ const source = renderProxy.source;
36
+ const { text, textFormat, width: fieldWidth, height: fieldHeight } = source.data;
37
+ if (text.length === 0)
38
+ return;
39
+ if (renderProxy.rendererData === null)
40
+ return;
41
+ const material = renderProxy.material;
42
+ const materialRenderer = resolveGlMaterialRenderer(state, material);
43
+ if (materialRenderer === null)
44
+ return;
45
+ const textData = getGlTextLabelData(renderProxy.rendererData);
46
+ const pixelRatio = state.pixelRatio;
47
+ const version = getNodeLocalContentRevision(source);
48
+ if (version !== textData.lastContentId || pixelRatio !== textData.lastPixelRatio) {
49
+ const measure = (t, format) => {
50
+ textData.ctx.font = computeTextFormatFontString(format);
51
+ return textData.ctx.measureText(t).width;
52
+ };
53
+ const result = getTextLayoutResult(getTextLabelRuntime(source));
54
+ computeTextLayout(result, {
55
+ text,
56
+ formatRanges: [createTextFormatRange(textFormat, 0, text.length)],
57
+ width: fieldWidth,
58
+ height: fieldHeight,
59
+ measure,
60
+ });
61
+ textData.lastContentId = version;
62
+ textData.lastPixelRatio = pixelRatio;
63
+ textData.logW = 0;
64
+ textData.logH = 0;
65
+ if (result.groups.length === 0)
66
+ return;
67
+ let maxX = 0;
68
+ let maxY = 0;
69
+ for (const group of result.groups) {
70
+ const right = group.offsetX + group.width;
71
+ const bottom = group.offsetY + group.ascent + group.descent;
72
+ if (right > maxX)
73
+ maxX = right;
74
+ if (bottom > maxY)
75
+ maxY = bottom;
76
+ }
77
+ const w = Math.ceil(maxX);
78
+ const h = Math.ceil(maxY);
79
+ if (w <= 0 || h <= 0)
80
+ return;
81
+ const pw = Math.ceil(w * pixelRatio);
82
+ const ph = Math.ceil(h * pixelRatio);
83
+ textData.canvas.width = pw;
84
+ textData.canvas.height = ph;
85
+ const ctx = textData.ctx;
86
+ ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
87
+ ctx.clearRect(0, 0, w, h);
88
+ ctx.textBaseline = 'alphabetic';
89
+ ctx.textAlign = 'start';
90
+ for (const group of result.groups) {
91
+ ctx.font = computeTextFormatFontString(group.format);
92
+ ctx.fillStyle = computeRgbHexString(group.format.color ?? 0);
93
+ const slice = text.substring(group.startIndex, group.endIndex);
94
+ ctx.fillText(slice, group.offsetX, group.offsetY + group.ascent * 0.815);
95
+ }
96
+ // Invalidate cached GPU texture so the batch re-uploads from the updated canvas.
97
+ runtime.textureCache.delete(textData.canvas);
98
+ textData.logW = w;
99
+ textData.logH = h;
100
+ }
101
+ if (textData.logW <= 0 || textData.logH <= 0)
102
+ return;
103
+ ensureGlQuadBatchShader(state);
104
+ const startCount = runtime.spriteBatchCount;
105
+ const base = prepareGlSpriteBatchWrite(state, textData.canvas, renderProxy.blendMode, material, materialRenderer, 1);
106
+ const d = runtime.spriteBatchInstanceData;
107
+ const t = renderProxy.transform2D;
108
+ d[base] = t.a;
109
+ d[base + 1] = t.b;
110
+ d[base + 2] = t.c;
111
+ d[base + 3] = t.d;
112
+ d[base + 4] = t.tx;
113
+ d[base + 5] = t.ty;
114
+ d[base + 6] = textData.logW;
115
+ d[base + 7] = textData.logH;
116
+ d[base + 8] = 0;
117
+ d[base + 9] = 0;
118
+ d[base + 10] = 1;
119
+ d[base + 11] = 1;
120
+ d[base + 12] = renderProxy.alpha;
121
+ packGlSpriteBatchMaterialInstance(state, renderProxy.materialData, startCount);
122
+ runtime.spriteBatchCount++;
123
+ }
124
+ export const defaultGlTextLabelRenderer = {
125
+ format: BatchFormat.Quad,
126
+ createData: createGlTextLabelData,
127
+ destroyData: destroyGlTextLabelData,
128
+ submit: drawGlTextLabel,
129
+ };
130
+ //# 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,3 @@
1
+ import type { SpriteRenderer } from '@flighthq/types';
2
+ export declare const defaultGlTilemapRenderer: SpriteRenderer;
3
+ //# sourceMappingURL=glTilemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glTilemap.d.ts","sourceRoot":"","sources":["../src/glTilemap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgC,cAAc,EAAW,MAAM,iBAAiB,CAAC;AAmF7F,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAC"}