<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL clear conformance test.</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"> </script>
</head>
<body>
<canvas id="example" width="1" height="1" style="width: 256px; height: 48px;"></canvas>
<div id="description"></div><div id="console"></div>
<script>
"use strict";
description("Test clear.");
var wtu = WebGLTestUtils;
var gl = wtu.create3DContext("example");
var program = wtu.setupTexturedQuad(gl);

wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from setup.");
wtu.checkCanvas(gl, [0,0,0,0], "should be 0,0,0,0");

gl.clearColor(1,1,1,1);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvas(gl, [255,255,255,255], "should be 255,255,255,255");

gl.clearColor(0,0,0,0);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvas(gl, [0,0,0,0], "should be 0,0,0,0");

gl.colorMask(false, false, false, true);
gl.clearColor(1,1,1,1);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvas(gl, [0,0,0,255], "should be 0,0,0,255");

var tex = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, tex);
  gl.texImage2D(
      gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
      new Uint8Array([128, 128, 128, 192]));

gl.disable(gl.DEPTH_TEST);
gl.disable(gl.BLEND);
gl.colorMask(true, true, true, true);
gl.drawArrays(gl.TRIANGLES, 0, 6);
wtu.checkCanvas(gl, [128,128,128,192], "should be 128,128,128,192");

gl.colorMask(false, false, false, true);
gl.clearColor(1,1,1,1);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvas(gl, [128,128,128,255], "should be 128,128,128,255");

// TODO: Test depth and stencil clearing.

debug("");
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

