@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,136 +1,142 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|