| Index: conformance/context/premultiplyalpha-test.html
|
| ===================================================================
|
| --- conformance/context/premultiplyalpha-test.html (revision 0)
|
| +++ conformance/context/premultiplyalpha-test.html (revision 0)
|
| @@ -0,0 +1,169 @@
|
| +<!--
|
| +Copyright (c) 2011 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>Test the WebGL premultipledAlpha context creation flag.</title>
|
| +<link rel="stylesheet" href="../../resources/js-test-style.css"/>
|
| +<script src="../../resources/js-test-pre.js"></script>
|
| +<script src="../resources/webgl-test.js"> </script>
|
| +<script src="../resources/webgl-test-utils.js"> </script>
|
| +</head>
|
| +<body>
|
| +<div id="description"></div><div id="console"></div>
|
| +<script>
|
| +var wtu = WebGLTestUtils;
|
| +
|
| +var tests = [
|
| + // If premultipledAlpha is true then
|
| + // [texture] [canvas] [dataURL]
|
| + // 32, 64, 128, 128 -> 64, 128, 255, 128 -> 64, 128, 255, 128
|
| + { creationAttributes: {},
|
| + sentColor: [32, 64, 128, 128],
|
| + expectedColor: [64, 128, 255, 128],
|
| + errorRange: 2,
|
| + imageFormat: "image/png"
|
| + },
|
| + // If premultipledAlpha is true then
|
| + // [texture] [canvas] [texture]
|
| + // 32, 64, 128, 128 -> 64, 128, 255, 128 -> 64, 128, 255, 128
|
| + { creationAttributes: {},
|
| + sentColor: [32, 64, 128, 128],
|
| + expectedColor: [64, 128, 255, 128],
|
| + errorRange: 2,
|
| + },
|
| + // If premultipledAlpha is false then
|
| + // [texture] [canvas] [dataURL]
|
| + // 255, 192, 128, 1 -> 255, 192, 128, 1 -> 255, 192, 128, 1
|
| + { creationAttributes: {premultipliedAlpha: false},
|
| + sentColor: [255, 192, 128, 1],
|
| + expectedColor: [255, 192, 128, 1],
|
| + errorRange: 0,
|
| + imageFormat: "image/png"
|
| + },
|
| + // If premultipledAlpha is false then
|
| + // [texture] [canvas] [texture]
|
| + // 255, 192, 128, 1 -> 255, 192, 128, 1 -> 255, 192, 128, 1
|
| + { creationAttributes: {premultipliedAlpha: false},
|
| + sentColor: [255, 192, 128, 1],
|
| + expectedColor: [255, 192, 128, 1],
|
| + errorRange: 0,
|
| + },
|
| + // If premultipledAlpha is false then
|
| + // [texture] [canvas] [dataURL]
|
| + // 255, 255, 255, 128 -> 255, 255, 255, 128 -> 128, 128, 128, 255
|
| + { creationAttributes: {premultipliedAlpha: false},
|
| + sentColor: [255, 255, 255, 128],
|
| + expectedColor: [128, 128, 128, 255],
|
| + errorRange: 2,
|
| + imageFormat: "image/jpeg"
|
| + },
|
| + // If premultipledAlpha is true then
|
| + // [texture] [canvas] [dataURL]
|
| + // 128, 128, 128, 128 -> 255, 255, 255, 128 -> 128, 128, 128, 255
|
| + { creationAttributes: {},
|
| + sentColor: [128, 128, 128, 128],
|
| + expectedColor: [128, 128, 128, 255],
|
| + errorRange: 2,
|
| + imageFormat: "image/jpeg"
|
| + }
|
| +];
|
| +
|
| +var g_count = 0;
|
| +var gl;
|
| +var canvas;
|
| +var premultipledAlpha;
|
| +
|
| +description("Test the WebGL premultipledAlpha context creation flag.");
|
| +doNextTest();
|
| +function doNextTest() {
|
| + if (g_count < tests.length) {
|
| + var test = tests[g_count++];
|
| + canvas = document.createElement("canvas");
|
| + // Need to preserve drawing buffer to load it in a callback
|
| + test.creationAttributes.preserveDrawingBuffer = true;
|
| + gl = wtu.create3DContext(canvas, test.creationAttributes);
|
| + var premultipliedAlpha = test.creationAttributes.premultipliedAlpha != false;
|
| + debug("")
|
| + debug("testing: premultipliedAlpha: " + premultipliedAlpha + " imageFormat: " + test.imageFormat);
|
| +
|
| + shouldBe('gl.getContextAttributes().premultipledAlpha', 'premultipledAlpha');
|
| + shouldBeTrue('gl.getContextAttributes().preserveDrawingBuffer');
|
| +
|
| + console.log(gl.getContextAttributes());
|
| + var program = wtu.setupTexturedQuad(gl);
|
| +
|
| + glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from setup.");
|
| + var tex = gl.createTexture();
|
| + wtu.fillTexture(gl, tex, 2, 2, test.sentColor, 0);
|
| + var loc = gl.getUniformLocation(program, "tex");
|
| + gl.uniform1i(loc, 0);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
| +
|
| + wtu.drawQuad(gl);
|
| + glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from drawing.");
|
| +
|
| + function loadTexture() {
|
| + var pngTex = gl.createTexture();
|
| + // not needed as it's the default
|
| + // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
|
| + gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, false);
|
| + gl.bindTexture(gl.TEXTURE_2D, pngTex);
|
| + if (test.imageFormat) {
|
| + // create texture from image
|
| + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this);
|
| + } else {
|
| + // create texture from canvas
|
| + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas);
|
| + }
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
| + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
| + glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from creating copy.");
|
| + wtu.drawQuad(gl);
|
| + glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from 2nd drawing.");
|
| + wtu.checkCanvas(
|
| + gl, test.expectedColor,
|
| + "should draw with " + test.expectedColor, test.errorRange);
|
| +
|
| + doNextTest();
|
| + }
|
| +
|
| + if (test.imageFormat) {
|
| + // Load canvas into string using toDataURL
|
| + var imageUrl = canvas.toDataURL(test.imageFormat);
|
| + if (test.imageFormat != "image/png" &&
|
| + (imageUrl.indexOf("data:image/png,") == 0 ||
|
| + imageUrl.indexOf("data:image/png;") == 0)) {
|
| + debug("Image format " + test.imageFormat + " not supported; skipping");
|
| + setTimeout(doNextTest, 0);
|
| + } else {
|
| + // Load string into the texture
|
| + var input = document.createElement("img");
|
| + input.onload = loadTexture;
|
| + input.src = imageUrl;
|
| + }
|
| + } else {
|
| + // Load canvas into the texture asynchronously (to prevent unbounded stack consumption)
|
| + setTimeout(loadTexture, 0);
|
| + }
|
| + } else {
|
| + successfullyParsed = true;
|
| + finishTest();
|
| + }
|
| +}
|
| +
|
| +</script>
|
| +
|
| +</body>
|
| +</html>
|
| +
|
| +
|
|
|
| Property changes on: conformance/context/premultiplyalpha-test.html
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|