<!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>
