@kurot/core 1.0.20 → 1.0.21
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.
- package/dist/kurot/display/DisplayObject.d.ts.map +1 -1
- package/dist/kurot/display/DisplayObject.js +6 -0
- package/dist/kurot/display/DisplayObject.js.map +1 -1
- package/dist/kurot/display/Mesh.d.ts +5 -2
- package/dist/kurot/display/Mesh.d.ts.map +1 -1
- package/dist/kurot/display/Mesh.js +5 -2
- package/dist/kurot/display/Mesh.js.map +1 -1
- package/dist/kurot/filters/BloomFilter.d.ts +40 -0
- package/dist/kurot/filters/BloomFilter.d.ts.map +1 -0
- package/dist/kurot/filters/BloomFilter.js +51 -0
- package/dist/kurot/filters/BloomFilter.js.map +1 -0
- package/dist/kurot/filters/BloomShaders.d.ts +10 -0
- package/dist/kurot/filters/BloomShaders.d.ts.map +1 -0
- package/dist/kurot/filters/BloomShaders.js +54 -0
- package/dist/kurot/filters/BloomShaders.js.map +1 -0
- package/dist/kurot/filters/BlurFilter.d.ts +4 -0
- package/dist/kurot/filters/BlurFilter.d.ts.map +1 -1
- package/dist/kurot/filters/BlurFilter.js +23 -6
- package/dist/kurot/filters/BlurFilter.js.map +1 -1
- package/dist/kurot/filters/CustomFilter.d.ts +44 -1
- package/dist/kurot/filters/CustomFilter.d.ts.map +1 -1
- package/dist/kurot/filters/CustomFilter.js +56 -17
- package/dist/kurot/filters/CustomFilter.js.map +1 -1
- package/dist/kurot/filters/DropShadowFilter.d.ts.map +1 -1
- package/dist/kurot/filters/DropShadowFilter.js +1 -0
- package/dist/kurot/filters/DropShadowFilter.js.map +1 -1
- package/dist/kurot/filters/Filter.d.ts +15 -0
- package/dist/kurot/filters/Filter.d.ts.map +1 -1
- package/dist/kurot/filters/Filter.js +58 -0
- package/dist/kurot/filters/Filter.js.map +1 -1
- package/dist/kurot/filters/FilterTexture.d.ts +21 -0
- package/dist/kurot/filters/FilterTexture.d.ts.map +1 -0
- package/dist/kurot/filters/FilterTexture.js +2 -0
- package/dist/kurot/filters/FilterTexture.js.map +1 -0
- package/dist/kurot/filters/GlowFilter.d.ts.map +1 -1
- package/dist/kurot/filters/GlowFilter.js +6 -0
- package/dist/kurot/filters/GlowFilter.js.map +1 -1
- package/dist/kurot/filters/MultiPassFilter.d.ts +41 -0
- package/dist/kurot/filters/MultiPassFilter.d.ts.map +1 -0
- package/dist/kurot/filters/MultiPassFilter.js +53 -0
- package/dist/kurot/filters/MultiPassFilter.js.map +1 -0
- package/dist/kurot/filters/index.d.ts +6 -0
- package/dist/kurot/filters/index.d.ts.map +1 -1
- package/dist/kurot/filters/index.js +2 -0
- package/dist/kurot/filters/index.js.map +1 -1
- package/dist/kurot/player/Player.d.ts.map +1 -1
- package/dist/kurot/player/Player.js +1 -0
- package/dist/kurot/player/Player.js.map +1 -1
- package/dist/kurot/player/canvas/CanvasRenderer.d.ts.map +1 -1
- package/dist/kurot/player/canvas/CanvasRenderer.js +15 -13
- package/dist/kurot/player/canvas/CanvasRenderer.js.map +1 -1
- package/dist/kurot/player/pipes/FilterPipe.d.ts.map +1 -1
- package/dist/kurot/player/pipes/FilterPipe.js +23 -18
- package/dist/kurot/player/pipes/FilterPipe.js.map +1 -1
- package/dist/kurot/player/pipes/MaskPipe.d.ts.map +1 -1
- package/dist/kurot/player/pipes/MaskPipe.js +6 -0
- package/dist/kurot/player/pipes/MaskPipe.js.map +1 -1
- package/dist/kurot/player/pipes/filter-bounds.d.ts +8 -0
- package/dist/kurot/player/pipes/filter-bounds.d.ts.map +1 -0
- package/dist/kurot/player/pipes/filter-bounds.js +25 -0
- package/dist/kurot/player/pipes/filter-bounds.js.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterSystem.d.ts +27 -0
- package/dist/kurot/player/webgl/WebGLFilterSystem.d.ts.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterSystem.js +119 -0
- package/dist/kurot/player/webgl/WebGLFilterSystem.js.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterTargetPool.d.ts +18 -0
- package/dist/kurot/player/webgl/WebGLFilterTargetPool.d.ts.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterTargetPool.js +80 -0
- package/dist/kurot/player/webgl/WebGLFilterTargetPool.js.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterTextures.d.ts +17 -0
- package/dist/kurot/player/webgl/WebGLFilterTextures.d.ts.map +1 -0
- package/dist/kurot/player/webgl/WebGLFilterTextures.js +124 -0
- package/dist/kurot/player/webgl/WebGLFilterTextures.js.map +1 -0
- package/dist/kurot/player/webgl/WebGLProgram.d.ts +6 -2
- package/dist/kurot/player/webgl/WebGLProgram.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLProgram.js +29 -8
- package/dist/kurot/player/webgl/WebGLProgram.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts +2 -0
- package/dist/kurot/player/webgl/WebGLRenderBuffer.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderBuffer.js +3 -0
- package/dist/kurot/player/webgl/WebGLRenderBuffer.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderContext.d.ts +15 -6
- package/dist/kurot/player/webgl/WebGLRenderContext.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderContext.js +200 -145
- package/dist/kurot/player/webgl/WebGLRenderContext.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderer.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderer.js +143 -110
- package/dist/kurot/player/webgl/WebGLRenderer.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLUtils.d.ts +2 -2
- package/dist/kurot/player/webgl/WebGLUtils.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLUtils.js +35 -12
- package/dist/kurot/player/webgl/WebGLUtils.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts +2 -0
- package/dist/kurot/player/webgl/WebGLVertexArrayObject.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLVertexArrayObject.js +3 -1
- package/dist/kurot/player/webgl/WebGLVertexArrayObject.js.map +1 -1
- package/dist/kurot/player/webgl/custom-filter-uniforms.d.ts +6 -0
- package/dist/kurot/player/webgl/custom-filter-uniforms.d.ts.map +1 -0
- package/dist/kurot/player/webgl/custom-filter-uniforms.js +116 -0
- package/dist/kurot/player/webgl/custom-filter-uniforms.js.map +1 -0
- package/dist/kurot/player/webgl/split-mesh.d.ts +9 -0
- package/dist/kurot/player/webgl/split-mesh.d.ts.map +1 -0
- package/dist/kurot/player/webgl/split-mesh.js +29 -0
- package/dist/kurot/player/webgl/split-mesh.js.map +1 -0
- package/dist/kurot/system/Capabilities.js +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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,
|
|
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
|
|
4
|
+
static _cache = new WeakMap();
|
|
5
5
|
static get(gl, vertSrc, fragSrc, key) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
let cache = this._cache.get(gl);
|
|
7
|
+
if (!cache) {
|
|
8
|
+
cache = new Map();
|
|
9
|
+
this._cache.set(gl, cache);
|
|
8
10
|
}
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"WebGLProgram.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLProgram.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Matrix } from '../../geom/Matrix.js';
|
|
2
|
+
import { Rectangle } from '../../geom/Rectangle.js';
|
|
2
3
|
import { WebGLRenderTarget } from './WebGLRenderTarget.js';
|
|
3
4
|
import { WebGLRenderContext } from './WebGLRenderContext.js';
|
|
4
5
|
import type { RenderBuffer } from '../RenderBuffer.js';
|
|
@@ -30,6 +31,7 @@ export declare class WebGLRenderBuffer implements RenderBuffer {
|
|
|
30
31
|
offscreenLocalY: number;
|
|
31
32
|
filterPadX: number;
|
|
32
33
|
filterPadY: number;
|
|
34
|
+
filterBounds?: Rectangle;
|
|
33
35
|
stencilList: {
|
|
34
36
|
x: number;
|
|
35
37
|
y: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGLRenderBuffer.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLRenderBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"WebGLRenderBuffer.d.ts","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLRenderBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,7 @@ export class WebGLRenderBuffer {
|
|
|
32
32
|
static release(buf) {
|
|
33
33
|
buf.filterPadX = 0;
|
|
34
34
|
buf.filterPadY = 0;
|
|
35
|
+
buf.filterBounds = undefined;
|
|
35
36
|
buf.hasOffscreenTransform = false;
|
|
36
37
|
if (_pool.length < 6) {
|
|
37
38
|
_pool.push(buf);
|
|
@@ -66,6 +67,7 @@ export class WebGLRenderBuffer {
|
|
|
66
67
|
offscreenLocalY = 0;
|
|
67
68
|
filterPadX = 0;
|
|
68
69
|
filterPadY = 0;
|
|
70
|
+
filterBounds;
|
|
69
71
|
stencilList = [];
|
|
70
72
|
stencilHandleCount = 0;
|
|
71
73
|
scissorState = false;
|
|
@@ -191,6 +193,7 @@ export class WebGLRenderBuffer {
|
|
|
191
193
|
this.offscreenLocalY = 0;
|
|
192
194
|
this.filterPadX = 0;
|
|
193
195
|
this.filterPadY = 0;
|
|
196
|
+
this.filterBounds = undefined;
|
|
194
197
|
this.stencilList.length = 0;
|
|
195
198
|
this.stencilHandleCount = 0;
|
|
196
199
|
this.scissorState = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGLRenderBuffer.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLRenderBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,KAAK,GAAwB,EAAE,CAAC;AAEtC,MAAM,OAAO,iBAAiB;IAC7B,6EAA6E;IAEtE,MAAM,CAAC,MAAM,CAAC,OAA2B,EAAE,KAAa,EAAE,MAAc;QAC9E,IAAI,GAAkC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAClC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnB,MAAM;YACP,CAAC;QACF,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACT,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1B,GAAG,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,kEAAkE;IAC3D,MAAM,CAAC,qBAAqB,CAAC,OAA2B;QAC9D,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YACjD,CAAC;QACF,CAAC;IACF,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,GAAsB;QAC3C,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACpB,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;IACF,CAAC;IAED,6EAA6E;IAE7D,OAAO,CAAqB;IAC5B,gBAAgB,CAAoB;IACpC,MAAM,CAAU;IAEhC,6EAA6E;IAEtE,WAAW,GAAG,CAAC,CAAC;IAChB,eAAe,GAAG,QAAQ,CAAC;IAC3B,YAAY,GAAW,IAAI,MAAM,EAAE,CAAC;IACpC,iBAAiB,GAAW,IAAI,MAAM,EAAE,CAAC;IACzC,OAAO,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC;IACZ,cAAc,CAAgB;IAC9B,SAAS,GAAG,CAAC,CAAC;IACrB;;OAEG;IACI,UAAU,GAAG,CAAC,CAAC;IAEf,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,CAAC,CAAC;IACrB,qBAAqB,GAAG,KAAK,CAAC;IACrB,yBAAyB,GAAW,IAAI,MAAM,EAAE,CAAC;IAC1D,eAAe,GAAG,CAAC,CAAC;IACpB,eAAe,GAAG,CAAC,CAAC;IACpB,UAAU,GAAG,CAAC,CAAC;IACf,UAAU,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"WebGLRenderBuffer.js","sourceRoot":"","sources":["../../../../src/kurot/player/webgl/WebGLRenderBuffer.ts"],"names":[],"mappings":"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"}
|