@kurot/core 1.0.20 → 1.0.22

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 (109) hide show
  1. package/dist/kurot/display/DisplayObject.d.ts.map +1 -1
  2. package/dist/kurot/display/DisplayObject.js +6 -0
  3. package/dist/kurot/display/DisplayObject.js.map +1 -1
  4. package/dist/kurot/display/Mesh.d.ts +5 -2
  5. package/dist/kurot/display/Mesh.d.ts.map +1 -1
  6. package/dist/kurot/display/Mesh.js +5 -2
  7. package/dist/kurot/display/Mesh.js.map +1 -1
  8. package/dist/kurot/filters/BloomFilter.d.ts +40 -0
  9. package/dist/kurot/filters/BloomFilter.d.ts.map +1 -0
  10. package/dist/kurot/filters/BloomFilter.js +51 -0
  11. package/dist/kurot/filters/BloomFilter.js.map +1 -0
  12. package/dist/kurot/filters/BloomShaders.d.ts +10 -0
  13. package/dist/kurot/filters/BloomShaders.d.ts.map +1 -0
  14. package/dist/kurot/filters/BloomShaders.js +54 -0
  15. package/dist/kurot/filters/BloomShaders.js.map +1 -0
  16. package/dist/kurot/filters/BlurFilter.d.ts +4 -0
  17. package/dist/kurot/filters/BlurFilter.d.ts.map +1 -1
  18. package/dist/kurot/filters/BlurFilter.js +23 -6
  19. package/dist/kurot/filters/BlurFilter.js.map +1 -1
  20. package/dist/kurot/filters/CustomFilter.d.ts +44 -1
  21. package/dist/kurot/filters/CustomFilter.d.ts.map +1 -1
  22. package/dist/kurot/filters/CustomFilter.js +56 -17
  23. package/dist/kurot/filters/CustomFilter.js.map +1 -1
  24. package/dist/kurot/filters/DropShadowFilter.d.ts.map +1 -1
  25. package/dist/kurot/filters/DropShadowFilter.js +1 -0
  26. package/dist/kurot/filters/DropShadowFilter.js.map +1 -1
  27. package/dist/kurot/filters/Filter.d.ts +15 -0
  28. package/dist/kurot/filters/Filter.d.ts.map +1 -1
  29. package/dist/kurot/filters/Filter.js +58 -0
  30. package/dist/kurot/filters/Filter.js.map +1 -1
  31. package/dist/kurot/filters/FilterTexture.d.ts +21 -0
  32. package/dist/kurot/filters/FilterTexture.d.ts.map +1 -0
  33. package/dist/kurot/filters/FilterTexture.js +2 -0
  34. package/dist/kurot/filters/FilterTexture.js.map +1 -0
  35. package/dist/kurot/filters/GlowFilter.d.ts.map +1 -1
  36. package/dist/kurot/filters/GlowFilter.js +6 -0
  37. package/dist/kurot/filters/GlowFilter.js.map +1 -1
  38. package/dist/kurot/filters/MultiPassFilter.d.ts +41 -0
  39. package/dist/kurot/filters/MultiPassFilter.d.ts.map +1 -0
  40. package/dist/kurot/filters/MultiPassFilter.js +53 -0
  41. package/dist/kurot/filters/MultiPassFilter.js.map +1 -0
  42. package/dist/kurot/filters/index.d.ts +6 -0
  43. package/dist/kurot/filters/index.d.ts.map +1 -1
  44. package/dist/kurot/filters/index.js +2 -0
  45. package/dist/kurot/filters/index.js.map +1 -1
  46. package/dist/kurot/player/Player.d.ts.map +1 -1
  47. package/dist/kurot/player/Player.js +1 -0
  48. package/dist/kurot/player/Player.js.map +1 -1
  49. package/dist/kurot/player/canvas/CanvasRenderer.d.ts.map +1 -1
  50. package/dist/kurot/player/canvas/CanvasRenderer.js +26 -16
  51. package/dist/kurot/player/canvas/CanvasRenderer.js.map +1 -1
  52. package/dist/kurot/player/pipes/BitmapPipe.d.ts.map +1 -1
  53. package/dist/kurot/player/pipes/BitmapPipe.js +20 -10
  54. package/dist/kurot/player/pipes/BitmapPipe.js.map +1 -1
  55. package/dist/kurot/player/pipes/FilterPipe.d.ts.map +1 -1
  56. package/dist/kurot/player/pipes/FilterPipe.js +23 -18
  57. package/dist/kurot/player/pipes/FilterPipe.js.map +1 -1
  58. package/dist/kurot/player/pipes/MaskPipe.d.ts.map +1 -1
  59. package/dist/kurot/player/pipes/MaskPipe.js +6 -0
  60. package/dist/kurot/player/pipes/MaskPipe.js.map +1 -1
  61. package/dist/kurot/player/pipes/filter-bounds.d.ts +8 -0
  62. package/dist/kurot/player/pipes/filter-bounds.d.ts.map +1 -0
  63. package/dist/kurot/player/pipes/filter-bounds.js +25 -0
  64. package/dist/kurot/player/pipes/filter-bounds.js.map +1 -0
  65. package/dist/kurot/player/webgl/WebGLFilterSystem.d.ts +27 -0
  66. package/dist/kurot/player/webgl/WebGLFilterSystem.d.ts.map +1 -0
  67. package/dist/kurot/player/webgl/WebGLFilterSystem.js +119 -0
  68. package/dist/kurot/player/webgl/WebGLFilterSystem.js.map +1 -0
  69. package/dist/kurot/player/webgl/WebGLFilterTargetPool.d.ts +18 -0
  70. package/dist/kurot/player/webgl/WebGLFilterTargetPool.d.ts.map +1 -0
  71. package/dist/kurot/player/webgl/WebGLFilterTargetPool.js +80 -0
  72. package/dist/kurot/player/webgl/WebGLFilterTargetPool.js.map +1 -0
  73. package/dist/kurot/player/webgl/WebGLFilterTextures.d.ts +17 -0
  74. package/dist/kurot/player/webgl/WebGLFilterTextures.d.ts.map +1 -0
  75. package/dist/kurot/player/webgl/WebGLFilterTextures.js +124 -0
  76. package/dist/kurot/player/webgl/WebGLFilterTextures.js.map +1 -0
  77. package/dist/kurot/player/webgl/WebGLProgram.d.ts +6 -2
  78. package/dist/kurot/player/webgl/WebGLProgram.d.ts.map +1 -1
  79. package/dist/kurot/player/webgl/WebGLProgram.js +29 -8
  80. package/dist/kurot/player/webgl/WebGLProgram.js.map +1 -1
  81. package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts +2 -0
  82. package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts.map +1 -1
  83. package/dist/kurot/player/webgl/WebGLRenderBuffer.js +3 -0
  84. package/dist/kurot/player/webgl/WebGLRenderBuffer.js.map +1 -1
  85. package/dist/kurot/player/webgl/WebGLRenderContext.d.ts +15 -6
  86. package/dist/kurot/player/webgl/WebGLRenderContext.d.ts.map +1 -1
  87. package/dist/kurot/player/webgl/WebGLRenderContext.js +200 -145
  88. package/dist/kurot/player/webgl/WebGLRenderContext.js.map +1 -1
  89. package/dist/kurot/player/webgl/WebGLRenderer.d.ts.map +1 -1
  90. package/dist/kurot/player/webgl/WebGLRenderer.js +143 -110
  91. package/dist/kurot/player/webgl/WebGLRenderer.js.map +1 -1
  92. package/dist/kurot/player/webgl/WebGLUtils.d.ts +2 -2
  93. package/dist/kurot/player/webgl/WebGLUtils.d.ts.map +1 -1
  94. package/dist/kurot/player/webgl/WebGLUtils.js +35 -12
  95. package/dist/kurot/player/webgl/WebGLUtils.js.map +1 -1
  96. package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts +2 -0
  97. package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts.map +1 -1
  98. package/dist/kurot/player/webgl/WebGLVertexArrayObject.js +3 -1
  99. package/dist/kurot/player/webgl/WebGLVertexArrayObject.js.map +1 -1
  100. package/dist/kurot/player/webgl/custom-filter-uniforms.d.ts +6 -0
  101. package/dist/kurot/player/webgl/custom-filter-uniforms.d.ts.map +1 -0
  102. package/dist/kurot/player/webgl/custom-filter-uniforms.js +116 -0
  103. package/dist/kurot/player/webgl/custom-filter-uniforms.js.map +1 -0
  104. package/dist/kurot/player/webgl/split-mesh.d.ts +9 -0
  105. package/dist/kurot/player/webgl/split-mesh.d.ts.map +1 -0
  106. package/dist/kurot/player/webgl/split-mesh.js +29 -0
  107. package/dist/kurot/player/webgl/split-mesh.js.map +1 -0
  108. package/dist/kurot/system/Capabilities.js +1 -1
  109. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MaskPipe.js","sourceRoot":"","sources":["../../../../src/kurot/player/pipes/MaskPipe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaskPipe.js","sourceRoot":"","sources":["../../../../src/kurot/player/pipes/MaskPipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { DisplayObject } from '../../display/DisplayObject.js';
2
+ import type { Rectangle } from '../../geom/Rectangle.js';
3
+ /**
4
+ * Render-only bounds include descendant effects without changing layout bounds.
5
+ * The owner's padding is added separately by FilterPipe.
6
+ */
7
+ export declare function getFilterContentBounds(owner: DisplayObject): Rectangle;
8
+ //# sourceMappingURL=filter-bounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bounds.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/pipes/filter-bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAkBtE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Render-only bounds include descendant effects without changing layout bounds.
3
+ * The owner's padding is added separately by FilterPipe.
4
+ */
5
+ export function getFilterContentBounds(owner) {
6
+ let bounds = owner.$getOriginalBounds().clone();
7
+ for (const child of owner.$children ?? []) {
8
+ if (!child.visible || child.alpha <= 0 || child.$maskedObject)
9
+ continue;
10
+ const childBounds = getFilterContentBounds(child);
11
+ for (const filter of child.$filters) {
12
+ const padding = filter.getPadding();
13
+ childBounds.x -= padding.left;
14
+ childBounds.y -= padding.top;
15
+ childBounds.width += padding.left + padding.right;
16
+ childBounds.height += padding.top + padding.bottom;
17
+ }
18
+ childBounds.x -= child.$anchorOffsetX + (child.$scrollRect?.x ?? 0);
19
+ childBounds.y -= child.$anchorOffsetY + (child.$scrollRect?.y ?? 0);
20
+ child.$getMatrix().transformBounds(childBounds);
21
+ bounds = bounds.union(childBounds);
22
+ }
23
+ return bounds;
24
+ }
25
+ //# sourceMappingURL=filter-bounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bounds.js","sourceRoot":"","sources":["../../../../src/kurot/player/pipes/filter-bounds.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IAC1D,IAAI,MAAM,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,SAAS;QACxE,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;YAC9B,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC;YAC7B,WAAW,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;YAClD,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QACpD,CAAC;QACD,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,KAAK,CAAC,UAAU,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Filter } from '../../filters/Filter.js';
2
+ import type { WebGLRenderContext } from './WebGLRenderContext.js';
3
+ import type { WebGLRenderTarget } from './WebGLRenderTarget.js';
4
+ import { WebGLFilterTargetPool } from './WebGLFilterTargetPool.js';
5
+ /**
6
+ * Borrowed framebuffer sampler; valid only during the current effect execution.
7
+ */
8
+ export interface FilterSampler {
9
+ texture: WebGLTexture;
10
+ width: number;
11
+ height: number;
12
+ }
13
+ /**
14
+ * Executes GPU effects while keeping pass inputs alive until their last consumer.
15
+ */
16
+ export declare class WebGLFilterSystem {
17
+ private readonly _context;
18
+ readonly pool: WebGLFilterTargetPool;
19
+ private readonly _owned;
20
+ constructor(_context: WebGLRenderContext);
21
+ render(filters: readonly Filter[], input: WebGLRenderTarget, resolution: number, composite: (output: WebGLRenderTarget) => void): void;
22
+ private acquire;
23
+ private release;
24
+ private apply;
25
+ private blur;
26
+ }
27
+ //# sourceMappingURL=WebGLFilterSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterSystem.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAIV,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH5C,SAAgB,IAAI,EAAE,qBAAqB,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAEnB,QAAQ,EAAE,kBAAkB;IAIzD,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EACrF,SAAS,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAiBtD,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAsCb,OAAO,CAAC,IAAI;CA2BZ"}
@@ -0,0 +1,119 @@
1
+ import { BlurFilter } from '../../filters/BlurFilter.js';
2
+ import { CustomFilter } from '../../filters/CustomFilter.js';
3
+ import { MultiPassFilter } from '../../filters/MultiPassFilter.js';
4
+ import { WebGLFilterTargetPool } from './WebGLFilterTargetPool.js';
5
+ /**
6
+ * Executes GPU effects while keeping pass inputs alive until their last consumer.
7
+ */
8
+ export class WebGLFilterSystem {
9
+ _context;
10
+ pool;
11
+ _owned = new Set();
12
+ constructor(_context) {
13
+ this._context = _context;
14
+ this.pool = new WebGLFilterTargetPool(_context.gl);
15
+ }
16
+ render(filters, input, resolution, composite) {
17
+ const logicalWidth = input.width / resolution;
18
+ const logicalHeight = input.height / resolution;
19
+ let source = input;
20
+ try {
21
+ for (const filter of filters) {
22
+ const output = this.apply(filter, source, logicalWidth, logicalHeight, resolution);
23
+ if (output !== source) {
24
+ this.release(source);
25
+ }
26
+ source = output;
27
+ }
28
+ composite(source);
29
+ }
30
+ finally {
31
+ for (const target of this._owned) {
32
+ this.pool.release(target);
33
+ }
34
+ this._owned.clear();
35
+ }
36
+ }
37
+ acquire(width, height) {
38
+ const target = this.pool.acquire(Math.max(1, Math.round(width)), Math.max(1, Math.round(height)));
39
+ this._owned.add(target);
40
+ return target;
41
+ }
42
+ release(target) {
43
+ if (this._owned.delete(target)) {
44
+ this.pool.release(target);
45
+ }
46
+ }
47
+ apply(filter, input, width, height, resolution, textures = {}) {
48
+ resolution = Math.min(resolution, filter.resolution ?? resolution);
49
+ if (filter instanceof MultiPassFilter) {
50
+ const outputs = [];
51
+ const uses = new Array(filter.passes.length).fill(0);
52
+ uses[uses.length - 1]++;
53
+ for (const pass of filter.passes) {
54
+ for (const ref of [pass.input, ...Object.values(pass.textures ?? {})]) {
55
+ if (ref !== 'original') {
56
+ uses[ref]++;
57
+ }
58
+ }
59
+ }
60
+ for (const [index, pass] of filter.passes.entries()) {
61
+ const source = pass.input === 'original' ? input : outputs[pass.input];
62
+ const samplers = {};
63
+ for (const [name, ref] of Object.entries(pass.textures ?? {})) {
64
+ const target = ref === 'original' ? input : outputs[ref];
65
+ samplers[name] = { texture: target.texture, width: target.width, height: target.height };
66
+ }
67
+ outputs.push(this.apply(pass.filter, source, width, height, resolution * pass.scale, samplers));
68
+ for (const ref of [pass.input, ...Object.values(pass.textures ?? {})]) {
69
+ if (ref !== 'original' && --uses[ref] === 0) {
70
+ this.release(outputs[ref]);
71
+ }
72
+ }
73
+ if (uses[index] === 0) {
74
+ this.release(outputs[index]);
75
+ }
76
+ }
77
+ return outputs[outputs.length - 1];
78
+ }
79
+ if (Object.keys(textures).length && !(filter instanceof CustomFilter)) {
80
+ throw new Error('Additional pass inputs require a CustomFilter.');
81
+ }
82
+ if (filter instanceof BlurFilter && (filter.blurX > 0 || filter.blurY > 0)) {
83
+ return this.blur(filter, input, width, height, resolution);
84
+ }
85
+ const output = this.acquire(width * resolution, height * resolution);
86
+ this._context.$drawFilterPass(filter instanceof BlurFilter ? undefined : filter, input, output, resolution, textures);
87
+ return output;
88
+ }
89
+ blur(filter, input, width, height, resolution) {
90
+ const divisor = Math.sqrt(filter.quality);
91
+ const factor = Math.min(1, 32 * divisor / (Math.max(filter.blurX, filter.blurY) * resolution));
92
+ const w = Math.max(1, Math.floor(width * resolution * factor));
93
+ const h = Math.max(1, Math.floor(height * resolution * factor));
94
+ let source = input;
95
+ if (source.width !== w || source.height !== h) {
96
+ source = this.acquire(w, h);
97
+ this._context.$drawFilterPass(undefined, input, source, resolution * factor);
98
+ }
99
+ for (let pass = 0; pass < filter.quality; pass++) {
100
+ const horizontal = this.acquire(w, h);
101
+ const vertical = this.acquire(w, h);
102
+ this._context.$drawBlurPass(true, source, horizontal, filter.blurX * w / width / divisor);
103
+ this._context.$drawBlurPass(false, horizontal, vertical, filter.blurY * h / height / divisor);
104
+ this.release(horizontal);
105
+ if (source !== input) {
106
+ this.release(source);
107
+ }
108
+ source = vertical;
109
+ }
110
+ if (source.width !== Math.max(1, Math.round(width * resolution)) || source.height !== Math.max(1, Math.round(height * resolution))) {
111
+ const fullSize = this.acquire(width * resolution, height * resolution);
112
+ this._context.$drawFilterPass(undefined, source, fullSize, resolution);
113
+ this.release(source);
114
+ source = fullSize;
115
+ }
116
+ return source;
117
+ }
118
+ }
119
+ //# sourceMappingURL=WebGLFilterSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterSystem.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2
+ import type { GL } from './WebGLUtils.js';
3
+ /**
4
+ * Bounded context-owned pool. Active targets are owned by the filter execution.
5
+ */
6
+ export declare class WebGLFilterTargetPool {
7
+ private readonly _gl;
8
+ private readonly _targets;
9
+ private _size;
10
+ private _bytes;
11
+ constructor(_gl: GL);
12
+ get size(): number;
13
+ get bytes(): number;
14
+ acquire(width: number, height: number): WebGLRenderTarget;
15
+ release(target: WebGLRenderTarget): void;
16
+ clear(contextLost?: boolean): void;
17
+ }
18
+ //# sourceMappingURL=WebGLFilterTargetPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterTargetPool.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterTargetPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAK1C;;GAEG;AACH,qBAAa,qBAAqB;IAKd,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;gBAEiB,GAAG,EAAE,EAAE;IAE3C,IAAW,IAAI,IAAI,MAAM,CAAuB;IAChD,IAAW,KAAK,IAAI,MAAM,CAAwB;IAE3C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAuBzD,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAqBxC,KAAK,CAAC,WAAW,UAAQ,GAAG,IAAI;CASvC"}
@@ -0,0 +1,80 @@
1
+ import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2
+ const COUNT_LIMIT = 16;
3
+ const BYTE_LIMIT = 64 * 1024 * 1024;
4
+ /**
5
+ * Bounded context-owned pool. Active targets are owned by the filter execution.
6
+ */
7
+ export class WebGLFilterTargetPool {
8
+ _gl;
9
+ _targets = new Map();
10
+ _size = 0;
11
+ _bytes = 0;
12
+ constructor(_gl) {
13
+ this._gl = _gl;
14
+ }
15
+ get size() { return this._size; }
16
+ get bytes() { return this._bytes; }
17
+ acquire(width, height) {
18
+ const key = `${width}x${height}`;
19
+ const bucket = this._targets.get(key);
20
+ const target = bucket?.pop();
21
+ if (target) {
22
+ this._size--;
23
+ this._bytes -= width * height * 4;
24
+ if (!bucket.length) {
25
+ this._targets.delete(key);
26
+ }
27
+ return target;
28
+ }
29
+ const result = new WebGLRenderTarget(this._gl, width, height);
30
+ try {
31
+ result.initFrameBuffer();
32
+ if (this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER) !== this._gl.FRAMEBUFFER_COMPLETE) {
33
+ throw new Error(`Cannot allocate filter framebuffer ${width}x${height}.`);
34
+ }
35
+ return result;
36
+ }
37
+ catch (error) {
38
+ result.dispose();
39
+ throw error;
40
+ }
41
+ }
42
+ release(target) {
43
+ const bytes = target.width * target.height * 4;
44
+ if (bytes > BYTE_LIMIT) {
45
+ target.dispose();
46
+ return;
47
+ }
48
+ while (this._size >= COUNT_LIMIT || this._bytes + bytes > BYTE_LIMIT) {
49
+ const oldest = this._targets.entries().next().value;
50
+ if (!oldest)
51
+ break;
52
+ const [key, bucket] = oldest;
53
+ const removed = bucket.pop();
54
+ this._size--;
55
+ this._bytes -= removed.width * removed.height * 4;
56
+ removed.dispose();
57
+ if (!bucket.length) {
58
+ this._targets.delete(key);
59
+ }
60
+ }
61
+ const key = `${target.width}x${target.height}`;
62
+ const bucket = this._targets.get(key) ?? [];
63
+ bucket.push(target);
64
+ this._targets.set(key, bucket);
65
+ this._size++;
66
+ this._bytes += bytes;
67
+ }
68
+ clear(contextLost = false) {
69
+ if (!contextLost) {
70
+ for (const bucket of this._targets.values()) {
71
+ for (const target of bucket) {
72
+ target.dispose();
73
+ }
74
+ }
75
+ }
76
+ this._targets.clear();
77
+ this._size = this._bytes = 0;
78
+ }
79
+ }
80
+ //# sourceMappingURL=WebGLFilterTargetPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterTargetPool.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterTargetPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { FilterSampler } from './WebGLFilterSystem.js';
2
+ import type { CustomFilter } from '../../filters/CustomFilter.js';
3
+ import type { WebGLProgram } from './WebGLProgram.js';
4
+ import type { WebGLRenderContext } from './WebGLRenderContext.js';
5
+ /**
6
+ * Context-owned auxiliary textures with independent sampling state.
7
+ */
8
+ export declare class WebGLFilterTextures {
9
+ private readonly _context;
10
+ private _cache;
11
+ private readonly _entries;
12
+ private readonly _maxUnits;
13
+ constructor(_context: WebGLRenderContext);
14
+ bind(program: WebGLProgram, filter: CustomFilter, inputs?: Record<string, FilterSampler>): void;
15
+ clear(contextLost?: boolean): void;
16
+ }
17
+ //# sourceMappingURL=WebGLFilterTextures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterTextures.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterTextures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAQlE;;GAEG;AACH,qBAAa,mBAAmB;IAKZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ5C,OAAO,CAAC,MAAM,CAAyD;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEC,QAAQ,EAAE,kBAAkB;IAIzD,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAM,GAAG,IAAI;IAoFnG,KAAK,CAAC,WAAW,UAAQ,GAAG,IAAI;CAavC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Context-owned auxiliary textures with independent sampling state.
3
+ */
4
+ export class WebGLFilterTextures {
5
+ _context;
6
+ _cache = new WeakMap();
7
+ _entries = new Set();
8
+ _maxUnits;
9
+ constructor(_context) {
10
+ this._context = _context;
11
+ this._maxUnits = _context.gl.getParameter(_context.gl.MAX_TEXTURE_IMAGE_UNITS);
12
+ }
13
+ bind(program, filter, inputs = {}) {
14
+ const gl = this._context.gl;
15
+ for (const name of Object.keys({ ...filter.textures, ...inputs })) {
16
+ if (['uSampler', 'projectionVector', 'uTextureSize', 'uInputSize', 'uInputClamp', 'uOutputSize', 'uResolution'].includes(name)
17
+ || (inputs[name] && filter.textures[name]))
18
+ throw new Error(`Conflicting filter pass texture ${name}.`);
19
+ }
20
+ const resources = Object.keys({ ...filter.textures, ...inputs }).filter(name => program.uniforms[name] || program.uniforms[`${name}Matrix`] || program.uniforms[`${name}Clamp`]);
21
+ if (resources.length >= this._maxUnits)
22
+ throw new Error('CustomFilter exceeds available texture units (including uSampler).');
23
+ try {
24
+ for (let i = 0; i < resources.length; i++) {
25
+ const name = resources[i];
26
+ for (const [suffix, type] of [['Matrix', gl.FLOAT_MAT3], ['Clamp', gl.FLOAT_VEC4]]) {
27
+ const info = program.uniformInfo[`${name}${suffix}`];
28
+ if (info && (info.type !== type || info.size !== 1)) {
29
+ throw new Error(`CustomFilter ${name}${suffix} has an invalid automatic uniform type.`);
30
+ }
31
+ }
32
+ if (program.uniformInfo[name] && (program.uniformInfo[name].type !== gl.SAMPLER_2D || program.uniformInfo[name].size !== 1)) {
33
+ throw new Error(`CustomFilter texture ${name} requires a scalar sampler2D.`);
34
+ }
35
+ const borrowed = inputs[name];
36
+ if (borrowed) {
37
+ gl.activeTexture(gl.TEXTURE0 + i + 1);
38
+ gl.bindTexture(gl.TEXTURE_2D, borrowed.texture);
39
+ if (program.uniforms[name]) {
40
+ gl.uniform1i(program.uniforms[name], i + 1);
41
+ }
42
+ const matrix = program.uniforms[`${name}Matrix`];
43
+ if (matrix) {
44
+ gl.uniformMatrix3fv(matrix, false, new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]));
45
+ }
46
+ const clamp = program.uniforms[`${name}Clamp`];
47
+ if (clamp) {
48
+ gl.uniform4f(clamp, 0.5 / borrowed.width, 0.5 / borrowed.height, 1 - 0.5 / borrowed.width, 1 - 0.5 / borrowed.height);
49
+ }
50
+ continue;
51
+ }
52
+ const resource = filter.textures[name];
53
+ const data = resource.source;
54
+ const source = data.source;
55
+ if (!source || source instanceof ArrayBuffer)
56
+ throw new Error(`CustomFilter texture ${name} has no image source.`);
57
+ if (data.width <= 0 || data.height <= 0 || data.width > this._context.maxTextureSize || data.height > this._context.maxTextureSize) {
58
+ throw new Error(`CustomFilter texture ${name} has invalid dimensions.`);
59
+ }
60
+ const transform = resource.transform ?? [1, 0, 0, -1, 0, 1];
61
+ if (transform.length !== 6 || transform.some(n => !Number.isFinite(n))) {
62
+ throw new Error(`CustomFilter texture ${name} requires a finite affine transform.`);
63
+ }
64
+ gl.activeTexture(gl.TEXTURE0 + i + 1);
65
+ let variants = this._cache.get(data);
66
+ if (!variants) {
67
+ variants = new Map();
68
+ this._cache.set(data, variants);
69
+ }
70
+ const smoothing = resource.smoothing ?? true;
71
+ let entry = variants.get(smoothing);
72
+ if (!entry) {
73
+ const texture = this._context.createTexture(source, data.premultipliedAlpha);
74
+ entry = { texture, version: data.contentVersion, token: {} };
75
+ variants.set(smoothing, entry);
76
+ for (const ref of this._entries) {
77
+ if (!ref.deref()) {
78
+ this._entries.delete(ref);
79
+ }
80
+ }
81
+ this._entries.add(new WeakRef(entry));
82
+ this._context.registerTextureForGC(entry, texture, entry.token);
83
+ const sampling = smoothing ? gl.LINEAR : gl.NEAREST;
84
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, sampling);
85
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, sampling);
86
+ }
87
+ else if (entry.version !== data.contentVersion) {
88
+ this._context.updateTexture(entry.texture, source, data.premultipliedAlpha);
89
+ entry.version = data.contentVersion;
90
+ }
91
+ gl.bindTexture(gl.TEXTURE_2D, entry.texture);
92
+ if (program.uniforms[name]) {
93
+ gl.uniform1i(program.uniforms[name], i + 1);
94
+ }
95
+ const matrix = program.uniforms[`${name}Matrix`];
96
+ if (matrix) {
97
+ const [a, b, c, d, tx, ty] = transform;
98
+ gl.uniformMatrix3fv(matrix, false, new Float32Array([a, b, 0, c, d, 0, tx, ty, 1]));
99
+ }
100
+ const clamp = program.uniforms[`${name}Clamp`];
101
+ if (clamp) {
102
+ gl.uniform4f(clamp, 0.5 / data.width, 0.5 / data.height, 1 - 0.5 / data.width, 1 - 0.5 / data.height);
103
+ }
104
+ }
105
+ }
106
+ finally {
107
+ gl.activeTexture(gl.TEXTURE0);
108
+ }
109
+ }
110
+ clear(contextLost = false) {
111
+ for (const ref of this._entries) {
112
+ const entry = ref.deref();
113
+ if (entry) {
114
+ this._context.unregisterTextureGC(entry.token);
115
+ if (!contextLost) {
116
+ this._context.deleteTexture(entry.texture);
117
+ }
118
+ }
119
+ }
120
+ this._entries.clear();
121
+ this._cache = new WeakMap();
122
+ }
123
+ }
124
+ //# sourceMappingURL=WebGLFilterTextures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGLFilterTextures.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLFilterTextures.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,16 @@ export type UniformMap = Record<string, WebGLUniformLocation | null>;
3
3
  export type AttributeMap = Record<string, number>;
4
4
  type NativeWebGLProgram = NonNullable<ReturnType<GL['createProgram']>>;
5
5
  export declare class WebGLProgram {
6
- private static readonly _cache;
6
+ private static _cache;
7
7
  static get(gl: GL, vertSrc: string, fragSrc: string, key: string): WebGLProgram;
8
- static clearCache(): void;
8
+ static clearCache(gl?: GL, contextLost?: boolean): void;
9
9
  readonly id: NativeWebGLProgram;
10
10
  readonly uniforms: UniformMap;
11
11
  readonly attributes: AttributeMap;
12
+ readonly uniformInfo: Record<string, {
13
+ type: number;
14
+ size: number;
15
+ }>;
12
16
  private constructor();
13
17
  }
14
18
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"WebGLProgram.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLProgram.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,KAAK,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEvE,qBAAa,YAAY;IAGxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAmC;WAEnD,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;WAOxE,UAAU,IAAI,IAAI;IAMhC,SAAgB,EAAE,EAAE,kBAAkB,CAAC;IACvC,SAAgB,QAAQ,EAAE,UAAU,CAAM;IAC1C,SAAgB,UAAU,EAAE,YAAY,CAAM;IAE9C,OAAO;CAeP"}
1
+ {"version":3,"file":"WebGLProgram.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLProgram.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD,KAAK,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEvE,qBAAa,YAAY;IAGxB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAgD;WAEvD,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;WAexE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,UAAQ,GAAG,IAAI;IAgB5D,SAAgB,EAAE,EAAE,kBAAkB,CAAC;IACvC,SAAgB,QAAQ,EAAE,UAAU,CAAM;IAC1C,SAAgB,UAAU,EAAE,YAAY,CAAM;IAC9C,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAEjF,OAAO;CAgBP"}
@@ -1,26 +1,47 @@
1
1
  import { createProgram } from './WebGLUtils.js';
2
2
  export class WebGLProgram {
3
3
  // ── Static ────────────────────────────────────────────────────────────────
4
- static _cache = new Map();
4
+ static _cache = new WeakMap();
5
5
  static get(gl, vertSrc, fragSrc, key) {
6
- if (!this._cache.has(key)) {
7
- this._cache.set(key, new WebGLProgram(gl, vertSrc, fragSrc));
6
+ let cache = this._cache.get(gl);
7
+ if (!cache) {
8
+ cache = new Map();
9
+ this._cache.set(gl, cache);
8
10
  }
9
- return this._cache.get(key);
11
+ const sourceKey = JSON.stringify([key, vertSrc, fragSrc]);
12
+ let program = cache.get(sourceKey);
13
+ if (!program) {
14
+ program = new WebGLProgram(gl, vertSrc, fragSrc, key);
15
+ cache.set(sourceKey, program);
16
+ }
17
+ return program;
10
18
  }
11
- static clearCache() {
12
- this._cache.clear();
19
+ static clearCache(gl, contextLost = false) {
20
+ if (gl) {
21
+ const cache = this._cache.get(gl);
22
+ if (cache && !contextLost) {
23
+ for (const program of cache.values()) {
24
+ gl.deleteProgram(program.id);
25
+ }
26
+ }
27
+ this._cache.delete(gl);
28
+ }
29
+ else {
30
+ this._cache = new WeakMap();
31
+ }
13
32
  }
14
33
  // ── Instance ──────────────────────────────────────────────────────────────
15
34
  id;
16
35
  uniforms = {};
17
36
  attributes = {};
18
- constructor(gl, vertSrc, fragSrc) {
19
- this.id = createProgram(gl, vertSrc, fragSrc);
37
+ uniformInfo = {};
38
+ constructor(gl, vertSrc, fragSrc, name) {
39
+ this.id = createProgram(gl, vertSrc, fragSrc, name);
20
40
  const totalUniforms = gl.getProgramParameter(this.id, gl.ACTIVE_UNIFORMS);
21
41
  for (let i = 0; i < totalUniforms; i++) {
22
42
  const info = gl.getActiveUniform(this.id, i);
23
43
  this.uniforms[info.name] = gl.getUniformLocation(this.id, info.name);
44
+ this.uniformInfo[info.name] = { type: info.type, size: info.size };
24
45
  }
25
46
  const totalAttribs = gl.getProgramParameter(this.id, gl.ACTIVE_ATTRIBUTES);
26
47
  for (let i = 0; i < totalAttribs; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"WebGLProgram.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,MAAM,OAAO,YAAY;IACxB,6EAA6E;IAErE,MAAM,CAAU,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE1D,MAAM,CAAC,GAAG,CAAC,EAAM,EAAE,OAAe,EAAE,OAAe,EAAE,GAAW;QACtE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,UAAU;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,6EAA6E;IAE7D,EAAE,CAAqB;IACvB,QAAQ,GAAe,EAAE,CAAC;IAC1B,UAAU,GAAiB,EAAE,CAAC;IAE9C,YAAoB,EAAM,EAAE,OAAe,EAAE,OAAe;QAC3D,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC;QAE/C,MAAM,aAAa,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAW,CAAC;QACpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAW,CAAC;QACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACF,CAAC"}
1
+ {"version":3,"file":"WebGLProgram.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLProgram.ts"],"names":[],"mappings":"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"}