@gjsify/webgl 0.3.12 → 0.3.14
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/lib/esm/conformance/attribs.spec.js +312 -293
- package/lib/esm/conformance/buffers.spec.js +217 -200
- package/lib/esm/conformance/context.spec.js +295 -295
- package/lib/esm/conformance/programs.spec.js +458 -445
- package/lib/esm/conformance/rendering-basic.spec.js +134 -128
- package/lib/esm/conformance/rendering.spec.js +502 -400
- package/lib/esm/conformance/setup.js +42 -31
- package/lib/esm/conformance/state.spec.js +360 -343
- package/lib/esm/conformance/textures.spec.js +330 -338
- package/lib/esm/conformance/uniforms.spec.js +465 -309
- package/lib/esm/conformance-test.js +24 -22
- package/lib/esm/extensions/ext-blend-minmax.js +16 -16
- package/lib/esm/extensions/ext-color-buffer-float.js +10 -11
- package/lib/esm/extensions/ext-color-buffer-half-float.js +10 -11
- package/lib/esm/extensions/ext-texture-filter-anisotropic.js +16 -16
- package/lib/esm/extensions/oes-element-index-unit.js +11 -12
- package/lib/esm/extensions/oes-standard-derivatives.js +15 -15
- package/lib/esm/extensions/oes-texture-float-linear.js +11 -12
- package/lib/esm/extensions/oes-texture-float.js +11 -12
- package/lib/esm/extensions/oes-texture-half-float.js +17 -17
- package/lib/esm/extensions/stackgl-destroy-context.js +10 -10
- package/lib/esm/extensions/stackgl-resize-drawing-buffer.js +10 -10
- package/lib/esm/html-canvas-element.js +64 -64
- package/lib/esm/index.js +29 -26
- package/lib/esm/linkable.js +49 -49
- package/lib/esm/test-utils.js +158 -107
- package/lib/esm/test.js +8 -4
- package/lib/esm/types/index.js +5 -5
- package/lib/esm/utils.js +164 -187
- package/lib/esm/webgl-active-info.js +10 -9
- package/lib/esm/webgl-bridge.js +162 -147
- package/lib/esm/webgl-buffer.js +17 -15
- package/lib/esm/webgl-context-attributes.js +23 -22
- package/lib/esm/webgl-context-base.js +3039 -3351
- package/lib/esm/webgl-drawing-buffer-wrapper.js +10 -9
- package/lib/esm/webgl-framebuffer.js +108 -106
- package/lib/esm/webgl-program.js +25 -23
- package/lib/esm/webgl-query.js +15 -13
- package/lib/esm/webgl-renderbuffer.js +23 -21
- package/lib/esm/webgl-rendering-context.js +173 -187
- package/lib/esm/webgl-sampler.js +15 -13
- package/lib/esm/webgl-shader-precision-format.js +10 -9
- package/lib/esm/webgl-shader.js +23 -21
- package/lib/esm/webgl-sync.js +15 -13
- package/lib/esm/webgl-texture-unit.js +12 -11
- package/lib/esm/webgl-texture.js +21 -19
- package/lib/esm/webgl-transform-feedback.js +15 -13
- package/lib/esm/webgl-uniform-location.js +14 -13
- package/lib/esm/webgl-vertex-array-object.js +20 -18
- package/lib/esm/webgl-vertex-attribute.js +149 -145
- package/lib/esm/webgl1.spec.js +1039 -650
- package/lib/esm/webgl2-rendering-context.js +1210 -1273
- package/lib/esm/webgl2.spec.js +1284 -1252
- package/package.json +9 -9
- package/lib/esm/@types/glsl-tokenizer/index.d.js +0 -0
|
@@ -1,203 +1,220 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { makeProgram, makeTestFBO, destroyTestFBO, readPixel, pixelClose } from "../test-utils.js";
|
|
1
|
+
import { destroyTestFBO, makeProgram, makeTestFBO, pixelClose, readPixel } from "../test-utils.js";
|
|
3
2
|
import { createGLSetup } from "./setup.js";
|
|
3
|
+
import { beforeEach, describe, expect, it, on } from "@gjsify/unit";
|
|
4
|
+
|
|
5
|
+
//#region src/ts/conformance/buffers.spec.ts
|
|
4
6
|
var buffers_spec_default = async () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
7
|
+
await on("Display", async () => {
|
|
8
|
+
const setup = createGLSetup();
|
|
9
|
+
if (!setup) {
|
|
10
|
+
console.warn("WebGL context not available — skipping conformance/buffers tests");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const { gl, glArea, win } = setup;
|
|
14
|
+
glArea.make_current();
|
|
15
|
+
await describe("conformance/buffers/buffer-bind-test", async () => {
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
glArea.make_current();
|
|
18
|
+
});
|
|
19
|
+
await it("should be able to bind and unbind an ARRAY_BUFFER", async () => {
|
|
20
|
+
const buf = gl.createBuffer();
|
|
21
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
22
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
23
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
24
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
25
|
+
gl.deleteBuffer(buf);
|
|
26
|
+
});
|
|
27
|
+
await it("should be able to bind and unbind an ELEMENT_ARRAY_BUFFER", async () => {
|
|
28
|
+
const buf = gl.createBuffer();
|
|
29
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buf);
|
|
30
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
31
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
|
32
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
33
|
+
gl.deleteBuffer(buf);
|
|
34
|
+
});
|
|
35
|
+
await it("binding ARRAY_BUFFER to ELEMENT_ARRAY_BUFFER target should generate INVALID_OPERATION", async () => {
|
|
36
|
+
const buf = gl.createBuffer();
|
|
37
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
38
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
39
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buf);
|
|
40
|
+
expect(gl.getError()).toBe(gl.INVALID_OPERATION);
|
|
41
|
+
gl.deleteBuffer(buf);
|
|
42
|
+
});
|
|
43
|
+
await it("binding ELEMENT_ARRAY_BUFFER to ARRAY_BUFFER target should generate INVALID_OPERATION", async () => {
|
|
44
|
+
const buf = gl.createBuffer();
|
|
45
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buf);
|
|
46
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
|
47
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
48
|
+
expect(gl.getError()).toBe(gl.INVALID_OPERATION);
|
|
49
|
+
gl.deleteBuffer(buf);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
await describe("conformance/buffers/buffer-data-and-buffer-sub-data", async () => {
|
|
53
|
+
beforeEach(async () => {
|
|
54
|
+
glArea.make_current();
|
|
55
|
+
});
|
|
56
|
+
await it("bufferData with no buffer bound generates INVALID_OPERATION", async () => {
|
|
57
|
+
gl.bufferData(gl.ARRAY_BUFFER, 4, gl.STATIC_DRAW);
|
|
58
|
+
expect(gl.getError()).toBe(gl.INVALID_OPERATION);
|
|
59
|
+
});
|
|
60
|
+
await it("bufferData with negative size generates INVALID_VALUE", async () => {
|
|
61
|
+
const buf = gl.createBuffer();
|
|
62
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
63
|
+
gl.getError();
|
|
64
|
+
gl.bufferData(gl.ARRAY_BUFFER, -4, gl.STATIC_DRAW);
|
|
65
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
66
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
67
|
+
gl.deleteBuffer(buf);
|
|
68
|
+
});
|
|
69
|
+
await it("bufferData with null data generates INVALID_VALUE", async () => {
|
|
70
|
+
const buf = gl.createBuffer();
|
|
71
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
72
|
+
gl.getError();
|
|
73
|
+
gl.bufferData(gl.ARRAY_BUFFER, null, gl.STATIC_DRAW);
|
|
74
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
75
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
76
|
+
gl.deleteBuffer(buf);
|
|
77
|
+
});
|
|
78
|
+
await it("bufferData with size 0 succeeds and sets buffer size to 0", async () => {
|
|
79
|
+
const buf = gl.createBuffer();
|
|
80
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
81
|
+
gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW);
|
|
82
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
83
|
+
expect(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)).toBe(0);
|
|
84
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
85
|
+
gl.deleteBuffer(buf);
|
|
86
|
+
});
|
|
87
|
+
await it("bufferData with ArrayBuffer sets correct buffer size", async () => {
|
|
88
|
+
const buf = gl.createBuffer();
|
|
89
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
90
|
+
gl.bufferData(gl.ARRAY_BUFFER, new ArrayBuffer(4), gl.STATIC_DRAW);
|
|
91
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
92
|
+
expect(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)).toBe(4);
|
|
93
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
94
|
+
gl.deleteBuffer(buf);
|
|
95
|
+
});
|
|
96
|
+
await it("bufferData with numeric size 4 sets buffer size to 4", async () => {
|
|
97
|
+
const buf = gl.createBuffer();
|
|
98
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
99
|
+
gl.bufferData(gl.ARRAY_BUFFER, 4, gl.STATIC_DRAW);
|
|
100
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
101
|
+
expect(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)).toBe(4);
|
|
102
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
103
|
+
gl.deleteBuffer(buf);
|
|
104
|
+
});
|
|
105
|
+
await it("bufferSubData before bufferData generates INVALID_VALUE", async () => {
|
|
106
|
+
const buf = gl.createBuffer();
|
|
107
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
108
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, new ArrayBuffer(1));
|
|
109
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
110
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
111
|
+
gl.deleteBuffer(buf);
|
|
112
|
+
});
|
|
113
|
+
await it("bufferSubData with negative offset generates INVALID_VALUE", async () => {
|
|
114
|
+
const buf = gl.createBuffer();
|
|
115
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
116
|
+
gl.bufferData(gl.ARRAY_BUFFER, 128, gl.STATIC_DRAW);
|
|
117
|
+
gl.getError();
|
|
118
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, -10, new ArrayBuffer(64));
|
|
119
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
120
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
121
|
+
gl.deleteBuffer(buf);
|
|
122
|
+
});
|
|
123
|
+
await it("bufferSubData that overflows buffer generates INVALID_VALUE", async () => {
|
|
124
|
+
const buf = gl.createBuffer();
|
|
125
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
126
|
+
gl.bufferData(gl.ARRAY_BUFFER, 128, gl.STATIC_DRAW);
|
|
127
|
+
gl.getError();
|
|
128
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 65, new ArrayBuffer(64));
|
|
129
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
130
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
131
|
+
gl.deleteBuffer(buf);
|
|
132
|
+
});
|
|
133
|
+
await it("bufferSubData within bounds succeeds", async () => {
|
|
134
|
+
const buf = gl.createBuffer();
|
|
135
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
136
|
+
gl.bufferData(gl.ARRAY_BUFFER, 128, gl.STATIC_DRAW);
|
|
137
|
+
gl.getError();
|
|
138
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 10, new ArrayBuffer(64));
|
|
139
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
140
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 10, new Float32Array(0));
|
|
141
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
142
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
143
|
+
gl.deleteBuffer(buf);
|
|
144
|
+
});
|
|
145
|
+
await it("bufferSubData with non-ArrayBuffer throws TypeError", async () => {
|
|
146
|
+
const buf = gl.createBuffer();
|
|
147
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
148
|
+
gl.bufferData(gl.ARRAY_BUFFER, 128, gl.STATIC_DRAW);
|
|
149
|
+
gl.getError();
|
|
150
|
+
expect(() => gl.bufferSubData(gl.ARRAY_BUFFER, 0, 42)).toThrow();
|
|
151
|
+
expect(() => gl.bufferSubData(gl.ARRAY_BUFFER, 0, "5.5")).toThrow();
|
|
152
|
+
expect(() => gl.bufferSubData(gl.ARRAY_BUFFER, 10, null)).toThrow();
|
|
153
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
154
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
155
|
+
gl.deleteBuffer(buf);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
await describe("conformance/buffers/element-array-buffer-delete-recreate", async () => {
|
|
159
|
+
beforeEach(async () => {
|
|
160
|
+
glArea.make_current();
|
|
161
|
+
});
|
|
162
|
+
await it("drawElements succeeds after deleting and recreating the element array buffer", async () => {
|
|
163
|
+
const vsSrc = `attribute vec2 position; void main() { gl_Position = vec4(position, 0.0, 1.0); }`;
|
|
164
|
+
const fsSrc = `precision mediump float; void main() { gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); }`;
|
|
165
|
+
const prog = makeProgram(gl, vsSrc, fsSrc);
|
|
166
|
+
gl.useProgram(prog);
|
|
167
|
+
const fbo = makeTestFBO(gl, 2, 2);
|
|
168
|
+
const vertexBuffer = gl.createBuffer();
|
|
169
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
|
170
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
|
|
171
|
+
-1,
|
|
172
|
+
-1,
|
|
173
|
+
1,
|
|
174
|
+
-1,
|
|
175
|
+
-1,
|
|
176
|
+
1,
|
|
177
|
+
1,
|
|
178
|
+
1
|
|
179
|
+
]), gl.STATIC_DRAW);
|
|
180
|
+
gl.enableVertexAttribArray(0);
|
|
181
|
+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
|
|
182
|
+
let indexBuffer = gl.createBuffer();
|
|
183
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
184
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8Array([
|
|
185
|
+
0,
|
|
186
|
+
1,
|
|
187
|
+
2,
|
|
188
|
+
3
|
|
189
|
+
]), gl.STATIC_DRAW);
|
|
190
|
+
gl.deleteBuffer(indexBuffer);
|
|
191
|
+
indexBuffer = gl.createBuffer();
|
|
192
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
193
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8Array([
|
|
194
|
+
0,
|
|
195
|
+
1,
|
|
196
|
+
2,
|
|
197
|
+
3
|
|
198
|
+
]), gl.STATIC_DRAW);
|
|
199
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
200
|
+
gl.drawElements(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0);
|
|
201
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
202
|
+
const pixel = readPixel(gl, 1, 1);
|
|
203
|
+
expect(pixelClose(pixel, [
|
|
204
|
+
0,
|
|
205
|
+
255,
|
|
206
|
+
0,
|
|
207
|
+
255
|
|
208
|
+
])).toBeTruthy();
|
|
209
|
+
destroyTestFBO(gl, fbo);
|
|
210
|
+
gl.deleteBuffer(vertexBuffer);
|
|
211
|
+
gl.deleteBuffer(indexBuffer);
|
|
212
|
+
gl.deleteProgram(prog);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
win.destroy();
|
|
216
|
+
});
|
|
203
217
|
};
|
|
218
|
+
|
|
219
|
+
//#endregion
|
|
220
|
+
export { buffers_spec_default as default };
|