Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: conformance/more/functions/drawArraysOutOfBounds.html

Issue 8342021: Add webgl conformance tests r15841. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html><head>
3 <meta charset="utf-8">
4 <!--
5 Tests for the OpenGL ES 2.0 HTML Canvas context
6
7 Copyright (C) 2011 Ilmari Heikkinen <ilmari.heikkinen@gmail.com>
8
9 Permission is hereby granted, free of charge, to any person
10 obtaining a copy of this software and associated documentation
11 files (the "Software"), to deal in the Software without
12 restriction, including without limitation the rights to use,
13 copy, modify, merge, publish, distribute, sublicense, and/or sell
14 copies of the Software, and to permit persons to whom the
15 Software is furnished to do so, subject to the following
16 conditions:
17
18 The above copyright notice and this permission notice shall be
19 included in all copies or substantial portions of the Software.
20
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28 OTHER DEALINGS IN THE SOFTWARE.
29
30 -->
31 <link rel="stylesheet" type="text/css" href="../unit.css" />
32 <script type="application/x-javascript" src="../unit.js"></script>
33 <script type="application/x-javascript" src="../util.js"></script>
34 <script type="application/x-javascript">
35
36 var verts = [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0];
37 var normals = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0];
38 var texcoords = [0.0,0.0, 1.0,0.0, 0.0,1.0];
39
40 var vertsA = new Float32Array(verts);
41 var normalsA = new Float32Array(normals);
42 var texcoordsA = new Float32Array(texcoords);
43
44 Tests.startUnit = function () {
45 var canvas = document.getElementById('gl');
46 var gl = wrapGLContext(canvas.getContext(GL_CONTEXT_ID));
47 var prog = new Shader(gl, 'vert', 'frag');
48 prog.use();
49 var v = prog.attrib('Vertex');
50 var n = prog.attrib('Normal');
51 var t = prog.attrib('Tex');
52 return [gl,prog,v,n,t];
53 }
54
55 Tests.setup = function(gl, prog, v,n,t) {
56 return [gl, prog, v,n,t];
57 }
58 Tests.teardown = function(gl, prog, v,n,t) {
59 gl.disableVertexAttribArray(v);
60 gl.disableVertexAttribArray(n);
61 gl.disableVertexAttribArray(t);
62 }
63
64 Tests.endUnit = function(gl, prog, v,n,t) {
65 prog.destroy();
66 }
67
68 Tests.testDrawArraysEmpty = function(gl, prog, v,n,t) {
69 var b = gl.createBuffer();
70 gl.bindBuffer(gl.ARRAY_BUFFER, b);
71 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([]), gl.STATIC_DRAW);
72 assertOk(function(){gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);})
73 gl.enableVertexAttribArray(v);
74 assertGLError(gl, gl.INVALID_OPERATION, "zero size array",
75 function(){gl.drawArrays(gl.TRIANGLES, 0, 1);});
76 gl.deleteBuffer(b);
77 }
78
79 Tests.testDrawArraysOutOfBounds = function(gl, prog, v,n,t) {
80 var b = gl.createBuffer();
81 gl.bindBuffer(gl.ARRAY_BUFFER, b);
82 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([]), gl.STATIC_DRAW);
83 assertOk(function(){gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);});
84 gl.enableVertexAttribArray(v);
85 assertGLError(gl, gl.INVALID_OPERATION, "zero size array",
86 function(){gl.drawArrays(gl.TRIANGLES, 0, 1);});
87 assertGLError(gl, gl.INVALID_OPERATION, "zero size array 10000",
88 function(){gl.drawArrays(gl.TRIANGLES, 0, 10000);});
89 assertGLError(gl, gl.INVALID_OPERATION, "zero size array 10000000000000",
90 function(){gl.drawArrays(gl.TRIANGLES, 0, 10000000000000);});
91 assertGLError(gl, gl.INVALID_OPERATION, "zero size array fraction",
92 function(){gl.drawArrays(gl.TRIANGLES, 0, 1.6);});
93 assertGLError(gl, gl.INVALID_VALUE, "negative offset",
94 function(){gl.drawArrays(gl.TRIANGLES, 0, -1);});
95 assertGLError(gl, gl.INVALID_OPERATION, "count out of range",
96 function(){gl.drawArrays(gl.TRIANGLES, 0, 1);});
97 assertGLError(gl, gl.INVALID_VALUE, "negative count",
98 function(){gl.drawArrays(gl.TRIANGLES, 0, -1);});
99 assertGLError(gl, gl.INVALID_VALUE, "positive count, negative offset",
100 function(){gl.drawArrays(gl.TRIANGLES, -1, 1);});
101 assertGLError(gl, gl.INVALID_VALUE, "negative count, positive offset",
102 function(){gl.drawArrays(gl.TRIANGLES, 1, -1);});
103 gl.deleteBuffer(b);
104 }
105
106
107 Tests.testDrawArraysWithDataOutOfBounds = function(gl, prog, v,n,t) {
108 var b = gl.createBuffer();
109 gl.bindBuffer(gl.ARRAY_BUFFER, b);
110 gl.bufferData(gl.ARRAY_BUFFER, vertsA, gl.STATIC_DRAW);
111 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
112 gl.enableVertexAttribArray(v);
113 assertGLError(gl, gl.INVALID_OPERATION, "3 element array",
114 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
115 assertGLError(gl, gl.INVALID_OPERATION, "3 element array 10000",
116 function(){gl.drawArrays(gl.TRIANGLES, 0, 10000);});
117 assertGLError(gl, gl.INVALID_OPERATION, "3 element array 10000000000000",
118 function(){gl.drawArrays(gl.TRIANGLES, 0, 10000000000000);});
119 assertGLError(gl, gl.INVALID_OPERATION, "fractional count",
120 function(){gl.drawArrays(gl.TRIANGLES, 3, 1.6);});
121 assertGLError(gl, gl.INVALID_VALUE, "negative offset",
122 function(){gl.drawArrays(gl.TRIANGLES, 0, -1);});
123 assertGLError(gl, gl.INVALID_OPERATION, "count out of range",
124 function(){gl.drawArrays(gl.TRIANGLES, 0, 4);});
125 assertGLError(gl, gl.INVALID_VALUE, "negative count",
126 function(){gl.drawArrays(gl.TRIANGLES, 0, -1);});
127 assertGLError(gl, gl.INVALID_VALUE, "positive count, negative offset",
128 function(){gl.drawArrays(gl.TRIANGLES, -1, 2);});
129 assertGLError(gl, gl.INVALID_VALUE, "negative count, positive offset",
130 function(){gl.drawArrays(gl.TRIANGLES, 1, -1);});
131 gl.deleteBuffer(b);
132 }
133
134 Tests.testDrawArraysMultiOutOfBounds = function(gl, prog, v,n,t) {
135 var bs = [];
136 bs.push(gl.createBuffer());
137 gl.bindBuffer(gl.ARRAY_BUFFER, bs[bs.length-1]);
138 gl.bufferData(gl.ARRAY_BUFFER, vertsA, gl.STATIC_DRAW);
139 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
140 bs.push(gl.createBuffer());
141 gl.bindBuffer(gl.ARRAY_BUFFER, bs[bs.length-1]);
142 gl.bufferData(gl.ARRAY_BUFFER, normalsA, gl.STATIC_DRAW);
143 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0);
144 bs.push(gl.createBuffer());
145 gl.bindBuffer(gl.ARRAY_BUFFER, bs[bs.length-1]);
146 gl.bufferData(gl.ARRAY_BUFFER, texcoordsA, gl.STATIC_DRAW);
147 gl.vertexAttribPointer(t, 2, gl.FLOAT, false, 0, 0);
148 gl.enableVertexAttribArray(v);
149 gl.enableVertexAttribArray(n);
150 gl.enableVertexAttribArray(t);
151 assertGLError(gl, gl.INVALID_OPERATION, "multi array 1",
152 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
153 bs.push(gl.createBuffer());
154 gl.bindBuffer(gl.ARRAY_BUFFER, bs[bs.length-1]);
155 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(verts.concat(verts)), gl.STATI C_DRAW);
156 bs.push(gl.createBuffer());
157 gl.bindBuffer(gl.ARRAY_BUFFER, bs[bs.length-1]);
158 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(texcoords.concat(texcoords)), gl.STATIC_DRAW);
159 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
160 gl.bindBuffer(gl.ARRAY_BUFFER, bs[1]);
161 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0);
162 gl.bindBuffer(gl.ARRAY_BUFFER, bs[2]);
163 gl.vertexAttribPointer(t, 2, gl.FLOAT, false, 0, 0);
164 gl.enableVertexAttribArray(v);
165 gl.enableVertexAttribArray(n);
166 gl.enableVertexAttribArray(t);
167 assertGLError(gl, gl.INVALID_OPERATION, "multi array 2",
168 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
169 assertGLError(gl, gl.INVALID_OPERATION, "multi array 3",
170 function(){gl.drawArrays(gl.TRIANGLES, 4, 2);});
171 gl.bindBuffer(gl.ARRAY_BUFFER, bs[0]);
172 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
173 gl.bindBuffer(gl.ARRAY_BUFFER, bs[3]);
174 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0);
175 gl.bindBuffer(gl.ARRAY_BUFFER, bs[2]);
176 gl.vertexAttribPointer(t, 2, gl.FLOAT, false, 0, 0);
177 gl.enableVertexAttribArray(v);
178 gl.enableVertexAttribArray(n);
179 gl.enableVertexAttribArray(t);
180 assertGLError(gl, gl.INVALID_OPERATION, "multi array 4",
181 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
182 assertGLError(gl, gl.INVALID_OPERATION, "multi array 5",
183 function(){gl.drawArrays(gl.TRIANGLES, 4, 2);});
184 gl.bindBuffer(gl.ARRAY_BUFFER, bs[0]);
185 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
186 gl.bindBuffer(gl.ARRAY_BUFFER, bs[1]);
187 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0);
188 gl.bindBuffer(gl.ARRAY_BUFFER, bs[4]);
189 gl.vertexAttribPointer(t, 2, gl.FLOAT, false, 0, 0);
190 gl.enableVertexAttribArray(v);
191 gl.enableVertexAttribArray(n);
192 gl.enableVertexAttribArray(t);
193 assertGLError(gl, gl.INVALID_OPERATION, "multi array 6",
194 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
195 assertGLError(gl, gl.INVALID_OPERATION, "multi array 7",
196 function(){gl.drawArrays(gl.TRIANGLES, 3, 2);});
197 gl.bindBuffer(gl.ARRAY_BUFFER, bs[3]);
198 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
199 gl.bindBuffer(gl.ARRAY_BUFFER, bs[3]);
200 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0);
201 gl.bindBuffer(gl.ARRAY_BUFFER, bs[2]);
202 gl.vertexAttribPointer(t, 2, gl.FLOAT, false, 0, 0);
203 gl.enableVertexAttribArray(v);
204 gl.enableVertexAttribArray(n);
205 gl.enableVertexAttribArray(t);
206 assertGLError(gl, gl.INVALID_OPERATION, "multi array 8",
207 function(){gl.drawArrays(gl.TRIANGLES, 4, 1);});
208 assertGLError(gl, gl.INVALID_VALUE, "negative count",
209 function(){gl.drawArrays(gl.TRIANGLES, -1, 2);});
210 assertGLError(gl, gl.INVALID_OPERATION, "zero count???",
211 function(){gl.drawArrays(gl.TRIANGLES, 0, 4);});
212 assertGLError(gl, gl.INVALID_OPERATION, "multi array 9",
213 function(){gl.drawArrays(gl.TRIANGLES, 1, 4);});
214 bs.forEach(function(b){ gl.deleteBuffer(b) });
215 }
216
217
218 Tests.testDrawArraysVBOOutOfBounds = function(gl, prog, v,n,t) {
219 var vbo = new VBO(gl, {size:3, data:Quad.vertices});
220 vbo.use(v);
221 assertGLError(gl, gl.INVALID_OPERATION, "1",
222 function(){gl.drawArrays(gl.TRIANGLES, 6, 1);});
223 assertGLError(gl, gl.INVALID_VALUE, "negative count",
224 function(){gl.drawArrays(gl.TRIANGLES, 2, -1);});
225 assertGLError(gl, gl.INVALID_OPERATION, "3",
226 function(){gl.drawArrays(gl.TRIANGLES, 0, 7);});
227 assertGLError(gl, gl.INVALID_OPERATION, "4",
228 function(){gl.drawArrays(gl.TRIANGLES, 1, 6);});
229 vbo.destroy();
230 }
231
232 Tests.testDrawArraysVBOMultiOutOfBounds = function(gl, prog, v,n,t) {
233 // creates VBOs for the quad arrays, binds them with
234 // vertexAttribPointer and calls drawArrays
235 var vbo = new VBO(gl,
236 {size:3, data:Quad.vertices},
237 {size:3, data:Quad.normals},
238 {size:2, data:Quad.texcoords});
239 vbo.use(v, n, t);
240 assertGLError(gl, gl.INVALID_OPERATION, "1",
241 function(){gl.drawArrays(gl.TRIANGLES, 6, 1);});
242 assertGLError(gl, gl.INVALID_VALUE, "negative count",
243 function(){gl.drawArrays(gl.TRIANGLES, 2, -1);});
244 assertGLError(gl, gl.INVALID_OPERATION, "2",
245 function(){gl.drawArrays(gl.TRIANGLES, 0, 7);});
246 assertGLError(gl, gl.INVALID_OPERATION, "3",
247 function(){gl.drawArrays(gl.TRIANGLES, 1, 6);});
248 vbo.destroy();
249 }
250
251 Tests.testDrawArraysOOBShaderJuggle = function(gl, prog, v,n,t) {
252 var vbo = new VBO(gl,
253 {size:3, data:[0,0,0]},
254 {size:3, data:[0,0,0,0,0,0]});
255 vbo.init();
256 gl.bindBuffer(gl.ARRAY_BUFFER, vbo.vbos[0]);
257 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);
258 gl.enableVertexAttribArray(v);
259 assertGLError(gl, gl.INVALID_OPERATION, "offset too big",
260 function(){gl.drawArrays(gl.TRIANGLES, 0, 2);});
261 var sh2 = new Shader(gl, 'vert', 'frag');
262 sh2.use();
263 gl.bindBuffer(gl.ARRAY_BUFFER, vbo.vbos[1]);
264 gl.vertexAttribPointer(sh2.attrib('Vertex'), 3, gl.FLOAT, false, 0, 0);
265 gl.enableVertexAttribArray(sh2.attrib('Vertex'));
266 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 2);});
267 assertGLError(gl, gl.INVALID_OPERATION, "offset too big 2",
268 function(){gl.drawArrays(gl.TRIANGLES, 0, 3);});
269 prog.use();
270 gl.vertexAttribPointer(prog.attrib('Vertex'), 3, gl.FLOAT, false, 0, 0);
271 gl.enableVertexAttribArray(prog.attrib('Vertex'));
272 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 2);});
273 assertGLError(gl, gl.INVALID_OPERATION, "offset too big 3",
274 function(){gl.drawArrays(gl.TRIANGLES, 0, 3);});
275 sh2.destroy();
276 }
277
278 </script>
279 <script id="vert" type="x-shader/x-vertex">
280 attribute vec3 Vertex;
281 attribute vec3 Normal;
282 attribute vec2 Tex;
283
284 varying vec4 texCoord0;
285 void main()
286 {
287 gl_Position = vec4(Vertex * Normal, 1.0);
288 texCoord0 = vec4(Tex,0.0,0.0) + gl_Position;
289 }
290 </script>
291 <script id="frag" type="x-shader/x-fragment">
292 precision mediump float;
293
294 varying vec4 texCoord0;
295 void main()
296 {
297 gl_FragColor = texCoord0;
298 }
299 </script>
300
301
302 <style>canvas{ position:absolute; }</style>
303 </head><body>
304 <canvas id="gl" width="1" height="1"></canvas>
305 </body></html>
OLDNEW
« no previous file with comments | « conformance/more/functions/drawArrays.html ('k') | conformance/more/functions/drawElements.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698