summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-mochitest/test_draw.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/test_draw.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/test_draw.html')
-rw-r--r--dom/canvas/test/webgl-mochitest/test_draw.html131
1 files changed, 131 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-mochitest/test_draw.html b/dom/canvas/test/webgl-mochitest/test_draw.html
new file mode 100644
index 000000000..90d244719
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_draw.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+<title>WebGL test: Basic drawing</title>
+
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+
+
+<script id="vs" type="x-shader/x-vertex">
+
+attribute vec2 aVertCoord;
+
+void main(void) {
+ gl_Position = vec4(aVertCoord, 0.0, 1.0);
+}
+
+</script>
+<script id="fs" type="x-shader/x-fragment">
+
+precision mediump float;
+
+void main(void) {
+ gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+</script>
+<body>
+<canvas id="c" width="64" height="64"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+ WebGLUtil.setWarningFunc(errorFunc);
+
+ gl.disable(gl.DEPTH_TEST);
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ prog.aVertCoord = gl.getAttribLocation(prog, "aVertCoord");
+ ok(prog.aVertCoord >= 0, '`aVertCoord` should be valid.');
+
+ function checkGLError(func, info, refValue) {
+ if (!refValue)
+ refValue = 0;
+
+ var error = gl.getError();
+ func(error == refValue,
+ '[' + info + '] gl.getError should be 0x' + refValue.toString(16) +
+ ', was 0x' + error.toString(16) + '.');
+ }
+
+ var vertCoordArr = new Float32Array([
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ 1, 1,
+ ]);
+ var vertCoordBuff = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertCoordBuff);
+ gl.bufferData(gl.ARRAY_BUFFER, vertCoordArr, gl.STATIC_DRAW);
+
+ var indexArr = new Uint16Array([
+ 0, 1, 2,
+ 3,
+ ]);
+ var indexBuff = gl.createBuffer();
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuff);
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);
+
+
+ function testPixel(x, y, refData, func, infoString) {
+ var pixel = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+
+ var pixelMatches = pixel[0] == refData[0] &&
+ pixel[1] == refData[1] &&
+ pixel[2] == refData[2] &&
+ pixel[3] == refData[3];
+ func(pixelMatches, infoString);
+ }
+
+ function preDraw(info) {
+ gl.clearColor(1.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ testPixel(0, 0, [255, 0, 0, 255], ok, '[' + info + '] Should be red before drawing.');
+ }
+
+ function postDraw(info) {
+ testPixel(0, 0, [0, 255, 0, 255], ok, '[' + info + '] Should be green before drawing.');
+ }
+
+ gl.useProgram(prog);
+ gl.enableVertexAttribArray(prog.aVertCoord);
+ gl.vertexAttribPointer(prog.aVertCoord, 2, gl.FLOAT, false, 0, 0);
+
+ // Start drawing
+ checkGLError(ok, 'after setup');
+
+ preDraw('DrawArrays');
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+ postDraw('DrawArrays');
+ checkGLError(ok, 'after DrawArrays');
+
+ preDraw('DrawElements');
+ gl.drawElements(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_SHORT, 0);
+ postDraw('DrawElements');
+ checkGLError(ok, 'after DrawElements');
+
+ ok(true, 'Test complete.');
+})();
+
+</script>
+