Files
tubestation/content/canvas/test/webgl/extra/out-of-vram.html
Benoit Jacob 5e8a2689ad Bug 694730 - Upgrade WebGL conformance test suite to r15815 - no review
The 1.0.1 release is really close, and upgrading now allows us to give feedback and make sure that all tests are passable.

The canonical URL for this test suite is
  https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/webgl-conformance-tests.html
2011-10-16 21:19:28 -04:00

116 lines
2.7 KiB
HTML

<!--
Copyright (c) 2009 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL Out Of VRAM Test</title>
<link rel="stylesheet" href="../resources/js-test-style.css"/>
<script src="../resources/desktop-gl-constants.js" type="text/javascript"></script>
<script src="../resources/js-test-pre.js"></script>
<script src="../conformance/resources/webgl-test.js"></script>
<script src="../conformance/resources/webgl-test-utils.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="2" height="2"> </canvas>
<script>
debug("This tests WebGL running out of vram.");
debug("");
debug("Canvas.getContext");
var wtu = WebGLTestUtils;
var canvas = document.getElementById("canvas");
try {
var gl = create3DContext(canvas);
} catch(e) {
}
if (!gl) {
testFailed("could not create context");
} else {
testPassed("context exists");
var args = wtu.getUrlArguments();
canvas.addEventListener('webglcontextlost', contextLost, false);
function contextLost(e) {
e.preventDefault();
debug("***context lost***");
}
function contextRestored(e) {
debug("***context restored***");
}
debug("");
debug("Allocating textures.");
var intervalId;
var count = 0;
var textureMem = 0;
var textures = [];
var size = 2048;
var limit = (args.limit ? args.limit : 8192) * 1024 * 1024;
debug("limit: " + InMB(limit))
function InMB(v) {
return "" + Math.floor(v / 1024 / 1024) + "MB";
}
function makeTexture() {
if (gl.isContextLost()) {
stop("out of memory");
return;
}
++count;
textureMem += size * size * 4;
if (textureMem > limit) {
stop("reached limit");
return;
}
debug ("creating texture #" + count + " mem = " + InMB(textureMem));
var texture = gl.createTexture();
textures.push(texture);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D,
0, // level
gl.RGBA, // internalFormat
size, // width
size, // height
0, // border
gl.RGBA, // format
gl.UNSIGNED_BYTE, // type
null); // data
var err = gl.getError();
if (err != gl.NO_ERROR) {
stop("out of memory");
return;
}
}
intervalId = window.setInterval(makeTexture, 1000 / 15);
}
function stop(msg) {
window.clearInterval(intervalId);
testPassed(msg);
finish();
}
function finish() {
debug("");
successfullyParsed = true;
}
</script>
</body>
</html>