gecko-dev/dom/canvas/test/webgl-mochitest/test_uninit_data.html

85 строки
2.4 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8'/>
<title>Test contents of uninitialized buffers</title>
<script src='/tests/SimpleTest/SimpleTest.js'></script>
<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
<script src='webgl-util.js'></script>
</head>
<body>
<script>
'use strict';
function TestFB(gl) {
var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
ok(status == gl.FRAMEBUFFER_COMPLETE, 'FB should be complete.');
var pixel = new Uint8Array(4);
gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
ok(!pixel[0], 'R channel should be 0, was ' + pixel[0] + '.');
ok(!pixel[1], 'G channel should be 0, was ' + pixel[1] + '.');
ok(!pixel[2], 'B channel should be 0, was ' + pixel[2] + '.');
ok(!pixel[3], 'A channel should be 0, was ' + pixel[3] + '.');
}
function Test(contextAttribs) {
ok(true, '===============================');
ok(true, 'Testing ' + JSON.stringify(contextAttribs));
var c = document.createElement('canvas');
var gl = c.getContext('webgl', contextAttribs);
if (!gl) {
todo(false, 'WebGL is unavailable.');
return;
}
var rb = gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
var err = gl.getError();
ok(!err, 'Error should be 0x0, was 0x' + err.toString(16));
if (err)
return;
var fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ok(true, 'Backed with RB');
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 1, 1);
TestFB(gl);
ok(true, 'Backed with texture');
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
TestFB(gl);
err = gl.getError();
ok(!err, 'Error should be 0x0, was 0x' + err.toString(16));
}
// Give ourselves a scope to return early from:
(function() {
// We test multiple configurations because we've had bugs regarding faking RGBX on
// ANGLE: With alpha:false, uninitialized buffers were being filled with (0,0,0,1)
// instead of (0,0,0,0).
Test({alpha: false, antialias: false});
Test({alpha: true, antialias: false});
Test({alpha: false, antialias: true});
Test({alpha: true, antialias: true});
ok(true, 'Test complete.');
})();
</script>
</body>
</html>