| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <meta charset="utf-8"> | |
| 5 <title>Test the WebGL premultipledAlpha context creation flag.</title> | |
| 6 <script src="../../../resources/js-test.js"></script> | |
| 7 <script src="resources/webgl-test.js"> </script> | |
| 8 <script src="resources/webgl-test-utils.js"> </script> | |
| 9 </head> | |
| 10 <body> | |
| 11 <div id="description"></div><div id="console"></div> | |
| 12 <script> | |
| 13 var wtu = WebGLTestUtils; | |
| 14 | |
| 15 var tests = [ | |
| 16 // If premultipledAlpha is true then | |
| 17 // [texture] [canvas] [dataURL] | |
| 18 // 32, 64, 128, 128 -> 64, 128, 255, 128 -> 64, 128, 255, 128 | |
| 19 { creationAttributes: {}, | |
| 20 sentColor: [32, 64, 128, 128], | |
| 21 expectedColor: [64, 128, 255, 128], | |
| 22 errorRange: 2, | |
| 23 imageFormat: "image/png" | |
| 24 }, | |
| 25 // If premultipledAlpha is true then | |
| 26 // [texture] [canvas] [texture] | |
| 27 // 32, 64, 128, 128 -> 64, 128, 255, 128 -> 64, 128, 255, 128 | |
| 28 { creationAttributes: {}, | |
| 29 sentColor: [32, 64, 128, 128], | |
| 30 expectedColor: [64, 128, 255, 128], | |
| 31 errorRange: 2, | |
| 32 }, | |
| 33 // If premultipledAlpha is false then | |
| 34 // [texture] [canvas] [dataURL] | |
| 35 // 255, 192, 128, 1 -> 255, 192, 128, 1 -> 255, 192, 128, 1 | |
| 36 { creationAttributes: {premultipliedAlpha: false}, | |
| 37 sentColor: [255, 192, 128, 1], | |
| 38 expectedColor: [255, 192, 128, 1], | |
| 39 errorRange: 0, | |
| 40 imageFormat: "image/png" | |
| 41 }, | |
| 42 // If premultipledAlpha is false then | |
| 43 // [texture] [canvas] [texture] | |
| 44 // 255, 192, 128, 1 -> 255, 192, 128, 1 -> 255, 192, 128, 1 | |
| 45 { creationAttributes: {premultipliedAlpha: false}, | |
| 46 sentColor: [255, 192, 128, 1], | |
| 47 expectedColor: [255, 192, 128, 1], | |
| 48 errorRange: 0, | |
| 49 }, | |
| 50 // If premultipledAlpha is false then | |
| 51 // [texture] [canvas] [dataURL] | |
| 52 // 255, 255, 255, 128 -> 255, 255, 255, 128 -> 128, 128, 128, 255 | |
| 53 { creationAttributes: {premultipliedAlpha: false}, | |
| 54 sentColor: [255, 255, 255, 128], | |
| 55 expectedColor: [128, 128, 128, 255], | |
| 56 errorRange: 2, | |
| 57 imageFormat: "image/jpeg" | |
| 58 }, | |
| 59 // If premultipledAlpha is true then | |
| 60 // [texture] [canvas] [dataURL] | |
| 61 // 128, 128, 128, 128 -> 255, 255, 255, 128 -> 128, 128, 128, 255 | |
| 62 { creationAttributes: {}, | |
| 63 sentColor: [128, 128, 128, 128], | |
| 64 expectedColor: [128, 128, 128, 255], | |
| 65 errorRange: 2, | |
| 66 imageFormat: "image/jpeg" | |
| 67 } | |
| 68 ]; | |
| 69 | |
| 70 var g_count = 0; | |
| 71 var gl; | |
| 72 var canvas; | |
| 73 var premultipledAlpha; | |
| 74 | |
| 75 window.jsTestIsAsync = true; | |
| 76 | |
| 77 if (window.testRunner) | |
| 78 testRunner.overridePreference("WebKitWebGLEnabled", "1"); | |
| 79 | |
| 80 description("Test the WebGL premultipledAlpha context creation flag."); | |
| 81 doNextTest(); | |
| 82 function doNextTest() { | |
| 83 if (g_count < tests.length) { | |
| 84 var test = tests[g_count++]; | |
| 85 canvas = document.createElement("canvas"); | |
| 86 // Need to preserve drawing buffer to load it in a callback | |
| 87 test.creationAttributes.preserveDrawingBuffer = true; | |
| 88 gl = wtu.create3DContext(canvas, test.creationAttributes); | |
| 89 var premultipliedAlpha = test.creationAttributes.premultipliedAlpha != fals
e; | |
| 90 debug("") | |
| 91 debug("testing: premultipliedAlpha: " + premultipliedAlpha + " imageFormat:
" + test.imageFormat); | |
| 92 | |
| 93 shouldBe('gl.getContextAttributes().premultipledAlpha', 'premultipledAlpha'
); | |
| 94 shouldBeTrue('gl.getContextAttributes().preserveDrawingBuffer'); | |
| 95 | |
| 96 var program = wtu.setupTexturedQuad(gl); | |
| 97 | |
| 98 glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from setup."); | |
| 99 var tex = gl.createTexture(); | |
| 100 wtu.fillTexture(gl, tex, 2, 2, test.sentColor, 0); | |
| 101 var loc = gl.getUniformLocation(program, "tex"); | |
| 102 gl.uniform1i(loc, 0); | |
| 103 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); | |
| 104 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); | |
| 105 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); | |
| 106 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); | |
| 107 | |
| 108 wtu.drawQuad(gl); | |
| 109 glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from drawing."); | |
| 110 | |
| 111 function loadTexture() { | |
| 112 var pngTex = gl.createTexture(); | |
| 113 // not needed as it's the default | |
| 114 // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); | |
| 115 gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, false); | |
| 116 gl.bindTexture(gl.TEXTURE_2D, pngTex); | |
| 117 if (test.imageFormat) { | |
| 118 // create texture from image | |
| 119 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, th
is); | |
| 120 } else { | |
| 121 // create texture from canvas | |
| 122 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, ca
nvas); | |
| 123 } | |
| 124 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); | |
| 125 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); | |
| 126 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); | |
| 127 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); | |
| 128 glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from creating copy.
"); | |
| 129 wtu.drawQuad(gl); | |
| 130 glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from 2nd drawing.")
; | |
| 131 wtu.checkCanvas( | |
| 132 gl, test.expectedColor, | |
| 133 "should draw with " + test.expectedColor, test.errorRange); | |
| 134 | |
| 135 doNextTest(); | |
| 136 } | |
| 137 | |
| 138 if (test.imageFormat) { | |
| 139 // Load canvas into string using toDataURL | |
| 140 var imageUrl = canvas.toDataURL(test.imageFormat); | |
| 141 if (test.imageFormat != "image/png" && | |
| 142 (imageUrl.indexOf("data:image/png,") == 0 || | |
| 143 imageUrl.indexOf("data:image/png;") == 0)) { | |
| 144 debug("Image format " + test.imageFormat + " not supported; skipping")
; | |
| 145 setTimeout(doNextTest, 0); | |
| 146 } else { | |
| 147 // Load string into the texture | |
| 148 var input = document.createElement("img"); | |
| 149 input.onload = loadTexture; | |
| 150 input.src = imageUrl; | |
| 151 } | |
| 152 } else { | |
| 153 // Load canvas into the texture asynchronously (to prevent unbounded sta
ck consumption) | |
| 154 setTimeout(loadTexture, 0); | |
| 155 } | |
| 156 } else { | |
| 157 finishTest(); | |
| 158 } | |
| 159 } | |
| 160 | |
| 161 </script> | |
| 162 | |
| 163 </body> | |
| 164 </html> | |
| 165 | |
| 166 | |
| OLD | NEW |