| Index: third_party/webgl/sdk/tests/conformance/context/context-lost-restored.html
|
| ===================================================================
|
| --- third_party/webgl/sdk/tests/conformance/context/context-lost-restored.html (revision 0)
|
| +++ third_party/webgl/sdk/tests/conformance/context/context-lost-restored.html (revision 0)
|
| @@ -0,0 +1,213 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<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 = WebGLTestUtils;
|
| +var canvas;
|
| +var gl;
|
| +var shouldGenerateGLError;
|
| +var extensionNames = [
|
| + "WEBKIT_WEBGL_lose_context",
|
| + "MOZ_WEBGL_lose_context",
|
| +];
|
| +var extension;
|
| +var bufferObjects;
|
| +var program;
|
| +var texture;
|
| +var texColor = [255, 10, 20, 255];
|
| +var allowRestore;
|
| +var contextLostEventFired;
|
| +var contextRestoredEventFired;
|
| +
|
| +function init()
|
| +{
|
| + if (window.initNonKhronosFramework) {
|
| + window.initNonKhronosFramework(true);
|
| + }
|
| +
|
| + description("Tests behavior under a restored context.");
|
| +
|
| + shouldGenerateGLError = wtu.shouldGenerateGLError;
|
| + testLosingContext();
|
| +}
|
| +
|
| +function setupTest()
|
| +{
|
| + canvas = document.createElement("canvas");
|
| + canvas.width = 1;
|
| + canvas.height = 1;
|
| + gl = wtu.create3DContext(canvas);
|
| + for (var ii = 0; ii < extensionNames.length; ++ii) {
|
| + extension = gl.getExtension(extensionNames[ii]);
|
| + if (extension)
|
| + break;
|
| + }
|
| + if (!extension) {
|
| + debug("Could not find lose_context extension under the following names: " + extensionNames.join(" "));
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +function testLosingContext()
|
| +{
|
| + if (!setupTest())
|
| + finishTest();
|
| +
|
| + debug("Test losing a context and inability to restore it.");
|
| +
|
| + canvas.addEventListener("webglcontextlost", function(e) {
|
| + testLostContext(e);
|
| + // restore the context after this event has exited.
|
| + setTimeout(function() {
|
| + // we didn't call prevent default so we should not be able to restore the context
|
| + shouldGenerateGLError(gl, gl.INVALID_OPERATION, "extension.restoreContext()");
|
| + testLosingAndRestoringContext();
|
| + }, 0);
|
| + });
|
| + canvas.addEventListener("webglcontextrestored", testShouldNotRestoreContext);
|
| + allowRestore = false;
|
| + contextLostEventFired = false;
|
| + contextRestoredEventFired = false;
|
| +
|
| + testOriginalContext();
|
| + extension.loseContext();
|
| + // The context should be lost immediately.
|
| + shouldBeTrue("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.CONTEXT_LOST_WEBGL");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| + // gl methods should be no-ops
|
| + shouldGenerateGLError(gl, gl.NO_ERROR, "gl.blendFunc(gl.TEXTURE_2D, gl.TEXTURE_CUBE_MAP)");
|
| + // but the event should not have been fired.
|
| + shouldBeFalse("contextLostEventFired");
|
| +}
|
| +
|
| +function testLosingAndRestoringContext()
|
| +{
|
| + if (!setupTest())
|
| + finishTest();
|
| +
|
| + debug("");
|
| + debug("Test losing and restoring a context.");
|
| +
|
| + canvas.addEventListener("webglcontextlost", function(e) {
|
| + testLostContext(e);
|
| + // restore the context after this event has exited.
|
| + setTimeout(function() {
|
| + shouldGenerateGLError(gl, gl.NO_ERROR, "extension.restoreContext()");
|
| + // The context should still be lost. It will not get restored until the
|
| + // webglrestorecontext event is fired.
|
| + shouldBeTrue("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| + // gl methods should still be no-ops
|
| + shouldGenerateGLError(gl, gl.NO_ERROR, "gl.blendFunc(gl.TEXTURE_2D, gl.TEXTURE_CUBE_MAP)");
|
| + }, 0);
|
| + });
|
| + canvas.addEventListener("webglcontextrestored", function() {
|
| + testRestoredContext();
|
| + finishTest();
|
| + });
|
| + allowRestore = true;
|
| + contextLostEventFired = false;
|
| + contextRestoredEventFired = false;
|
| +
|
| + testOriginalContext();
|
| + extension.loseContext();
|
| + // The context should be lost immediately.
|
| + shouldBeTrue("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.CONTEXT_LOST_WEBGL");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| + // gl methods should be no-ops
|
| + shouldGenerateGLError(gl, gl.NO_ERROR, "gl.blendFunc(gl.TEXTURE_2D, gl.TEXTURE_CUBE_MAP)");
|
| + // but the event should not have been fired.
|
| + shouldBeFalse("contextLostEventFired");
|
| +}
|
| +
|
| +function testRendering()
|
| +{
|
| + gl.clearColor(0, 0, 0, 255);
|
| + gl.colorMask(1, 1, 1, 0);
|
| + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
| +
|
| + program = wtu.setupSimpleTextureProgram(gl);
|
| + bufferObjects = wtu.setupUnitQuad(gl);
|
| + texture = wtu.createColoredTexture(gl, canvas.width, canvas.height, texColor);
|
| +
|
| + gl.uniform1i(gl.getUniformLocation(program, "tex"), 0);
|
| + wtu.drawQuad(gl, [0, 0, 0, 255]);
|
| +
|
| + var compare = texColor.slice(0, 3);
|
| + wtu.checkCanvasRect(gl, 0, 0, canvas.width, canvas.height, compare, "shouldBe " + compare);
|
| +
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| +}
|
| +
|
| +function testOriginalContext()
|
| +{
|
| + debug("Test valid context");
|
| + shouldBeFalse("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| + testRendering();
|
| + debug("");
|
| +}
|
| +
|
| +function testLostContext(e)
|
| +{
|
| + debug("Test lost context");
|
| + shouldBeFalse("contextLostEventFired");
|
| + contextLostEventFired = true;
|
| + shouldBeTrue("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| + debug("");
|
| + if (allowRestore)
|
| + e.preventDefault();
|
| +}
|
| +
|
| +function testShouldNotRestoreContext(e)
|
| +{
|
| + testFailed("Should not restore the context unless preventDefault is called on the context lost event");
|
| + debug("");
|
| +}
|
| +
|
| +function testResources(expected)
|
| +{
|
| + var tests = [
|
| + "gl.bindTexture(gl.TEXTURE_2D, texture)",
|
| + "gl.useProgram(program)",
|
| + "gl.bindBuffer(gl.ARRAY_BUFFER, bufferObjects[0])",
|
| + ];
|
| +
|
| + for (var i = 0; i < tests.length; ++i)
|
| + shouldGenerateGLError(gl, expected, tests[i]);
|
| +}
|
| +
|
| +function testRestoredContext()
|
| +{
|
| + debug("Test restored context");
|
| + shouldBeFalse("contextRestoredEventFired");
|
| + contextRestoredEventFired = true;
|
| + shouldBeFalse("gl.isContextLost()");
|
| + shouldBe("gl.getError()", "gl.NO_ERROR");
|
| +
|
| + // Validate that using old resources fails.
|
| + testResources(gl.INVALID_OPERATION);
|
| +
|
| + testRendering();
|
| +
|
| + // Validate new resources created in testRendering().
|
| + testResources(gl.NO_ERROR);
|
| + debug("");
|
| +}
|
| +
|
| +
|
| +</script>
|
| +</head>
|
| +<body onload="init()">
|
| +<div id="description"></div>
|
| +<div id="console"></div>
|
| +</body>
|
| +</html>
|
|
|
| Property changes on: third_party/webgl/sdk/tests/conformance/context/context-lost-restored.html
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|