content/canvas/test/webgl-mochitest/test_draw.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:bc5f7529c872
1 <!DOCTYPE HTML>
2 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
3
4 <title>WebGL test: Basic drawing</title>
5
6 <script src="/tests/SimpleTest/SimpleTest.js"></script>
7 <link rel="stylesheet" href="/tests/SimpleTest/test.css">
8 <script src="driver-info.js"></script>
9 <script src="webgl-util.js"></script>
10
11
12 <script id="vs" type="x-shader/x-vertex">
13
14 attribute vec2 aVertCoord;
15
16 void main(void) {
17 gl_Position = vec4(aVertCoord, 0.0, 1.0);
18 }
19
20 </script>
21 <script id="fs" type="x-shader/x-fragment">
22
23 precision mediump float;
24
25 void main(void) {
26 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
27 }
28
29 </script>
30 <body>
31 <canvas id="c" width="64" height="64"></canvas>
32 <script>
33
34 // Give ourselves a scope to return early from:
35 (function() {
36 var gl = WebGLUtil.getWebGL('c');
37 if (!gl) {
38 todo(false, 'WebGL is unavailable.');
39 return;
40 }
41
42 function errorFunc(str) {
43 ok(false, 'Error: ' + str);
44 }
45 WebGLUtil.setErrorFunc(errorFunc);
46 WebGLUtil.setWarningFunc(errorFunc);
47
48 gl.disable(gl.DEPTH_TEST);
49
50 var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
51 if (!prog) {
52 ok(false, 'Program linking should succeed.');
53 return;
54 }
55
56 prog.aVertCoord = gl.getAttribLocation(prog, "aVertCoord");
57 ok(prog.aVertCoord >= 0, '`aVertCoord` should be valid.');
58
59 function checkGLError(func, info, refValue) {
60 if (!refValue)
61 refValue = 0;
62
63 var error = gl.getError();
64 func(error == refValue,
65 '[' + info + '] gl.getError should be 0x' + refValue.toString(16) +
66 ', was 0x' + error.toString(16) + '.');
67 }
68
69 var vertCoordArr = new Float32Array([
70 -1, -1,
71 1, -1,
72 -1, 1,
73 1, 1,
74 ]);
75 var vertCoordBuff = gl.createBuffer();
76 gl.bindBuffer(gl.ARRAY_BUFFER, vertCoordBuff);
77 gl.bufferData(gl.ARRAY_BUFFER, vertCoordArr, gl.STATIC_DRAW);
78
79 var indexArr = new Uint16Array([
80 0, 1, 2,
81 3,
82 ]);
83 var indexBuff = gl.createBuffer();
84 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuff);
85 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);
86
87
88 function testPixel(x, y, refData, func, infoString) {
89 var pixel = new Uint8Array(4);
90 gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
91
92 var pixelMatches = pixel[0] == refData[0] &&
93 pixel[1] == refData[1] &&
94 pixel[2] == refData[2] &&
95 pixel[3] == refData[3];
96 func(pixelMatches, infoString);
97 }
98
99 function preDraw(info) {
100 gl.clearColor(1.0, 0.0, 0.0, 1.0);
101 gl.clear(gl.COLOR_BUFFER_BIT);
102
103 testPixel(0, 0, [255, 0, 0, 255], ok, '[' + info + '] Should be red before drawing.');
104 }
105
106 function postDraw(info) {
107 testPixel(0, 0, [0, 255, 0, 255], ok, '[' + info + '] Should be green before drawing.');
108 }
109
110 gl.useProgram(prog);
111 gl.enableVertexAttribArray(prog.aVertCoord);
112 gl.vertexAttribPointer(prog.aVertCoord, 2, gl.FLOAT, false, 0, 0);
113
114 // Start drawing
115 checkGLError(ok, 'after setup');
116
117 preDraw('DrawArrays');
118 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
119 postDraw('DrawArrays');
120 checkGLError(ok, 'after DrawArrays');
121
122 preDraw('DrawElements');
123 gl.drawElements(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_SHORT, 0);
124 postDraw('DrawElements');
125 checkGLError(ok, 'after DrawElements');
126
127 ok(true, 'Test complete.');
128 })();
129
130 </script>
131

mercurial