@gjsify/webgl 0.3.13 → 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,136 +1,142 @@
1
- import { describe, it, expect, beforeEach, on } from "@gjsify/unit";
2
- import { makeProgram, drawTriangle, makeTestFBO, destroyTestFBO, pixelClose } from "../test-utils.js";
1
+ import { destroyTestFBO, drawTriangle, makeProgram, makeTestFBO, pixelClose } 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/rendering-basic.spec.ts
4
6
  const VS_SRC = `
5
7
  attribute vec2 position;
6
8
  void main() { gl_Position = vec4(position, 0.0, 1.0); }`;
7
9
  const FS_GREEN = `
8
10
  void main() { gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); }`;
9
11
  var rendering_basic_spec_default = async () => {
10
- await on("Display", async () => {
11
- const setup = createGLSetup();
12
- if (!setup) {
13
- console.warn("WebGL context not available \u2014 skipping conformance/rendering-basic tests");
14
- return;
15
- }
16
- const { gl, glArea } = setup;
17
- glArea.make_current();
18
- await describe("rendering-basic/clear-color", async () => {
19
- beforeEach(async () => {
20
- glArea.make_current();
21
- });
22
- const W = 10, H = 10;
23
- function testColor(r, g, b, a) {
24
- const fbo = makeTestFBO(gl, W, H);
25
- gl.clearColor(r / 255, g / 255, b / 255, a / 255);
26
- gl.clear(gl.COLOR_BUFFER_BIT);
27
- const pixels = new Uint8Array(W * H * 4);
28
- gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
29
- destroyTestFBO(gl, fbo);
30
- for (let i = 0; i < W * H * 4; i += 4) {
31
- if (pixels[i] !== r || pixels[i + 1] !== g || pixels[i + 2] !== b || pixels[i + 3] !== a) return false;
32
- }
33
- return true;
34
- }
35
- await it("clearColor black (0,0,0,0) fills all pixels", async () => {
36
- expect(testColor(0, 0, 0, 0)).toBe(true);
37
- });
38
- await it("clearColor white (255,255,255,255) fills all pixels", async () => {
39
- expect(testColor(255, 255, 255, 255)).toBe(true);
40
- });
41
- await it("clearColor green (0,255,0,255) fills all pixels", async () => {
42
- expect(testColor(0, 255, 0, 255)).toBe(true);
43
- });
44
- await it("clearColor magenta (255,0,255,0) fills all pixels", async () => {
45
- expect(testColor(255, 0, 255, 0)).toBe(true);
46
- });
47
- });
48
- await describe("rendering-basic/simple-shader", async () => {
49
- beforeEach(async () => {
50
- glArea.make_current();
51
- });
52
- await it("fullscreen green triangle covers every pixel", async () => {
53
- const W = 50, H = 50;
54
- const fbo = makeTestFBO(gl, W, H);
55
- gl.clearColor(0, 0, 0, 0);
56
- gl.clear(gl.COLOR_BUFFER_BIT);
57
- const prog = makeProgram(gl, VS_SRC, FS_GREEN);
58
- gl.useProgram(prog);
59
- drawTriangle(gl);
60
- const pixels = new Uint8Array(W * H * 4);
61
- gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
62
- destroyTestFBO(gl, fbo);
63
- let allGreen = true;
64
- for (let i = 0; i < W * H * 4; i += 4) {
65
- if (!pixelClose(
66
- pixels.subarray(i, i + 4),
67
- [0, 255, 0, 255]
68
- )) {
69
- allGreen = false;
70
- break;
71
- }
72
- }
73
- expect(allGreen).toBe(true);
74
- expect(gl.getError()).toBe(gl.NO_ERROR);
75
- });
76
- });
77
- await describe("rendering-basic/draw-indexed", async () => {
78
- beforeEach(async () => {
79
- glArea.make_current();
80
- });
81
- await it("drawElements covers every pixel with green", async () => {
82
- const W = 50, H = 50;
83
- const fbo = makeTestFBO(gl, W, H);
84
- gl.clearColor(1, 0, 0, 1);
85
- gl.clear(gl.COLOR_BUFFER_BIT);
86
- const prog = makeProgram(gl, VS_SRC, FS_GREEN);
87
- gl.useProgram(prog);
88
- const vbuffer = gl.createBuffer();
89
- gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
90
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
91
- -1,
92
- -1,
93
- 1,
94
- -1,
95
- -1,
96
- 1,
97
- 1,
98
- 1
99
- ]), gl.STATIC_DRAW);
100
- gl.enableVertexAttribArray(0);
101
- gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
102
- const ebuffer = gl.createBuffer();
103
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebuffer);
104
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([
105
- 0,
106
- 1,
107
- 2,
108
- 2,
109
- 1,
110
- 3
111
- ]), gl.STATIC_DRAW);
112
- gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
113
- const pixels = new Uint8Array(W * H * 4);
114
- gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
115
- gl.deleteBuffer(vbuffer);
116
- gl.deleteBuffer(ebuffer);
117
- destroyTestFBO(gl, fbo);
118
- let allGreen = true;
119
- for (let i = 0; i < W * H * 4; i += 4) {
120
- if (!pixelClose(
121
- pixels.subarray(i, i + 4),
122
- [0, 255, 0, 255]
123
- )) {
124
- allGreen = false;
125
- break;
126
- }
127
- }
128
- expect(allGreen).toBe(true);
129
- expect(gl.getError()).toBe(gl.NO_ERROR);
130
- });
131
- });
132
- });
133
- };
134
- export {
135
- rendering_basic_spec_default as default
12
+ await on("Display", async () => {
13
+ const setup = createGLSetup();
14
+ if (!setup) {
15
+ console.warn("WebGL context not available skipping conformance/rendering-basic tests");
16
+ return;
17
+ }
18
+ const { gl, glArea } = setup;
19
+ glArea.make_current();
20
+ await describe("rendering-basic/clear-color", async () => {
21
+ beforeEach(async () => {
22
+ glArea.make_current();
23
+ });
24
+ const W = 10, H = 10;
25
+ function testColor(r, g, b, a) {
26
+ const fbo = makeTestFBO(gl, W, H);
27
+ gl.clearColor(r / 255, g / 255, b / 255, a / 255);
28
+ gl.clear(gl.COLOR_BUFFER_BIT);
29
+ const pixels = new Uint8Array(W * H * 4);
30
+ gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
31
+ destroyTestFBO(gl, fbo);
32
+ for (let i = 0; i < W * H * 4; i += 4) {
33
+ if (pixels[i] !== r || pixels[i + 1] !== g || pixels[i + 2] !== b || pixels[i + 3] !== a) return false;
34
+ }
35
+ return true;
36
+ }
37
+ await it("clearColor black (0,0,0,0) fills all pixels", async () => {
38
+ expect(testColor(0, 0, 0, 0)).toBe(true);
39
+ });
40
+ await it("clearColor white (255,255,255,255) fills all pixels", async () => {
41
+ expect(testColor(255, 255, 255, 255)).toBe(true);
42
+ });
43
+ await it("clearColor green (0,255,0,255) fills all pixels", async () => {
44
+ expect(testColor(0, 255, 0, 255)).toBe(true);
45
+ });
46
+ await it("clearColor magenta (255,0,255,0) fills all pixels", async () => {
47
+ expect(testColor(255, 0, 255, 0)).toBe(true);
48
+ });
49
+ });
50
+ await describe("rendering-basic/simple-shader", async () => {
51
+ beforeEach(async () => {
52
+ glArea.make_current();
53
+ });
54
+ await it("fullscreen green triangle covers every pixel", async () => {
55
+ const W = 50, H = 50;
56
+ const fbo = makeTestFBO(gl, W, H);
57
+ gl.clearColor(0, 0, 0, 0);
58
+ gl.clear(gl.COLOR_BUFFER_BIT);
59
+ const prog = makeProgram(gl, VS_SRC, FS_GREEN);
60
+ gl.useProgram(prog);
61
+ drawTriangle(gl);
62
+ const pixels = new Uint8Array(W * H * 4);
63
+ gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
64
+ destroyTestFBO(gl, fbo);
65
+ let allGreen = true;
66
+ for (let i = 0; i < W * H * 4; i += 4) {
67
+ if (!pixelClose(pixels.subarray(i, i + 4), [
68
+ 0,
69
+ 255,
70
+ 0,
71
+ 255
72
+ ])) {
73
+ allGreen = false;
74
+ break;
75
+ }
76
+ }
77
+ expect(allGreen).toBe(true);
78
+ expect(gl.getError()).toBe(gl.NO_ERROR);
79
+ });
80
+ });
81
+ await describe("rendering-basic/draw-indexed", async () => {
82
+ beforeEach(async () => {
83
+ glArea.make_current();
84
+ });
85
+ await it("drawElements covers every pixel with green", async () => {
86
+ const W = 50, H = 50;
87
+ const fbo = makeTestFBO(gl, W, H);
88
+ gl.clearColor(1, 0, 0, 1);
89
+ gl.clear(gl.COLOR_BUFFER_BIT);
90
+ const prog = makeProgram(gl, VS_SRC, FS_GREEN);
91
+ gl.useProgram(prog);
92
+ const vbuffer = gl.createBuffer();
93
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
94
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
95
+ -1,
96
+ -1,
97
+ 1,
98
+ -1,
99
+ -1,
100
+ 1,
101
+ 1,
102
+ 1
103
+ ]), gl.STATIC_DRAW);
104
+ gl.enableVertexAttribArray(0);
105
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
106
+ const ebuffer = gl.createBuffer();
107
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebuffer);
108
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([
109
+ 0,
110
+ 1,
111
+ 2,
112
+ 2,
113
+ 1,
114
+ 3
115
+ ]), gl.STATIC_DRAW);
116
+ gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
117
+ const pixels = new Uint8Array(W * H * 4);
118
+ gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
119
+ gl.deleteBuffer(vbuffer);
120
+ gl.deleteBuffer(ebuffer);
121
+ destroyTestFBO(gl, fbo);
122
+ let allGreen = true;
123
+ for (let i = 0; i < W * H * 4; i += 4) {
124
+ if (!pixelClose(pixels.subarray(i, i + 4), [
125
+ 0,
126
+ 255,
127
+ 0,
128
+ 255
129
+ ])) {
130
+ allGreen = false;
131
+ break;
132
+ }
133
+ }
134
+ expect(allGreen).toBe(true);
135
+ expect(gl.getError()).toBe(gl.NO_ERROR);
136
+ });
137
+ });
138
+ });
136
139
  };
140
+
141
+ //#endregion
142
+ export { rendering_basic_spec_default as default };