Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: third_party/WebKit/LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html

Issue 1601093008: Remove duplicated WebGL layout tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html
deleted file mode 100644
index 913e7c20114e73ffbbbb149c0a5c3f60e9a9548a..0000000000000000000000000000000000000000
--- a/third_party/WebKit/LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html
+++ /dev/null
@@ -1,716 +0,0 @@
-<html>
-<head>
-<script src="../../../resources/js-test.js"></script>
-<script src="resources/pnglib.js"></script>
-<script src="resources/webgl-test.js"></script>
-<script src="resources/webgl-test-utils.js"></script>
-
-<script>
-var wtu = WebGLTestUtils;
-var gl = null;
-var textureLoc = null;
-
-//----------------------------------------------------------------------
-// Harness
-
-var testCases = [];
-
-var DataMode = {
- IMAGE: 0,
- IMAGE_DATA: 1,
-
- NUM_HTML_MODES: 2,
-
- RAW_DATA: 2,
-
- // This must remain the last mode.
- NUM_MODES: 3
-};
-
-function init()
-{
- if (window.initNonKhronosFramework) {
- window.initNonKhronosFramework(true);
- }
-
- description('Verify texImage2D and texSubImage2D code paths taking both HTML and user-specified data with all format/type combinations');
-
- var canvas = document.getElementById("example");
- gl = wtu.create3DContext(canvas);
- var program = wtu.setupTexturedQuad(gl);
-
- gl.clearColor(0,0,0,1);
- gl.clearDepth(1);
- gl.disable(gl.BLEND);
-
- textureLoc = gl.getUniformLocation(program, "tex");
-
- initializeTests();
-}
-
-function initializeTests()
-{
- // Verify that uploading to packed pixel formats performs the
- // required conversion and associated loss of precision.
- for (var dataMode = 0; dataMode < DataMode.NUM_HTML_MODES; ++dataMode) {
- for (var useTexSubImage2D = 0; useTexSubImage2D < 2; ++useTexSubImage2D) {
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.RGBA,
- type: gl.UNSIGNED_BYTE,
- verifier: allChannelsIncreaseByNoMoreThan,
- threshold: 1,
- numOccurrences: 1,
- description: "RGBA/UNSIGNED_BYTE should maintain full precision of data"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.RGBA,
- type: gl.UNSIGNED_SHORT_4_4_4_4,
- verifier: allChannelsIncreaseByAtLeast,
- threshold: 15,
- numOccurrences: 10,
- description: "RGBA/UNSIGNED_SHORT_4_4_4_4 must drop low four bits of precision"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.RGBA,
- type: gl.UNSIGNED_SHORT_5_5_5_1,
- verifier: allChannelsIncreaseByAtLeast,
- threshold: 7,
- numOccurrences: 20,
- description: "RGBA/UNSIGNED_SHORT_5_5_5_1 must drop low three bits of precision"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.RGB,
- type: gl.UNSIGNED_BYTE,
- verifier: allChannelsIncreaseByNoMoreThan,
- threshold: 1,
- numOccurrences: 1,
- description: "RGB/UNSIGNED_BYTE should maintain full precision of data"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.RGB,
- type: gl.UNSIGNED_SHORT_5_6_5,
- verifier: allChannelsIncreaseByAtLeast,
- threshold: 3,
- numOccurrences: 20,
- description: "RGB/UNSIGNED_SHORT_5_6_5 must drop low two or three bits of precision"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTranslucentGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.ALPHA,
- type: gl.UNSIGNED_BYTE,
- verifier: alphaChannelIncreasesByNoMoreThan,
- threshold: 1,
- numOccurrences: 1,
- description: "ALPHA/UNSIGNED_BYTE should maintain full precision of data"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.LUMINANCE,
- type: gl.UNSIGNED_BYTE,
- verifier: allChannelsIncreaseByNoMoreThan,
- threshold: 1,
- numOccurrences: 1,
- description: "LUMINANCE/UNSIGNED_BYTE should maintain full precision of data"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateOpaqueGrayscaleRamp,
- premultiplyAlpha: false,
- format: gl.LUMINANCE_ALPHA,
- type: gl.UNSIGNED_BYTE,
- verifier: allChannelsIncreaseByNoMoreThan,
- threshold: 1,
- numOccurrences: 1,
- description: "LUMINANCE_ALPHA/UNSIGNED_BYTE should maintain full precision of data"
- });
- }
- }
-
- // Verify that setting the UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel
- // store parameter and sending down a zero alpha causes the color
- // channels to go to zero.
- for (var dataMode = 0; dataMode < DataMode.NUM_MODES; ++dataMode) {
- for (var useTexSubImage2D = 0; useTexSubImage2D < 2; ++useTexSubImage2D) {
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.RGBA,
- type: gl.UNSIGNED_BYTE,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with RGBA/UNSIGNED_BYTE"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.RGBA,
- type: gl.UNSIGNED_SHORT_4_4_4_4,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with RGBA/UNSIGNED_SHORT_4_4_4_4"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.RGBA,
- type: gl.UNSIGNED_SHORT_5_5_5_1,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with RGBA/UNSIGNED_SHORT_5_5_5_1"
- });
- // The following few tests are invalid for the raw data
- // mode because there is either no alpha channel or no
- // separate alpha channel.
- if (dataMode != DataMode.RAW_DATA) {
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.RGB,
- type: gl.UNSIGNED_BYTE,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with RGB/UNSIGNED_BYTE"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.RGB,
- type: gl.UNSIGNED_SHORT_5_6_5,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with RGB/UNSIGNED_SHORT_5_6_5"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.ALPHA,
- type: gl.UNSIGNED_BYTE,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with ALPHA/UNSIGNED_BYTE"
- });
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.LUMINANCE,
- type: gl.UNSIGNED_BYTE,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with LUMINANCE/UNSIGNED_BYTE"
- });
- }
- testCases.push({
- dataMode: dataMode,
- useTexSubImage2D: !!useTexSubImage2D,
- width: 256,
- height: 1,
- generator: generateTransparentGrayscaleRamp,
- premultiplyAlpha: true,
- format: gl.LUMINANCE_ALPHA,
- type: gl.UNSIGNED_BYTE,
- verifier: colorChannelsAreZero,
- description: "UNPACK_PREMULTIPLY_ALPHA_WEBGL with LUMINANCE_ALPHA/UNSIGNED_BYTE"
- });
- }
- }
-
- // Produce data for all testcases. Because we load images, some of
- // these may generate their data asynchronously.
- generateTestData();
-}
-
-function generateTestData()
-{
- for (var i = 0; i < testCases.length; i++) {
- var testCase = testCases[i];
- var wrapper = null;
- switch (testCase.dataMode) {
- case DataMode.IMAGE:
- wrapper = new ImageWrapper(testCase.width, testCase.height);
- break;
- case DataMode.IMAGE_DATA:
- wrapper = new ImageDataWrapper(testCase.width, testCase.height);
- break;
- case DataMode.RAW_DATA:
- switch (testCase.type) {
- case gl.UNSIGNED_BYTE:
- switch (testCase.format) {
- case gl.RGBA:
- wrapper = new RGBA8DataWrapper(testCase.width, testCase.height);
- break;
- case gl.RGB:
- wrapper = new RGB8DataWrapper(testCase.width, testCase.height);
- break;
- case gl.ALPHA:
- wrapper = new A8DataWrapper(testCase.width, testCase.height);
- break;
- case gl.LUMINANCE:
- wrapper = new L8DataWrapper(testCase.width, testCase.height);
- break;
- case gl.LUMINANCE_ALPHA:
- wrapper = new LA8DataWrapper(testCase.width, testCase.height);
- break;
- }
- break;
- case gl.UNSIGNED_SHORT_4_4_4_4:
- wrapper = new RGBA4444DataWrapper(testCase.width, testCase.height);
- break;
- case gl.UNSIGNED_SHORT_5_5_5_1:
- wrapper = new RGBA5551DataWrapper(testCase.width, testCase.height);
- break;
- case gl.UNSIGNED_SHORT_5_6_5:
- wrapper = new RGB565DataWrapper(testCase.width, testCase.height);
- break;
- }
- }
- testCase.wrapper = wrapper;
- testCase.generator(wrapper);
- testCase.wrapper.generateData();
- }
-
- // See whether we need to run the tests, in case all of them
- // generated their results synchronously.
- maybeRunTests();
-}
-
-var ranTests = false;
-
-function maybeRunTests()
-{
- if (!ranTests)
- for (var i = 0; i < testCases.length; ++i)
- if (!testCases[i].wrapper || !testCases[i].wrapper.data)
- return;
-
- ranTests = true;
-
- for (var i = 0; i < testCases.length; ++i)
- runOneTest(testCases[i]);
-
- finishJSTest();
-}
-
-function testCaseToString(testCase)
-{
- var mode;
- switch (testCase.dataMode) {
- case DataMode.IMAGE:
- mode = "Image";
- break;
- case DataMode.IMAGE_DATA:
- mode = "ImageData";
- break;
- case DataMode.RAW_DATA:
- mode = "raw data";
- break;
- }
- return (testCase.useTexSubImage2D ? "texSubImage2D" : "texImage2D") +
- " with " + mode + " at " + testCase.width + "x" + testCase.height;
-}
-
-function runOneTest(testCase)
-{
- debug("Testing " + testCaseToString(testCase));
- var data = testCase.wrapper.data;
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- var texture = gl.createTexture();
- // Bind the texture to texture unit 0.
- gl.bindTexture(gl.TEXTURE_2D, texture);
- // Set up texture parameters.
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
- // Set up pixel store parameters.
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, testCase.premultiplyAlpha);
- // Upload the image into the texture.
- if (testCase.useTexSubImage2D) {
- // Initialize the texture to black first.
- gl.texImage2D(gl.TEXTURE_2D, 0, testCase.format, testCase.width, testCase.height, 0,
- testCase.format, testCase.type, null);
- }
- switch (testCase.dataMode) {
- case DataMode.IMAGE:
- case DataMode.IMAGE_DATA:
- if (testCase.useTexSubImage2D)
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, testCase.format, testCase.type, data);
- else
- gl.texImage2D(gl.TEXTURE_2D, 0, testCase.format, testCase.format, testCase.type, data);
- break;
- case DataMode.RAW_DATA:
- if (testCase.useTexSubImage2D)
- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, testCase.width, testCase.height, testCase.format, testCase.type, data);
- else
- gl.texImage2D(gl.TEXTURE_2D, 0, testCase.format, testCase.width, testCase.height, 0, testCase.format, testCase.type, data);
- break;
- }
- // Point the uniform sampler to texture unit 0.
- gl.uniform1i(textureLoc, 0);
- // Draw the triangles.
- gl.drawArrays(gl.TRIANGLES, 0, 6);
- // Clean up the texture.
- gl.deleteTexture(texture);
-
- // Read back the rendering results.
- buf = new Uint8Array(testCase.width * testCase.height * 4);
- gl.readPixels(0, 0, testCase.width, testCase.height, gl.RGBA, gl.UNSIGNED_BYTE, buf);
- // Run the verification routine.
- if (testCase.verifier(buf, testCase.threshold, testCase.numOccurrences))
- testPassed(testCase.description);
- else
- testFailed(testCase.description);
-}
-
-//----------------------------------------------------------------------
-// Wrappers for programmatic construction of Image, ImageData and raw texture data
-//
-
-function ImageWrapper(width, height)
-{
- this.pngBuilder_ = new PNGlib(width, height, 256);
-}
-
-ImageWrapper.prototype.getWidth = function() {
- return this.pngBuilder_.width;
-};
-
-ImageWrapper.prototype.getHeight = function() {
- return this.pngBuilder_.height;
-};
-
-ImageWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- this.pngBuilder_.buffer[this.pngBuilder_.index(x, y)] = this.pngBuilder_.color(r, g, b, a);
-};
-
-// Generates data into "data" property, possibly asynchronously.
-ImageWrapper.prototype.generateData = function() {
- var that = this;
- var img = new Image();
- img.onload = function() {
- that.data = img;
- maybeRunTests();
- };
- img.src = "data:image/png;base64," + this.pngBuilder_.getBase64();
-};
-
-function ImageDataWrapper(width, height)
-{
- if (!ImageDataWrapper.tempCanvas) {
- ImageDataWrapper.tempCanvas = document.createElement("canvas");
- }
- this.imageData_ = ImageDataWrapper.tempCanvas.getContext("2d").createImageData(width, height);
-}
-
-ImageDataWrapper.tempCanvas = null;
-
-ImageDataWrapper.prototype.getWidth = function() {
- return this.imageData_.width;
-};
-
-ImageDataWrapper.prototype.getHeight = function() {
- return this.imageData_.height;
-};
-
-ImageDataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var index = 4 * (this.imageData_.width * y + x);
- this.imageData_.data[index] = r;
- this.imageData_.data[index + 1] = g;
- this.imageData_.data[index + 2] = b;
- this.imageData_.data[index + 3] = a;
-};
-
-ImageDataWrapper.prototype.generateData = function() {
- this.data = this.imageData_;
- maybeRunTests();
-};
-
-function TextureDataWrapper(width, height)
-{
- this.width_ = width;
- this.height_ = height;
-}
-
-TextureDataWrapper.prototype.getWidth = function() {
- return this.width_;
-};
-
-TextureDataWrapper.prototype.getHeight = function() {
- return this.height_;
-};
-
-TextureDataWrapper.prototype.generateData = function() {
- this.data = this.data_;
- maybeRunTests();
-};
-
-function RGBA8DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint8Array(4 * width * height);
-}
-
-RGBA8DataWrapper.prototype = new TextureDataWrapper;
-
-RGBA8DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var index = 4 * (this.width_ * y + x);
- this.data_[index] = r;
- this.data_[index + 1] = g;
- this.data_[index + 2] = b;
- this.data_[index + 3] = a;
-};
-
-function RGBA5551DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint16Array(width * height);
-}
-
-RGBA5551DataWrapper.prototype = new TextureDataWrapper;
-
-RGBA5551DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var value = (((r & 0xF8) << 8)
- | ((g & 0xF8) << 3)
- | ((b & 0xF8) >> 2)
- | (a >> 7));
- this.data_[this.width_ * y + x] = value;
-};
-
-function RGBA4444DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint16Array(width * height);
-}
-
-RGBA4444DataWrapper.prototype = new TextureDataWrapper;
-
-RGBA4444DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var value = (((r & 0xF0) << 8)
- | ((g & 0xF0) << 4)
- | (b & 0xF0)
- | (a >> 4));
- this.data_[this.width_ * y + x] = value;
-};
-
-function RGB8DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint8Array(3 * width * height);
-}
-
-RGB8DataWrapper.prototype = new TextureDataWrapper;
-
-RGB8DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var index = 3 * (this.width_ * y + x);
- this.data_[index] = r;
- this.data_[index + 1] = g;
- this.data_[index + 2] = b;
-};
-
-function RGB565DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint16Array(width * height);
-}
-
-RGB565DataWrapper.prototype = new TextureDataWrapper;
-
-RGB565DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var value = (((r & 0xF8) << 8)
- | ((g & 0xFC) << 3)
- | ((b & 0xF8) >> 3));
- this.data_[this.width_ * y + x] = value;
-};
-
-function A8DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint8Array(width * height);
-}
-
-A8DataWrapper.prototype = new TextureDataWrapper;
-
-A8DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- this.data_[this.width_ * y + x] = a;
-};
-
-function L8DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint8Array(width * height);
-}
-
-L8DataWrapper.prototype = new TextureDataWrapper;
-
-L8DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- this.data_[this.width_ * y + x] = r;
-};
-
-function LA8DataWrapper(width, height)
-{
- TextureDataWrapper.call(this, width, height);
- this.data_ = new Uint8Array(2 * width * height);
-}
-
-LA8DataWrapper.prototype = new TextureDataWrapper;
-
-LA8DataWrapper.prototype.setPixel = function(x, y, r, g, b, a) {
- var index = 2 * (this.width_ * y + x);
- this.data_[index] = r;
- this.data_[index + 1] = a;
-};
-
-//----------------------------------------------------------------------
-// Color ramp generation functions
-//
-
-function generateOpaqueGrayscaleRamp(wrapper)
-{
- var width = wrapper.getWidth();
- var height = wrapper.getHeight();
- for (var x = 0; x < width; ++x) {
- var value = Math.round(255.0 * x / width);
- for (var y = 0; y < height; ++y)
- wrapper.setPixel(x, y, value, value, value, 255);
- }
-}
-
-function generateTranslucentGrayscaleRamp(wrapper)
-{
- var width = wrapper.getWidth();
- var height = wrapper.getHeight();
- for (var x = 0; x < width; ++x) {
- var value = Math.round(255.0 * x / width);
- for (var y = 0; y < height; ++y)
- wrapper.setPixel(x, y, value, value, value, value);
- }
-}
-
-function generateTransparentGrayscaleRamp(wrapper)
-{
- var width = wrapper.getWidth();
- var height = wrapper.getHeight();
- for (var x = 0; x < width; ++x) {
- var value = Math.round(255.0 * x / width);
- for (var y = 0; y < height; ++y)
- wrapper.setPixel(x, y, value, value, value, 0);
- }
-}
-
-//----------------------------------------------------------------------
-// Verification routines
-//
-
-function allChannelsIncreaseByNoMoreThan(array, threshold, numOccurrences) {
- var numFound = 0;
- for (var i = 4; i < array.length; i += 4)
- for (var j = 0; j < 4; j++)
- if (array[i + j] - array[i + j - 4] > threshold)
- ++numFound;
-
- return numFound < numOccurrences;
-}
-
-function alphaChannelIncreasesByNoMoreThan(array, threshold, numOccurrences) {
- var numFound = 0;
- for (var i = 7; i < array.length; i += 4)
- if (array[i] - array[i - 4] > threshold)
- ++numFound;
-
- return numFound < numOccurrences;
-}
-
-function allChannelsIncreaseByAtLeast(array, threshold, numOccurrences) {
- var numFound = 0;
- for (var i = 4; i < array.length; i += 4)
- for (var j = 0; j < 4; ++j)
- if (array[i + j] - array[i + j - 4] > threshold)
- ++numFound;
-
- return numFound > numOccurrences;
-}
-
-function colorChannelsAreZero(array, threshold, numOccurrences) {
- var passed = true;
- var numFailures = 0;
-
- for (var i = 4; i < array.length; i += 4)
- for (var j = 0; j < 3; ++j)
- if (array[i + j] != 0) {
- passed = false;
- if (++numFailures <= 5)
- debug(" array[" + (i + j) + "] should have been 0, was " + array[i + j]);
- }
-
- return passed;
-}
-
-</script>
-</head>
-<body onload="init()">
-<canvas id="example" width="256px" height="1px"></canvas>
-<div id="description"></div>
-<div id="console"></div>
-</body>
-</html>

Powered by Google App Engine
This is Rietveld 408576698