Commit d4c244a3 authored by Reza.Zakerinasab's avatar Reza.Zakerinasab Committed by Commit Bot

Refactor createImageBitmap resize layout tests

This change reduces createImageBitmap resize test tolerance from 10 to 0
for all image sources except for blob (which is set to 5).
It also refactors the tests to include pixelated, low and medium filter
qualities. Furthermore, it separates the test path for premul and unpremul
image bitmap sources when the filter quality is high, to match the way this
is implemented in chromium.

Bug: 744647, 792607
Change-Id: I4e0b8af71d88f5885ff56540a17ec8b716cd58d7
Reviewed-on: https://chromium-review.googlesource.com/809808
Commit-Queue: Mohammad Reza Zakerinasab <zakerinasab@chromium.org>
Reviewed-by: default avatarJustin Novosad <junov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#522204}
parent 7a5ddbe0
var refBufPremul = new Uint8Array([ //------------- Reference Buffers for Pixelated Filter Quality -------------//
255,0,0,255, 204,0,0,204, 84,0,0,84, 18,0,0,18, var refBufPixelatedPremul = [
192,62,0,255, 149,48,0,198, 61,20,0,82, 13,4,0,18, 255,0,0,255, 255,0,0,255, 26,0,0,26, 26,0,0,26,
62,192,0,255, 48,149,0,198, 20,61,0,82, 4,13,0,18, 255,0,0,255, 255,0,0,255, 26,0,0,26, 26,0,0,26,
0,255,0,255, 0,204,0,204, 0,84,0,84, 0,18,0,18]); 0,255,0,255, 0,255,0,255, 0,26,0,26, 0,26,0,26,
0,255,0,255, 0,255,0,255, 0,26,0,26, 0,26,0,26];
var refBufUnpremul = new Uint8Array([
255,0,0,255, 255,0,0,204, 255,0,0,84, 255,0,0,18, var refBufPixelatedUnpremul = [
192,62,0,255, 192,62,0,198, 190,62,0,82, 184,57,0,18, 255,0,0,255, 255,0,0,255, 255,0,0,26, 255,0,0,26,
62,192,0,255, 62,192,0,198, 62,190,0,82, 57,184,0,18, 255,0,0,255, 255,0,0,255, 255,0,0,26, 255,0,0,26,
0,255,0,255, 0,255,0,204, 0,255,0,84, 0,255,0,18]); 0,255,0,255, 0,255,0,255, 0,255,0,26, 0,255,0,26,
0,255,0,255, 0,255,0,255, 0,255,0,26, 0,255,0,26];
var refBufFlipY = new Uint8Array([
0,255,0,255, 0,204,0,204, 0,84,0,84, 0,18,0,18, var refBufPixelatedPremulFlipY = [
62,192,0,255, 48,149,0,198, 20,61,0,82, 4,13,0,18, 0,255,0,255, 0,255,0,255, 0,26,0,26, 0,26,0,26,
192,62,0,255, 149,48,0,198, 61,20,0,82, 13,4,0,18, 0,255,0,255, 0,255,0,255, 0,26,0,26, 0,26,0,26,
255,0,0,255, 204,0,0,204, 84,0,0,84, 18,0,0,18]); 255,0,0,255, 255,0,0,255, 26,0,0,26, 26,0,0,26,
255,0,0,255, 255,0,0,255, 26,0,0,26, 26,0,0,26];
var refBufUnpremulFlipY = new Uint8Array([
0,255,0,255, 0,255,0,204, 0,255,0,84, 0,255,0,18, var refBufPixelatedUnpremulFlipY = [
62,192,0,255, 62,192,0,198, 62,190,0,82, 57,184,0,18, 0,255,0,255, 0,255,0,255, 0,255,0,26, 0,255,0,26,
192,62,0,255, 192,62,0,198, 190,62,0,82, 184,57,0,18, 0,255,0,255, 0,255,0,255, 0,255,0,26, 0,255,0,26,
255,0,0,255, 255,0,0,204, 255,0,0,84, 255,0,0,18]); 255,0,0,255, 255,0,0,255, 255,0,0,26, 255,0,0,26,
255,0,0,255, 255,0,0,255, 255,0,0,26, 255,0,0,26];
function checkCanvas(buf, refBuf, tolerance, retVal)
//---------------- Reference Buffers for Low Filter Quality ----------------//
var refBufLowPremul= [
255,0,0,255, 197,0,0,197, 83,0,0,83, 26,0,0,26,
191,63,0,255, 148,49,0,197, 62,20,0,83, 19,6,0,26,
63,191,0,255, 49,148,0,197, 20,62,0,83, 6,19,0,26,
0,255,0,255, 0,197,0,197, 0,83,0,83, 0,26,0,26];
var refBufLowUnpremul = [
255,0,0,255, 255,0,0,197, 255,0,0,83, 255,0,0,26,
191,63,0,255, 192,63,0,197, 190,61,0,83, 186,59,0,26,
63,191,0,255, 63,192,0,197, 61,190,0,83, 59,186,0,26,
0,255,0,255, 0,255,0,197, 0,255,0,83, 0,255,0,26];
var refBufLowPremulFlipY = [
0,255,0,255, 0,197,0,197, 0,83,0,83, 0,26,0,26,
63,191,0,255, 49,148,0,197, 20,62,0,83, 6,19,0,26,
191,63,0,255, 148,49,0,197, 62,20,0,83, 19,6,0,26,
255,0,0,255, 197,0,0,197, 83,0,0,83, 26,0,0,26];
var refBufLowUnpremulFlipY = [
0,255,0,255, 0,255,0,197, 0,255,0,83, 0,255,0,26,
63,191,0,255, 63,192,0,197, 61,190,0,83, 59,186,0,26,
191,63,0,255, 192,63,0,197, 190,61,0,83, 186,59,0,26,
255,0,0,255, 255,0,0,197, 255,0,0,83, 255,0,0,26];
//-------------- Reference Buffers for Medium Filter Quality ---------------//
var refBufMediumPremul = refBufLowPremul;
var refBufMediumUnpremul = refBufLowUnpremul;
var refBufMediumPremulFlipY = refBufLowPremulFlipY;
var refBufMediumUnpremulFlipY = refBufLowUnpremulFlipY;
//-------- Reference Buffers for High Filter Quality (Premul Source) -------//
var refBufHighPremulSourcePremul = [
255,0,0,255, 200,0,0,200, 81,0,0,81, 21,0,0,21,
198,63,0,255, 152,48,0,200, 62,20,0,81, 16,5,0,21,
63,198,0,255, 48,152,0,200, 20,62,0,81, 5,16,0,21,
0,255,0,255, 0,200,0,200, 0,81,0,81, 0,21,0,21];
var refBufHighUnpremulSourcePremul = [
255,0,0,255, 255,0,0,200, 255,0,0,81, 255,0,0,21,
198,63,0,255, 194,61,0,200, 195,63,0,81, 194,61,0,21,
63,198,0,255, 61,194,0,200, 63,195,0,81, 61,194,0,21,
0,255,0,255, 0,255,0,200, 0,255,0,81, 0,255,0,21];
var refBufHighPremulFlipYSourcePremul = [
0,255,0,255, 0,200,0,200, 0,81,0,81, 0,21,0,21,
63,198,0,255, 48,152,0,200, 20,62,0,81, 5,16,0,21,
198,63,0,255, 152,48,0,200, 62,20,0,81, 16,5,0,21,
255,0,0,255, 200,0,0,200, 81,0,0,81, 21,0,0,21];
var refBufHighUnpremulFlipYSourcePremul = [
0,255,0,255, 0,255,0,200, 0,255,0,81, 0,255,0,21,
63,198,0,255, 61,194,0,200, 63,195,0,81, 61,194,0,21,
198,63,0,255, 194,61,0,200, 195,63,0,81, 194,61,0,21,
255,0,0,255, 255,0,0,200, 255,0,0,81, 255,0,0,21];
//------- Reference Buffers for High Filter Quality (Unpremul Source) ------//
var refBufHighPremulSourceUnpremul = [
255,0,0,255, 200,0,0,200, 81,0,0,81, 21,0,0,21,
198,63,0,255, 152,48,0,200, 62,20,0,81, 16,5,0,21,
63,198,0,255, 48,152,0,200, 20,62,0,81, 5,16,0,21,
0,255,0,255, 0,200,0,200, 0,81,0,81, 0,21,0,21];
var refBufHighUnpremulSourceUnpremul = [
255,0,0,255, 255,0,0,200, 255,0,0,81, 255,0,0,21,
193,62,0,255, 193,62,0,200, 193,62,0,81, 193,62,0,21,
62,193,0,255, 62,193,0,200, 62,193,0,81, 62,193,0,21,
0,255,0,255, 0,255,0,200, 0,255,0,81, 0,255,0,21];
var refBufHighPremulFlipYSourceUnpremul = [
0,255,0,255, 0,200,0,200, 0,81,0,81, 0,21,0,21,
63,198,0,255, 48,152,0,200, 20,62,0,81, 5,16,0,21,
198,63,0,255, 152,48,0,200, 62,20,0,81, 16,5,0,21,
255,0,0,255, 200,0,0,200, 81,0,0,81, 21,0,0,21];
var refBufHighUnpremulFlipYSourceUnpremul = [
0,255,0,255, 0,255,0,200, 0,255,0,81, 0,255,0,21,
62,193,0,255, 62,193,0,200, 62,193,0,81, 62,193,0,21,
193,62,0,255, 193,62,0,200, 193,62,0,81, 193,62,0,21,
255,0,0,255, 255,0,0,200, 255,0,0,81, 255,0,0,21];
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
var opaqueTolerance = 0;
var transparentTolerance = 0;
var transparentToleranceForBlob = 5;
function getRefBuffer(testOptions, flipY, premultiplyAlpha) {
var refBufName = "refBuf" +
testOptions.resizeQuality.charAt(0).toUpperCase() +
testOptions.resizeQuality.slice(1);
if (premultiplyAlpha)
refBufName += "Premul";
else
refBufName += "Unpremul";
if (flipY)
refBufName += "FlipY";
if (testOptions.resizeQuality == "high") {
if (testOptions.sourceIsPremul)
refBufName += "SourcePremul";
else
refBufName += "SourceUnpremul";
}
return eval(refBufName);
}
function checkPixels(buf, refBuf, tolerance, retVal)
{ {
if (buf.length != refBuf.length) { if (buf.length != refBuf.length) {
retVal.testPassed = false; retVal.testPassed = false;
...@@ -37,7 +149,8 @@ function checkCanvas(buf, refBuf, tolerance, retVal) ...@@ -37,7 +149,8 @@ function checkCanvas(buf, refBuf, tolerance, retVal)
} }
function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap, function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap,
flipY, premultiplyAlpha, retVal, colorSpace = 'empty') flipY, premultiplyAlpha, retVal, colorSpace,
testOptions)
{ {
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// Enable writes to the RGBA channels // Enable writes to the RGBA channels
...@@ -80,7 +193,12 @@ function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap, ...@@ -80,7 +193,12 @@ function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap,
loc = gl.getUniformLocation(program, "face"); loc = gl.getUniformLocation(program, "face");
} }
var tolerance = (retVal.alpha == 0) ? 0 : 10; var tolerance = opaqueTolerance;
if (retVal.alpha != 0) {
tolerance = transparentTolerance;
if (testOptions.sourceName == "Blob")
tolerance = transparentToleranceForBlob;
}
for (var tt = 0; tt < targets.length; ++tt) { for (var tt = 0; tt < targets.length; ++tt) {
if (bindingTarget == gl.TEXTURE_CUBE_MAP) { if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
gl.uniform1i(loc, targets[tt]); gl.uniform1i(loc, targets[tt]);
...@@ -89,22 +207,16 @@ function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap, ...@@ -89,22 +207,16 @@ function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap,
gl.clearColor(0, 0, 0, 1); gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6); gl.drawArrays(gl.TRIANGLES, 0, 6);
// Select the proper reference buffer // Check the buf
var refBuf = refBufPremul; var refBuf = getRefBuffer(testOptions, flipY, premultiplyAlpha);
if (flipY && !premultiplyAlpha)
refBuf = refBufUnpremulFlipY;
else if (!premultiplyAlpha)
refBuf = refBufUnpremul;
else if (flipY)
refBuf = refBufFlipY;
// Check the pixels
var buf = new Uint8Array(width * height * 4); var buf = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf); gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf);
checkCanvas(buf, refBuf, tolerance, retVal); checkPixels(buf, refBuf, tolerance, retVal);
} }
} }
function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) { function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal,
testOptions) {
var cases = [ var cases = [
{ sub: false, bitmap: bitmaps.defaultOption, flipY: false, { sub: false, bitmap: bitmaps.defaultOption, flipY: false,
premultiply: true, colorSpace: 'empty' }, premultiply: true, colorSpace: 'empty' },
...@@ -156,17 +268,103 @@ function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) { ...@@ -156,17 +268,103 @@ function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) {
for (var i in cases) { for (var i in cases) {
runOneIteration(cases[i].sub, bindingTarget, program, cases[i].bitmap, runOneIteration(cases[i].sub, bindingTarget, program, cases[i].bitmap,
cases[i].flipY, cases[i].premultiply, retVal, cases[i].colorSpace); cases[i].flipY, cases[i].premultiply, retVal, cases[i].colorSpace,
testOptions);
} }
} }
function runTest(bitmaps, alphaVal, colorSpaceEffective) // createImageBitmap resize code has two separate code paths for premul and
// unpremul image sources when the resize quality is set to high.
function runTest(bitmaps, alphaVal, colorSpaceEffective, testOptions)
{ {
var retVal = {testPassed: true, alpha: alphaVal, var retVal = {testPassed: true, alpha: alphaVal,
colorSpaceEffect: colorSpaceEffective}; colorSpaceEffect: colorSpaceEffective};
var program = tiu.setupTexturedQuad(gl, internalFormat); var program = tiu.setupTexturedQuad(gl, internalFormat);
runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal); runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal,
testOptions);
program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat); program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat);
runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal); runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal,
testOptions);
return retVal.testPassed; return retVal.testPassed;
} }
function prepareResizedImageBitmapsAndRuntTest(testOptions) {
var bitmaps = [];
var imageSource= testOptions.imageSource;
var options = {resizeWidth: testOptions.resizeWidth,
resizeHeight: testOptions.resizeHeight,
resizeQuality: testOptions.resizeQuality};
var p1 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p6 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: testOptions.resizeWidth,
resizeHeight: testOptions.resizeHeight,
resizeQuality: testOptions.resizeQuality};
var p8 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(imageSource, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, false, testOptions);
if (!testPassed)
assert_true(false, 'Test failed');
}, function() {
assert_true(false, 'Promise rejected');
});
}
function prepareResizedImageBitmapsAndRuntTests(testOptions) {
var resizeQualities = ["pixelated", "low", "medium", "high"];
for (i = 0; i < resizeQualities.length; i++) {
testOptions.resizeQuality = resizeQualities[i];
promise_test(function() {
return prepareResizedImageBitmapsAndRuntTest(testOptions);
}, 'createImageBitmap(' + testOptions.sourceName + ') resize with ' +
testOptions.resizeQuality + ' resize quality.');
}
}
function prepareWebGLContext() {
var canvas = document.createElement('canvas');
canvas.width = 4;
canvas.height = 4;
document.body.appendChild(canvas);
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1);
gl.clearDepth(1);
}
<!DOCTYPE html>
<html> <html>
<head>
<script src="./resources/webgl-test-utils-full.js"></script> <script src="./resources/webgl-test-utils-full.js"></script>
<script src="./resources/tex-image-and-sub-image-utils.js"></script> <script src="./resources/tex-image-and-sub-image-utils.js"></script>
<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script> <script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
...@@ -8,92 +6,18 @@ ...@@ -8,92 +6,18 @@
<script src="../../resources/testharnessreport.js"></script> <script src="../../resources/testharnessreport.js"></script>
<body> <body>
<script> <script>
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
var blob = null; var testOptions = {sourceName: "Blob", sourceIsPremul: true,
var blob2 = null; resizeWidth: 4, resizeHeight: 4};
prepareWebGLContext();
function generateTest()
{
var bitmaps = [];
var canvas = document.createElement('canvas');
canvas.width = 4;
canvas.height = 4;
document.body.appendChild(canvas);
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1);
gl.clearDepth(1);
var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p1 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p6 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p8 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(blob, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
t.step_func_done(function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, true);
if (!testPassed)
assert_true(false, 'Test failed');
}), t.step_func_done(function() {
assert_true(false, 'Promise rejected');
}));
}
var t = async_test("createImageBitmap(Blob) with resize and other options");
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("GET", 'resources/red-green-semi-transparent-2x2.png'); xhr.open("GET", 'resources/red-green-semi-transparent-2x2.png');
xhr.responseType = 'blob'; xhr.responseType = 'blob';
xhr.send(); xhr.send();
xhr.onload = t.step_func(function() { xhr.onload = function() {
blob = xhr.response; testOptions.imageSource = xhr.response;
generateTest(); prepareResizedImageBitmapsAndRuntTests(testOptions);
}) };
</script> </script>
</body>
</html>
<!DOCTYPE html>
<html> <html>
<head>
<script src="./resources/webgl-test-utils-full.js"></script> <script src="./resources/webgl-test-utils-full.js"></script>
<script src="./resources/tex-image-and-sub-image-utils.js"></script> <script src="./resources/tex-image-and-sub-image-utils.js"></script>
<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script> <script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
...@@ -8,12 +6,6 @@ ...@@ -8,12 +6,6 @@
<script src="../../resources/testharnessreport.js"></script> <script src="../../resources/testharnessreport.js"></script>
<body> <body>
<script> <script>
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
function setCanvasToRedGreen(ctx) { function setCanvasToRedGreen(ctx) {
var width = ctx.canvas.width; var width = ctx.canvas.width;
...@@ -30,73 +22,16 @@ function setCanvasToRedGreen(ctx) { ...@@ -30,73 +22,16 @@ function setCanvasToRedGreen(ctx) {
ctx.fillRect(halfWidth, halfHeight, halfWidth, halfHeight); ctx.fillRect(halfWidth, halfHeight, halfWidth, halfHeight);
} }
promise_test(function() { var testCanvas = document.createElement('canvas');
var bitmaps = []; testCanvas.width = 2;
testCanvas.height = 2;
var ctx = testCanvas.getContext("2d");
setCanvasToRedGreen(ctx);
var canvas = document.createElement('canvas'); var testOptions = {sourceName: "HTMLCanvasElement", imageSource: testCanvas,
canvas.width = 4; sourceIsPremul: true, resizeWidth: 4, resizeHeight: 4};
canvas.height = 4;
document.body.appendChild(canvas);
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1); prepareWebGLContext();
gl.clearDepth(1); prepareResizedImageBitmapsAndRuntTests(testOptions);
var testCanvas = document.createElement('canvas');
testCanvas.width = 2;
testCanvas.height = 2;
var ctx = testCanvas.getContext("2d");
setCanvasToRedGreen(ctx);
var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p1 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p6 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p8 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(testCanvas, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, false);
if (!testPassed)
assert_true(false, 'Test failed');
}, function() {
assert_true(false, 'Promise rejected');
});
}, 'createImageBitmap(HTMLCanvasElement) with resize and other options');
</script> </script>
<!DOCTYPE html>
<html> <html>
<head>
<script src="./resources/webgl-test-utils-full.js"></script> <script src="./resources/webgl-test-utils-full.js"></script>
<script src="./resources/tex-image-and-sub-image-utils.js"></script> <script src="./resources/tex-image-and-sub-image-utils.js"></script>
<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script> <script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
<script src="../../resources/testharness.js"></script> <script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="../../resources/testharnessreport.js"></script>
</head>
<body> <body>
<script> <script>
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
function generateTest()
{
var bitmaps = [];
var canvas = document.createElement('canvas');
canvas.width = 4;
canvas.height = 4;
document.body.appendChild(canvas);
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1);
gl.clearDepth(1);
var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p1 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default"; var image = new Image();
var p6 = createImageBitmap(image, options).then( var testOptions = {sourceName: "HTMLImageElement", imageSource: image,
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap }); sourceIsPremul: true, resizeWidth: 4, resizeHeight: 4};
prepareWebGLContext();
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p8 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(image, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
t.step_func_done(function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, true);
if (!testPassed)
assert_true(false, 'Test failed');
}), t.step_func_done(function() {
assert_true(false, 'Promise rejected');
}));
}
var t = async_test("createImageBitmap(HTMLImageElement) with resize and other options"); image.onload = function() {
prepareResizedImageBitmapsAndRuntTests(testOptions);
};
var image = new Image();
image.onload = t.step_func(function() {
generateTest();
});
image.src = 'resources/red-green-semi-transparent-2x2.png'; image.src = 'resources/red-green-semi-transparent-2x2.png';
</script> </script>
</body>
</html>
<!DOCTYPE html>
<html> <html>
<head>
<script src="./resources/webgl-test-utils-full.js"></script> <script src="./resources/webgl-test-utils-full.js"></script>
<script src="./resources/tex-image-and-sub-image-utils.js"></script> <script src="./resources/tex-image-and-sub-image-utils.js"></script>
<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script> <script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
<script src="../../resources/testharness.js"></script> <script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script> <script src="../../resources/testharnessreport.js"></script>
</head>
<body> <body>
<script> <script>
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
promise_test(function() { var imageData = new ImageData(new Uint8ClampedArray(
var bitmaps = []; [255, 0, 0, 255,
255, 0, 0, 26,
0, 255, 0, 255,
0, 255, 0, 26]),
2, 2);
var canvas = document.createElement('canvas'); var testOptions = {sourceName: "ImageData",
canvas.width = 4; imageSource: imageData, sourceIsPremul: false,
canvas.height = 4; resizeWidth: 4, resizeHeight: 4};
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1); prepareWebGLContext();
gl.clearDepth(1); prepareResizedImageBitmapsAndRuntTests(testOptions);
var imageData = new ImageData(new Uint8ClampedArray( </script>
[255, 0, 0, 255, \ No newline at end of file
255, 0, 0, 26,
0, 255, 0, 255,
0, 255, 0, 26]),
2, 2);
var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p1 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p6 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p8 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(imageData, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, false);
if (!testPassed)
assert_true(false, 'Test failed');
}, function() {
assert_true(false, 'Promise rejected');
});
}, 'createImageBitmap(ImageData) with resize and other options');
</script>
</body>
</html>
<!DOCTYPE html>
<html> <html>
<head>
<script src="./resources/webgl-test-utils-full.js"></script> <script src="./resources/webgl-test-utils-full.js"></script>
<script src="./resources/tex-image-and-sub-image-utils.js"></script> <script src="./resources/tex-image-and-sub-image-utils.js"></script>
<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script> <script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
...@@ -8,12 +6,6 @@ ...@@ -8,12 +6,6 @@
<script src="../../resources/testharnessreport.js"></script> <script src="../../resources/testharnessreport.js"></script>
<body> <body>
<script> <script>
var wtu = WebGLTestUtils;
var tiu = TexImageUtils;
var gl = null;
var internalFormat = "RGBA";
var pixelFormat = "RGBA";
var pixelType = "UNSIGNED_BYTE";
function setCanvasToRedGreen(ctx) { function setCanvasToRedGreen(ctx) {
var width = ctx.canvas.width; var width = ctx.canvas.width;
...@@ -30,74 +22,17 @@ function setCanvasToRedGreen(ctx) { ...@@ -30,74 +22,17 @@ function setCanvasToRedGreen(ctx) {
ctx.fillRect(halfWidth, halfHeight, halfWidth, halfHeight); ctx.fillRect(halfWidth, halfHeight, halfWidth, halfHeight);
} }
promise_test(function() { var testCanvas = document.createElement('canvas');
var bitmaps = []; testCanvas.width = 2;
testCanvas.height = 2;
var offscreen = testCanvas.transferControlToOffscreen();
var ctx = offscreen.getContext("2d");
setCanvasToRedGreen(ctx);
var canvas = document.createElement('canvas'); var testOptions = {sourceName: "OffscreenCanvas", imageSource: offscreen,
canvas.width = 4; sourceIsPremul: true, resizeWidth: 4, resizeHeight: 4};
canvas.height = 4;
document.body.appendChild(canvas);
gl = canvas.getContext("webgl");
gl.clearColor(0,0,0,1); prepareWebGLContext();
gl.clearDepth(1); prepareResizedImageBitmapsAndRuntTests(testOptions);
var testCanvas = document.createElement('canvas');
testCanvas.width = 2;
testCanvas.height = 2;
var offscreen = testCanvas.transferControlToOffscreen();
var ctx = offscreen.getContext('2d');
setCanvasToRedGreen(ctx);
var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p1 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
options.imageOrientation = "none";
options.premultiplyAlpha = "premultiply";
var p2 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p3 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p4 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
options.imageOrientation = "flipY";
options.premultiplyAlpha = "premultiply";
var p5 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
options.premultiplyAlpha = "default";
var p6 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
options.premultiplyAlpha = "none";
var p7 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
var p8 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
options.colorSpaceConversion = "none";
var p9 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
options.colorSpaceConversion = "default";
var p10 = createImageBitmap(offscreen, options).then(
function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(function() {
var alphaVal = 0.5;
var testPassed = runTest(bitmaps, alphaVal, false);
if (!testPassed)
assert_true(false, 'Test failed');
}, function() {
assert_true(false, 'Promise rejected');
});
}, 'createImageBitmap(HTMLCanvasElement) with resize and other options');
</script> </script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment