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

Side by Side Diff: third_party/webgl/sdk/tests/conformance/context/context-lost.html

Issue 10399113: Roll webgl conformance tests to r17874: part 2, adding r17874 (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/
Patch Set: Created 8 years, 7 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>
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" href="../../resources/js-test-style.css"/>
32 <script src="../../resources/js-test-pre.js"></script>
33 <script src="../resources/webgl-test.js"></script>
34 <script src="../resources/webgl-test-utils.js"></script>
35 <script>
36 var wtu;
37 var canvas;
38 var gl;
39 var shouldGenerateGLError;
40 var extensionNames = [
41 "WEBKIT_WEBGL_lose_context",
42 "MOZ_WEBGL_lose_context",
43 ];
44 var extensionName;
45 var extension;
46
47 var buffer;
48 var framebuffer;
49 var program;
50 var renderbuffer;
51 var shader;
52 var texture;
53 var uniformLocation;
54 var arrayBuffer;
55 var arrayBufferView
56 var image;
57 var video;
58 var canvas2d;
59 var ctx2d;
60 var imageData;
61 var float32array;
62 var int32array;
63
64 function init()
65 {
66 wtu = WebGLTestUtils;
67 canvas = document.getElementById("canvas");
68 gl = wtu.create3DContext(canvas);
69 shouldGenerateGLError = wtu.shouldGenerateGLError;
70
71 description("Tests behavior under a lost context");
72
73 if (window.initNonKhronosFramework) {
74 window.initNonKhronosFramework(true);
75 }
76
77 // call testValidContext() before checking for the extension, because this i s where we check
78 // for the isContextLost() method, which we want to do regardless of the ext ension's presence.
79 testValidContext();
80
81 for (var ii = 0; ii < extensionNames.length; ++ii) {
82 extension = gl.getExtension(extensionNames[ii]);
83 if (extension) {
84 extensionName = extensionNames[ii];
85 break;
86 }
87 }
88 if (!extension) {
89 debug("Could not find lose_context extension under the following names: " + extensionNames.join(" "));
90 finishTest();
91 return false;
92 }
93
94 canvas.addEventListener("webglcontextlost", testLostContext, false);
95
96 loseContext();
97 }
98
99 function loseContext()
100 {
101 debug("");
102 debug("Lose context");
103
104 // Note: this will cause the context to be lost, but the
105 // webglcontextlost event listener to be queued.
106 extension.loseContext();
107 debug("");
108 }
109
110 function testValidContext()
111 {
112 debug("Test valid context");
113
114 shouldBeFalse("gl.isContextLost()");
115
116 arrayBuffer = new ArrayBuffer(4);
117 arrayBufferView = new Int8Array(arrayBuffer);
118
119 // Generate resources for testing.
120 buffer = gl.createBuffer();
121 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
122 framebuffer = gl.createFramebuffer();
123 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
124 program = wtu.setupSimpleTextureProgram(gl);
125 renderbuffer = gl.createRenderbuffer();
126 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
127 shader = gl.createShader(gl.VERTEX_SHADER);
128 texture = gl.createTexture();
129 gl.bindTexture(gl.TEXTURE_2D, texture);
130 shouldBe("gl.getError()", "gl.NO_ERROR");
131
132 // Test is queries that will later be false
133 shouldGenerateGLError(gl, gl.NO_ERROR, "gl.enable(gl.BLEND)");
134 shouldBeTrue("gl.isBuffer(buffer)");
135 shouldBeTrue("gl.isEnabled(gl.BLEND)");
136 shouldBeTrue("gl.isFramebuffer(framebuffer)");
137 shouldBeTrue("gl.isProgram(program)");
138 shouldBeTrue("gl.isRenderbuffer(renderbuffer)");
139 shouldBeTrue("gl.isShader(shader)");
140 shouldBeTrue("gl.isTexture(texture)");
141 }
142
143 function testLostContext()
144 {
145 debug("Test lost context");
146
147 // Functions with special return values.
148 shouldBeTrue("gl.isContextLost()");
149 shouldBe("gl.getError()", "gl.CONTEXT_LOST_WEBGL");
150 shouldBe("gl.getError()", "gl.NO_ERROR");
151 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPP ORTED");
152 shouldBe("gl.getAttribLocation(program, 'u_modelViewProjMatrix')", "-1");
153 shouldBe("gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER)", "0") ;
154
155 // Test the extension itself.
156 shouldGenerateGLError(gl, gl.INVALID_OPERATION, "extension.loseContext()");
157
158 image = document.createElement("image");
159 video = document.createElement("video");
160 canvas2d = document.createElement("canvas");
161 ctx2d = canvas2d.getContext("2d");
162 imageData = ctx2d.createImageData(1, 1);
163 float32array = new Float32Array(1);
164 int32array = new Int32Array(1);
165
166 // Functions returning void should return immediately.
167 // This is untestable, but we can at least be sure they cause no errors
168 // and the codepaths are exercised.
169 var voidTests = [
170 "gl.activeTexture(gl.TEXTURE0)",
171 "gl.attachShader(program, shader)",
172 "gl.bindBuffer(gl.ARRAY_BUFFER, buffer)",
173 "gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)",
174 "gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer)",
175 "gl.bindTexture(gl.TEXTURE_2D, texture)",
176 "gl.blendColor(1.0, 1.0, 1.0, 1.0)",
177 "gl.blendEquation(gl.FUNC_ADD)",
178 "gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD)",
179 "gl.blendFunc(gl.ONE, gl.ONE)",
180 "gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE)",
181 "gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW)",
182 "gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView, gl.STATIC_DRAW)",
183 "gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl.STATIC_DRAW)",
184 "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBufferView)",
185 "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffer)",
186 "gl.clear(gl.COLOR_BUFFER_BIT)",
187 "gl.clearColor(1, 1, 1, 1)",
188 "gl.clearDepth(1)",
189 "gl.clearStencil(0)",
190 "gl.colorMask(1, 1, 1, 1)",
191 "gl.compileShader(shader)",
192 "gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, 0, 0)",
193 "gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0)",
194 "gl.cullFace(gl.FRONT)",
195 "gl.deleteBuffer(buffer)",
196 "gl.deleteFramebuffer(framebuffer)",
197 "gl.deleteProgram(program)",
198 "gl.deleteRenderbuffer(renderbuffer)",
199 "gl.deleteShader(shader)",
200 "gl.deleteTexture(texture)",
201 "gl.depthFunc(gl.NEVER)",
202 "gl.depthMask(0)",
203 "gl.depthRange(0, 1)",
204 "gl.detachShader(program, shader)",
205 "gl.disable(gl.BLEND)",
206 "gl.disableVertexAttribArray(0)",
207 "gl.drawArrays(gl.POINTS, 0, 0)",
208 "gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT, 0)",
209 "gl.enable(gl.BLEND)",
210 "gl.enableVertexAttribArray(0)",
211 "gl.finish()",
212 "gl.flush()",
213 "gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.REN DERBUFFER, renderbuffer)",
214 "gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTUR E_2D, texture, 0)",
215 "gl.frontFace(gl.CW)",
216 "gl.generateMipmap(gl.TEXTURE_2D)",
217 "gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST)",
218 "gl.lineWidth(0)",
219 "gl.linkProgram(program)",
220 "gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0)",
221 "gl.polygonOffset(0, 0)",
222 "gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)",
223 "gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0)",
224 "gl.sampleCoverage(0, 0)",
225 "gl.scissor(0, 0, 0, 0)",
226 "gl.shaderSource(shader, '')",
227 "gl.stencilFunc(gl.NEVER, 0, 0)",
228 "gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0)",
229 "gl.stencilMask(0)",
230 "gl.stencilMaskSeparate(gl.FRONT, 0)",
231 "gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)",
232 "gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP)",
233 "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_ BYTE, arrayBufferView)",
234 "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, ima geData)",
235 "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, ima ge)",
236 "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, can vas)",
237 "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, vid eo)",
238 "gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)",
239 "gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)",
240 "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYT E, arrayBufferView)",
241 "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, ima geData)",
242 "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, ima ge)",
243 "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, can vas)",
244 "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, vid eo)",
245 "gl.uniform1f(uniformLocation, 0)",
246 "gl.uniform1fv(uniformLocation, float32array)",
247 "gl.uniform1fv(uniformLocation, [0])",
248 "gl.uniform1i(uniformLocation, 0)",
249 "gl.uniform1iv(uniformLocation, int32array)",
250 "gl.uniform1iv(uniformLocation, [0])",
251 "gl.uniform2f(uniformLocation, 0, 0)",
252 "gl.uniform2fv(uniformLocation, float32array)",
253 "gl.uniform2fv(uniformLocation, [0, 0])",
254 "gl.uniform2i(uniformLocation, 0, 0)",
255 "gl.uniform2iv(uniformLocation, int32array)",
256 "gl.uniform2iv(uniformLocation, [0, 0])",
257 "gl.uniform3f(uniformLocation, 0, 0, 0)",
258 "gl.uniform3fv(uniformLocation, float32array)",
259 "gl.uniform3fv(uniformLocation, [0, 0, 0])",
260 "gl.uniform3i(uniformLocation, 0, 0, 0)",
261 "gl.uniform3iv(uniformLocation, int32array)",
262 "gl.uniform3iv(uniformLocation, [0, 0, 0])",
263 "gl.uniform4f(uniformLocation, 0, 0, 0, 0)",
264 "gl.uniform4fv(uniformLocation, float32array)",
265 "gl.uniform4fv(uniformLocation, [0, 0, 0, 0])",
266 "gl.uniform4i(uniformLocation, 0, 0, 0, 0)",
267 "gl.uniform4iv(uniformLocation, int32array)",
268 "gl.uniform4iv(uniformLocation, [0, 0, 0, 0])",
269 "gl.uniformMatrix2fv(uniformLocation, false, float32array)",
270 "gl.uniformMatrix2fv(uniformLocation, false, [0, 0, 0, 0])",
271 "gl.uniformMatrix3fv(uniformLocation, false, float32array)",
272 "gl.uniformMatrix3fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0] )",
273 "gl.uniformMatrix4fv(uniformLocation, false, float32array)",
274 "gl.uniformMatrix4fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])",
275 "gl.useProgram(program)",
276 "gl.validateProgram(program)",
277 "gl.vertexAttrib1f(0, 0)",
278 "gl.vertexAttrib1fv(0, float32array)",
279 "gl.vertexAttrib1fv(0, [0])",
280 "gl.vertexAttrib2f(0, 0, 0)",
281 "gl.vertexAttrib2fv(0, float32array)",
282 "gl.vertexAttrib2fv(0, [0, 0])",
283 "gl.vertexAttrib3f(0, 0, 0, 0)",
284 "gl.vertexAttrib3fv(0, float32array)",
285 "gl.vertexAttrib3fv(0, [0, 0, 0])",
286 "gl.vertexAttrib4f(0, 0, 0, 0, 0)",
287 "gl.vertexAttrib4fv(0, float32array)",
288 "gl.vertexAttrib4fv(0, [0, 0, 0, 0])",
289 "gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0, 0)",
290 "gl.viewport(0, 0, 0, 0)",
291 ];
292 for (var i = 0; i < voidTests.length; ++i) {
293 shouldGenerateGLError(gl, gl.NO_ERROR, voidTests[i]);
294 }
295
296 // Functions return nullable values should all return null.
297 var nullTests = [
298 "gl.createBuffer()",
299 "gl.createFramebuffer()",
300 "gl.createProgram()",
301 "gl.createRenderbuffer()",
302 "gl.createShader(gl.GL_VERTEX_SHADER)",
303 "gl.createTexture()",
304 "gl.getActiveAttrib(program, 0)",
305 "gl.getActiveUniform(program, 0)",
306 "gl.getAttachedShaders(program)",
307 "gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)",
308 "gl.getContextAttributes()",
309 "gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMEN T0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)",
310 "gl.getParameter(gl.CURRENT_PROGRAM)",
311 "gl.getProgramInfoLog(program)",
312 "gl.getProgramParameter(program, gl.LINK_STATUS)",
313 "gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)",
314 "gl.getShaderInfoLog(shader)",
315 "gl.getShaderParameter(shader, gl.SHADER_TYPE)",
316 "gl.getShaderSource(shader)",
317 "gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S)",
318 "gl.getUniform(program, uniformLocation)",
319 "gl.getUniformLocation(program, 'vPosition')",
320 "gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)",
321 "gl.getSupportedExtensions()",
322 "gl.getExtension('" + extensionName + "')",
323 ];
324 for (var i = 0; i < nullTests.length; ++i) {
325 shouldBeNull(nullTests[i]);
326 }
327
328 // "Is" queries should all return false.
329 shouldBeFalse("gl.isBuffer(buffer)");
330 shouldBeFalse("gl.isEnabled(gl.BLEND)");
331 shouldBeFalse("gl.isFramebuffer(framebuffer)");
332 shouldBeFalse("gl.isProgram(program)");
333 shouldBeFalse("gl.isRenderbuffer(renderbuffer)");
334 shouldBeFalse("gl.isShader(shader)");
335 shouldBeFalse("gl.isTexture(texture)");
336
337 shouldBe("gl.getError()", "gl.NO_ERROR");
338
339 debug("");
340
341 finishTest();
342 }
343
344 </script>
345 </head>
346 <body onload="init()">
347 <div id="description"></div>
348 <div id="console"></div>
349 <canvas id="canvas">
350 </body>
351 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698