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

Side by Side Diff: third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils.js

Issue 1763043002: Add ColorspaceConversion in ImageBitmapOptions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: colorspace conversion for all sources Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 function checkCanvasRect(buf, x, y, width, height, color, tolerance, bufWidth, r etVal) 1 function checkCanvasRect(buf, x, y, width, height, color, tolerance, bufWidth, r etVal)
2 { 2 {
3 for (var px = x; px < x + width; px++) { 3 for (var px = x; px < x + width; px++) {
4 for (var py = y; py < y + height; py++) { 4 for (var py = y; py < y + height; py++) {
5 var offset = (py * bufWidth + px) * 4; 5 var offset = (py * bufWidth + px) * 4;
6 for (var j = 0; j < color.length; j++) { 6 for (var j = 0; j < color.length; j++) {
7 if (Math.abs(buf[offset + j] - color[j]) > tolerance) { 7 if (Math.abs(buf[offset + j] - color[j]) > tolerance) {
8 retVal.testPassed = false; 8 retVal.testPassed = false;
9 return; 9 return;
10 } 10 }
11 } 11 }
12 } 12 }
13 } 13 }
14 } 14 }
15 15
16 function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap, flipY , premultiplyAlpha, retVal) 16 function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap, flipY , premultiplyAlpha, retVal, colorspace = 'empty')
17 { 17 {
18 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 18 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
19 // Enable writes to the RGBA channels 19 // Enable writes to the RGBA channels
20 gl.colorMask(1, 1, 1, 0); 20 gl.colorMask(1, 1, 1, 0);
21 var texture = gl.createTexture(); 21 var texture = gl.createTexture();
22 // Bind the texture to texture unit 0 22 // Bind the texture to texture unit 0
23 gl.bindTexture(bindingTarget, texture); 23 gl.bindTexture(bindingTarget, texture);
24 // Set up texture parameters 24 // Set up texture parameters
25 gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 25 gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
26 gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 26 gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
(...skipping 27 matching lines...) Expand all
54 var quaterHeight = Math.floor(halfHeight / 2); 54 var quaterHeight = Math.floor(halfHeight / 2);
55 55
56 var top = flipY ? quaterHeight : (height - halfHeight + quaterHeight); 56 var top = flipY ? quaterHeight : (height - halfHeight + quaterHeight);
57 var bottom = flipY ? (height - halfHeight + quaterHeight) : quaterHeight; 57 var bottom = flipY ? (height - halfHeight + quaterHeight) : quaterHeight;
58 58
59 var tl = redColor; 59 var tl = redColor;
60 var tr = premultiplyAlpha ? ((retVal.alpha == 0.5) ? halfRed : (retVal.alpha == 1) ? redColor : blackColor) : redColor; 60 var tr = premultiplyAlpha ? ((retVal.alpha == 0.5) ? halfRed : (retVal.alpha == 1) ? redColor : blackColor) : redColor;
61 var bl = greenColor; 61 var bl = greenColor;
62 var br = premultiplyAlpha ? ((retVal.alpha == 0.5) ? halfGreen : (retVal.alp ha == 1) ? greenColor : blackColor) : greenColor; 62 var br = premultiplyAlpha ? ((retVal.alpha == 0.5) ? halfGreen : (retVal.alp ha == 1) ? greenColor : blackColor) : greenColor;
63 63
64 var blueColor = [0, 0, 255];
65 if (colorspace == 'none') {
66 tl = tr = bl = br = blueColor;
67 } else if (colorspace == 'default') {
68 tl = tr = bl = br = redColor;
69 }
70
64 var loc; 71 var loc;
65 if (bindingTarget == gl.TEXTURE_CUBE_MAP) { 72 if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
66 loc = gl.getUniformLocation(program, "face"); 73 loc = gl.getUniformLocation(program, "face");
67 } 74 }
68 75
69 var tolerance = (retVal.alpha == 0) ? 0 : 3; 76 var tolerance = (retVal.alpha == 0) ? 0 : 3;
77 if (colorspace == 'default' || colorspace == 'none')
78 tolerance = 8;
70 for (var tt = 0; tt < targets.length; ++tt) { 79 for (var tt = 0; tt < targets.length; ++tt) {
71 if (bindingTarget == gl.TEXTURE_CUBE_MAP) { 80 if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
72 gl.uniform1i(loc, targets[tt]); 81 gl.uniform1i(loc, targets[tt]);
73 } 82 }
74 // Draw the triangles 83 // Draw the triangles
75 gl.clearColor(0, 0, 0, 1); 84 gl.clearColor(0, 0, 0, 1);
76 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 85 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
77 gl.drawArrays(gl.TRIANGLES, 0, 6); 86 gl.drawArrays(gl.TRIANGLES, 0, 6);
78 87
79 // Check the top pixel and bottom pixel and make sure they have 88 // Check the top pixel and bottom pixel and make sure they have
80 // the right color. 89 // the right color.
81 var buf = new Uint8Array(width * height * 4); 90 var buf = new Uint8Array(width * height * 4);
82 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf); 91 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf);
83 checkCanvasRect(buf, quaterWidth, bottom, 2, 2, tl, tolerance, width, re tVal); 92 checkCanvasRect(buf, quaterWidth, bottom, 2, 2, tl, tolerance, width, re tVal);
84 checkCanvasRect(buf, halfWidth + quaterWidth, bottom, 2, 2, tr, toleranc e, width, retVal); 93 checkCanvasRect(buf, halfWidth + quaterWidth, bottom, 2, 2, tr, toleranc e, width, retVal);
85 checkCanvasRect(buf, quaterWidth, top, 2, 2, bl, tolerance, width, retVa l); 94 checkCanvasRect(buf, quaterWidth, top, 2, 2, bl, tolerance, width, retVa l);
86 checkCanvasRect(buf, halfWidth + quaterWidth, top, 2, 2, br, tolerance, width, retVal); 95 checkCanvasRect(buf, halfWidth + quaterWidth, top, 2, 2, br, tolerance, width, retVal);
87 } 96 }
88 } 97 }
89 98
90 function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) { 99 function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) {
91 var cases = [ 100 var cases = [
92 { sub: false }, 101 { sub: false },
93 { sub: true }, 102 { sub: true },
Justin Novosad 2016/03/09 16:29:39 The structure of this test is getting messy as it
xidachen 2016/03/14 13:29:41 This is now cleaned up, everything is put in cases
94 ]; 103 ];
95 104
96 for (var i in cases) { 105 for (var i in cases) {
97 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.defaultOpt ion, false, true, retVal); 106 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.defaultOpt ion, false, true, retVal);
98 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYPre mul, false, true, retVal); 107 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYPre mul, false, true, retVal);
99 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYDef ault, false, true, retVal); 108 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYDef ault, false, true, retVal);
100 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYUnp remul, false, false, retVal); 109 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.noFlipYUnp remul, false, false, retVal);
101 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYPremu l, true, true, retVal); 110 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYPremu l, true, true, retVal);
102 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYDefau lt, true, true, retVal); 111 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYDefau lt, true, true, retVal);
103 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYUnpre mul, true, false, retVal); 112 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.flipYUnpre mul, true, false, retVal);
113 if (retVal.colorspaceEffect) {
114 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceDef, false, true, retVal, 'default');
115 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceNone, false, true, retVal, 'none');
116 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceDefault, false, true, retVal, 'default');
Justin Novosad 2016/03/09 16:29:39 What is the difference between colorspaceDef and c
xidachen 2016/03/14 13:29:41 colorspaceDef is created with out given any colors
117 } else {
118 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceDef, false, true, retVal);
Justin Novosad 2016/03/09 16:29:39 How is this different from the line with bitmaps.d
xidachen 2016/03/14 13:29:41 bitmaps.colorspaceDef is created with a png that h
119 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceNone, false, true, retVal);
120 runOneIteration(cases[i].sub, bindingTarget, program, bitmaps.colors paceDefault, false, true, retVal);
121 }
104 } 122 }
105 } 123 }
106 124
107 function runTest(bitmaps, alphaVal) 125 function runTest(bitmaps, alphaVal, colorspaceEffective)
108 { 126 {
109 var retVal = {testPassed: true, alpha: alphaVal}; 127 var retVal = {testPassed: true, alpha: alphaVal, colorspaceEffect: colorspac eEffective};
110 var program = tiu.setupTexturedQuad(gl, internalFormat); 128 var program = tiu.setupTexturedQuad(gl, internalFormat);
111 runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal); 129 runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal);
112 // program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat); 130 program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat);
113 // runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal); 131 runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal);
114 return retVal.testPassed; 132 return retVal.testPassed;
115 } 133 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698