@blakron/core 0.4.0 → 0.4.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 (96) 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/player/Player.d.ts.map +1 -1
  6. package/dist/blakron/player/Player.js +1 -2
  7. package/dist/blakron/player/Player.js.map +1 -1
  8. package/dist/blakron/player/RenderPipe.d.ts +1 -1
  9. package/dist/blakron/player/RenderPipe.d.ts.map +1 -1
  10. package/dist/blakron/player/canvas/CanvasRenderer.d.ts +49 -0
  11. package/dist/blakron/player/canvas/CanvasRenderer.d.ts.map +1 -0
  12. package/dist/blakron/player/canvas/CanvasRenderer.js +792 -0
  13. package/dist/blakron/player/canvas/CanvasRenderer.js.map +1 -0
  14. package/dist/blakron/player/canvas/DisplayList.d.ts +32 -0
  15. package/dist/blakron/player/canvas/DisplayList.d.ts.map +1 -0
  16. package/dist/blakron/player/canvas/DisplayList.js +78 -0
  17. package/dist/blakron/player/canvas/DisplayList.js.map +1 -0
  18. package/dist/blakron/player/canvas/RenderBuffer.d.ts +35 -0
  19. package/dist/blakron/player/canvas/RenderBuffer.d.ts.map +1 -0
  20. package/dist/blakron/player/canvas/RenderBuffer.js +83 -0
  21. package/dist/blakron/player/canvas/RenderBuffer.js.map +1 -0
  22. package/dist/blakron/player/canvas/index.d.ts +4 -0
  23. package/dist/blakron/player/canvas/index.d.ts.map +1 -0
  24. package/dist/blakron/player/canvas/index.js +4 -0
  25. package/dist/blakron/player/canvas/index.js.map +1 -0
  26. package/dist/blakron/player/createPlayer.d.ts.map +1 -1
  27. package/dist/blakron/player/createPlayer.js +1 -2
  28. package/dist/blakron/player/createPlayer.js.map +1 -1
  29. package/dist/blakron/player/index.d.ts +2 -4
  30. package/dist/blakron/player/index.d.ts.map +1 -1
  31. package/dist/blakron/player/index.js +2 -4
  32. package/dist/blakron/player/index.js.map +1 -1
  33. package/dist/blakron/player/webgl/InstructionSet.d.ts +49 -0
  34. package/dist/blakron/player/webgl/InstructionSet.d.ts.map +1 -0
  35. package/dist/blakron/player/webgl/InstructionSet.js +45 -0
  36. package/dist/blakron/player/webgl/InstructionSet.js.map +1 -0
  37. package/dist/blakron/player/webgl/ShaderLib.d.ts +4 -16
  38. package/dist/blakron/player/webgl/ShaderLib.d.ts.map +1 -1
  39. package/dist/blakron/player/webgl/ShaderLib.js +5 -27
  40. package/dist/blakron/player/webgl/ShaderLib.js.map +1 -1
  41. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts +6 -0
  42. package/dist/blakron/player/webgl/WebGLRenderContext.d.ts.map +1 -1
  43. package/dist/blakron/player/webgl/WebGLRenderContext.js +28 -10
  44. package/dist/blakron/player/webgl/WebGLRenderContext.js.map +1 -1
  45. package/dist/blakron/player/webgl/WebGLRenderer.d.ts.map +1 -1
  46. package/dist/blakron/player/webgl/WebGLRenderer.js +3 -8
  47. package/dist/blakron/player/webgl/WebGLRenderer.js.map +1 -1
  48. package/dist/blakron/player/webgl/index.d.ts +1 -1
  49. package/dist/blakron/player/webgl/index.d.ts.map +1 -1
  50. package/dist/blakron/player/webgl/index.js +1 -1
  51. package/dist/blakron/player/webgl/index.js.map +1 -1
  52. package/dist/blakron/player/webgl/pipes/BitmapPipe.d.ts +35 -0
  53. package/dist/blakron/player/webgl/pipes/BitmapPipe.d.ts.map +1 -0
  54. package/dist/blakron/player/webgl/pipes/BitmapPipe.js +130 -0
  55. package/dist/blakron/player/webgl/pipes/BitmapPipe.js.map +1 -0
  56. package/dist/blakron/player/webgl/pipes/FilterPipe.d.ts +68 -0
  57. package/dist/blakron/player/webgl/pipes/FilterPipe.d.ts.map +1 -0
  58. package/dist/blakron/player/webgl/pipes/FilterPipe.js +169 -0
  59. package/dist/blakron/player/webgl/pipes/FilterPipe.js.map +1 -0
  60. package/dist/blakron/player/webgl/pipes/GraphicsPipe.d.ts +36 -0
  61. package/dist/blakron/player/webgl/pipes/GraphicsPipe.d.ts.map +1 -0
  62. package/dist/blakron/player/webgl/pipes/GraphicsPipe.js +126 -0
  63. package/dist/blakron/player/webgl/pipes/GraphicsPipe.js.map +1 -0
  64. package/dist/blakron/player/webgl/pipes/MaskPipe.d.ts +58 -0
  65. package/dist/blakron/player/webgl/pipes/MaskPipe.d.ts.map +1 -0
  66. package/dist/blakron/player/webgl/pipes/MaskPipe.js +190 -0
  67. package/dist/blakron/player/webgl/pipes/MaskPipe.js.map +1 -0
  68. package/dist/blakron/player/webgl/pipes/MeshPipe.d.ts +22 -0
  69. package/dist/blakron/player/webgl/pipes/MeshPipe.d.ts.map +1 -0
  70. package/dist/blakron/player/webgl/pipes/MeshPipe.js +50 -0
  71. package/dist/blakron/player/webgl/pipes/MeshPipe.js.map +1 -0
  72. package/dist/blakron/player/webgl/pipes/TextPipe.d.ts +52 -0
  73. package/dist/blakron/player/webgl/pipes/TextPipe.d.ts.map +1 -0
  74. package/dist/blakron/player/webgl/pipes/TextPipe.js +163 -0
  75. package/dist/blakron/player/webgl/pipes/TextPipe.js.map +1 -0
  76. package/dist/blakron/player/webgl/pipes/index.d.ts +7 -0
  77. package/dist/blakron/player/webgl/pipes/index.d.ts.map +1 -0
  78. package/dist/blakron/player/webgl/pipes/index.js +7 -0
  79. package/dist/blakron/player/webgl/pipes/index.js.map +1 -0
  80. package/dist/blakron/player/webgl/shaders/ShaderLib.d.ts +22 -0
  81. package/dist/blakron/player/webgl/shaders/ShaderLib.d.ts.map +1 -0
  82. package/dist/blakron/player/webgl/shaders/ShaderLib.js +246 -0
  83. package/dist/blakron/player/webgl/shaders/ShaderLib.js.map +1 -0
  84. package/dist/blakron/player/webgl/shaders/ShaderLib2.d.ts +22 -0
  85. package/dist/blakron/player/webgl/shaders/ShaderLib2.d.ts.map +1 -0
  86. package/dist/blakron/player/webgl/shaders/ShaderLib2.js +261 -0
  87. package/dist/blakron/player/webgl/shaders/ShaderLib2.js.map +1 -0
  88. package/dist/blakron/player/webgl/shaders/index.d.ts +5 -0
  89. package/dist/blakron/player/webgl/shaders/index.d.ts.map +1 -0
  90. package/dist/blakron/player/webgl/shaders/index.js +5 -0
  91. package/dist/blakron/player/webgl/shaders/index.js.map +1 -0
  92. package/dist/blakron/player/webgl2/ShaderLib2.d.ts +22 -0
  93. package/dist/blakron/player/webgl2/ShaderLib2.d.ts.map +1 -0
  94. package/dist/blakron/player/webgl2/ShaderLib2.js +261 -0
  95. package/dist/blakron/player/webgl2/ShaderLib2.js.map +1 -0
  96. package/package.json +51 -52
@@ -0,0 +1,58 @@
1
+ import type { DisplayObject } from '../../../display/DisplayObject.js';
2
+ import type { WebGLRenderBuffer } from '../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 MaskPushInstruction extends Instruction {
7
+ readonly renderPipeId: 'maskPush';
8
+ renderable: DisplayObject;
9
+ offsetX: number;
10
+ offsetY: number;
11
+ isScrollRect?: boolean;
12
+ }
13
+ export interface MaskPopInstruction extends Instruction {
14
+ readonly renderPipeId: 'maskPop';
15
+ renderable: DisplayObject;
16
+ push: MaskPushInstruction;
17
+ }
18
+ /**
19
+ * Handles mask / clip / scrollRect rendering for WebGL.
20
+ *
21
+ * Mirrors the old WebGLRenderer._drawWithClip() and _drawWithScrollRect()
22
+ * logic as a push/pop instruction pair.
23
+ */
24
+ export declare class MaskPipe implements RenderPipe<DisplayObject> {
25
+ static readonly PUSH_ID = "maskPush";
26
+ static readonly POP_ID = "maskPop";
27
+ private static readonly _pushPool;
28
+ private static readonly _popPool;
29
+ addToInstructionSet(_renderable: DisplayObject, _set: InstructionSet): void;
30
+ updateRenderable(_renderable: DisplayObject): void;
31
+ static makePush(renderable: DisplayObject, offsetX: number, offsetY: number): MaskPushInstruction;
32
+ static makePop(renderable: DisplayObject, push: MaskPushInstruction): MaskPopInstruction;
33
+ static releasePush(inst: MaskPushInstruction): void;
34
+ static releasePop(inst: MaskPopInstruction): void;
35
+ /**
36
+ * Handles scrollRect / maskRect via scissor or stencil.
37
+ * Returns true if a scissor was used (caller must call executePopScissor).
38
+ */
39
+ executeScrollRectPush(inst: MaskPushInstruction, buffer: WebGLRenderBuffer): boolean;
40
+ executeScrollRectPop(buffer: WebGLRenderBuffer, usedScissor: boolean): void;
41
+ /**
42
+ * Handles DisplayObject mask (stencil-based compositing).
43
+ *
44
+ * Allocates an offscreen buffer and activates it via pushBuffer so that
45
+ * all subsequent leaf instructions (the masked subtree) draw into it.
46
+ * The mask object itself is rendered separately in executeClipPop because
47
+ * it is not part of the main InstructionSet.
48
+ *
49
+ * Returns the offscreen buffer, or undefined if the object has zero bounds.
50
+ */
51
+ executeClipPush(inst: MaskPushInstruction, buffer: WebGLRenderBuffer, renderer: {
52
+ _drawDisplayObject(obj: DisplayObject, buf: WebGLRenderBuffer, ox: number, oy: number): number;
53
+ }): WebGLRenderBuffer | undefined;
54
+ executeClipPop(inst: MaskPopInstruction, buffer: WebGLRenderBuffer, displayBuffer: WebGLRenderBuffer | undefined, renderer: {
55
+ _drawDisplayObject(obj: DisplayObject, buf: WebGLRenderBuffer, ox: number, oy: number): number;
56
+ }): void;
57
+ }
58
+ //# sourceMappingURL=MaskPipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskPipe.d.ts","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/MaskPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACvD,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACtD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAID;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,UAAU,CAAC,aAAa,CAAC;IAEzD,gBAAuB,OAAO,cAAc;IAC5C,gBAAuB,MAAM,aAAa;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAA6B;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAIrD,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAI3E,gBAAgB,CAAC,WAAW,EAAE,aAAa,GAAG,IAAI;WAI3C,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB;WAY1F,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,GAAG,kBAAkB;WAUjF,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;WAI5C,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAMxD;;;OAGG;IACI,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO;IAiCpF,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI;IAQlF;;;;;;;;;OASG;IACI,eAAe,CACrB,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE;QAAE,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAC1G,iBAAiB,GAAG,SAAS;IAgCzB,cAAc,CACpB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,iBAAiB,GAAG,SAAS,EAC5C,QAAQ,EAAE;QAAE,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAC1G,IAAI;CAsGP"}
@@ -0,0 +1,190 @@
1
+ import { Matrix } from '../../../geom/Matrix.js';
2
+ import { WebGLRenderBuffer as WGLBuf } from '../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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskPipe.js","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/MaskPipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Mesh } from '../../../display/Mesh.js';
2
+ import type { WebGLRenderBuffer } from '../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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeshPipe.d.ts","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/MeshPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,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"}
@@ -0,0 +1,50 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeshPipe.js","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/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"}
@@ -0,0 +1,52 @@
1
+ import type { TextField } from '../../../text/TextField.js';
2
+ import type { WebGLRenderBuffer } from '../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 '../../canvas/index.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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextPipe.d.ts","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/TextPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,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"}
@@ -0,0 +1,163 @@
1
+ import { TextFieldType } from '../../../text/enums/TextFieldType.js';
2
+ import { RenderBuffer } from '../../canvas/index.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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextPipe.js","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/TextPipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { BitmapPipe, type BitmapInstruction } from './BitmapPipe.js';
2
+ export { FilterPipe, type FilterPushInstruction, type FilterPopInstruction } from './FilterPipe.js';
3
+ export { GraphicsPipe, type GraphicsInstruction } from './GraphicsPipe.js';
4
+ export { MaskPipe, type MaskPushInstruction, type MaskPopInstruction } from './MaskPipe.js';
5
+ export { MeshPipe, type MeshInstruction } from './MeshPipe.js';
6
+ export { TextPipe, type TextInstruction } from './TextPipe.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { BitmapPipe } from './BitmapPipe.js';
2
+ export { FilterPipe } from './FilterPipe.js';
3
+ export { GraphicsPipe } from './GraphicsPipe.js';
4
+ export { MaskPipe } from './MaskPipe.js';
5
+ export { MeshPipe } from './MeshPipe.js';
6
+ export { TextPipe } from './TextPipe.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/blakron/player/webgl/pipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAyD,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAqD,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAC"}