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

Unified Diff: conformance/context/context-lost.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 side-by-side diff with in-line comments
Download patch
Index: conformance/context/context-lost.html
===================================================================
--- conformance/context/context-lost.html (revision 0)
+++ conformance/context/context-lost.html (revision 0)
@@ -0,0 +1,325 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<link rel="stylesheet" href="../../resources/js-test-style.css"/>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/webgl-test.js"></script>
+<script src="../resources/webgl-test-utils.js"></script>
+<script>
+var wtu;
+var canvas;
+var gl;
+var shouldGenerateGLError;
+var extension_name = "WEBKIT_lose_context";
+var extension;
+
+var buffer;
+var framebuffer;
+var program;
+var renderbuffer;
+var shader;
+var texture;
+var uniformLocation;
+var arrayBuffer;
+var arrayBufferView
+var image;
+var video;
+var canvas2d;
+var ctx2d;
+var imageData;
+var float32array;
+var int32array;
+
+function init()
+{
+ wtu = WebGLTestUtils;
+ canvas = document.getElementById("canvas");
+ gl = wtu.create3DContext(canvas);
+ shouldGenerateGLError = wtu.shouldGenerateGLError;
+
+ description("Tests behavior under a lost context");
+
+ if (window.initNonKhronosFramework) {
+ window.initNonKhronosFramework(true);
+ }
+
+ // call testValidContext() before checking for the extension, because this is where we check
+ // for the isContextLost() method, which we want to do regardless of the extension's presence.
+ testValidContext();
+
+ extension = gl.getExtension(extension_name);
+ if (!extension) {
+ debug(extension_name + " extension not found.");
+ finish();
+ return;
+ }
+
+ canvas.addEventListener("webglcontextlost", testLostContext, false);
+
+ loseContext();
+}
+
+function loseContext()
+{
+ debug("");
+ debug("Lose context");
+
+ // Note: this will cause the context to be lost, and the
+ // webglcontextlost event listener to be called, immediately.
+ shouldGenerateGLError(gl, gl.NO_ERROR, "extension.loseContext()");
+ debug("");
+}
+
+function testValidContext()
+{
+ debug("Test valid context");
+
+ shouldBeFalse("gl.isContextLost()");
+
+ arrayBuffer = new ArrayBuffer(4);
+ arrayBufferView = new Int8Array(arrayBuffer);
+
+ // Generate resources for testing.
+ buffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+ framebuffer = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
+ program = wtu.setupSimpleTextureProgram(gl);
+ renderbuffer = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
+ shader = gl.createShader(gl.VERTEX_SHADER);
+ texture = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+
+ // Test is queries that will later be false
+ shouldGenerateGLError(gl, gl.NO_ERROR, "gl.enable(gl.BLEND)");
+ shouldBeTrue("gl.isBuffer(buffer)");
+ shouldBeTrue("gl.isEnabled(gl.BLEND)");
+ shouldBeTrue("gl.isFramebuffer(framebuffer)");
+ shouldBeTrue("gl.isProgram(program)");
+ shouldBeTrue("gl.isRenderbuffer(renderbuffer)");
+ shouldBeTrue("gl.isShader(shader)");
+ shouldBeTrue("gl.isTexture(texture)");
+}
+
+function testLostContext()
+{
+ debug("Test lost context");
+
+ // Functions with special return values.
+ shouldBeTrue("gl.isContextLost()");
+ shouldBe("gl.getError()", "gl.CONTEXT_LOST_WEBGL");
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+ shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
+ shouldBe("gl.getAttribLocation(program, 'u_modelViewProjMatrix')", "-1");
+ shouldBe("gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER)", "0");
+
+ // Test the extension itself.
+ shouldGenerateGLError(gl, gl.INVALID_OPERATION, "extension.loseContext()");
+
+ image = document.createElement("image");
+ video = document.createElement("video");
+ canvas2d = document.createElement("canvas");
+ ctx2d = canvas2d.getContext("2d");
+ imageData = ctx2d.createImageData(1, 1);
+ float32array = new Float32Array(1);
+ int32array = new Int32Array(1);
+
+ // Functions returning void should return immediately.
+ // This is untestable, but we can at least be sure they cause no errors
+ // and the codepaths are exercised.
+ var voidTests = [
+ "gl.activeTexture(gl.TEXTURE0)",
+ "gl.attachShader(program, shader)",
+ "gl.bindBuffer(gl.ARRAY_BUFFER, buffer)",
+ "gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)",
+ "gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer)",
+ "gl.bindTexture(gl.TEXTURE_2D, texture)",
+ "gl.blendColor(1.0, 1.0, 1.0, 1.0)",
+ "gl.blendEquation(gl.FUNC_ADD)",
+ "gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD)",
+ "gl.blendFunc(gl.ONE, gl.ONE)",
+ "gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE)",
+ "gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW)",
+ "gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView, gl.STATIC_DRAW)",
+ "gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl.STATIC_DRAW)",
+ "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBufferView)",
+ "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffer)",
+ "gl.clear(gl.COLOR_BUFFER_BIT)",
+ "gl.clearColor(1, 1, 1, 1)",
+ "gl.clearDepth(1)",
+ "gl.clearStencil(0)",
+ "gl.colorMask(1, 1, 1, 1)",
+ "gl.compileShader(shader)",
+ "gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, 0, 0)",
+ "gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0)",
+ "gl.cullFace(gl.FRONT)",
+ "gl.deleteBuffer(buffer)",
+ "gl.deleteFramebuffer(framebuffer)",
+ "gl.deleteProgram(program)",
+ "gl.deleteRenderbuffer(renderbuffer)",
+ "gl.deleteShader(shader)",
+ "gl.deleteTexture(texture)",
+ "gl.depthFunc(gl.NEVER)",
+ "gl.depthMask(0)",
+ "gl.depthRange(0, 1)",
+ "gl.detachShader(program, shader)",
+ "gl.disable(gl.BLEND)",
+ "gl.disableVertexAttribArray(0)",
+ "gl.drawArrays(gl.POINTS, 0, 0)",
+ "gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT, 0)",
+ "gl.enable(gl.BLEND)",
+ "gl.enableVertexAttribArray(0)",
+ "gl.finish()",
+ "gl.flush()",
+ "gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer)",
+ "gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)",
+ "gl.frontFace(gl.CW)",
+ "gl.generateMipmap(gl.TEXTURE_2D)",
+ "gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST)",
+ "gl.lineWidth(0)",
+ "gl.linkProgram(program)",
+ "gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0)",
+ "gl.polygonOffset(0, 0)",
+ "gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)",
+ "gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 0, 0)",
+ "gl.sampleCoverage(0, 0)",
+ "gl.scissor(0, 0, 0, 0)",
+ "gl.shaderSource(shader, '')",
+ "gl.stencilFunc(gl.NEVER, 0, 0)",
+ "gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0)",
+ "gl.stencilMask(0)",
+ "gl.stencilMaskSeparate(gl.FRONT, 0)",
+ "gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)",
+ "gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP, gl.KEEP)",
+ "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)",
+ "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData)",
+ "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image)",
+ "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas)",
+ "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video)",
+ "gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)",
+ "gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)",
+ "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)",
+ "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData)",
+ "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, image)",
+ "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, canvas)",
+ "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, video)",
+ "gl.uniform1f(uniformLocation, 0)",
+ "gl.uniform1fv(uniformLocation, float32array)",
+ "gl.uniform1fv(uniformLocation, [0])",
+ "gl.uniform1i(uniformLocation, 0)",
+ "gl.uniform1iv(uniformLocation, int32array)",
+ "gl.uniform1iv(uniformLocation, [0])",
+ "gl.uniform2f(uniformLocation, 0, 0)",
+ "gl.uniform2fv(uniformLocation, float32array)",
+ "gl.uniform2fv(uniformLocation, [0, 0])",
+ "gl.uniform2i(uniformLocation, 0, 0)",
+ "gl.uniform2iv(uniformLocation, int32array)",
+ "gl.uniform2iv(uniformLocation, [0, 0])",
+ "gl.uniform3f(uniformLocation, 0, 0, 0)",
+ "gl.uniform3fv(uniformLocation, float32array)",
+ "gl.uniform3fv(uniformLocation, [0, 0, 0])",
+ "gl.uniform3i(uniformLocation, 0, 0, 0)",
+ "gl.uniform3iv(uniformLocation, int32array)",
+ "gl.uniform3iv(uniformLocation, [0, 0, 0])",
+ "gl.uniform4f(uniformLocation, 0, 0, 0, 0)",
+ "gl.uniform4fv(uniformLocation, float32array)",
+ "gl.uniform4fv(uniformLocation, [0, 0, 0, 0])",
+ "gl.uniform4i(uniformLocation, 0, 0, 0, 0)",
+ "gl.uniform4iv(uniformLocation, int32array)",
+ "gl.uniform4iv(uniformLocation, [0, 0, 0, 0])",
+ "gl.uniformMatrix2fv(uniformLocation, false, float32array)",
+ "gl.uniformMatrix2fv(uniformLocation, false, [0, 0, 0, 0])",
+ "gl.uniformMatrix3fv(uniformLocation, false, float32array)",
+ "gl.uniformMatrix3fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0])",
+ "gl.uniformMatrix4fv(uniformLocation, false, float32array)",
+ "gl.uniformMatrix4fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])",
+ "gl.useProgram(program)",
+ "gl.validateProgram(program)",
+ "gl.vertexAttrib1f(0, 0)",
+ "gl.vertexAttrib1fv(0, float32array)",
+ "gl.vertexAttrib1fv(0, [0])",
+ "gl.vertexAttrib2f(0, 0, 0)",
+ "gl.vertexAttrib2fv(0, float32array)",
+ "gl.vertexAttrib2fv(0, [0, 0])",
+ "gl.vertexAttrib3f(0, 0, 0, 0)",
+ "gl.vertexAttrib3fv(0, float32array)",
+ "gl.vertexAttrib3fv(0, [0, 0, 0])",
+ "gl.vertexAttrib4f(0, 0, 0, 0, 0)",
+ "gl.vertexAttrib4fv(0, float32array)",
+ "gl.vertexAttrib4fv(0, [0, 0, 0, 0])",
+ "gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0, 0)",
+ "gl.viewport(0, 0, 0, 0)",
+ ];
+ for (var i = 0; i < voidTests.length; ++i) {
+ shouldGenerateGLError(gl, gl.NO_ERROR, voidTests[i]);
+ }
+
+ // Functions return nullable values should all return null.
+ var nullTests = [
+ "gl.createBuffer()",
+ "gl.createFramebuffer()",
+ "gl.createProgram()",
+ "gl.createRenderbuffer()",
+ "gl.createShader(gl.GL_VERTEX_SHADER)",
+ "gl.createTexture()",
+ "gl.getActiveAttrib(program, 0)",
+ "gl.getActiveUniform(program, 0)",
+ "gl.getAttachedShaders(program)",
+ "gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)",
+ "gl.getContextAttributes()",
+ "gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)",
+ "gl.getParameter(gl.CURRENT_PROGRAM)",
+ "gl.getProgramInfoLog(program)",
+ "gl.getProgramParameter(program, gl.LINK_STATUS)",
+ "gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)",
+ "gl.getShaderInfoLog(shader)",
+ "gl.getShaderParameter(shader, gl.SHADER_TYPE)",
+ "gl.getShaderSource(shader)",
+ "gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S)",
+ "gl.getUniform(program, uniformLocation)",
+ "gl.getUniformLocation(program, 'vPosition')",
+ "gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)",
+ "gl.getSupportedExtensions()",
+ "gl.getExtension('" + extension_name + "')",
+ ];
+ for (var i = 0; i < nullTests.length; ++i) {
+ shouldBeNull(nullTests[i]);
+ }
+
+ // "Is" queries should all return false.
+ shouldBeFalse("gl.isBuffer(buffer)");
+ shouldBeFalse("gl.isEnabled(gl.BLEND)");
+ shouldBeFalse("gl.isFramebuffer(framebuffer)");
+ shouldBeFalse("gl.isProgram(program)");
+ shouldBeFalse("gl.isRenderbuffer(renderbuffer)");
+ shouldBeFalse("gl.isShader(shader)");
+ shouldBeFalse("gl.isTexture(texture)");
+
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+
+ debug("");
+
+ finish();
+}
+
+function finish() {
+ successfullyParsed = true;
+ var epilogue = document.createElement("script");
+ epilogue.onload = function() {
+ if (window.nonKhronosFrameworkNotifyDone)
+ window.nonKhronosFrameworkNotifyDone();
+ };
+ epilogue.src = "../../resources/js-test-post.js";
+ document.body.appendChild(epilogue);
+}
+</script>
+</head>
+<body onload="init()">
+<div id="description"></div>
+<div id="console"></div>
+<canvas id="canvas">
+</body>
+</html>
Property changes on: conformance/context/context-lost.html
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698