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

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

Issue 41503006: Add ToT WebGL conformance tests : part 8 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 7 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
## -0,0 +1 ##
+LF
\ No newline at end of property
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <!--
6
7 /*
8 ** Copyright (c) 2012 The Khronos Group Inc.
9 **
10 ** Permission is hereby granted, free of charge, to any person obtaining a
11 ** copy of this software and/or associated documentation files (the
12 ** "Materials"), to deal in the Materials without restriction, including
13 ** without limitation the rights to use, copy, modify, merge, publish,
14 ** distribute, sublicense, and/or sell copies of the Materials, and to
15 ** permit persons to whom the Materials are furnished to do so, subject to
16 ** the following conditions:
17 **
18 ** The above copyright notice and this permission notice shall be included
19 ** in all copies or substantial portions of the Materials.
20 **
21 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
25 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
28 */
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(getGLContext(canvas));
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