Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<title>WebGL test: bug 958723</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<script src="driver-info.js"></script>
<script src="webgl-util.js"></script>
function TestAttribs(attribs) {
ok(true, 'Testing attribs: ' + JSON.stringify(attribs));
var canvas = document.createElement('canvas');
var gl = canvas.getContext('experimental-webgl', attribs);
ok(gl, 'No tested attribs should result in failure to create a context');
if (!gl)
var actual = gl.getContextAttributes();
ok(actual.alpha == attribs.alpha,
'Resulting `alpha` should match request.');
ok(actual.premultipliedAlpha == attribs.premultipliedAlpha,
'Resulting `premultipliedAlpha` should match request.');
ok(actual.preserveDrawingBuffer == attribs.preserveDrawingBuffer,
'Resulting `preserveDrawingBuffer` should match request.');
// "The depth, stencil and antialias attributes, when set to true, are
// requests, not requirements."
if (!attribs.antialias) {
ok(!actual.antialias, 'No `antialias` if not requested.');
if (!attribs.depth) {
ok(!actual.depth, 'No `depth` if not requested.');
if (!attribs.stencil) {
ok(!actual.stencil, 'No `stencil` if not requested.');
var hasAlpha = !!gl.getParameter(gl.ALPHA_BITS);
var hasDepth = !!gl.getParameter(gl.DEPTH_BITS);
var hasStencil = !!gl.getParameter(gl.STENCIL_BITS);
var hasAntialias = !!gl.getParameter(gl.SAMPLES);
ok(hasAlpha == actual.alpha, 'Bits should match `alpha` attrib.');
ok(hasAntialias == actual.antialias, 'Bits should match `antialias` attrib.');
ok(hasDepth == actual.depth, 'Bits should match `depth` attrib.');
ok(hasStencil == actual.stencil, 'Bits should match `stencil` attrib.');
function CloneAttribs(attribs) {
return {
alpha: attribs.alpha,
antialias: attribs.antialias,
depth: attribs.depth,
premultipliedAlpha: attribs.premultipliedAlpha,
preserveDrawingBuffer: attribs.preserveDrawingBuffer,
stencil: attribs.stencil,
function SplitForAttrib(list, attrib) {
var ret = [];
for (var i in list) {
var cur = list[i];
if (cur[attrib])
throw 'Attrib is already true.';
var clone = CloneAttribs(cur);
clone[attrib] = true;
return ret;
function GenAttribList() {
var base = {
alpha: false,
antialias: false,
depth: false,
premultipliedAlpha: false,
preserveDrawingBuffer: false,
stencil: false,
var list = [base];
list = SplitForAttrib(list, 'alpha');
list = SplitForAttrib(list, 'antialias');
list = SplitForAttrib(list, 'depth');
list = SplitForAttrib(list, 'premultipliedAlpha');
list = SplitForAttrib(list, 'preserveDrawingBuffer');
list = SplitForAttrib(list, 'stencil');
if (list.length != 1<<6)
throw 'Attribs list length wrong: ' + list.length;
return list;
var list = GenAttribList();
for (var i in list) {
var attribs = list[i];
ok(true, 'Test complete.');