@swf2es/context3d 0.0.0-stage → 0.1.0
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/LICENSE +202 -0
- package/README.md +219 -2
- package/dist/agal.d.ts +23 -0
- package/dist/agal.d.ts.map +1 -0
- package/dist/agal.js +410 -0
- package/dist/agal.js.map +1 -0
- package/dist/backend.d.ts +122 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +63 -0
- package/dist/backend.js.map +1 -0
- package/dist/device/index.d.ts +3 -0
- package/dist/device/index.d.ts.map +1 -0
- package/dist/device/index.js +6 -0
- package/dist/device/index.js.map +1 -0
- package/dist/device/programs.d.ts +13 -0
- package/dist/device/programs.d.ts.map +1 -0
- package/dist/device/programs.js +59 -0
- package/dist/device/programs.js.map +1 -0
- package/dist/device/state.d.ts +53 -0
- package/dist/device/state.d.ts.map +1 -0
- package/dist/device/state.js +196 -0
- package/dist/device/state.js.map +1 -0
- package/dist/dxt.d.ts +22 -0
- package/dist/dxt.d.ts.map +1 -0
- package/dist/dxt.js +304 -0
- package/dist/dxt.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +8 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/webgl/buffers.d.ts +27 -0
- package/dist/webgl/buffers.d.ts.map +1 -0
- package/dist/webgl/buffers.js +53 -0
- package/dist/webgl/buffers.js.map +1 -0
- package/dist/webgl/context.d.ts +123 -0
- package/dist/webgl/context.d.ts.map +1 -0
- package/dist/webgl/context.js +1368 -0
- package/dist/webgl/context.js.map +1 -0
- package/dist/webgl/index.d.ts +3 -0
- package/dist/webgl/index.d.ts.map +1 -0
- package/dist/webgl/index.js +2 -0
- package/dist/webgl/index.js.map +1 -0
- package/dist/webgl/limits.d.ts +23 -0
- package/dist/webgl/limits.d.ts.map +1 -0
- package/dist/webgl/limits.js +35 -0
- package/dist/webgl/limits.js.map +1 -0
- package/dist/webgl/programs.d.ts +22 -0
- package/dist/webgl/programs.d.ts.map +1 -0
- package/dist/webgl/programs.js +110 -0
- package/dist/webgl/programs.js.map +1 -0
- package/dist/webgl/state.d.ts +42 -0
- package/dist/webgl/state.d.ts.map +1 -0
- package/dist/webgl/state.js +55 -0
- package/dist/webgl/state.js.map +1 -0
- package/dist/webgl/targets.d.ts +20 -0
- package/dist/webgl/targets.d.ts.map +1 -0
- package/dist/webgl/targets.js +138 -0
- package/dist/webgl/targets.js.map +1 -0
- package/dist/webgl/textures.d.ts +28 -0
- package/dist/webgl/textures.d.ts.map +1 -0
- package/dist/webgl/textures.js +119 -0
- package/dist/webgl/textures.js.map +1 -0
- package/dist/webgl/validation.d.ts +4 -0
- package/dist/webgl/validation.d.ts.map +1 -0
- package/dist/webgl/validation.js +52 -0
- package/dist/webgl/validation.js.map +1 -0
- package/package.json +37 -3
- package/src/agal.ts +496 -0
- package/src/backend.ts +210 -0
- package/src/device/index.ts +5 -0
- package/src/device/programs.ts +66 -0
- package/src/device/state.ts +214 -0
- package/src/dxt.ts +349 -0
- package/src/errors.ts +68 -0
- package/src/index.ts +35 -0
- package/src/webgl/buffers.ts +102 -0
- package/src/webgl/context.ts +1803 -0
- package/src/webgl/index.ts +2 -0
- package/src/webgl/limits.ts +61 -0
- package/src/webgl/programs.ts +145 -0
- package/src/webgl/state.ts +65 -0
- package/src/webgl/targets.ts +229 -0
- package/src/webgl/textures.ts +200 -0
- package/src/webgl/validation.ts +72 -0
package/dist/dxt.js
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
// S3TC's DXT1 and DXT5 on the CPU: blocks decoded to RGBA for a backend
|
|
2
|
+
// whose GPU takes no S3TC (WEBGL_compressed_texture_s3tc absent), and RGBA
|
|
3
|
+
// encoded to blocks for pixels uploaded to a compressed texture, which AIR
|
|
4
|
+
// compresses too. DXT1 is "compressed": a block whose first colour is not
|
|
5
|
+
// above its second has a third, the midpoint, and transparent black for its
|
|
6
|
+
// fourth index, as AIR draws it (GL's COMPRESSED_RGBA_S3TC_DXT1). DXT5's
|
|
7
|
+
// colours always have four.
|
|
8
|
+
/** RGB565 as 0xRRGGBB, each channel's high bits repeated into its low ones. */
|
|
9
|
+
function rgb(c) {
|
|
10
|
+
const r = (c >> 11) & 31;
|
|
11
|
+
const g = (c >> 5) & 63;
|
|
12
|
+
const b = c & 31;
|
|
13
|
+
return (((r << 3) | (r >> 2)) << 16) | (((g << 2) | (g >> 4)) << 8) | ((b << 3) | (b >> 2));
|
|
14
|
+
}
|
|
15
|
+
/** `a` weighted `wa` against `b`, per channel of two 0xRRGGBB colours, over `total`. */
|
|
16
|
+
function mix(a, b, wa, wb, total) {
|
|
17
|
+
let out = 0;
|
|
18
|
+
for (let shift = 0; shift < 24; shift += 8) {
|
|
19
|
+
const channel = ((((a >> shift) & 255) * wa + ((b >> shift) & 255) * wb) / total) | 0;
|
|
20
|
+
out |= channel << shift;
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/** DXT1's fourth colour where a block has three: black, and the one transparent texel. */
|
|
25
|
+
const TRANSPARENT = -1;
|
|
26
|
+
const palette = new Int32Array(4);
|
|
27
|
+
const texels = new Int32Array(16);
|
|
28
|
+
const alphas = new Uint8Array(8);
|
|
29
|
+
/**
|
|
30
|
+
* `blocks`, a level `width` by `height` of DXT1 (8 bytes a 4x4 block) or,
|
|
31
|
+
* with `dxt5`, DXT5 (16), rows of blocks from the top, written to `out` as
|
|
32
|
+
* top-down RGBA rows of `width` pixels. The level's edge blocks may stand
|
|
33
|
+
* past it, as a 2x2 level's one block does; what stands past is dropped.
|
|
34
|
+
*/
|
|
35
|
+
export function decodeDxt(blocks, dxt5, width, height, out) {
|
|
36
|
+
const size = dxt5 ? 16 : 8;
|
|
37
|
+
const across = Math.max(1, (width + 3) >> 2);
|
|
38
|
+
const down = Math.max(1, (height + 3) >> 2);
|
|
39
|
+
for (let by = 0; by < down; by++) {
|
|
40
|
+
for (let bx = 0; bx < across; bx++) {
|
|
41
|
+
const at = (by * across + bx) * size;
|
|
42
|
+
const colour = dxt5 ? at + 8 : at;
|
|
43
|
+
const c0 = blocks[colour] | (blocks[colour + 1] << 8);
|
|
44
|
+
const c1 = blocks[colour + 2] | (blocks[colour + 3] << 8);
|
|
45
|
+
palette[0] = rgb(c0);
|
|
46
|
+
palette[1] = rgb(c1);
|
|
47
|
+
if (dxt5 || c0 > c1) {
|
|
48
|
+
palette[2] = mix(palette[0], palette[1], 2, 1, 3);
|
|
49
|
+
palette[3] = mix(palette[0], palette[1], 1, 2, 3);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
palette[2] = mix(palette[0], palette[1], 1, 1, 2);
|
|
53
|
+
palette[3] = TRANSPARENT;
|
|
54
|
+
}
|
|
55
|
+
if (dxt5) {
|
|
56
|
+
const a0 = blocks[at];
|
|
57
|
+
const a1 = blocks[at + 1];
|
|
58
|
+
alphas[0] = a0;
|
|
59
|
+
alphas[1] = a1;
|
|
60
|
+
if (a0 > a1) {
|
|
61
|
+
for (let i = 1; i < 7; i++) {
|
|
62
|
+
alphas[i + 1] = (((7 - i) * a0 + i * a1) / 7) | 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
for (let i = 1; i < 5; i++) {
|
|
67
|
+
alphas[i + 1] = (((5 - i) * a0 + i * a1) / 5) | 0;
|
|
68
|
+
}
|
|
69
|
+
alphas[6] = 0;
|
|
70
|
+
alphas[7] = 255;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const indices = (blocks[colour + 4] |
|
|
74
|
+
(blocks[colour + 5] << 8) |
|
|
75
|
+
(blocks[colour + 6] << 16) |
|
|
76
|
+
(blocks[colour + 7] << 24)) >>>
|
|
77
|
+
0;
|
|
78
|
+
// DXT5's 48 bits of 3-bit alpha indices, as two 24-bit halves.
|
|
79
|
+
const low = dxt5 ? blocks[at + 2] | (blocks[at + 3] << 8) | (blocks[at + 4] << 16) : 0;
|
|
80
|
+
const high = dxt5 ? blocks[at + 5] | (blocks[at + 6] << 8) | (blocks[at + 7] << 16) : 0;
|
|
81
|
+
for (let y = 0; y < 4; y++) {
|
|
82
|
+
const py = by * 4 + y;
|
|
83
|
+
if (py >= height) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
for (let x = 0; x < 4; x++) {
|
|
87
|
+
const px = bx * 4 + x;
|
|
88
|
+
if (px >= width) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
const i = y * 4 + x;
|
|
92
|
+
const c = palette[(indices >>> (i * 2)) & 3];
|
|
93
|
+
const o = (py * width + px) * 4;
|
|
94
|
+
if (c === TRANSPARENT) {
|
|
95
|
+
out[o] = out[o + 1] = out[o + 2] = out[o + 3] = 0;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
out[o] = c >> 16;
|
|
99
|
+
out[o + 1] = c >> 8;
|
|
100
|
+
out[o + 2] = c;
|
|
101
|
+
out[o + 3] = dxt5 ? alphas[(i < 8 ? low >> (i * 3) : high >> ((i - 8) * 3)) & 7] : 255;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** A colour's distance from palette entry `c`, squared, per channel. */
|
|
108
|
+
function distance(r, g, b, c) {
|
|
109
|
+
const dr = r - ((c >> 16) & 255);
|
|
110
|
+
const dg = g - ((c >> 8) & 255);
|
|
111
|
+
const db = b - (c & 255);
|
|
112
|
+
return dr * dr + dg * dg + db * db;
|
|
113
|
+
}
|
|
114
|
+
/** 0xRRGGBB as RGB565. */
|
|
115
|
+
function pack(r, g, b) {
|
|
116
|
+
return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
|
|
117
|
+
}
|
|
118
|
+
/** The bytes of a level `width` by `height` as DXT1's blocks, or DXT5's: one block at least. */
|
|
119
|
+
export function blockBytes(width, height, dxt5) {
|
|
120
|
+
return Math.max(1, (width + 3) >> 2) * Math.max(1, (height + 3) >> 2) * (dxt5 ? 16 : 8);
|
|
121
|
+
}
|
|
122
|
+
/** encodeDxt's output, kept for the next level: each upload copies its blocks out at once. */
|
|
123
|
+
let encoded = new Uint8Array(0);
|
|
124
|
+
/**
|
|
125
|
+
* `rgba`, top-down RGBA rows of `width` pixels, `height` high, as blocks,
|
|
126
|
+
* DXT1's or with `dxt5` DXT5's, for `decodeDxt` or a GPU: each block's
|
|
127
|
+
* colours on the line through them that their spread runs along (its
|
|
128
|
+
* principal axis, by a few power iterations), between the pixels that lie
|
|
129
|
+
* farthest out on it, four of them always; DXT5's alpha between its lowest
|
|
130
|
+
* and highest, eight. A level smaller than a block repeats its pixels across
|
|
131
|
+
* it. The result is a view of a buffer the next call reuses.
|
|
132
|
+
*/
|
|
133
|
+
export function encodeDxt(rgba, dxt5, width, height) {
|
|
134
|
+
const size = dxt5 ? 16 : 8;
|
|
135
|
+
const across = Math.max(1, (width + 3) >> 2);
|
|
136
|
+
const down = Math.max(1, (height + 3) >> 2);
|
|
137
|
+
const length = blockBytes(width, height, dxt5);
|
|
138
|
+
if (encoded.length < length) {
|
|
139
|
+
encoded = new Uint8Array(length);
|
|
140
|
+
}
|
|
141
|
+
const out = encoded;
|
|
142
|
+
for (let by = 0; by < down; by++) {
|
|
143
|
+
for (let bx = 0; bx < across; bx++) {
|
|
144
|
+
const at = (by * across + bx) * size;
|
|
145
|
+
// The block's pixels, its edge repeated past a level smaller than a block.
|
|
146
|
+
let mr = 0;
|
|
147
|
+
let mg = 0;
|
|
148
|
+
let mb = 0;
|
|
149
|
+
let lowA = 255;
|
|
150
|
+
let highA = 0;
|
|
151
|
+
for (let i = 0; i < 16; i++) {
|
|
152
|
+
const p = (Math.min(by * 4 + (i >> 2), height - 1) * width +
|
|
153
|
+
Math.min(bx * 4 + (i & 3), width - 1)) *
|
|
154
|
+
4;
|
|
155
|
+
texels[i] = p;
|
|
156
|
+
mr += rgba[p];
|
|
157
|
+
mg += rgba[p + 1];
|
|
158
|
+
mb += rgba[p + 2];
|
|
159
|
+
lowA = Math.min(lowA, rgba[p + 3]);
|
|
160
|
+
highA = Math.max(highA, rgba[p + 3]);
|
|
161
|
+
}
|
|
162
|
+
mr /= 16;
|
|
163
|
+
mg /= 16;
|
|
164
|
+
mb /= 16;
|
|
165
|
+
// The colours' covariance, and its principal axis.
|
|
166
|
+
let rr = 0;
|
|
167
|
+
let rg = 0;
|
|
168
|
+
let rb = 0;
|
|
169
|
+
let gg = 0;
|
|
170
|
+
let gb = 0;
|
|
171
|
+
let bb = 0;
|
|
172
|
+
for (let i = 0; i < 16; i++) {
|
|
173
|
+
const p = texels[i];
|
|
174
|
+
const r = rgba[p] - mr;
|
|
175
|
+
const g = rgba[p + 1] - mg;
|
|
176
|
+
const b = rgba[p + 2] - mb;
|
|
177
|
+
rr += r * r;
|
|
178
|
+
rg += r * g;
|
|
179
|
+
rb += r * b;
|
|
180
|
+
gg += g * g;
|
|
181
|
+
gb += g * b;
|
|
182
|
+
bb += b * b;
|
|
183
|
+
}
|
|
184
|
+
// Iterated from the pixel farthest from the mean, which no axis is orthogonal to.
|
|
185
|
+
let vr = 0;
|
|
186
|
+
let vg = 0;
|
|
187
|
+
let vb = 0;
|
|
188
|
+
let spread = -1;
|
|
189
|
+
for (let i = 0; i < 16; i++) {
|
|
190
|
+
const p = texels[i];
|
|
191
|
+
const r = rgba[p] - mr;
|
|
192
|
+
const g = rgba[p + 1] - mg;
|
|
193
|
+
const b = rgba[p + 2] - mb;
|
|
194
|
+
if (r * r + g * g + b * b > spread) {
|
|
195
|
+
spread = r * r + g * g + b * b;
|
|
196
|
+
vr = r;
|
|
197
|
+
vg = g;
|
|
198
|
+
vb = b;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
for (let k = 0; k < 4; k++) {
|
|
202
|
+
const nr = rr * vr + rg * vg + rb * vb;
|
|
203
|
+
const ng = rg * vr + gg * vg + gb * vb;
|
|
204
|
+
const nb = rb * vr + gb * vg + bb * vb;
|
|
205
|
+
const m = Math.max(Math.abs(nr), Math.abs(ng), Math.abs(nb));
|
|
206
|
+
if (m === 0) {
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
vr = nr / m;
|
|
210
|
+
vg = ng / m;
|
|
211
|
+
vb = nb / m;
|
|
212
|
+
}
|
|
213
|
+
// The pixels farthest out along it, either way, are the endpoints.
|
|
214
|
+
let first = texels[0];
|
|
215
|
+
let second = texels[0];
|
|
216
|
+
let least = Infinity;
|
|
217
|
+
let most = -Infinity;
|
|
218
|
+
for (let i = 0; i < 16; i++) {
|
|
219
|
+
const p = texels[i];
|
|
220
|
+
const d = rgba[p] * vr + rgba[p + 1] * vg + rgba[p + 2] * vb;
|
|
221
|
+
if (d < least) {
|
|
222
|
+
least = d;
|
|
223
|
+
second = p;
|
|
224
|
+
}
|
|
225
|
+
if (d > most) {
|
|
226
|
+
most = d;
|
|
227
|
+
first = p;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Four colours need the first endpoint above the second; one alike stays one.
|
|
231
|
+
let c0 = pack(rgba[first], rgba[first + 1], rgba[first + 2]);
|
|
232
|
+
let c1 = pack(rgba[second], rgba[second + 1], rgba[second + 2]);
|
|
233
|
+
if (c0 < c1) {
|
|
234
|
+
const swap = c0;
|
|
235
|
+
c0 = c1;
|
|
236
|
+
c1 = swap;
|
|
237
|
+
}
|
|
238
|
+
palette[0] = rgb(c0);
|
|
239
|
+
palette[1] = rgb(c1);
|
|
240
|
+
palette[2] = mix(palette[0], palette[1], 2, 1, 3);
|
|
241
|
+
palette[3] = mix(palette[0], palette[1], 1, 2, 3);
|
|
242
|
+
const colour = dxt5 ? at + 8 : at;
|
|
243
|
+
out[colour] = c0;
|
|
244
|
+
out[colour + 1] = c0 >> 8;
|
|
245
|
+
out[colour + 2] = c1;
|
|
246
|
+
out[colour + 3] = c1 >> 8;
|
|
247
|
+
if (dxt5) {
|
|
248
|
+
// Eight alphas: the first endpoint above the second, or alike.
|
|
249
|
+
alphas[0] = highA;
|
|
250
|
+
alphas[1] = lowA;
|
|
251
|
+
for (let i = 1; i < 7; i++) {
|
|
252
|
+
alphas[i + 1] = (((7 - i) * highA + i * lowA) / 7) | 0;
|
|
253
|
+
}
|
|
254
|
+
out[at] = highA;
|
|
255
|
+
out[at + 1] = lowA;
|
|
256
|
+
}
|
|
257
|
+
let indices = 0;
|
|
258
|
+
let low = 0;
|
|
259
|
+
let high = 0;
|
|
260
|
+
const colours = c0 === c1 ? 1 : 4;
|
|
261
|
+
for (let i = 0; i < 16; i++) {
|
|
262
|
+
const o = texels[i];
|
|
263
|
+
let best = 0;
|
|
264
|
+
let nearest = Infinity;
|
|
265
|
+
for (let p = 0; p < colours; p++) {
|
|
266
|
+
const d = distance(rgba[o], rgba[o + 1], rgba[o + 2], palette[p]);
|
|
267
|
+
if (d < nearest) {
|
|
268
|
+
nearest = d;
|
|
269
|
+
best = p;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
indices |= best << (i * 2);
|
|
273
|
+
if (dxt5) {
|
|
274
|
+
let index = 0;
|
|
275
|
+
for (let p = 1; p < 8; p++) {
|
|
276
|
+
if (Math.abs(rgba[o + 3] - alphas[p]) < Math.abs(rgba[o + 3] - alphas[index])) {
|
|
277
|
+
index = p;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (i < 8) {
|
|
281
|
+
low |= index << (i * 3);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
high |= index << ((i - 8) * 3);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
out[colour + 4] = indices;
|
|
289
|
+
out[colour + 5] = indices >>> 8;
|
|
290
|
+
out[colour + 6] = indices >>> 16;
|
|
291
|
+
out[colour + 7] = indices >>> 24;
|
|
292
|
+
if (dxt5) {
|
|
293
|
+
out[at + 2] = low;
|
|
294
|
+
out[at + 3] = low >> 8;
|
|
295
|
+
out[at + 4] = low >> 16;
|
|
296
|
+
out[at + 5] = high;
|
|
297
|
+
out[at + 6] = high >> 8;
|
|
298
|
+
out[at + 7] = high >> 16;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return out.subarray(0, length);
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=dxt.js.map
|
package/dist/dxt.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dxt.js","sourceRoot":"","sources":["../src/dxt.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,4BAA4B;AAE5B,+EAA+E;AAC/E,SAAS,GAAG,CAAC,CAAS;IACpB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,wFAAwF;AACxF,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa;IACtE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACtF,GAAG,IAAI,OAAO,IAAI,KAAK,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0FAA0F;AAC1F,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC;AAEvB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAUjC;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,MAAkB,EAClB,IAAa,EACb,KAAa,EACb,MAAc,EACd,GAAe;IAEf,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;gBACpB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;YAC3B,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;oBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpD,CAAC;oBACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACd,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GACX,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1B,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC,CAAC;YACJ,+DAA+D;YAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;oBACjB,MAAM;gBACR,CAAC;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;wBAChB,MAAM;oBACR,CAAC;oBAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7C,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;wBACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAClD,SAAS;oBACX,CAAC;oBAED,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACf,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IAC1D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,0BAA0B;AAC1B,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC3C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,IAAa;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,8FAA8F;AAC9F,IAAI,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,IAAgB,EAChB,IAAa,EACb,KAAa,EACb,MAAc;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC;IAEpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;YACrC,2EAA2E;YAC3E,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,IAAI,GAAG,GAAG,CAAC;YACf,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GACL,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK;oBAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxC,CAAC,CAAC;gBACJ,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACd,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClB,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,IAAI,EAAE,CAAC;YACT,EAAE,IAAI,EAAE,CAAC;YACT,mDAAmD;YACnD,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC3B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YAED,kFAAkF;YAClF,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;oBACnC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC/B,EAAE,GAAG,CAAC,CAAC;oBACP,EAAE,GAAG,CAAC,CAAC;oBACP,EAAE,GAAG,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACvC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACvC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;gBACD,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACZ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACZ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACd,CAAC;YAED,mEAAmE;YACnE,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC7D,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;oBACd,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM,GAAG,CAAC,CAAC;gBACb,CAAC;gBACD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;oBACb,IAAI,GAAG,CAAC,CAAC;oBACT,KAAK,GAAG,CAAC,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,8EAA8E;YAC9E,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,EAAE,CAAC;gBAChB,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,IAAI,CAAC;YACZ,CAAC;YAED,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,EAAE,CAAC;gBACT,+DAA+D;gBAC/D,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBAClB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzD,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;gBAChB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAI,OAAO,GAAG,QAAQ,CAAC;gBACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;wBAChB,OAAO,GAAG,CAAC,CAAC;wBACZ,IAAI,GAAG,CAAC,CAAC;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BAC9E,KAAK,GAAG,CAAC,CAAC;wBACZ,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACV,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1B,CAAC;yBAAM,CAAC;wBACN,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC1B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;gBAClB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;gBACvB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;gBACxB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACnB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;gBACxB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Backend failures stay independent of the API that exposes them to content. */
|
|
2
|
+
export type Context3DErrorReason = "disposed" | "backBuffer" | "limit" | "bufferAllocation" | "textureAllocation" | "nativeShader" | "program" | "indexBuffer" | "indexData" | "vertexBinding" | "vertexStream" | "vertexData" | "drawRange" | "triangleCount" | "textureSize" | "compressedSize" | "textureShape" | "texturePowerOfTwo" | "textureUpload" | "range" | "operation" | "unsupported" | "agalLength" | "agalMagic" | "agalVersion" | "agalStageMarker" | "agalVertexStage" | "agalFragmentStage" | "agalStage" | "agalTokens" | "agalOpcode" | "agalUnusedSource" | "agalAttributeStage" | "agalAttributeWrite" | "agalAttributeIndex" | "agalConstantWrite" | "agalConstantIndex" | "agalTemporaryIndex" | "agalTemporaryRead" | "agalTemporaryComponent" | "agalOutputRead" | "agalOutputIndex" | "agalVertexOutput" | "agalFragmentOutput" | "agalColorMask" | "agalVaryingIndex" | "agalVaryingRead" | "agalVaryingWrite" | "agalVaryingMissing" | "agalVaryingPartial" | "agalRegister" | "agalIndirect" | "agalSourceEncoding" | "agalDiscard" | "agalMask" | "agalReserved" | "agalSampler";
|
|
3
|
+
export declare class Context3DError extends Error {
|
|
4
|
+
readonly reason: Context3DErrorReason;
|
|
5
|
+
constructor(reason: Context3DErrorReason, message: string);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,MAAM,oBAAoB,GAC5B,UAAU,GACV,YAAY,GACZ,OAAO,GACP,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,SAAS,GACT,aAAa,GACb,WAAW,GACX,eAAe,GACf,cAAc,GACd,YAAY,GACZ,WAAW,GACX,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,OAAO,GACP,WAAW,GACX,aAAa,GACb,YAAY,GACZ,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,wBAAwB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,GACpB,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,aAAa,GACb,UAAU,GACV,cAAc,GACd,aAAa,CAAC;AAElB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,YAAY,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAGxD;CACF"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AA4DA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,MAAM,CAAuB;IAEtC,YAAY,MAA4B,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Experimental renderer contracts and AGAL v1 translation, without browser dependencies. */
|
|
2
|
+
export { type ProgramType, type SamplerSource, type ShaderSource, translate } from "./agal.js";
|
|
3
|
+
export { BLEND_FACTORS, type BlendFactor, type Buffer3D, COMPARE_MODES, type CompareMode, type Context3D, type Context3DLifecycle, CULL_FACES, type CullFace, type Program3D, SAMPLER_FILTERS, SAMPLER_MIPS, SAMPLER_WRAPS, SamplerBiasError, type SamplerFilter, type SamplerMip, type SamplerWrap, ScissorBoundsError, STENCIL_ACTIONS, type Stage3DHost, type StencilAction, TEXTURE_FORMATS, type Texture3D, TextureBindingError, type TextureFormat, VERTEX_FORMATS, type VertexFormat, VertexOffsetError, } from "./backend.js";
|
|
4
|
+
export { blockBytes, type DxtEncoder, decodeDxt, encodeDxt } from "./dxt.js";
|
|
5
|
+
export { Context3DError, type Context3DErrorReason } from "./errors.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/F,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,kBAAkB,EAClB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,SAAS,EACd,mBAAmB,EACnB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,YAAY,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Experimental renderer contracts and AGAL v1 translation, without browser dependencies. */
|
|
2
|
+
export { translate } from "./agal.js";
|
|
3
|
+
export { BLEND_FACTORS, COMPARE_MODES, CULL_FACES, SAMPLER_FILTERS, SAMPLER_MIPS, SAMPLER_WRAPS, SamplerBiasError, ScissorBoundsError, STENCIL_ACTIONS, TEXTURE_FORMATS, TextureBindingError, VERTEX_FORMATS, VertexOffsetError, } from "./backend.js";
|
|
4
|
+
export { blockBytes, decodeDxt, encodeDxt } from "./dxt.js";
|
|
5
|
+
export { Context3DError } from "./errors.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,OAAO,EAA2D,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/F,OAAO,EACL,aAAa,EAGb,aAAa,EAIb,UAAU,EAGV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAIhB,kBAAkB,EAClB,eAAe,EAGf,eAAe,EAEf,mBAAmB,EAEnB,cAAc,EAEd,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAmB,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Buffer3D } from "../backend.js";
|
|
2
|
+
export interface BufferState {
|
|
3
|
+
handle: WebGLBuffer;
|
|
4
|
+
indices: Uint16Array | null;
|
|
5
|
+
uploaded: Uint8Array;
|
|
6
|
+
prefix: number;
|
|
7
|
+
version: number;
|
|
8
|
+
checkedVersion: number;
|
|
9
|
+
checkedFirst: number;
|
|
10
|
+
checkedCount: number;
|
|
11
|
+
maximum: number;
|
|
12
|
+
}
|
|
13
|
+
export interface VertexBinding {
|
|
14
|
+
buffer: Buffer3D;
|
|
15
|
+
offset: number;
|
|
16
|
+
size: number;
|
|
17
|
+
packed: boolean;
|
|
18
|
+
valid: boolean;
|
|
19
|
+
checkedIndex: BufferState | null;
|
|
20
|
+
checkedIndexVersion: number;
|
|
21
|
+
checkedVertexVersion: number;
|
|
22
|
+
checkedFirst: number;
|
|
23
|
+
checkedCount: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function uploadBuffer(gl: WebGL2RenderingContext, vao: WebGLVertexArrayObject, buffer: Buffer3D, state: BufferState, values: ArrayLike<number>, start: number, amount: number): void;
|
|
26
|
+
export declare function uploadBufferBytes(gl: WebGL2RenderingContext, vao: WebGLVertexArrayObject, buffer: Buffer3D, state: BufferState, data: Uint8Array, offset: number, start: number, amount: number): void;
|
|
27
|
+
//# sourceMappingURL=buffers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffers.d.ts","sourceRoot":"","sources":["../../src/webgl/buffers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAcD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,sBAAsB,EAC1B,GAAG,EAAE,sBAAsB,EAC3B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAiBN;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,sBAAsB,EAC1B,GAAG,EAAE,sBAAsB,EAC3B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAyBN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { range } from "./state.js";
|
|
2
|
+
function uploaded(state, start, amount) {
|
|
3
|
+
if (amount === 0) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
state.uploaded.fill(1, start, start + amount);
|
|
7
|
+
state.version++;
|
|
8
|
+
while (state.prefix < state.uploaded.length && state.uploaded[state.prefix]) {
|
|
9
|
+
state.prefix++;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function uploadBuffer(gl, vao, buffer, state, values, start, amount) {
|
|
13
|
+
const { count, stride } = buffer;
|
|
14
|
+
const target = stride === 0 ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
|
|
15
|
+
const handle = state.handle;
|
|
16
|
+
range(start, amount, count);
|
|
17
|
+
const size = stride || 1;
|
|
18
|
+
range(0, amount * size, values.length);
|
|
19
|
+
const data = stride === 0 ? new Uint16Array(amount) : new Float32Array(amount * stride);
|
|
20
|
+
for (let i = 0; i < data.length; i++) {
|
|
21
|
+
data[i] = values[i];
|
|
22
|
+
}
|
|
23
|
+
state.indices?.set(data, start);
|
|
24
|
+
uploaded(state, start, amount);
|
|
25
|
+
gl.bindVertexArray(vao);
|
|
26
|
+
gl.bindBuffer(target, handle);
|
|
27
|
+
gl.bufferSubData(target, start * size * (stride === 0 ? 2 : 4), data);
|
|
28
|
+
}
|
|
29
|
+
export function uploadBufferBytes(gl, vao, buffer, state, data, offset, start, amount) {
|
|
30
|
+
const { count, stride } = buffer;
|
|
31
|
+
const target = stride === 0 ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER;
|
|
32
|
+
const handle = state.handle;
|
|
33
|
+
range(start, amount, count);
|
|
34
|
+
const bytesPerEntry = stride === 0 ? 2 : stride * 4;
|
|
35
|
+
const length = amount * bytesPerEntry;
|
|
36
|
+
range(offset, length, data.length);
|
|
37
|
+
// In WebGL2, a zero source length uploads the rest of the array.
|
|
38
|
+
if (amount === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const indices = state.indices;
|
|
42
|
+
if (indices) {
|
|
43
|
+
for (let i = 0; i < amount; i++) {
|
|
44
|
+
const at = offset + i * 2;
|
|
45
|
+
indices[start + i] = data[at] | (data[at + 1] << 8);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
uploaded(state, start, amount);
|
|
49
|
+
gl.bindVertexArray(vao);
|
|
50
|
+
gl.bindBuffer(target, handle);
|
|
51
|
+
gl.bufferSubData(target, start * bytesPerEntry, data, offset, length);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=buffers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffers.js","sourceRoot":"","sources":["../../src/webgl/buffers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { ProgramType } from "../agal.js";
|
|
2
|
+
import { type BlendFactor, type Buffer3D, type CompareMode, type Context3D, type CullFace, type Program3D, type SamplerFilter, type SamplerMip, type SamplerWrap, type StencilAction, type Texture3D, type TextureFormat, type VertexFormat } from "../backend.js";
|
|
3
|
+
import { type DxtEncoder } from "../dxt.js";
|
|
4
|
+
import { type WebGLContext3DLimits } from "./limits.js";
|
|
5
|
+
/** An owned WebGL2 context, deliberately independent of the 2D renderer. */
|
|
6
|
+
export declare class WebGLContext3D implements Context3D {
|
|
7
|
+
readonly gl: WebGL2RenderingContext;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
disposed: boolean;
|
|
11
|
+
samplerFormats: boolean;
|
|
12
|
+
private readonly buffers;
|
|
13
|
+
private vertexBuffers;
|
|
14
|
+
private bufferBytes;
|
|
15
|
+
private vertexBufferBytes;
|
|
16
|
+
private readonly programs;
|
|
17
|
+
private readonly textures;
|
|
18
|
+
private readonly textureCounts;
|
|
19
|
+
private readonly textureQuotaBytes;
|
|
20
|
+
private readonly textureOwners;
|
|
21
|
+
private textureBytes;
|
|
22
|
+
private targetDepthBytes;
|
|
23
|
+
private targetColorBytes;
|
|
24
|
+
private copy2D;
|
|
25
|
+
private copyCube;
|
|
26
|
+
private readonly targetSamples;
|
|
27
|
+
private renderTexture;
|
|
28
|
+
private renderDepth;
|
|
29
|
+
private renderFace;
|
|
30
|
+
private readonly textureSlots;
|
|
31
|
+
private textureMask;
|
|
32
|
+
private readonly samplers;
|
|
33
|
+
private readonly samplerStates;
|
|
34
|
+
private anisotropy;
|
|
35
|
+
private s3tc;
|
|
36
|
+
private maxAnisotropy;
|
|
37
|
+
private readonly vertices;
|
|
38
|
+
private selected;
|
|
39
|
+
private framebuffer;
|
|
40
|
+
private texture;
|
|
41
|
+
private resolveFramebuffer;
|
|
42
|
+
private colorBuffer;
|
|
43
|
+
private resolveDirty;
|
|
44
|
+
private depthBuffer;
|
|
45
|
+
private antiAlias;
|
|
46
|
+
private depthWrite;
|
|
47
|
+
private blendEnabled;
|
|
48
|
+
private cullEnabled;
|
|
49
|
+
private colorWrite;
|
|
50
|
+
private readonly stencilFront;
|
|
51
|
+
private readonly stencilBack;
|
|
52
|
+
private stencilEnabled;
|
|
53
|
+
private stencilReference;
|
|
54
|
+
private stencilRead;
|
|
55
|
+
private stencilWrite;
|
|
56
|
+
private scissor;
|
|
57
|
+
private scissorLeft;
|
|
58
|
+
private scissorTop;
|
|
59
|
+
private scissorRight;
|
|
60
|
+
private scissorBottom;
|
|
61
|
+
private scissorOutside;
|
|
62
|
+
private readonly vertexConstants;
|
|
63
|
+
private readonly fragmentConstants;
|
|
64
|
+
private pixels;
|
|
65
|
+
private topDown;
|
|
66
|
+
private readonly vao;
|
|
67
|
+
private readonly limits;
|
|
68
|
+
private dxtEncoder;
|
|
69
|
+
/** The host's whole-level encoder; a refusal retains the TypeScript path. */
|
|
70
|
+
setDxtEncoder(encoder: DxtEncoder): void;
|
|
71
|
+
constructor(gl: WebGL2RenderingContext, limits?: Partial<WebGLContext3DLimits>);
|
|
72
|
+
private alive;
|
|
73
|
+
private target;
|
|
74
|
+
configure(width: number, height: number, depth?: boolean, antiAlias?: number): void;
|
|
75
|
+
clear(red: number, green: number, blue: number, alpha: number, depth?: number, mask?: number, stencil?: number): void;
|
|
76
|
+
setStencilActions(face: CullFace, compare: CompareMode, pass: StencilAction, depthFail: StencilAction, stencilFail: StencilAction): void;
|
|
77
|
+
private stencilFace;
|
|
78
|
+
setStencilReference(reference: number, readMask: number, writeMask: number): void;
|
|
79
|
+
setColorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
|
|
80
|
+
private applyColorMask;
|
|
81
|
+
setDepth(write: boolean, compare: CompareMode): void;
|
|
82
|
+
setScissor(x: number | null, y?: number, width?: number, height?: number): void;
|
|
83
|
+
private applyScissor;
|
|
84
|
+
setBlend(source: BlendFactor, destination: BlendFactor): void;
|
|
85
|
+
setCulling(face: CullFace): void;
|
|
86
|
+
createBuffer(count: number, stride: number): Buffer3D;
|
|
87
|
+
private buffer;
|
|
88
|
+
createProgram(): Program3D;
|
|
89
|
+
private program;
|
|
90
|
+
createTexture(width: number, height: number, cube?: boolean, format?: TextureFormat): Texture3D;
|
|
91
|
+
createRectangleTexture(width: number, height: number): Texture3D;
|
|
92
|
+
/** GL's internal format for a compressed texture's S3TC, or 0 where the context takes none. */
|
|
93
|
+
private s3tcFormat;
|
|
94
|
+
/**
|
|
95
|
+
* Bytes a mip chain of `format` takes, its faces' every level: S3TC's
|
|
96
|
+
* blocks for a compressed texture whatever its storage, as AIR counts
|
|
97
|
+
* them, so that a GPU without S3TC allocates no less than one with it.
|
|
98
|
+
*/
|
|
99
|
+
private chainBytes;
|
|
100
|
+
private allocateTexture;
|
|
101
|
+
private textureState;
|
|
102
|
+
private copyProgram;
|
|
103
|
+
private seedTarget;
|
|
104
|
+
private multisamples;
|
|
105
|
+
private deleteMultisample;
|
|
106
|
+
private prepareMultisample;
|
|
107
|
+
setRenderTarget(texture: Texture3D | null, depth?: boolean, face?: number, antiAlias?: number): void;
|
|
108
|
+
private changedTarget;
|
|
109
|
+
private finishTarget;
|
|
110
|
+
setTexture(index: number, texture: Texture3D | null): void;
|
|
111
|
+
setSampler(index: number, wrap: SamplerWrap, filter: SamplerFilter, mip: SamplerMip): void;
|
|
112
|
+
private sampler;
|
|
113
|
+
setProgram(program: Program3D): void;
|
|
114
|
+
setVertex(index: number, buffer: Buffer3D | null, offset: number, format: VertexFormat): void;
|
|
115
|
+
setConstants(stage: ProgramType, first: number, values: ArrayLike<number>, count: number): void;
|
|
116
|
+
draw(indices: Buffer3D, first: number, triangles: number): void;
|
|
117
|
+
private uniforms;
|
|
118
|
+
private resolve;
|
|
119
|
+
read(width?: number, height?: number): Uint8Array;
|
|
120
|
+
present(): void;
|
|
121
|
+
dispose(): void;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/webgl/context.ts"],"names":[],"mappings":"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"}
|