@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,348 +1,365 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, on } from "@gjsify/unit";
|
|
2
1
|
import { makeProgram } from "../test-utils.js";
|
|
3
2
|
import { createGLSetup } from "./setup.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import { beforeEach, describe, expect, it, on } from "@gjsify/unit";
|
|
4
|
+
|
|
5
|
+
//#region src/ts/conformance/state.spec.ts
|
|
6
|
+
function arrClose(a, b, tol = .001) {
|
|
7
|
+
if (a.length !== b.length) return false;
|
|
8
|
+
for (let i = 0; i < b.length; i++) {
|
|
9
|
+
if (Math.abs(a[i] - b[i]) > tol) return false;
|
|
10
|
+
}
|
|
11
|
+
return true;
|
|
10
12
|
}
|
|
11
13
|
var state_spec_default = async () => {
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
14
|
+
await on("Display", async () => {
|
|
15
|
+
const setup = createGLSetup();
|
|
16
|
+
if (!setup) {
|
|
17
|
+
console.warn("WebGL context not available — skipping conformance/state tests");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const { gl, glArea } = setup;
|
|
21
|
+
glArea.make_current();
|
|
22
|
+
await describe("conformance/state/gl-getstring", async () => {
|
|
23
|
+
beforeEach(async () => {
|
|
24
|
+
glArea.make_current();
|
|
25
|
+
});
|
|
26
|
+
await it("VERSION starts with \"WebGL 1.0\"", async () => {
|
|
27
|
+
const v = gl.getParameter(gl.VERSION);
|
|
28
|
+
expect(typeof v).toBe("string");
|
|
29
|
+
expect(v.startsWith("WebGL 1.0")).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
await it("SHADING_LANGUAGE_VERSION starts with \"WebGL GLSL ES 1.0\"", async () => {
|
|
32
|
+
const v = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);
|
|
33
|
+
expect(typeof v).toBe("string");
|
|
34
|
+
expect(v.startsWith("WebGL GLSL ES 1.0")).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
await it("VENDOR is a string (may be empty on some drivers)", async () => {
|
|
37
|
+
const v = gl.getParameter(gl.VENDOR);
|
|
38
|
+
expect(typeof v).toBe("string");
|
|
39
|
+
});
|
|
40
|
+
await it("RENDERER is a non-empty string", async () => {
|
|
41
|
+
const v = gl.getParameter(gl.RENDERER);
|
|
42
|
+
expect(typeof v).toBe("string");
|
|
43
|
+
expect(v.length > 0).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
await describe("conformance/state/gl-initial-state — blend", async () => {
|
|
47
|
+
beforeEach(async () => {
|
|
48
|
+
glArea.make_current();
|
|
49
|
+
});
|
|
50
|
+
await it("BLEND_SRC_RGB initial value is ONE", async () => {
|
|
51
|
+
expect(gl.getParameter(gl.BLEND_SRC_RGB)).toBe(gl.ONE);
|
|
52
|
+
});
|
|
53
|
+
await it("BLEND_SRC_ALPHA initial value is ONE", async () => {
|
|
54
|
+
expect(gl.getParameter(gl.BLEND_SRC_ALPHA)).toBe(gl.ONE);
|
|
55
|
+
});
|
|
56
|
+
await it("BLEND_DST_RGB initial value is ZERO", async () => {
|
|
57
|
+
expect(gl.getParameter(gl.BLEND_DST_RGB)).toBe(gl.ZERO);
|
|
58
|
+
});
|
|
59
|
+
await it("BLEND_DST_ALPHA initial value is ZERO", async () => {
|
|
60
|
+
expect(gl.getParameter(gl.BLEND_DST_ALPHA)).toBe(gl.ZERO);
|
|
61
|
+
});
|
|
62
|
+
await it("BLEND_EQUATION_RGB initial value is FUNC_ADD", async () => {
|
|
63
|
+
expect(gl.getParameter(gl.BLEND_EQUATION_RGB)).toBe(gl.FUNC_ADD);
|
|
64
|
+
});
|
|
65
|
+
await it("BLEND_EQUATION_ALPHA initial value is FUNC_ADD", async () => {
|
|
66
|
+
expect(gl.getParameter(gl.BLEND_EQUATION_ALPHA)).toBe(gl.FUNC_ADD);
|
|
67
|
+
});
|
|
68
|
+
await it("BLEND_COLOR initial value is [0,0,0,0]", async () => {
|
|
69
|
+
const v = gl.getParameter(gl.BLEND_COLOR);
|
|
70
|
+
expect(arrClose(v, [
|
|
71
|
+
0,
|
|
72
|
+
0,
|
|
73
|
+
0,
|
|
74
|
+
0
|
|
75
|
+
])).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
await describe("conformance/state/gl-get-calls — initial state", async () => {
|
|
79
|
+
beforeEach(async () => {
|
|
80
|
+
glArea.make_current();
|
|
81
|
+
});
|
|
82
|
+
await it("ACTIVE_TEXTURE initial value is TEXTURE0", async () => {
|
|
83
|
+
expect(gl.getParameter(gl.ACTIVE_TEXTURE)).toBe(gl.TEXTURE0);
|
|
84
|
+
});
|
|
85
|
+
await it("ARRAY_BUFFER_BINDING initial value is null", async () => {
|
|
86
|
+
expect(gl.getParameter(gl.ARRAY_BUFFER_BINDING)).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
await it("ELEMENT_ARRAY_BUFFER_BINDING initial value is null", async () => {
|
|
89
|
+
expect(gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING)).toBeNull();
|
|
90
|
+
});
|
|
91
|
+
await it("BLEND initial value is false", async () => {
|
|
92
|
+
expect(gl.getParameter(gl.BLEND)).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
await it("COLOR_CLEAR_VALUE initial value is [0,0,0,0]", async () => {
|
|
95
|
+
const v = gl.getParameter(gl.COLOR_CLEAR_VALUE);
|
|
96
|
+
expect(arrClose(v, [
|
|
97
|
+
0,
|
|
98
|
+
0,
|
|
99
|
+
0,
|
|
100
|
+
0
|
|
101
|
+
])).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
await it("COLOR_WRITEMASK initial value is [true,true,true,true]", async () => {
|
|
104
|
+
const v = gl.getParameter(gl.COLOR_WRITEMASK);
|
|
105
|
+
expect(v[0]).toBe(true);
|
|
106
|
+
expect(v[1]).toBe(true);
|
|
107
|
+
expect(v[2]).toBe(true);
|
|
108
|
+
expect(v[3]).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
await it("CULL_FACE initial value is false", async () => {
|
|
111
|
+
expect(gl.getParameter(gl.CULL_FACE)).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
await it("CULL_FACE_MODE initial value is BACK", async () => {
|
|
114
|
+
expect(gl.getParameter(gl.CULL_FACE_MODE)).toBe(gl.BACK);
|
|
115
|
+
});
|
|
116
|
+
await it("CURRENT_PROGRAM initial value is null", async () => {
|
|
117
|
+
const prog = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
118
|
+
expect(prog).toBeNull();
|
|
119
|
+
});
|
|
120
|
+
await it("DEPTH_CLEAR_VALUE initial value is 1", async () => {
|
|
121
|
+
expect(gl.getParameter(gl.DEPTH_CLEAR_VALUE)).toBe(1);
|
|
122
|
+
});
|
|
123
|
+
await it("DEPTH_FUNC initial value is LESS", async () => {
|
|
124
|
+
expect(gl.getParameter(gl.DEPTH_FUNC)).toBe(gl.LESS);
|
|
125
|
+
});
|
|
126
|
+
await it("DEPTH_RANGE initial value is [0, 1]", async () => {
|
|
127
|
+
const v = gl.getParameter(gl.DEPTH_RANGE);
|
|
128
|
+
expect(arrClose(v, [0, 1])).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
await it("DEPTH_TEST initial value is false", async () => {
|
|
131
|
+
expect(gl.getParameter(gl.DEPTH_TEST)).toBe(false);
|
|
132
|
+
});
|
|
133
|
+
await it("DEPTH_WRITEMASK initial value is true", async () => {
|
|
134
|
+
expect(gl.getParameter(gl.DEPTH_WRITEMASK)).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
await it("DITHER initial value is true", async () => {
|
|
137
|
+
expect(gl.getParameter(gl.DITHER)).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
await it("FRONT_FACE initial value is CCW", async () => {
|
|
140
|
+
expect(gl.getParameter(gl.FRONT_FACE)).toBe(gl.CCW);
|
|
141
|
+
});
|
|
142
|
+
await it("GENERATE_MIPMAP_HINT initial value is DONT_CARE", async () => {
|
|
143
|
+
expect(gl.getParameter(gl.GENERATE_MIPMAP_HINT)).toBe(gl.DONT_CARE);
|
|
144
|
+
});
|
|
145
|
+
await it("LINE_WIDTH initial value is 1", async () => {
|
|
146
|
+
expect(gl.getParameter(gl.LINE_WIDTH)).toBe(1);
|
|
147
|
+
});
|
|
148
|
+
await it("PACK_ALIGNMENT initial value is 4", async () => {
|
|
149
|
+
expect(gl.getParameter(gl.PACK_ALIGNMENT)).toBe(4);
|
|
150
|
+
});
|
|
151
|
+
await it("POLYGON_OFFSET_FACTOR initial value is 0", async () => {
|
|
152
|
+
expect(gl.getParameter(gl.POLYGON_OFFSET_FACTOR)).toBe(0);
|
|
153
|
+
});
|
|
154
|
+
await it("POLYGON_OFFSET_FILL initial value is false", async () => {
|
|
155
|
+
expect(gl.getParameter(gl.POLYGON_OFFSET_FILL)).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
await it("POLYGON_OFFSET_UNITS initial value is 0", async () => {
|
|
158
|
+
expect(gl.getParameter(gl.POLYGON_OFFSET_UNITS)).toBe(0);
|
|
159
|
+
});
|
|
160
|
+
await it("RENDERBUFFER_BINDING initial value is null", async () => {
|
|
161
|
+
expect(gl.getParameter(gl.RENDERBUFFER_BINDING)).toBeNull();
|
|
162
|
+
});
|
|
163
|
+
await it("SAMPLE_COVERAGE_INVERT initial value is false", async () => {
|
|
164
|
+
expect(gl.getParameter(gl.SAMPLE_COVERAGE_INVERT)).toBe(false);
|
|
165
|
+
});
|
|
166
|
+
await it("SAMPLE_COVERAGE_VALUE initial value is 1", async () => {
|
|
167
|
+
expect(gl.getParameter(gl.SAMPLE_COVERAGE_VALUE)).toBe(1);
|
|
168
|
+
});
|
|
169
|
+
await it("SCISSOR_TEST initial value is false", async () => {
|
|
170
|
+
expect(gl.getParameter(gl.SCISSOR_TEST)).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
await it("STENCIL_CLEAR_VALUE initial value is 0", async () => {
|
|
173
|
+
expect(gl.getParameter(gl.STENCIL_CLEAR_VALUE)).toBe(0);
|
|
174
|
+
});
|
|
175
|
+
await it("STENCIL_FAIL initial value is KEEP", async () => {
|
|
176
|
+
expect(gl.getParameter(gl.STENCIL_FAIL)).toBe(gl.KEEP);
|
|
177
|
+
});
|
|
178
|
+
await it("STENCIL_FUNC initial value is ALWAYS", async () => {
|
|
179
|
+
expect(gl.getParameter(gl.STENCIL_FUNC)).toBe(gl.ALWAYS);
|
|
180
|
+
});
|
|
181
|
+
await it("STENCIL_BACK_FUNC initial value is ALWAYS", async () => {
|
|
182
|
+
expect(gl.getParameter(gl.STENCIL_BACK_FUNC)).toBe(gl.ALWAYS);
|
|
183
|
+
});
|
|
184
|
+
await it("STENCIL_REF initial value is 0", async () => {
|
|
185
|
+
expect(gl.getParameter(gl.STENCIL_REF)).toBe(0);
|
|
186
|
+
});
|
|
187
|
+
await it("STENCIL_TEST initial value is false", async () => {
|
|
188
|
+
expect(gl.getParameter(gl.STENCIL_TEST)).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
await it("TEXTURE_BINDING_2D initial value is null", async () => {
|
|
191
|
+
expect(gl.getParameter(gl.TEXTURE_BINDING_2D)).toBeNull();
|
|
192
|
+
});
|
|
193
|
+
await it("TEXTURE_BINDING_CUBE_MAP initial value is null", async () => {
|
|
194
|
+
expect(gl.getParameter(gl.TEXTURE_BINDING_CUBE_MAP)).toBeNull();
|
|
195
|
+
});
|
|
196
|
+
await it("UNPACK_ALIGNMENT initial value is 4", async () => {
|
|
197
|
+
expect(gl.getParameter(gl.UNPACK_ALIGNMENT)).toBe(4);
|
|
198
|
+
});
|
|
199
|
+
await it("UNPACK_FLIP_Y_WEBGL initial value is false", async () => {
|
|
200
|
+
expect(gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL)).toBe(false);
|
|
201
|
+
});
|
|
202
|
+
await it("UNPACK_PREMULTIPLY_ALPHA_WEBGL initial value is false", async () => {
|
|
203
|
+
expect(gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL)).toBe(false);
|
|
204
|
+
});
|
|
205
|
+
await it("MAX_TEXTURE_SIZE is at least 64", async () => {
|
|
206
|
+
expect(gl.getParameter(gl.MAX_TEXTURE_SIZE) >= 64).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
await it("MAX_VERTEX_ATTRIBS is at least 8", async () => {
|
|
209
|
+
expect(gl.getParameter(gl.MAX_VERTEX_ATTRIBS) >= 8).toBe(true);
|
|
210
|
+
});
|
|
211
|
+
await it("MAX_COMBINED_TEXTURE_IMAGE_UNITS is at least 8", async () => {
|
|
212
|
+
expect(gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS) >= 8).toBe(true);
|
|
213
|
+
});
|
|
214
|
+
await it("MAX_FRAGMENT_UNIFORM_VECTORS is at least 16", async () => {
|
|
215
|
+
expect(gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS) >= 16).toBe(true);
|
|
216
|
+
});
|
|
217
|
+
await it("MAX_VERTEX_UNIFORM_VECTORS is at least 128", async () => {
|
|
218
|
+
expect(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS) >= 128).toBe(true);
|
|
219
|
+
});
|
|
220
|
+
await it("ALIASED_POINT_SIZE_RANGE is [>0, >=1]", async () => {
|
|
221
|
+
const v = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);
|
|
222
|
+
expect(v[0] > 0).toBe(true);
|
|
223
|
+
expect(v[1] >= 1).toBe(true);
|
|
224
|
+
});
|
|
225
|
+
await it("ALIASED_LINE_WIDTH_RANGE is [>0, >=1]", async () => {
|
|
226
|
+
const v = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);
|
|
227
|
+
expect(v[0] > 0).toBe(true);
|
|
228
|
+
expect(v[1] >= 1).toBe(true);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
await describe("conformance/state/gl-get-calls — state changes", async () => {
|
|
232
|
+
beforeEach(async () => {
|
|
233
|
+
glArea.make_current();
|
|
234
|
+
});
|
|
235
|
+
await it("clearColor updates COLOR_CLEAR_VALUE", async () => {
|
|
236
|
+
gl.clearColor(.1, .2, .3, .4);
|
|
237
|
+
const v = gl.getParameter(gl.COLOR_CLEAR_VALUE);
|
|
238
|
+
expect(arrClose(v, [
|
|
239
|
+
.1,
|
|
240
|
+
.2,
|
|
241
|
+
.3,
|
|
242
|
+
.4
|
|
243
|
+
])).toBe(true);
|
|
244
|
+
gl.clearColor(0, 0, 0, 0);
|
|
245
|
+
});
|
|
246
|
+
await it("activeTexture updates ACTIVE_TEXTURE", async () => {
|
|
247
|
+
gl.activeTexture(gl.TEXTURE2);
|
|
248
|
+
expect(gl.getParameter(gl.ACTIVE_TEXTURE)).toBe(gl.TEXTURE2);
|
|
249
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
250
|
+
});
|
|
251
|
+
await it("blendFunc updates BLEND_SRC_RGB and BLEND_DST_RGB", async () => {
|
|
252
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
253
|
+
expect(gl.getParameter(gl.BLEND_SRC_RGB)).toBe(gl.SRC_ALPHA);
|
|
254
|
+
expect(gl.getParameter(gl.BLEND_DST_RGB)).toBe(gl.ONE_MINUS_SRC_ALPHA);
|
|
255
|
+
gl.blendFunc(gl.ONE, gl.ZERO);
|
|
256
|
+
});
|
|
257
|
+
await it("depthFunc updates DEPTH_FUNC", async () => {
|
|
258
|
+
gl.depthFunc(gl.EQUAL);
|
|
259
|
+
expect(gl.getParameter(gl.DEPTH_FUNC)).toBe(gl.EQUAL);
|
|
260
|
+
gl.depthFunc(gl.LESS);
|
|
261
|
+
});
|
|
262
|
+
await it("useProgram updates CURRENT_PROGRAM", async () => {
|
|
263
|
+
const VS = "attribute vec4 p; void main() { gl_Position = p; }";
|
|
264
|
+
const FS = "void main() { gl_FragColor = vec4(1); }";
|
|
265
|
+
const prog = makeProgram(gl, VS, FS);
|
|
266
|
+
gl.useProgram(prog);
|
|
267
|
+
expect(gl.getParameter(gl.CURRENT_PROGRAM)).toBe(prog);
|
|
268
|
+
gl.useProgram(null);
|
|
269
|
+
expect(gl.getParameter(gl.CURRENT_PROGRAM)).toBeNull();
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
await describe("conformance/state/gl-enable-enum-test", async () => {
|
|
273
|
+
beforeEach(async () => {
|
|
274
|
+
glArea.make_current();
|
|
275
|
+
});
|
|
276
|
+
const validCaps = [
|
|
277
|
+
"BLEND",
|
|
278
|
+
"CULL_FACE",
|
|
279
|
+
"DEPTH_TEST",
|
|
280
|
+
"DITHER",
|
|
281
|
+
"POLYGON_OFFSET_FILL",
|
|
282
|
+
"SAMPLE_ALPHA_TO_COVERAGE",
|
|
283
|
+
"SAMPLE_COVERAGE",
|
|
284
|
+
"SCISSOR_TEST",
|
|
285
|
+
"STENCIL_TEST"
|
|
286
|
+
];
|
|
287
|
+
for (const cap of validCaps) {
|
|
288
|
+
await it(`enable/disable/isEnabled round-trip for ${cap}`, async () => {
|
|
289
|
+
gl.getError();
|
|
290
|
+
const val = gl[cap];
|
|
291
|
+
const was = gl.isEnabled(val);
|
|
292
|
+
gl.enable(val);
|
|
293
|
+
expect(gl.isEnabled(val)).toBe(true);
|
|
294
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
295
|
+
gl.disable(val);
|
|
296
|
+
expect(gl.isEnabled(val)).toBe(false);
|
|
297
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
298
|
+
if (was) gl.enable(val);
|
|
299
|
+
else gl.disable(val);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
await it("enable with invalid enum generates INVALID_ENUM", async () => {
|
|
303
|
+
gl.enable(3008);
|
|
304
|
+
expect(gl.getError()).toBe(gl.INVALID_ENUM);
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
await describe("conformance/state/gl-geterror", async () => {
|
|
308
|
+
beforeEach(async () => {
|
|
309
|
+
glArea.make_current();
|
|
310
|
+
});
|
|
311
|
+
await it("enable(ALPHA_TEST desktop enum) generates INVALID_ENUM", async () => {
|
|
312
|
+
gl.enable(3008);
|
|
313
|
+
expect(gl.getError()).toBe(gl.INVALID_ENUM);
|
|
314
|
+
});
|
|
315
|
+
await it("viewport with negative width/height generates INVALID_VALUE", async () => {
|
|
316
|
+
gl.viewport(0, 0, -1, -1);
|
|
317
|
+
expect(gl.getError()).toBe(gl.INVALID_VALUE);
|
|
318
|
+
const vp = gl.getParameter(gl.VIEWPORT);
|
|
319
|
+
gl.viewport(0, 0, vp[2], vp[3]);
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
await describe("conformance/state/gl-object-get-calls — getBufferParameter", async () => {
|
|
323
|
+
beforeEach(async () => {
|
|
324
|
+
glArea.make_current();
|
|
325
|
+
});
|
|
326
|
+
await it("getBufferParameter BUFFER_SIZE returns correct size after bufferData", async () => {
|
|
327
|
+
gl.getError();
|
|
328
|
+
const buf = gl.createBuffer();
|
|
329
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
330
|
+
gl.bufferData(gl.ARRAY_BUFFER, 16, gl.DYNAMIC_DRAW);
|
|
331
|
+
expect(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)).toBe(16);
|
|
332
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
333
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
334
|
+
gl.deleteBuffer(buf);
|
|
335
|
+
});
|
|
336
|
+
await it("getBufferParameter BUFFER_USAGE returns correct usage after bufferData", async () => {
|
|
337
|
+
const buf = gl.createBuffer();
|
|
338
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
|
|
339
|
+
gl.bufferData(gl.ARRAY_BUFFER, 16, gl.DYNAMIC_DRAW);
|
|
340
|
+
expect(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE)).toBe(gl.DYNAMIC_DRAW);
|
|
341
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
342
|
+
gl.deleteBuffer(buf);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
await describe("conformance/state/gl-object-get-calls — getRenderbufferParameter", async () => {
|
|
346
|
+
beforeEach(async () => {
|
|
347
|
+
glArea.make_current();
|
|
348
|
+
});
|
|
349
|
+
await it("getRenderbufferParameter returns correct width/height/format", async () => {
|
|
350
|
+
const rb = gl.createRenderbuffer();
|
|
351
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
|
|
352
|
+
gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 64, 32);
|
|
353
|
+
expect(gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)).toBe(64);
|
|
354
|
+
expect(gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)).toBe(32);
|
|
355
|
+
expect(gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT)).toBe(gl.RGBA4);
|
|
356
|
+
expect(gl.getError()).toBe(gl.NO_ERROR);
|
|
357
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, null);
|
|
358
|
+
gl.deleteRenderbuffer(rb);
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
});
|
|
348
362
|
};
|
|
363
|
+
|
|
364
|
+
//#endregion
|
|
365
|
+
export { state_spec_default as default };
|