summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html')
-rw-r--r--dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html140
1 files changed, 140 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html b/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
new file mode 100644
index 000000000..be66cc5f0
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='UTF-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='../webgl-util.js'></script>
+ <script id='vs' type='x-shader/x-vertex'>
+
+attribute vec2 aPosition;
+
+void main(void) {
+ gl_PointSize = 16.0;
+ gl_Position = vec4(aPosition, 0, 1);
+}
+
+ </script>
+ <script id='fs' type='x-shader/x-fragment'>
+
+precision mediump float;
+
+uniform vec4 uColor;
+
+void main(void) {
+ gl_FragColor = uColor;
+}
+
+ </script>
+ </head>
+ <body>
+ <script>
+
+function GetPixel(gl, x, y) {
+ var pixel = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+ return pixel;
+}
+
+function ColorStr(arr) {
+ return '{' + arr.map(function(x) { return '' + x; }).join(', ') + '}';
+}
+
+function PixelShouldBe(gl, x, y, ref, prefix) {
+ if (prefix) {
+ prefix += ': ';
+ }
+
+ var test = GetPixel(gl, x, y);
+
+ var testStr = ColorStr(test);
+ var refStr = ColorStr(ref.map(x => x * 255));
+ ok(testStr == refStr, prefix + 'Should be ' + refStr + ', was ' + testStr + '.');
+}
+
+function GetProgram(gl) {
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+
+ prog.aPosition = gl.getAttribLocation(prog, 'aPosition');
+ ok(prog.aPosition >= 0, '`aPosition` should be valid.');
+
+ prog.uColor = gl.getUniformLocation(prog, 'uColor');
+ ok(prog.uColor, '`uColor` should be valid.');
+
+ return prog;
+}
+
+// Give ourselves a scope to return early from:
+(function () {
+ var c = document.createElement('canvas');
+ document.body.appendChild(c);
+ var gl = c.getContext('webgl', { depth: false, antialias: false });
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ ////////
+
+ // With default culling, it works fine.
+ // The problem seems to be that the virtual quads generated from points are wound 'backwards'.
+ gl.enable(gl.CULL_FACE);
+ gl.cullFace(gl.BACK); // Cull back faces.
+
+ ////////
+
+ var vertArr = new Float32Array([
+ -1, -1,
+ +1, -1,
+ -1, +1,
+ ]);
+
+ var vbo = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
+ gl.bufferData(gl.ARRAY_BUFFER, vertArr, gl.STATIC_DRAW);
+
+ ////////
+
+ var triProg = GetProgram(gl);
+ var pointProg = GetProgram(gl);
+ if (!triProg || !pointProg) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ ok(triProg.aPosition == pointProg.aPosition, 'aPosition should match.');
+ gl.enableVertexAttribArray(triProg.aPosition);
+ gl.vertexAttribPointer(triProg.aPosition, 2, gl.FLOAT, false, 0, 0);
+
+ ////////
+
+ gl.useProgram(triProg);
+ var triColor = [1, 0, 0, 1];
+ gl.uniform4fv(triProg.uColor, triColor);
+
+ gl.useProgram(pointProg);
+ var pointColor = [0, 1, 0, 1];
+ gl.uniform4fv(pointProg.uColor, pointColor);
+
+ ////////
+
+ gl.clearColor(0, 0, 0, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.useProgram(triProg);
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
+
+ gl.useProgram(pointProg);
+ gl.drawArrays(gl.POINTS, 0, 3);
+
+ ////////
+
+ PixelShouldBe(gl, 32, 32, triColor, 'Tri');
+ PixelShouldBe(gl, 0, 0, pointColor, 'Point');
+
+ ok(true, 'Test complete');
+})();
+
+ </script>
+ </body>
+</html>