@blakron/core 0.5.0 → 0.5.2

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 (89) hide show
  1. package/dist/blakron/display/DisplayObject.d.ts +1 -1
  2. package/dist/blakron/display/DisplayObject.d.ts.map +1 -1
  3. package/dist/blakron/display/DisplayObject.js +1 -1
  4. package/dist/blakron/display/DisplayObject.js.map +1 -1
  5. package/dist/blakron/display/Graphics.d.ts.map +1 -1
  6. package/dist/blakron/display/Graphics.js +2 -1
  7. package/dist/blakron/display/Graphics.js.map +1 -1
  8. package/dist/blakron/player/Player.d.ts.map +1 -1
  9. package/dist/blakron/player/Player.js +1 -2
  10. package/dist/blakron/player/Player.js.map +1 -1
  11. package/dist/blakron/player/RenderPipe.d.ts +1 -1
  12. package/dist/blakron/player/RenderPipe.d.ts.map +1 -1
  13. package/dist/blakron/player/createPlayer.d.ts.map +1 -1
  14. package/dist/blakron/player/createPlayer.js +1 -2
  15. package/dist/blakron/player/createPlayer.js.map +1 -1
  16. package/dist/blakron/player/index.d.ts +2 -4
  17. package/dist/blakron/player/index.d.ts.map +1 -1
  18. package/dist/blakron/player/index.js +2 -4
  19. package/dist/blakron/player/index.js.map +1 -1
  20. package/dist/blakron/player/webgl/WebGLProgram.d.ts +3 -2
  21. package/dist/blakron/player/webgl/WebGLProgram.d.ts.map +1 -1
  22. package/dist/blakron/player/webgl/WebGLProgram.js.map +1 -1
  23. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts +9 -1
  24. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts.map +1 -1
  25. package/dist/blakron/player/webgl/WebGLRenderContext.js +41 -14
  26. package/dist/blakron/player/webgl/WebGLRenderContext.js.map +1 -1
  27. package/dist/blakron/player/webgl/WebGLRenderTarget.d.ts +2 -1
  28. package/dist/blakron/player/webgl/WebGLRenderTarget.d.ts.map +1 -1
  29. package/dist/blakron/player/webgl/WebGLRenderTarget.js.map +1 -1
  30. package/dist/blakron/player/webgl/WebGLRenderer.d.ts.map +1 -1
  31. package/dist/blakron/player/webgl/WebGLRenderer.js +3 -8
  32. package/dist/blakron/player/webgl/WebGLRenderer.js.map +1 -1
  33. package/dist/blakron/player/webgl/WebGLUtils.d.ts +9 -3
  34. package/dist/blakron/player/webgl/WebGLUtils.d.ts.map +1 -1
  35. package/dist/blakron/player/webgl/WebGLUtils.js +2 -2
  36. package/dist/blakron/player/webgl/WebGLUtils.js.map +1 -1
  37. package/dist/blakron/player/webgl/index.d.ts +1 -1
  38. package/dist/blakron/player/webgl/index.d.ts.map +1 -1
  39. package/dist/blakron/player/webgl/index.js +1 -1
  40. package/dist/blakron/player/webgl/index.js.map +1 -1
  41. package/dist/blakron/player/webgl/pipes/GraphicsPipe.d.ts +2 -0
  42. package/dist/blakron/player/webgl/pipes/GraphicsPipe.d.ts.map +1 -1
  43. package/dist/blakron/player/webgl/pipes/GraphicsPipe.js +39 -2
  44. package/dist/blakron/player/webgl/pipes/GraphicsPipe.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/blakron/player/CanvasRenderer.d.ts +0 -49
  47. package/dist/blakron/player/CanvasRenderer.d.ts.map +0 -1
  48. package/dist/blakron/player/CanvasRenderer.js +0 -792
  49. package/dist/blakron/player/CanvasRenderer.js.map +0 -1
  50. package/dist/blakron/player/DisplayList.d.ts +0 -32
  51. package/dist/blakron/player/DisplayList.d.ts.map +0 -1
  52. package/dist/blakron/player/DisplayList.js +0 -78
  53. package/dist/blakron/player/DisplayList.js.map +0 -1
  54. package/dist/blakron/player/InstructionSet.d.ts +0 -49
  55. package/dist/blakron/player/InstructionSet.d.ts.map +0 -1
  56. package/dist/blakron/player/InstructionSet.js +0 -45
  57. package/dist/blakron/player/InstructionSet.js.map +0 -1
  58. package/dist/blakron/player/RenderBuffer.d.ts +0 -35
  59. package/dist/blakron/player/RenderBuffer.d.ts.map +0 -1
  60. package/dist/blakron/player/RenderBuffer.js +0 -83
  61. package/dist/blakron/player/RenderBuffer.js.map +0 -1
  62. package/dist/blakron/player/pipes/BitmapPipe.d.ts +0 -35
  63. package/dist/blakron/player/pipes/BitmapPipe.d.ts.map +0 -1
  64. package/dist/blakron/player/pipes/BitmapPipe.js +0 -130
  65. package/dist/blakron/player/pipes/BitmapPipe.js.map +0 -1
  66. package/dist/blakron/player/pipes/FilterPipe.d.ts +0 -68
  67. package/dist/blakron/player/pipes/FilterPipe.d.ts.map +0 -1
  68. package/dist/blakron/player/pipes/FilterPipe.js +0 -169
  69. package/dist/blakron/player/pipes/FilterPipe.js.map +0 -1
  70. package/dist/blakron/player/pipes/GraphicsPipe.d.ts +0 -36
  71. package/dist/blakron/player/pipes/GraphicsPipe.d.ts.map +0 -1
  72. package/dist/blakron/player/pipes/GraphicsPipe.js +0 -126
  73. package/dist/blakron/player/pipes/GraphicsPipe.js.map +0 -1
  74. package/dist/blakron/player/pipes/MaskPipe.d.ts +0 -58
  75. package/dist/blakron/player/pipes/MaskPipe.d.ts.map +0 -1
  76. package/dist/blakron/player/pipes/MaskPipe.js +0 -190
  77. package/dist/blakron/player/pipes/MaskPipe.js.map +0 -1
  78. package/dist/blakron/player/pipes/MeshPipe.d.ts +0 -22
  79. package/dist/blakron/player/pipes/MeshPipe.d.ts.map +0 -1
  80. package/dist/blakron/player/pipes/MeshPipe.js +0 -50
  81. package/dist/blakron/player/pipes/MeshPipe.js.map +0 -1
  82. package/dist/blakron/player/pipes/TextPipe.d.ts +0 -52
  83. package/dist/blakron/player/pipes/TextPipe.d.ts.map +0 -1
  84. package/dist/blakron/player/pipes/TextPipe.js +0 -163
  85. package/dist/blakron/player/pipes/TextPipe.js.map +0 -1
  86. package/dist/blakron/player/webgl/ShaderLib.d.ts +0 -34
  87. package/dist/blakron/player/webgl/ShaderLib.d.ts.map +0 -1
  88. package/dist/blakron/player/webgl/ShaderLib.js +0 -268
  89. package/dist/blakron/player/webgl/ShaderLib.js.map +0 -1
@@ -1,190 +0,0 @@
1
- import { Matrix } from '../../geom/Matrix.js';
2
- import { WebGLRenderBuffer as WGLBuf } from '../webgl/WebGLRenderBuffer.js';
3
- // ── Pipe ──────────────────────────────────────────────────────────────────────
4
- /**
5
- * Handles mask / clip / scrollRect rendering for WebGL.
6
- *
7
- * Mirrors the old WebGLRenderer._drawWithClip() and _drawWithScrollRect()
8
- * logic as a push/pop instruction pair.
9
- */
10
- export class MaskPipe {
11
- // ── Static fields ─────────────────────────────────────────────────────────
12
- static PUSH_ID = 'maskPush';
13
- static POP_ID = 'maskPop';
14
- static _pushPool = [];
15
- static _popPool = [];
16
- // ── RenderPipe impl ───────────────────────────────────────────────────────
17
- addToInstructionSet(_renderable, _set) {
18
- // Added by the renderer traversal, not here.
19
- }
20
- updateRenderable(_renderable) { }
21
- // ── Factory helpers ───────────────────────────────────────────────────────
22
- static makePush(renderable, offsetX, offsetY) {
23
- const inst = MaskPipe._pushPool.pop();
24
- if (inst) {
25
- inst.renderable = renderable;
26
- inst.offsetX = offsetX;
27
- inst.offsetY = offsetY;
28
- inst.isScrollRect = undefined;
29
- return inst;
30
- }
31
- return { renderPipeId: 'maskPush', renderable, offsetX, offsetY };
32
- }
33
- static makePop(renderable, push) {
34
- const inst = MaskPipe._popPool.pop();
35
- if (inst) {
36
- inst.renderable = renderable;
37
- inst.push = push;
38
- return inst;
39
- }
40
- return { renderPipeId: 'maskPop', renderable, push };
41
- }
42
- static releasePush(inst) {
43
- MaskPipe._pushPool.push(inst);
44
- }
45
- static releasePop(inst) {
46
- MaskPipe._popPool.push(inst);
47
- }
48
- // ── Execute ───────────────────────────────────────────────────────────────
49
- /**
50
- * Handles scrollRect / maskRect via scissor or stencil.
51
- * Returns true if a scissor was used (caller must call executePopScissor).
52
- */
53
- executeScrollRectPush(inst, buffer) {
54
- const { renderable } = inst;
55
- const rect = renderable.internalScrollRect ?? renderable.internalMaskRect;
56
- if (!rect || rect.isEmpty()) {
57
- return false;
58
- }
59
- const m = buffer.globalMatrix;
60
- if (buffer.hasScissor || m.b !== 0 || m.c !== 0) {
61
- // Stencil path: offsetX/Y are already baked into m.tx/ty via _applyTransform,
62
- // so pass rect coords directly (no extra offset needed).
63
- buffer.context.pushMask(rect.x, rect.y, rect.width, rect.height);
64
- return false; // stencil path
65
- }
66
- const a = m.a, d = m.d, tx = m.tx, ty = m.ty;
67
- // The scissor rectangle is the viewport's screen-space position and size.
68
- // rect.x/y is the content scroll offset (already applied to child offsets
69
- // in _buildScrollRect via ox -= rect.x / oy -= rect.y), NOT a screen offset.
70
- // So we scissor at (0,0,rect.width,rect.height) in local space.
71
- const xMax = rect.width, yMax = rect.height;
72
- const minX = Math.min(tx, a * xMax + tx);
73
- const maxX = Math.max(tx, a * xMax + tx);
74
- const minY = Math.min(ty, d * yMax + ty);
75
- const maxY = Math.max(ty, d * yMax + ty);
76
- buffer.context.enableScissor(minX, -maxY + buffer.height, maxX - minX, maxY - minY);
77
- return true; // scissor path
78
- }
79
- executeScrollRectPop(buffer, usedScissor) {
80
- if (usedScissor) {
81
- buffer.context.disableScissor();
82
- }
83
- else {
84
- buffer.context.popMask();
85
- }
86
- }
87
- /**
88
- * Handles DisplayObject mask (stencil-based compositing).
89
- *
90
- * Allocates an offscreen buffer and activates it via pushBuffer so that
91
- * all subsequent leaf instructions (the masked subtree) draw into it.
92
- * The mask object itself is rendered separately in executeClipPop because
93
- * it is not part of the main InstructionSet.
94
- *
95
- * Returns the offscreen buffer, or undefined if the object has zero bounds.
96
- */
97
- executeClipPush(inst, buffer, renderer) {
98
- const { renderable } = inst;
99
- const scrollRect = renderable.internalScrollRect ?? renderable.internalMaskRect;
100
- // Simple case: no mask object, no children — stencil/scissor only.
101
- if (!renderable.internalMask && (!renderable.children || renderable.children.length === 0)) {
102
- if (scrollRect) {
103
- buffer.context.pushMask(scrollRect.x + inst.offsetX, scrollRect.y + inst.offsetY, scrollRect.width, scrollRect.height);
104
- }
105
- return undefined;
106
- }
107
- const bounds = renderable.getOriginalBounds();
108
- if (bounds.width <= 0 || bounds.height <= 0) {
109
- return undefined;
110
- }
111
- const bw = bounds.width;
112
- const bh = bounds.height;
113
- // Allocate and activate the offscreen buffer.
114
- // All subsequent draw calls (the masked subtree instructions) will land here.
115
- const displayBuffer = WGLBuf.create(buffer.context, bw, bh);
116
- displayBuffer.context.pushBuffer(displayBuffer);
117
- return displayBuffer;
118
- }
119
- executeClipPop(inst, buffer, displayBuffer, renderer) {
120
- const { renderable, push } = inst;
121
- const { offsetX, offsetY } = push;
122
- const scrollRect = renderable.internalScrollRect ?? renderable.internalMaskRect;
123
- const hasBlend = renderable.internalBlendMode !== 0;
124
- const blendOp = hasBlend
125
- ? ({ 0: 'source-over', 1: 'lighter', 2: 'destination-out' }[renderable.internalBlendMode] ?? 'source-over')
126
- : 'source-over';
127
- if (!displayBuffer) {
128
- // Simple stencil path — just pop the mask.
129
- if (scrollRect) {
130
- buffer.context.popMask();
131
- }
132
- return;
133
- }
134
- const bounds = renderable.getOriginalBounds();
135
- const bx = bounds.x;
136
- const by = bounds.y;
137
- const bw = bounds.width;
138
- const bh = bounds.height;
139
- // Apply the mask object (if any) to the displayBuffer via destination-in.
140
- const mask = renderable.internalMask;
141
- if (mask) {
142
- const maskBuffer = WGLBuf.create(buffer.context, bw, bh);
143
- maskBuffer.context.pushBuffer(maskBuffer);
144
- const maskMatrix = Matrix.create();
145
- maskMatrix.copyFrom(mask.getConcatenatedMatrix());
146
- mask.getConcatenatedMatrixAt(renderable, maskMatrix);
147
- maskMatrix.translate(-bx, -by);
148
- maskBuffer.setTransform(maskMatrix.a, maskMatrix.b, maskMatrix.c, maskMatrix.d, maskMatrix.tx, maskMatrix.ty);
149
- Matrix.release(maskMatrix);
150
- // Render the mask shape directly — it is not in the InstructionSet.
151
- renderer._drawDisplayObject(mask, maskBuffer, 0, 0);
152
- maskBuffer.context.popBuffer();
153
- displayBuffer.context.setGlobalCompositeOperation('destination-in');
154
- const mw = maskBuffer.rootRenderTarget.width;
155
- const mh = maskBuffer.rootRenderTarget.height;
156
- if (maskBuffer.rootRenderTarget.texture) {
157
- displayBuffer.setTransform(1, 0, 0, -1, 0, maskBuffer.height);
158
- displayBuffer.context.drawTexture(maskBuffer.rootRenderTarget.texture, 0, 0, mw, mh, 0, 0, mw, mh, mw, mh);
159
- displayBuffer.setTransform(1, 0, 0, 1, 0, 0);
160
- }
161
- displayBuffer.context.setGlobalCompositeOperation('source-over');
162
- WGLBuf.release(maskBuffer);
163
- }
164
- // Deactivate the offscreen buffer, restoring the main buffer as active.
165
- displayBuffer.context.popBuffer();
166
- const prevBlend = buffer.context.currentBlendMode;
167
- if (hasBlend)
168
- buffer.context.setGlobalCompositeOperation(blendOp);
169
- if (scrollRect) {
170
- buffer.context.pushMask(scrollRect.x + offsetX, scrollRect.y + offsetY, scrollRect.width, scrollRect.height);
171
- }
172
- const savedMatrix = Matrix.create();
173
- savedMatrix.copyFrom(buffer.globalMatrix);
174
- // offsetX/Y already in globalMatrix via _applyTransform; only add bounds flip.
175
- buffer.globalMatrix.append(1, 0, 0, -1, bx, by + displayBuffer.height);
176
- const dw = displayBuffer.rootRenderTarget.width;
177
- const dh = displayBuffer.rootRenderTarget.height;
178
- if (displayBuffer.rootRenderTarget.texture) {
179
- buffer.context.drawTexture(displayBuffer.rootRenderTarget.texture, 0, 0, dw, dh, 0, 0, dw, dh, dw, dh);
180
- }
181
- buffer.globalMatrix.copyFrom(savedMatrix);
182
- Matrix.release(savedMatrix);
183
- if (scrollRect)
184
- buffer.context.popMask();
185
- if (hasBlend)
186
- buffer.context.setGlobalCompositeOperation(prevBlend);
187
- WGLBuf.release(displayBuffer);
188
- }
189
- }
190
- //# sourceMappingURL=MaskPipe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MaskPipe.js","sourceRoot":"","sources":["../../../../src/blakron/player/pipes/MaskPipe.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { Mesh } from '../../display/Mesh.js';
2
- import type { WebGLRenderBuffer } from '../webgl/WebGLRenderBuffer.js';
3
- import type { Instruction } from '../InstructionSet.js';
4
- import type { InstructionSet } from '../InstructionSet.js';
5
- import type { RenderPipe } from '../RenderPipe.js';
6
- export interface MeshInstruction extends Instruction {
7
- readonly renderPipeId: 'mesh';
8
- renderable: Mesh;
9
- offsetX: number;
10
- offsetY: number;
11
- }
12
- export declare class MeshPipe implements RenderPipe<Mesh> {
13
- static readonly PIPE_ID = "mesh";
14
- private static readonly _pool;
15
- private static _alloc;
16
- static release(inst: MeshInstruction): void;
17
- addToInstructionSet(mesh: Mesh, set: InstructionSet): void;
18
- updateRenderable(_mesh: Mesh): void;
19
- destroyRenderable(_mesh: Mesh): void;
20
- execute(inst: MeshInstruction, buffer: WebGLRenderBuffer): void;
21
- }
22
- //# sourceMappingURL=MeshPipe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeshPipe.d.ts","sourceRoot":"","sources":["../../../../src/blakron/player/pipes/MeshPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,QAAS,YAAW,UAAU,CAAC,IAAI,CAAC;IAChD,gBAAuB,OAAO,UAAU;IAExC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAEtD,OAAO,CAAC,MAAM,CAAC,MAAM;WAaP,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAM3C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAO1D,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAInC,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAMpC,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAoCtE"}
@@ -1,50 +0,0 @@
1
- // ── Pipe ──────────────────────────────────────────────────────────────────────
2
- export class MeshPipe {
3
- static PIPE_ID = 'mesh';
4
- static _pool = [];
5
- static _alloc(mesh, ox, oy) {
6
- const inst = MeshPipe._pool.pop() ?? {
7
- renderPipeId: 'mesh',
8
- renderable: mesh,
9
- offsetX: ox,
10
- offsetY: oy,
11
- };
12
- inst.renderable = mesh;
13
- inst.offsetX = ox;
14
- inst.offsetY = oy;
15
- return inst;
16
- }
17
- static release(inst) {
18
- MeshPipe._pool.push(inst);
19
- }
20
- // ── RenderPipe impl ───────────────────────────────────────────────────────
21
- addToInstructionSet(mesh, set) {
22
- if (!mesh.bitmapData?.source || mesh.vertices.length === 0 || mesh.indices.length === 0) {
23
- return;
24
- }
25
- set.add(MeshPipe._alloc(mesh, 0, 0));
26
- }
27
- updateRenderable(_mesh) {
28
- // Mesh data is read directly at execute time.
29
- }
30
- destroyRenderable(_mesh) {
31
- // GPU textures managed by BitmapData lifecycle.
32
- }
33
- // ── Execute ───────────────────────────────────────────────────────────────
34
- execute(inst, buffer) {
35
- const mesh = inst.renderable;
36
- const bd = mesh.bitmapData;
37
- if (!bd?.source || mesh.vertices.length === 0 || mesh.indices.length === 0) {
38
- return;
39
- }
40
- const destW = !isNaN(mesh.width) ? mesh.width : mesh.textureWidth;
41
- const destH = !isNaN(mesh.height) ? mesh.height : mesh.textureHeight;
42
- // offsetX/Y are already baked into globalMatrix via _applyTransform.
43
- buffer.offsetX = 0;
44
- buffer.offsetY = 0;
45
- buffer.context.drawMesh(bd, mesh.bitmapX, mesh.bitmapY, mesh.bitmapWidth, mesh.bitmapHeight, mesh.bitmapOffsetX, mesh.bitmapOffsetY, destW, destH, mesh.sourceWidth, mesh.sourceHeight, mesh.uvs, mesh.vertices, mesh.indices, mesh.texture?.rotated ?? false, mesh.smoothing);
46
- buffer.offsetX = 0;
47
- buffer.offsetY = 0;
48
- }
49
- }
50
- //# sourceMappingURL=MeshPipe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MeshPipe.js","sourceRoot":"","sources":["../../../../src/blakron/player/pipes/MeshPipe.ts"],"names":[],"mappings":"AAgBA,iFAAiF;AAEjF,MAAM,OAAO,QAAQ;IACb,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC;IAEhC,MAAM,CAAU,KAAK,GAAsB,EAAE,CAAC;IAE9C,MAAM,CAAC,MAAM,CAAC,IAAU,EAAE,EAAU,EAAE,EAAU;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI;YACpC,YAAY,EAAE,MAAM;YACpB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;SACX,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,IAAqB;QAC1C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,6EAA6E;IAEtE,mBAAmB,CAAC,IAAU,EAAE,GAAmB;QACzD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO;QACR,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,KAAW;QAClC,8CAA8C;IAC/C,CAAC;IAEM,iBAAiB,CAAC,KAAW;QACnC,gDAAgD;IACjD,CAAC;IAED,6EAA6E;IAEtE,OAAO,CAAC,IAAqB,EAAE,MAAyB;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3B,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5E,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAClE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAErE,qEAAqE;QACrE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QAEnB,MAAM,CAAC,OAAO,CAAC,QAAQ,CACtB,EAAE,EACF,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,KAAK,EACL,KAAK,EACL,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,EAC9B,IAAI,CAAC,SAAS,CACd,CAAC;QAEF,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IACpB,CAAC"}
@@ -1,52 +0,0 @@
1
- import type { TextField } from '../../text/TextField.js';
2
- import type { WebGLRenderBuffer } from '../webgl/WebGLRenderBuffer.js';
3
- import type { Instruction } from '../InstructionSet.js';
4
- import type { InstructionSet } from '../InstructionSet.js';
5
- import type { RenderPipe } from '../RenderPipe.js';
6
- import type { CanvasRenderer } from '../CanvasRenderer.js';
7
- export interface TextInstruction extends Instruction {
8
- readonly renderPipeId: 'text';
9
- renderable: TextField;
10
- offsetX: number;
11
- offsetY: number;
12
- }
13
- /**
14
- * Handles WebGL rendering of TextField display objects.
15
- *
16
- * **Architecture** (following Egret's `WebGLRenderer.renderText`):
17
- *
18
- * 1. Compute the text draw area (width × height).
19
- * 2. Scale by the device pixel ratio (`canvasScaleX/Y`), clamped to
20
- * `maxTextureSize` so we never exceed the GPU's limit.
21
- * 3. Rasterize the text onto an offscreen `<canvas>` via `CanvasRenderer`.
22
- * 4. Upload the canvas as a WebGL texture (create once, update on change).
23
- * 5. Draw the texture via `buffer.context.drawTexture()`, scaling back down
24
- * by `canvasScale` so the on-screen size is correct.
25
- *
26
- * The cache is invalidated when `tf.renderDirty` is true or when the
27
- * dimensions / DPR change.
28
- */
29
- export declare class TextPipe implements RenderPipe<TextField> {
30
- static readonly PIPE_ID = "text";
31
- private static readonly _pool;
32
- private readonly _canvasRenderer;
33
- private readonly _cache;
34
- constructor(canvasRenderer: CanvasRenderer);
35
- private static _alloc;
36
- static release(inst: TextInstruction): void;
37
- addToInstructionSet(tf: TextField, set: InstructionSet): void;
38
- updateRenderable(_tf: TextField): void;
39
- destroyRenderable(tf: TextField): void;
40
- /**
41
- * Render a TextField into the WebGL buffer.
42
- * Follows Egret's `WebGLRenderer.renderText` pattern:
43
- *
44
- * 1. Compute logical width/height from the TextField.
45
- * 2. Scale by canvasScale (DPR), clamped to maxTextureSize.
46
- * 3. Rasterize to offscreen canvas (if dirty).
47
- * 4. Upload as WebGL texture.
48
- * 5. Draw with drawTexture, scaling back by canvasScale.
49
- */
50
- execute(inst: TextInstruction, buffer: WebGLRenderBuffer): void;
51
- }
52
- //# sourceMappingURL=TextPipe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextPipe.d.ts","sourceRoot":"","sources":["../../../../src/blakron/player/pipes/TextPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,eAAgB,SAAQ,WAAW;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,SAAS,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,QAAS,YAAW,UAAU,CAAC,SAAS,CAAC;IAErD,gBAAuB,OAAO,UAAU;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAGtD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,cAAc,EAAE,cAAc;IAIjD,OAAO,CAAC,MAAM,CAAC,MAAM;WAaP,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAM3C,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAI7D,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAKtC,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAM7C;;;;;;;;;OASG;IACI,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAmHtE"}
@@ -1,163 +0,0 @@
1
- import { TextFieldType } from '../../text/enums/TextFieldType.js';
2
- import { RenderBuffer } from '../RenderBuffer.js';
3
- // ── Pipe ──────────────────────────────────────────────────────────────────────
4
- /**
5
- * Handles WebGL rendering of TextField display objects.
6
- *
7
- * **Architecture** (following Egret's `WebGLRenderer.renderText`):
8
- *
9
- * 1. Compute the text draw area (width × height).
10
- * 2. Scale by the device pixel ratio (`canvasScaleX/Y`), clamped to
11
- * `maxTextureSize` so we never exceed the GPU's limit.
12
- * 3. Rasterize the text onto an offscreen `<canvas>` via `CanvasRenderer`.
13
- * 4. Upload the canvas as a WebGL texture (create once, update on change).
14
- * 5. Draw the texture via `buffer.context.drawTexture()`, scaling back down
15
- * by `canvasScale` so the on-screen size is correct.
16
- *
17
- * The cache is invalidated when `tf.renderDirty` is true or when the
18
- * dimensions / DPR change.
19
- */
20
- export class TextPipe {
21
- // ── Static fields ─────────────────────────────────────────────────────────
22
- static PIPE_ID = 'text';
23
- static _pool = [];
24
- // ── Instance fields ───────────────────────────────────────────────────────
25
- _canvasRenderer;
26
- _cache = new WeakMap();
27
- // ── Constructor ───────────────────────────────────────────────────────────
28
- constructor(canvasRenderer) {
29
- this._canvasRenderer = canvasRenderer;
30
- }
31
- static _alloc(tf, ox, oy) {
32
- const inst = TextPipe._pool.pop() ?? {
33
- renderPipeId: 'text',
34
- renderable: tf,
35
- offsetX: ox,
36
- offsetY: oy,
37
- };
38
- inst.renderable = tf;
39
- inst.offsetX = ox;
40
- inst.offsetY = oy;
41
- return inst;
42
- }
43
- static release(inst) {
44
- TextPipe._pool.push(inst);
45
- }
46
- // ── RenderPipe impl ───────────────────────────────────────────────────────
47
- addToInstructionSet(tf, set) {
48
- set.add(TextPipe._alloc(tf, 0, 0));
49
- }
50
- updateRenderable(_tf) {
51
- // Cache invalidation is driven by tf.renderDirty,
52
- // which is checked at execute time — nothing to pre-upload here.
53
- }
54
- destroyRenderable(tf) {
55
- this._cache.delete(tf);
56
- }
57
- // ── Execute ───────────────────────────────────────────────────────────────
58
- /**
59
- * Render a TextField into the WebGL buffer.
60
- * Follows Egret's `WebGLRenderer.renderText` pattern:
61
- *
62
- * 1. Compute logical width/height from the TextField.
63
- * 2. Scale by canvasScale (DPR), clamped to maxTextureSize.
64
- * 3. Rasterize to offscreen canvas (if dirty).
65
- * 4. Upload as WebGL texture.
66
- * 5. Draw with drawTexture, scaling back by canvasScale.
67
- */
68
- execute(inst, buffer) {
69
- const tf = inst.renderable;
70
- tf.getLinesArr(); // ensure lines are computed
71
- // ── INPUT mode while focused: HTML input element owns the display ────
72
- // Don't render the canvas texture — the native <input>/<textarea>
73
- // is overlaid on top and already shows the text. Rendering here too
74
- // would produce a double-text artefact.
75
- if (tf.type === TextFieldType.INPUT && tf.isTyping) {
76
- return;
77
- }
78
- // ── 1. Compute logical dimensions ────────────────────────────────────
79
- const logicalW = Math.ceil(!isNaN(tf.explicitWidth) ? tf.explicitWidth : tf.textWidth);
80
- const logicalH = Math.ceil(!isNaN(tf.explicitHeight) ? tf.explicitHeight : tf.textHeight);
81
- if (logicalW <= 0 || logicalH <= 0) {
82
- return;
83
- }
84
- buffer.offsetX = 0;
85
- buffer.offsetY = 0;
86
- // ── 2. Canvas scale factor (DPR handling) ────────────────────────────
87
- // Follow Egret: scale the offscreen canvas by DPR so text looks crisp
88
- // on HiDPI screens, but clamp to maxTextureSize to avoid GPU limits.
89
- let canvasScaleX = /* devicePixelRatio || */ 1;
90
- let canvasScaleY = /* devicePixelRatio || */ 1;
91
- const maxTexSize = buffer.context.maxTextureSize;
92
- if (logicalW * canvasScaleX > maxTexSize) {
93
- canvasScaleX *= maxTexSize / (logicalW * canvasScaleX);
94
- }
95
- if (logicalH * canvasScaleY > maxTexSize) {
96
- canvasScaleY *= maxTexSize / (logicalH * canvasScaleY);
97
- }
98
- // Scaled pixel dimensions for the offscreen canvas.
99
- const pixelW = Math.ceil(logicalW * canvasScaleX);
100
- const pixelH = Math.ceil(logicalH * canvasScaleY);
101
- // ── 3. Cache lookup / rebuild ────────────────────────────────────────
102
- let cache = this._cache.get(tf);
103
- let scaleChanged = false;
104
- if (cache) {
105
- // Check if canvasScale changed (e.g. window moved between displays).
106
- scaleChanged = cache.canvasScaleX !== canvasScaleX || cache.canvasScaleY !== canvasScaleY;
107
- if (scaleChanged) {
108
- cache.canvasScaleX = canvasScaleX;
109
- cache.canvasScaleY = canvasScaleY;
110
- }
111
- }
112
- else {
113
- cache = {
114
- renderBuffer: new RenderBuffer(pixelW, pixelH),
115
- texture: undefined,
116
- textureWidth: 0,
117
- textureHeight: 0,
118
- canvasScaleX,
119
- canvasScaleY,
120
- };
121
- this._cache.set(tf, cache);
122
- }
123
- // Dirty when: text content changed, dimensions changed, or DPR changed.
124
- const needsRebuild = tf.renderDirty || cache.textureWidth !== pixelW || cache.textureHeight !== pixelH || scaleChanged;
125
- if (needsRebuild) {
126
- // Resize the offscreen canvas if needed.
127
- if (cache.renderBuffer.width !== pixelW || cache.renderBuffer.height !== pixelH) {
128
- cache.renderBuffer.resize(pixelW, pixelH);
129
- }
130
- // Clear the buffer first (note: clear() resets the transform to identity).
131
- cache.renderBuffer.clear();
132
- // Apply canvas scale transform so text renders at the higher resolution.
133
- const ctx = cache.renderBuffer.context;
134
- if (canvasScaleX !== 1 || canvasScaleY !== 1) {
135
- ctx.setTransform(canvasScaleX, 0, 0, canvasScaleY, 0, 0);
136
- }
137
- // Rasterize the text onto the offscreen canvas.
138
- this._canvasRenderer.renderTextFieldToContext(tf, ctx, 0, 0);
139
- // Upload to WebGL texture.
140
- const surface = cache.renderBuffer.surface;
141
- if (!cache.texture) {
142
- cache.texture = buffer.context.createTexture(surface);
143
- }
144
- else {
145
- buffer.context.updateTexture(cache.texture, surface);
146
- }
147
- cache.textureWidth = pixelW;
148
- cache.textureHeight = pixelH;
149
- }
150
- if (!cache.texture)
151
- return;
152
- // ── 4. Draw cached texture ───────────────────────────────────────────
153
- // Following Egret: draw the full texture but scale the destination by
154
- // 1/canvasScale so the on-screen size matches the logical dimensions.
155
- buffer.context.drawTexture(cache.texture, 0, 0, cache.textureWidth, cache.textureHeight, // src rect (full texture)
156
- 0, 0, // dest position (offset already in globalMatrix via _applyTransform)
157
- cache.textureWidth / canvasScaleX, // dest width (scaled back)
158
- cache.textureHeight / canvasScaleY, // dest height (scaled back)
159
- cache.textureWidth, // texture source width
160
- cache.textureHeight);
161
- }
162
- }
163
- //# sourceMappingURL=TextPipe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextPipe.js","sourceRoot":"","sources":["../../../../src/blakron/player/pipes/TextPipe.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- export declare const ShaderLib: {
2
- readonly default_vert: "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\nuniform vec2 projectionVector;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nconst vec2 center = vec2(-1.0, 1.0);\nvoid main(void) {\n gl_Position = vec4((aVertexPosition / projectionVector) + center, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = aColor;\n}";
3
- readonly multi_vert: "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\nattribute float aTextureId;\nuniform vec2 projectionVector;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying float vTextureId;\nconst vec2 center = vec2(-1.0, 1.0);\nvoid main(void) {\n gl_Position = vec4((aVertexPosition / projectionVector) + center, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n vColor = aColor;\n vTextureId = aTextureId;\n}";
4
- readonly multi_frag: "\nprecision lowp float;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvarying float vTextureId;\nuniform sampler2D uSamplers[8];\nvoid main(void) {\n vec4 color;\n int id = int(vTextureId + 0.5);\n if (id == 0) color = texture2D(uSamplers[0], vTextureCoord);\n else if (id == 1) color = texture2D(uSamplers[1], vTextureCoord);\n else if (id == 2) color = texture2D(uSamplers[2], vTextureCoord);\n else if (id == 3) color = texture2D(uSamplers[3], vTextureCoord);\n else if (id == 4) color = texture2D(uSamplers[4], vTextureCoord);\n else if (id == 5) color = texture2D(uSamplers[5], vTextureCoord);\n else if (id == 6) color = texture2D(uSamplers[6], vTextureCoord);\n else color = texture2D(uSamplers[7], vTextureCoord);\n gl_FragColor = color * vColor;\n}";
5
- readonly texture_frag: "\nprecision lowp float;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nuniform sampler2D uSampler;\nvoid main(void) {\n gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;\n}";
6
- readonly primitive_frag: "\nprecision lowp float;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}";
7
- readonly blur_frag: "\nprecision mediump float;\nuniform vec2 blur;\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\nuniform vec2 uTextureSize;\nvoid main() {\n const int sampleRadius = 5;\n const int samples = sampleRadius * 2 + 1;\n vec2 blurUv = blur / uTextureSize;\n vec4 color = vec4(0.0, 0.0, 0.0, 0.0);\n vec2 uv = vec2(0.0, 0.0);\n blurUv /= float(sampleRadius);\n for (int i = -sampleRadius; i <= sampleRadius; i++) {\n uv.x = vTextureCoord.x + float(i) * blurUv.x;\n uv.y = vTextureCoord.y + float(i) * blurUv.y;\n color += texture2D(uSampler, uv);\n }\n color /= float(samples);\n gl_FragColor = color;\n}";
8
- readonly blur_h_frag: "\nprecision mediump float;\nuniform float blurX;\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\nuniform vec2 uTextureSize;\nvoid main() {\n float step = 1.0 / uTextureSize.x;\n vec4 color = vec4(0.0);\n float total = 0.0;\n for (int i = -8; i <= 8; i++) {\n if (abs(float(i)) > blurX) continue;\n float weight = 1.0 - abs(float(i)) / (blurX + 1.0);\n color += texture2D(uSampler, vTextureCoord + vec2(float(i) * step, 0.0)) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n}";
9
- readonly blur_v_frag: "\nprecision mediump float;\nuniform float blurY;\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\nuniform vec2 uTextureSize;\nvoid main() {\n float step = 1.0 / uTextureSize.y;\n vec4 color = vec4(0.0);\n float total = 0.0;\n for (int i = -8; i <= 8; i++) {\n if (abs(float(i)) > blurY) continue;\n float weight = 1.0 - abs(float(i)) / (blurY + 1.0);\n color += texture2D(uSampler, vTextureCoord + vec2(0.0, float(i) * step)) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n}";
10
- readonly glow_frag: "\nprecision highp float;\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform float dist;\nuniform float angle;\nuniform vec4 color;\nuniform float alpha;\nuniform float blurX;\nuniform float blurY;\nuniform float strength;\nuniform float inner;\nuniform float knockout;\nuniform float hideObject;\nuniform vec2 uTextureSize;\nfloat random(vec2 scale) {\n return fract(sin(dot(gl_FragCoord.xy, scale)) * 43758.5453);\n}\nvoid main(void) {\n vec2 px = vec2(1.0 / uTextureSize.x, 1.0 / uTextureSize.y);\n const float linearSamplingTimes = 7.0;\n const float circleSamplingTimes = 12.0;\n vec4 ownColor = texture2D(uSampler, vTextureCoord);\n vec4 curColor;\n float totalAlpha = 0.0;\n float maxTotalAlpha = 0.0;\n float offsetX = dist * cos(angle) * px.x;\n float offsetY = dist * sin(angle) * px.y;\n const float PI = 3.14159265358979323846264;\n float offset = PI * 2.0 / circleSamplingTimes * random(vec2(12.9898, 78.233));\n float stepX = blurX * px.x / linearSamplingTimes;\n float stepY = blurY * px.y / linearSamplingTimes;\n for (float a = 0.0; a <= PI * 2.0; a += PI * 2.0 / circleSamplingTimes) {\n float cosAngle = cos(a + offset);\n float sinAngle = sin(a + offset);\n for (float i = 1.0; i <= linearSamplingTimes; i++) {\n float curDistanceX = i * stepX * cosAngle;\n float curDistanceY = i * stepY * sinAngle;\n if (vTextureCoord.x + curDistanceX - offsetX >= 0.0 && vTextureCoord.y + curDistanceY + offsetY <= 1.0) {\n curColor = texture2D(uSampler, vec2(vTextureCoord.x + curDistanceX - offsetX, vTextureCoord.y + curDistanceY + offsetY));\n totalAlpha += (linearSamplingTimes - i) * curColor.a;\n }\n maxTotalAlpha += (linearSamplingTimes - i);\n }\n }\n ownColor.a = max(ownColor.a, 0.0001);\n ownColor.rgb = ownColor.rgb / ownColor.a;\n float outerGlowAlpha = (totalAlpha / maxTotalAlpha) * strength * alpha * (1.0 - inner) * max(min(hideObject, knockout), 1.0 - ownColor.a);\n float innerGlowAlpha = ((maxTotalAlpha - totalAlpha) / maxTotalAlpha) * strength * alpha * inner * ownColor.a;\n ownColor.a = max(ownColor.a * knockout * (1.0 - hideObject), 0.0001);\n vec3 mix1 = mix(ownColor.rgb, color.rgb, innerGlowAlpha / (innerGlowAlpha + ownColor.a));\n vec3 mix2 = mix(mix1, color.rgb, outerGlowAlpha / (innerGlowAlpha + ownColor.a + outerGlowAlpha));\n float resultAlpha = min(ownColor.a + outerGlowAlpha + innerGlowAlpha, 1.0);\n gl_FragColor = vec4(mix2 * resultAlpha, resultAlpha);\n}";
11
- readonly colorTransform_frag: "\nprecision mediump float;\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\nuniform mat4 matrix;\nuniform vec4 colorAdd;\nuniform sampler2D uSampler;\nvoid main(void) {\n vec4 texColor = texture2D(uSampler, vTextureCoord);\n if (texColor.a > 0.0) {\n texColor = vec4(texColor.rgb / texColor.a, texColor.a);\n }\n vec4 locColor = clamp(texColor * matrix + colorAdd, 0.0, 1.0);\n gl_FragColor = vColor * vec4(locColor.rgb * locColor.a, locColor.a);\n}";
12
- };
13
- /**
14
- * Blur radius tiers. Each tier generates a dedicated shader variant with a
15
- * loop bound matching the tier value, avoiding the WebGL1 limitation where
16
- * loop bounds must be compile-time constants.
17
- *
18
- * Tier selection: pick the smallest tier >= ceil(blurValue).
19
- * e.g. blurX=5 → tier 8, blurX=12 → tier 16, blurX=25 → tier 32.
20
- */
21
- export declare const BLUR_TIERS: readonly [4, 8, 16, 32];
22
- export type BlurTier = (typeof BLUR_TIERS)[number];
23
- /** Returns the smallest tier that can accommodate the given blur radius. */
24
- export declare function getBlurTier(radius: number): BlurTier;
25
- /**
26
- * Generates a horizontal blur fragment shader for the given radius tier.
27
- * The loop bound is a compile-time constant so it is valid in WebGL1 GLSL.
28
- */
29
- export declare function makeBlurHFrag(tier: BlurTier): string;
30
- /**
31
- * Generates a vertical blur fragment shader for the given radius tier.
32
- */
33
- export declare function makeBlurVFrag(tier: BlurTier): string;
34
- //# sourceMappingURL=ShaderLib.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShaderLib.d.ts","sourceRoot":"","sources":["../../../../src/blakron/player/webgl/ShaderLib.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;CAkNZ,CAAC;AAIX;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,yBAA0B,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBpD"}