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