@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.
Files changed (138) hide show
  1. package/dist/enableGlColorAdjustmentGuards.d.ts +4 -0
  2. package/dist/enableGlColorAdjustmentGuards.d.ts.map +1 -0
  3. package/dist/enableGlColorAdjustmentGuards.js +21 -0
  4. package/dist/enableGlColorAdjustmentGuards.js.map +1 -0
  5. package/dist/glBitmap.d.ts +4 -0
  6. package/dist/glBitmap.d.ts.map +1 -0
  7. package/dist/glBitmap.js +93 -0
  8. package/dist/glBitmap.js.map +1 -0
  9. package/dist/glCache.d.ts +30 -0
  10. package/dist/glCache.d.ts.map +1 -0
  11. package/dist/glCache.js +196 -0
  12. package/dist/glCache.js.map +1 -0
  13. package/dist/glClip.d.ts +3 -0
  14. package/dist/glClip.d.ts.map +1 -0
  15. package/dist/glClip.js +46 -0
  16. package/dist/glClip.js.map +1 -0
  17. package/dist/glClipContours.d.ts +4 -0
  18. package/dist/glClipContours.d.ts.map +1 -0
  19. package/dist/glClipContours.js +148 -0
  20. package/dist/glClipContours.js.map +1 -0
  21. package/dist/glClipRectangle.d.ts +4 -0
  22. package/dist/glClipRectangle.d.ts.map +1 -0
  23. package/dist/glClipRectangle.js +68 -0
  24. package/dist/glClipRectangle.js.map +1 -0
  25. package/dist/glColorAdjustment.d.ts +3 -0
  26. package/dist/glColorAdjustment.d.ts.map +1 -0
  27. package/dist/glColorAdjustment.js +361 -0
  28. package/dist/glColorAdjustment.js.map +1 -0
  29. package/dist/glDefaultMaterial.d.ts +4 -0
  30. package/dist/glDefaultMaterial.d.ts.map +1 -0
  31. package/dist/glDefaultMaterial.js +20 -0
  32. package/dist/glDefaultMaterial.js.map +1 -0
  33. package/dist/glNode2D.d.ts +5 -0
  34. package/dist/glNode2D.d.ts.map +1 -0
  35. package/dist/glNode2D.js +41 -0
  36. package/dist/glNode2D.js.map +1 -0
  37. package/dist/glNode2DRegistration.d.ts +25 -0
  38. package/dist/glNode2DRegistration.d.ts.map +1 -0
  39. package/dist/glNode2DRegistration.js +51 -0
  40. package/dist/glNode2DRegistration.js.map +1 -0
  41. package/dist/glParticleEmitter2D.d.ts +4 -0
  42. package/dist/glParticleEmitter2D.d.ts.map +1 -0
  43. package/dist/glParticleEmitter2D.js +263 -0
  44. package/dist/glParticleEmitter2D.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 +92 -0
  48. package/dist/glQuadBatch.js.map +1 -0
  49. package/dist/glRichText.d.ts +8 -0
  50. package/dist/glRichText.d.ts.map +1 -0
  51. package/dist/glRichText.js +161 -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 +146 -0
  64. package/dist/glShape.js.map +1 -0
  65. package/dist/glShapeMesh.d.ts +5 -0
  66. package/dist/glShapeMesh.d.ts.map +1 -0
  67. package/dist/glShapeMesh.js +114 -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 +277 -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 +54 -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 +141 -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 +79 -0
  96. package/dist/glTilemap.js.map +1 -0
  97. package/dist/glVelocity.d.ts +22 -0
  98. package/dist/glVelocity.d.ts.map +1 -0
  99. package/dist/glVelocity.js +319 -0
  100. package/dist/glVelocity.js.map +1 -0
  101. package/dist/glVideo.d.ts +6 -0
  102. package/dist/glVideo.d.ts.map +1 -0
  103. package/dist/glVideo.js +62 -0
  104. package/dist/glVideo.js.map +1 -0
  105. package/dist/index.d.ts +27 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +28 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/moduleMockTestHelper.d.ts +15 -0
  110. package/dist/moduleMockTestHelper.d.ts.map +1 -0
  111. package/dist/moduleMockTestHelper.js +25 -0
  112. package/dist/moduleMockTestHelper.js.map +1 -0
  113. package/package.json +60 -0
  114. package/src/enableGlColorAdjustmentGuards.test.ts +76 -0
  115. package/src/glBitmap.test.ts +136 -0
  116. package/src/glCache.test.ts +234 -0
  117. package/src/glClip.test.ts +101 -0
  118. package/src/glClipContours.test.ts +61 -0
  119. package/src/glClipRectangle.test.ts +47 -0
  120. package/src/glColorAdjustment.test.ts +166 -0
  121. package/src/glDefaultMaterial.test.ts +19 -0
  122. package/src/glNode2D.test.ts +85 -0
  123. package/src/glNode2DRegistration.test.ts +132 -0
  124. package/src/glParticleEmitter2D.test.ts +122 -0
  125. package/src/glQuadBatch.test.ts +132 -0
  126. package/src/glRichText.test.ts +140 -0
  127. package/src/glScale9Mapper.test.ts +20 -0
  128. package/src/glScale9Shape.test.ts +90 -0
  129. package/src/glShape.test.ts +116 -0
  130. package/src/glShapeMesh.test.ts +164 -0
  131. package/src/glSprite.test.ts +79 -0
  132. package/src/glSpriteBatch.test.ts +249 -0
  133. package/src/glSpriteRenderer.test.ts +89 -0
  134. package/src/glTextInput.test.ts +51 -0
  135. package/src/glTextLabel.test.ts +156 -0
  136. package/src/glTilemap.test.ts +127 -0
  137. package/src/glVelocity.test.ts +156 -0
  138. package/src/glVideo.test.ts +98 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glClipRectangle.d.ts","sourceRoot":"","sources":["../src/glClipRectangle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAc7D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC9B,IAAI,CAUN"}
@@ -0,0 +1,68 @@
1
+ import { getGlRenderStateRuntime } from '@flighthq/render-gl';
2
+ import { flushGlSpriteBatch } from './glSpriteBatch';
3
+ export function popGlClipRectangle(state) {
4
+ const runtime = getGlRenderStateRuntime(state);
5
+ const stack = getScissorStack(state);
6
+ stack.pop();
7
+ const previous = stack.length > 0 ? stack[stack.length - 1] : null;
8
+ runtime.currentScissorRect = previous;
9
+ flushGlSpriteBatch(state);
10
+ const gl = state.gl;
11
+ if (previous === null) {
12
+ gl.disable(gl.SCISSOR_TEST);
13
+ }
14
+ else {
15
+ gl.scissor(previous.x, previous.y, previous.width, previous.height);
16
+ }
17
+ }
18
+ export function pushGlClipRectangle(state, rect, transform) {
19
+ const runtime = getGlRenderStateRuntime(state);
20
+ const next = intersectScissorRect(runtime.currentScissorRect ?? null, computeScissorRect(state, rect, transform));
21
+ runtime.currentScissorRect = next;
22
+ getScissorStack(state).push(next);
23
+ flushGlSpriteBatch(state);
24
+ const gl = state.gl;
25
+ gl.enable(gl.SCISSOR_TEST);
26
+ gl.scissor(next.x, next.y, next.width, next.height);
27
+ }
28
+ function computeScissorRect(state, rect, transform) {
29
+ const x0 = transform.a * rect.x + transform.c * rect.y + transform.tx;
30
+ const y0 = transform.b * rect.x + transform.d * rect.y + transform.ty;
31
+ const x1 = transform.a * (rect.x + rect.width) + transform.c * rect.y + transform.tx;
32
+ const y1 = transform.b * (rect.x + rect.width) + transform.d * rect.y + transform.ty;
33
+ const x2 = transform.a * rect.x + transform.c * (rect.y + rect.height) + transform.tx;
34
+ const y2 = transform.b * rect.x + transform.d * (rect.y + rect.height) + transform.ty;
35
+ const x3 = transform.a * (rect.x + rect.width) + transform.c * (rect.y + rect.height) + transform.tx;
36
+ const y3 = transform.b * (rect.x + rect.width) + transform.d * (rect.y + rect.height) + transform.ty;
37
+ const viewport = getGlRenderStateRuntime(state).renderTargetViewport ?? state.canvas;
38
+ const minX = Math.max(0, Math.floor(Math.min(x0, x1, x2, x3)));
39
+ const maxX = Math.min(viewport.width, Math.ceil(Math.max(x0, x1, x2, x3)));
40
+ const minY = Math.max(0, Math.floor(Math.min(y0, y1, y2, y3)));
41
+ const maxY = Math.min(viewport.height, Math.ceil(Math.max(y0, y1, y2, y3)));
42
+ return {
43
+ height: Math.max(0, maxY - minY),
44
+ width: Math.max(0, maxX - minX),
45
+ x: minX,
46
+ y: Math.max(0, viewport.height - maxY),
47
+ };
48
+ }
49
+ function getScissorStack(state) {
50
+ const runtime = getGlRenderStateRuntime(state);
51
+ runtime.scissorStack ??= [];
52
+ return runtime.scissorStack;
53
+ }
54
+ function intersectScissorRect(a, b) {
55
+ if (a === null)
56
+ return { height: b.height, width: b.width, x: b.x, y: b.y };
57
+ const x = Math.max(a.x, b.x);
58
+ const y = Math.max(a.y, b.y);
59
+ const right = Math.min(a.x + a.width, b.x + b.width);
60
+ const bottom = Math.min(a.y + a.height, b.y + b.height);
61
+ return {
62
+ height: Math.max(0, bottom - y),
63
+ width: Math.max(0, right - x),
64
+ x,
65
+ y,
66
+ };
67
+ }
68
+ //# sourceMappingURL=glClipRectangle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glClipRectangle.js","sourceRoot":"","sources":["../src/glClipRectangle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GlRenderState } from '@flighthq/types';
2
+ export declare function enableGlColorAdjustment(state: GlRenderState): void;
3
+ //# sourceMappingURL=glColorAdjustment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glColorAdjustment.d.ts","sourceRoot":"","sources":["../src/glColorAdjustment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,aAAa,EAMd,MAAM,iBAAiB,CAAC;AAiBzB,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAOlE"}
@@ -0,0 +1,361 @@
1
+ import { createGlProgram } from '@flighthq/render-gl';
2
+ import { getGlRenderStateRuntime } from '@flighthq/render-gl';
3
+ import { drawGlShapeMeshBatch, ensureGlShapeMeshProgram } from './glShapeMesh';
4
+ import { bindGlQuadBatchBaseAttributes, QUAD_BATCH_VS, setGlQuadBatchWorldAndTexture, useGlQuadBatchProgram, } from './glSpriteBatch';
5
+ // Enables the opt-in inline color-adjustment fold on a WebGL render state: the fused-color-matrix
6
+ // scene2d the sprite/quad batch draws through so a color transform (and, later, other pointwise
7
+ // adjustments) folds into the batch as data — a whole-batch uniform tint or per-instance
8
+ // a_ctMult/a_ctOff attributes, chosen by data cardinality — without ever splitting the batch. Until a
9
+ // state calls this, its batch renderer carries none of this module's shader code (it tree-shakes out)
10
+ // and recordGlSpriteBatchColorTransform silently skips every tint. Idempotent; safe to call per state.
11
+ export function enableGlColorAdjustment(state) {
12
+ const runtime = getGlRenderStateRuntime(state);
13
+ runtime.glColorAdjustmentFold = glColorAdjustmentFold;
14
+ if (runtime.spriteBatchColorTransformMode === undefined)
15
+ runtime.spriteBatchColorTransformMode = CT_MODE_NONE;
16
+ if (runtime.spriteBatchColorTransformData === undefined) {
17
+ runtime.spriteBatchColorTransformData = new Float32Array(COLOR_TRANSFORM_FLOATS * 256);
18
+ }
19
+ }
20
+ // Per-instance color-transform layout (8 floats = 32 bytes): 4 multiplier + 4 offset, at attribute
21
+ // locations 7 (a_ctMult) and 8 (a_ctOff). Used only when a batch carries varying tints (mode 2).
22
+ const COLOR_TRANSFORM_FLOATS = 8;
23
+ const COLOR_TRANSFORM_STRIDE = COLOR_TRANSFORM_FLOATS * 4;
24
+ // Color-adjustment fold modes for the active sprite batch. NONE keeps the lean base shader; UNIFORM
25
+ // binds one whole-batch tint; PER_INSTANCE packs a tint per instance. A batch starts at NONE, rises to
26
+ // UNIFORM on the first tint, and promotes to PER_INSTANCE — back-filling already-written instances
27
+ // with the prior value/identity — when tints diverge, so a tint only ever promotes a batch, never
28
+ // splits it.
29
+ const CT_MODE_NONE = 0;
30
+ const CT_MODE_UNIFORM = 1;
31
+ const CT_MODE_PER_INSTANCE = 2;
32
+ // Per-instance color-transform program: the base quad-batch vertex work plus two vec4 instance
33
+ // attributes (a_ctMult / a_ctOff) carried through to the fragment scene2d. The color-transform math is
34
+ // applied in unpremultiplied space, matching the whole-batch uniform program byte for byte.
35
+ const CT_INSTANCED_VS = `#version 300 es
36
+ precision mediump float;
37
+
38
+ layout(location = 0) in vec2 a_corner;
39
+ layout(location = 1) in vec2 a_matAB;
40
+ layout(location = 2) in vec2 a_matCD;
41
+ layout(location = 3) in vec2 a_matTXTY;
42
+ layout(location = 4) in vec2 a_size;
43
+ layout(location = 5) in vec4 a_uvRect;
44
+ layout(location = 6) in float a_alpha;
45
+ layout(location = 7) in vec4 a_ctMult;
46
+ layout(location = 8) in vec4 a_ctOff;
47
+
48
+ uniform mat3 u_world;
49
+
50
+ out vec2 v_texCoord;
51
+ out float v_alpha;
52
+ out vec4 v_ctMult;
53
+ out vec4 v_ctOff;
54
+
55
+ void main() {
56
+ vec2 local = a_corner * a_size;
57
+ vec2 worldPos = vec2(
58
+ a_matAB.x * local.x + a_matCD.x * local.y + a_matTXTY.x,
59
+ a_matAB.y * local.x + a_matCD.y * local.y + a_matTXTY.y
60
+ );
61
+ vec3 clip = u_world * vec3(worldPos, 1.0);
62
+ gl_Position = vec4(clip.xy, 0.0, 1.0);
63
+ v_texCoord = mix(a_uvRect.xy, a_uvRect.zw, a_corner);
64
+ v_alpha = a_alpha;
65
+ v_ctMult = a_ctMult;
66
+ v_ctOff = a_ctOff;
67
+ }`;
68
+ const CT_INSTANCED_FS = `#version 300 es
69
+ precision mediump float;
70
+ in vec2 v_texCoord;
71
+ in float v_alpha;
72
+ in vec4 v_ctMult;
73
+ in vec4 v_ctOff;
74
+ uniform sampler2D u_texture;
75
+ uniform bool u_straightTextureAlpha;
76
+ out vec4 fragColor;
77
+ void main() {
78
+ vec4 color = texture(u_texture, v_texCoord);
79
+ if (u_straightTextureAlpha) color.rgb *= color.a;
80
+ color *= clamp(v_alpha, 0.0, 1.0);
81
+ if (color.a <= 0.0) discard;
82
+ color = vec4(color.rgb / color.a, color.a);
83
+ color = clamp(color * v_ctMult + v_ctOff, vec4(0.0), vec4(1.0));
84
+ fragColor = vec4(color.rgb * color.a, color.a);
85
+ }`;
86
+ // Whole-batch color-transform fragment shader (over the base vertex shader): one tint uploaded as
87
+ // u_ctMult/u_ctOff uniforms and shared by every instance. This is the uniform path — a single tint on
88
+ // a whole batch (e.g. a bitmap-text node) costs no per-instance data.
89
+ const UNIFORM_CT_FS = `#version 300 es
90
+ precision mediump float;
91
+ in vec2 v_texCoord;
92
+ in float v_alpha;
93
+ uniform sampler2D u_texture;
94
+ uniform bool u_straightTextureAlpha;
95
+ uniform vec4 u_ctMult;
96
+ uniform vec4 u_ctOff;
97
+ out vec4 fragColor;
98
+ void main() {
99
+ vec4 color = texture(u_texture, v_texCoord);
100
+ if (u_straightTextureAlpha) color.rgb *= color.a;
101
+ color *= clamp(v_alpha, 0.0, 1.0);
102
+ if (color.a <= 0.0) discard;
103
+ color = vec4(color.rgb / color.a, color.a);
104
+ color = clamp(color * u_ctMult + u_ctOff, vec4(0.0), vec4(1.0));
105
+ fragColor = vec4(color.rgb * color.a, color.a);
106
+ }`;
107
+ // Binds the whole-batch (uniform) color-transform program and uploads the shared tint. Base
108
+ // attributes come from the standard instance buffer; there is no per-instance tint data.
109
+ function bindGlSpriteBatchUniformColorTransform(state, colorTransform) {
110
+ const shader = ensureGlUniformColorTransformShader(state);
111
+ useGlQuadBatchProgram(state, shader.program);
112
+ setGlQuadBatchWorldAndTexture(state, shader.locWorldMatrix, shader.locTexture, shader.locStraightTextureAlpha);
113
+ const gl = state.gl;
114
+ gl.uniform4f(shader.locColorMultiplier, colorTransform.redMultiplier, colorTransform.greenMultiplier, colorTransform.blueMultiplier, colorTransform.alphaMultiplier);
115
+ gl.uniform4f(shader.locColorOffset, colorTransform.redOffset / 255, colorTransform.greenOffset / 255, colorTransform.blueOffset / 255, colorTransform.alphaOffset / 255);
116
+ bindGlQuadBatchBaseAttributes(state, shader.locCorner);
117
+ }
118
+ // Binds the per-instance color-transform program and the a_ctMult/a_ctOff attribute stream from the
119
+ // batch's color-transform buffer, alongside the base instance attributes.
120
+ function bindGlSpriteBatchInstancedColorTransform(state) {
121
+ const runtime = getGlRenderStateRuntime(state);
122
+ const shader = ensureGlColorTransformInstancedShader(state);
123
+ useGlQuadBatchProgram(state, shader.program);
124
+ setGlQuadBatchWorldAndTexture(state, shader.locWorldMatrix, shader.locTexture, shader.locStraightTextureAlpha);
125
+ bindGlQuadBatchBaseAttributes(state, shader.locCorner);
126
+ const gl = state.gl;
127
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchColorTransformBuffer);
128
+ gl.enableVertexAttribArray(7);
129
+ gl.vertexAttribPointer(7, 4, gl.FLOAT, false, COLOR_TRANSFORM_STRIDE, 0);
130
+ gl.vertexAttribDivisor(7, 1);
131
+ gl.enableVertexAttribArray(8);
132
+ gl.vertexAttribPointer(8, 4, gl.FLOAT, false, COLOR_TRANSFORM_STRIDE, 16);
133
+ gl.vertexAttribDivisor(8, 1);
134
+ }
135
+ function ensureGlColorTransformInstancedShader(state) {
136
+ const runtime = getGlRenderStateRuntime(state);
137
+ if (runtime.colorTransformInstancedShader)
138
+ return runtime.colorTransformInstancedShader;
139
+ const gl = state.gl;
140
+ const program = createGlProgram(gl, CT_INSTANCED_VS, CT_INSTANCED_FS, 'Sprite-batch color transform (per-instance)');
141
+ runtime.colorTransformInstancedShader = {
142
+ program,
143
+ locCorner: 0,
144
+ locWorldMatrix: gl.getUniformLocation(program, 'u_world'),
145
+ locTexture: gl.getUniformLocation(program, 'u_texture'),
146
+ locStraightTextureAlpha: gl.getUniformLocation(program, 'u_straightTextureAlpha'),
147
+ };
148
+ return runtime.colorTransformInstancedShader;
149
+ }
150
+ function ensureGlUniformColorTransformShader(state) {
151
+ const runtime = getGlRenderStateRuntime(state);
152
+ if (runtime.uniformColorTransformShader)
153
+ return runtime.uniformColorTransformShader;
154
+ const gl = state.gl;
155
+ const program = createGlProgram(gl, QUAD_BATCH_VS, UNIFORM_CT_FS, 'Sprite-batch color transform (uniform)');
156
+ runtime.uniformColorTransformShader = {
157
+ program,
158
+ locCorner: 0,
159
+ locWorldMatrix: gl.getUniformLocation(program, 'u_world'),
160
+ locTexture: gl.getUniformLocation(program, 'u_texture'),
161
+ locStraightTextureAlpha: gl.getUniformLocation(program, 'u_straightTextureAlpha'),
162
+ locColorMultiplier: gl.getUniformLocation(program, 'u_ctMult'),
163
+ locColorOffset: gl.getUniformLocation(program, 'u_ctOff'),
164
+ };
165
+ return runtime.uniformColorTransformShader;
166
+ }
167
+ // Value equality for the whole-batch uniform check: reference-equal short-circuits (the common case —
168
+ // every glyph of a bitmap-text node shares one node-level tint), else compares all eight fields so a
169
+ // distinct-but-equal tint still keeps the batch on the cheaper uniform path.
170
+ function equalsRecordedColorTransform(a, b) {
171
+ if (a === b)
172
+ return true;
173
+ if (a === null || b === null)
174
+ return false;
175
+ return (a.redMultiplier === b.redMultiplier &&
176
+ a.greenMultiplier === b.greenMultiplier &&
177
+ a.blueMultiplier === b.blueMultiplier &&
178
+ a.alphaMultiplier === b.alphaMultiplier &&
179
+ a.redOffset === b.redOffset &&
180
+ a.greenOffset === b.greenOffset &&
181
+ a.blueOffset === b.blueOffset &&
182
+ a.alphaOffset === b.alphaOffset);
183
+ }
184
+ // Uploads the active batch's per-instance color-transform buffer, selects the fold program (uniform or
185
+ // per-instance), and binds it. Returns true when it drew a folded batch; false when the batch carried
186
+ // no tint, so flushGlSpriteBatch runs the lean material path instead. Resets the fold mode for the
187
+ // next batch.
188
+ function flushGlColorAdjustmentFold(state, count) {
189
+ const runtime = getGlRenderStateRuntime(state);
190
+ const ctMode = runtime.spriteBatchColorTransformMode ?? CT_MODE_NONE;
191
+ if (ctMode === CT_MODE_NONE)
192
+ return false;
193
+ const uniformColorTransform = runtime.spriteBatchUniformColorTransform ?? null;
194
+ runtime.spriteBatchColorTransformMode = CT_MODE_NONE;
195
+ runtime.spriteBatchUniformColorTransform = null;
196
+ if (ctMode === CT_MODE_PER_INSTANCE) {
197
+ const gl = state.gl;
198
+ if (runtime.spriteBatchColorTransformBuffer == null) {
199
+ runtime.spriteBatchColorTransformBuffer = gl.createBuffer();
200
+ }
201
+ gl.bindBuffer(gl.ARRAY_BUFFER, runtime.spriteBatchColorTransformBuffer);
202
+ // Reallocate to exactly what is drawn: the color-transform data array grows lazily as tints are
203
+ // recorded, so a fixed subData offset could outrun a stale buffer. Only per-instance-tinted
204
+ // batches pay this, and the untinted common path never allocates the buffer at all.
205
+ gl.bufferData(gl.ARRAY_BUFFER, runtime.spriteBatchColorTransformData.subarray(0, count * COLOR_TRANSFORM_FLOATS), gl.DYNAMIC_DRAW);
206
+ bindGlSpriteBatchInstancedColorTransform(state);
207
+ return true;
208
+ }
209
+ bindGlSpriteBatchUniformColorTransform(state, uniformColorTransform);
210
+ return true;
211
+ }
212
+ // Switches the batch to per-instance mode and back-fills every already-recorded instance
213
+ // [0, instanceCount) with `fill` (a prior uniform value, or null → identity), so promotion never
214
+ // changes the appearance of instances written before the divergence.
215
+ function promoteGlSpriteBatchColorTransformToPerInstance(runtime, instanceCount, fill) {
216
+ runtime.spriteBatchColorTransformMode = CT_MODE_PER_INSTANCE;
217
+ for (let i = 0; i < instanceCount; i++)
218
+ writeGlColorTransformInstance(runtime, fill, i);
219
+ }
220
+ // Folds instance `instanceIndex`'s effective color transform into the active batch. See the fold-mode
221
+ // constants for the promotion rules. `colorTransform` is null for an untinted instance.
222
+ function recordGlColorAdjustment(runtime, colorTransform, instanceIndex) {
223
+ if (runtime.spriteBatchColorTransformData === undefined) {
224
+ runtime.spriteBatchColorTransformData = new Float32Array(COLOR_TRANSFORM_FLOATS * 256);
225
+ }
226
+ const mode = runtime.spriteBatchColorTransformMode ?? CT_MODE_NONE;
227
+ const tint = colorTransform ?? null;
228
+ if (mode === CT_MODE_NONE) {
229
+ if (tint === null)
230
+ return;
231
+ if (instanceIndex === 0) {
232
+ runtime.spriteBatchColorTransformMode = CT_MODE_UNIFORM;
233
+ runtime.spriteBatchUniformColorTransform = tint;
234
+ return;
235
+ }
236
+ promoteGlSpriteBatchColorTransformToPerInstance(runtime, instanceIndex, null);
237
+ writeGlColorTransformInstance(runtime, tint, instanceIndex);
238
+ return;
239
+ }
240
+ if (mode === CT_MODE_UNIFORM) {
241
+ const uniform = runtime.spriteBatchUniformColorTransform ?? null;
242
+ if (equalsRecordedColorTransform(tint, uniform))
243
+ return;
244
+ promoteGlSpriteBatchColorTransformToPerInstance(runtime, instanceIndex, uniform);
245
+ writeGlColorTransformInstance(runtime, tint, instanceIndex);
246
+ return;
247
+ }
248
+ writeGlColorTransformInstance(runtime, tint, instanceIndex);
249
+ }
250
+ // Writes one instance's eight color-transform floats (multiplier rgba, then offset rgba normalized by
251
+ // 255) at its slot in the batch's color-transform data, growing the array as needed. A null transform
252
+ // writes the identity (multiply by 1, add 0).
253
+ function writeGlColorTransformInstance(runtime, colorTransform, instanceIndex) {
254
+ const offset = instanceIndex * COLOR_TRANSFORM_FLOATS;
255
+ let data = runtime.spriteBatchColorTransformData;
256
+ if (offset + COLOR_TRANSFORM_FLOATS > data.length) {
257
+ const newSize = Math.max(offset + COLOR_TRANSFORM_FLOATS, data.length * 2);
258
+ const grown = new Float32Array(newSize);
259
+ grown.set(data);
260
+ runtime.spriteBatchColorTransformData = grown;
261
+ data = grown;
262
+ }
263
+ if (colorTransform !== null) {
264
+ data[offset] = colorTransform.redMultiplier;
265
+ data[offset + 1] = colorTransform.greenMultiplier;
266
+ data[offset + 2] = colorTransform.blueMultiplier;
267
+ data[offset + 3] = colorTransform.alphaMultiplier;
268
+ data[offset + 4] = colorTransform.redOffset / 255;
269
+ data[offset + 5] = colorTransform.greenOffset / 255;
270
+ data[offset + 6] = colorTransform.blueOffset / 255;
271
+ data[offset + 7] = colorTransform.alphaOffset / 255;
272
+ }
273
+ else {
274
+ data[offset] = 1;
275
+ data[offset + 1] = 1;
276
+ data[offset + 2] = 1;
277
+ data[offset + 3] = 1;
278
+ data[offset + 4] = 0;
279
+ data[offset + 5] = 0;
280
+ data[offset + 6] = 0;
281
+ data[offset + 7] = 0;
282
+ }
283
+ }
284
+ // Draws the GPU-tessellated solid-fill meshes tinted by the node's color transform. A single mesh is
285
+ // one flat color and a shape shares one whole-node transform, so this is the uniform path (CT_MODE_
286
+ // UNIFORM's mesh analogue): u_ctMult/u_ctOff uploaded once, no per-vertex tint data. Reuses the base
287
+ // mesh draw driver and its shared vertex/index buffers — only the fragment program differs, so the
288
+ // projection and per-mesh premultiplied color stay identical to the untinted path. Falls back to the
289
+ // lean program when the node happens to carry no transform (the caller gates on non-null, but the fold
290
+ // stays correct if reached directly).
291
+ function drawGlShapeMeshesColorTransform(state, renderProxy, meshes) {
292
+ const colorTransform = renderProxy.colorTransform;
293
+ const base = ensureGlShapeMeshProgram(state);
294
+ if (colorTransform === null) {
295
+ drawGlShapeMeshBatch(state, renderProxy, meshes, base);
296
+ return;
297
+ }
298
+ const shader = ensureGlShapeMeshColorTransformShader(state);
299
+ const binding = {
300
+ program: shader.program,
301
+ vertexBuffer: base.vertexBuffer,
302
+ indexBuffer: base.indexBuffer,
303
+ positionLocation: shader.positionLocation,
304
+ matrixLocation: shader.matrixLocation,
305
+ colorLocation: shader.colorLocation,
306
+ };
307
+ drawGlShapeMeshBatch(state, renderProxy, meshes, binding, (bound) => {
308
+ const gl = bound.gl;
309
+ gl.uniform4f(shader.colorMultiplierLocation, colorTransform.redMultiplier, colorTransform.greenMultiplier, colorTransform.blueMultiplier, colorTransform.alphaMultiplier);
310
+ gl.uniform4f(shader.colorOffsetLocation, colorTransform.redOffset / 255, colorTransform.greenOffset / 255, colorTransform.blueOffset / 255, colorTransform.alphaOffset / 255);
311
+ });
312
+ }
313
+ function ensureGlShapeMeshColorTransformShader(state) {
314
+ const runtime = getGlRenderStateRuntime(state);
315
+ if (runtime.shapeMeshColorTransformShader)
316
+ return runtime.shapeMeshColorTransformShader;
317
+ const gl = state.gl;
318
+ const program = createGlProgram(gl, SHAPE_MESH_CT_VS, SHAPE_MESH_CT_FS, 'Shape-mesh color transform');
319
+ runtime.shapeMeshColorTransformShader = {
320
+ program,
321
+ positionLocation: gl.getAttribLocation(program, 'a_position'),
322
+ matrixLocation: gl.getUniformLocation(program, 'u_matrix'),
323
+ colorLocation: gl.getUniformLocation(program, 'u_color'),
324
+ colorMultiplierLocation: gl.getUniformLocation(program, 'u_ctMult'),
325
+ colorOffsetLocation: gl.getUniformLocation(program, 'u_ctOff'),
326
+ };
327
+ return runtime.shapeMeshColorTransformShader;
328
+ }
329
+ // Mirrors the base flat-color mesh vertex shader (glShapeMesh's VERTEX_SOURCE): u_matrix is the shared
330
+ // projection · world transform drawGlShapeMeshBatch uploads, so a tinted mesh lands pixel-aligned with
331
+ // an untinted one.
332
+ const SHAPE_MESH_CT_VS = `
333
+ attribute vec2 a_position;
334
+ uniform mat3 u_matrix;
335
+ void main() {
336
+ vec3 p = u_matrix * vec3(a_position, 1.0);
337
+ gl_Position = vec4(p.xy, 0.0, 1.0);
338
+ }
339
+ `;
340
+ // The tint fragment scene2d. u_color arrives premultiplied (the driver uploads color·alpha), so the math
341
+ // un-premultiplies, applies the color transform (multiplier then /255-normalized offset), clamps, and
342
+ // re-premultiplies — byte-for-byte with the quad-batch uniform/instanced color-transform shaders.
343
+ const SHAPE_MESH_CT_FS = `
344
+ precision mediump float;
345
+ uniform vec4 u_color;
346
+ uniform vec4 u_ctMult;
347
+ uniform vec4 u_ctOff;
348
+ void main() {
349
+ vec4 color = u_color;
350
+ if (color.a <= 0.0) discard;
351
+ color = vec4(color.rgb / color.a, color.a);
352
+ color = clamp(color * u_ctMult + u_ctOff, vec4(0.0), vec4(1.0));
353
+ gl_FragColor = vec4(color.rgb * color.a, color.a);
354
+ }
355
+ `;
356
+ const glColorAdjustmentFold = {
357
+ drawShapeMeshes: drawGlShapeMeshesColorTransform,
358
+ flush: flushGlColorAdjustmentFold,
359
+ record: recordGlColorAdjustment,
360
+ };
361
+ //# sourceMappingURL=glColorAdjustment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glColorAdjustment.js","sourceRoot":"","sources":["../src/glColorAdjustment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GlMaterialRenderer, GlRenderState } from '@flighthq/types';
2
+ export declare function registerDefaultGlMaterial(state: GlRenderState): void;
3
+ export declare const defaultGlMaterialRenderer: GlMaterialRenderer;
4
+ //# sourceMappingURL=glDefaultMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glDefaultMaterial.d.ts","sourceRoot":"","sources":["../src/glDefaultMaterial.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAczE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEpE;AAED,eAAO,MAAM,yBAAyB,EAAE,kBAQvC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { registerGlMaterialRenderer } from '@flighthq/render-gl';
2
+ import { DefaultMaterialKind } from '@flighthq/types';
3
+ import { bindGlQuadBatchBaseAttributes, ensureGlQuadBatchShader, setGlQuadBatchWorldAndTexture, useGlQuadBatchProgram, } from './glSpriteBatch';
4
+ // Registers the bundled default material (the plain textured-quad pipeline) under DefaultMaterialKind.
5
+ // It is a bundled material like any other — it has no privileged status in the render path; a node
6
+ // with no material renders only if a renderer is registered for DefaultMaterialKind. A user can copy
7
+ // this file, swap the shader, and register their own default the same way.
8
+ export function registerDefaultGlMaterial(state) {
9
+ registerGlMaterialRenderer(state, DefaultMaterialKind, defaultGlMaterialRenderer);
10
+ }
11
+ export const defaultGlMaterialRenderer = {
12
+ instanceFloatCount: 0,
13
+ bind(state) {
14
+ const shader = ensureGlQuadBatchShader(state);
15
+ useGlQuadBatchProgram(state, shader.program);
16
+ setGlQuadBatchWorldAndTexture(state, shader.locWorldMatrix, shader.locTexture, shader.locStraightTextureAlpha);
17
+ bindGlQuadBatchBaseAttributes(state, shader.locCorner);
18
+ },
19
+ };
20
+ //# sourceMappingURL=glDefaultMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glDefaultMaterial.js","sourceRoot":"","sources":["../src/glDefaultMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,uGAAuG;AACvG,mGAAmG;AACnG,qGAAqG;AACrG,2EAA2E;AAC3E,MAAM,UAAU,yBAAyB,CAAC,KAAoB;IAC5D,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAuB;IAC3D,kBAAkB,EAAE,CAAC;IACrB,IAAI,CAAC,KAAoB;QACvB,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC9C,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC/G,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Node2D, Scene2DRenderer, GlRenderState, RenderProxy2D } from '@flighthq/types';
2
+ export declare function drawGlScene2D(_state: GlRenderState, _renderProxy: RenderProxy2D): void;
3
+ export declare function renderGlScene2D(state: GlRenderState, source: Node2D): void;
4
+ export declare const defaultGlScene2DRenderer: Scene2DRenderer;
5
+ //# sourceMappingURL=glNode2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glNode2D.d.ts","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAI7F,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,GAAG,IAAI,CAEtF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiC1E;AAED,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { getRenderProxy2D, isRenderProxyVisible, noopRendererData } from '@flighthq/render';
2
+ import { getGlRenderStateRuntime } from '@flighthq/render-gl';
3
+ import { getNode2DRuntime } from '@flighthq/scene2d';
4
+ import { flushGlSpriteBatch } from './glSpriteBatch';
5
+ export function drawGlScene2D(_state, _renderProxy) {
6
+ // Plain display objects have no visual geometry of their own.
7
+ }
8
+ export function renderGlScene2D(state, source) {
9
+ const tempStack = getGlRenderStateRuntime(state).tempStack;
10
+ const clipHooks = state.displayObjectClipHooks;
11
+ let stackLength = 1;
12
+ tempStack[0] = source;
13
+ while (stackLength > 0) {
14
+ const current = tempStack[--stackLength];
15
+ if (!current.enabled)
16
+ continue;
17
+ const data = getRenderProxy2D(state, current);
18
+ if (data === undefined)
19
+ continue;
20
+ clipHooks?.popClip(state, data, current);
21
+ if (!isRenderProxyVisible(data))
22
+ continue;
23
+ clipHooks?.pushClip(state, data, current);
24
+ data.renderer?.submit(state, data);
25
+ if (data.traverseChildren) {
26
+ const children = getNode2DRuntime(current).children;
27
+ if (children !== null) {
28
+ for (let i = children.length - 1; i >= 0; i--) {
29
+ tempStack[stackLength++] = children[i];
30
+ }
31
+ }
32
+ }
33
+ }
34
+ flushGlSpriteBatch(state);
35
+ clipHooks?.finalize(state);
36
+ }
37
+ export const defaultGlScene2DRenderer = {
38
+ createData: noopRendererData,
39
+ submit: drawGlScene2D,
40
+ };
41
+ //# sourceMappingURL=glNode2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glNode2D.js","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,YAA2B;IAC9E,8DAA8D;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB,EAAE,MAAc;IAClE,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,CAAC;IAE/C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAEtB,OAAO,WAAW,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,WAAW,CAAW,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,SAAS;QAE/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,aAAa;CACtB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { GlRenderState } from '@flighthq/types';
2
+ /**
3
+ * Registers every built-in GL display-object renderer against its kind in `state`.
4
+ *
5
+ * This is the convenience path — the tree-shakable golden path is registering each
6
+ * `default*Renderer` descriptor individually via `registerRenderer`. Call this when you
7
+ * want all renderers registered in one step and do not need to tree-shake individual leaf
8
+ * types. The default material must be separately registered via `registerDefaultGlMaterial`.
9
+ *
10
+ * Registered renderers:
11
+ * - `BitmapKind` → `defaultGlBitmapRenderer`
12
+ * - `DisplayObjectKind` → `defaultGlScene2DRenderer`
13
+ * - `ParticleEmitter2DKind`→ `defaultGlParticleEmitter2DRenderer`
14
+ * - `QuadBatchKind` → `defaultGlQuadBatchRenderer`
15
+ * - `RenderCacheKind` → `defaultGlRenderCacheRenderer`
16
+ * - `RichTextKind` → `defaultGlRichTextRenderer`
17
+ * - `Scale9ShapeKind` → `defaultGlScale9ShapeRenderer`
18
+ * - `ShapeKind` → `defaultGlShapeRenderer`
19
+ * - `SpriteKind` → `defaultGlSpriteRenderer`
20
+ * - `TextLabelKind` → `defaultGlTextLabelRenderer`
21
+ * - `TilemapKind` → `defaultGlTilemapRenderer`
22
+ * - `VideoKind` → `defaultGlVideoRenderer`
23
+ */
24
+ export declare function registerGlScene2DRenderers(state: GlRenderState): void;
25
+ //# sourceMappingURL=glNode2DRegistration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glNode2DRegistration.d.ts","sourceRoot":"","sources":["../src/glNode2DRegistration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA6BrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAarE"}