Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="./resources/webgl-test-utils-full.js"></script> | 4 <script src="./resources/webgl-test-utils-full.js"></script> |
| 5 <script src="./resources/tex-image-and-sub-image-utils.js"></script> | 5 <script src="./resources/tex-image-and-sub-image-utils.js"></script> |
| 6 <script src="../../../resources/js-test.js"></script> | 6 <script src="../../../resources/js-test.js"></script> |
| 7 </head> | 7 </head> |
| 8 | 8 |
| 9 <script id='myWorker' type='text/worker'> | 9 <script id='myWorker' type='text/worker'> |
| 10 self.onmessage = function(e) { | 10 function getImageBitmap(webglContext) { |
| 11 var canvas = new OffscreenCanvas(128, 128); | 11 var canvas = new OffscreenCanvas(128, 128); |
| 12 var gl = canvas.getContext('webgl'); | 12 var gl = canvas.getContext(webglContext); |
| 13 gl.clearColor(1.0, 1.0, 0.0, 1.0); | 13 gl.clearColor(1.0, 1.0, 0.0, 1.0); |
| 14 gl.clear(gl.COLOR_BUFFER_BIT); | 14 gl.clear(gl.COLOR_BUFFER_BIT); |
| 15 return canvas.transferToImageBitmap(); | |
| 16 } | |
| 15 | 17 |
| 16 var image = canvas.transferToImageBitmap(); | 18 self.onmessage = function(e) { |
| 17 self.postMessage({bitmap: image}, [image]); | 19 var image1 = getImageBitmap("webgl"); |
| 20 var image2 = getImageBitmap("webgl2"); | |
| 21 | |
| 22 self.postMessage({ bitmap1: image1, | |
| 23 bitmap2: image2 }, | |
| 24 [ image1, image2 ]); | |
| 18 }; | 25 }; |
| 19 </script> | 26 </script> |
| 20 | 27 |
| 21 <script> | 28 <script> |
| 22 window.jsTestIsAsync = true; | 29 window.jsTestIsAsync = true; |
| 23 | 30 |
| 24 var wtu = WebGLTestUtils; | 31 var wtu = WebGLTestUtils; |
| 25 var tiu = TexImageUtils; | 32 var tiu = TexImageUtils; |
| 26 var internalFormat = "RGBA"; | 33 var internalFormat = "RGBA"; |
| 27 var pixelFormat = "RGBA"; | 34 var pixelFormat = "RGBA"; |
| 28 var pixelType = "UNSIGNED_BYTE"; | 35 var pixelType = "UNSIGNED_BYTE"; |
| 29 var blob = new Blob([document.getElementById('myWorker').textContent]); | 36 var blob = new Blob([document.getElementById('myWorker').textContent]); |
| 30 var worker = new Worker(URL.createObjectURL(blob)); | 37 var worker = new Worker(URL.createObjectURL(blob)); |
| 31 var bitmap; | 38 var bitmap1, bitmap2; |
| 32 | 39 |
| 33 var width = 32; | 40 var width = 32; |
| 34 var height = 32; | 41 var height = 32; |
| 35 var canvas2d = document.createElement("canvas"); | 42 var canvas2d = document.createElement("canvas"); |
| 36 canvas2d.width = width; | 43 canvas2d.width = width; |
| 37 canvas2d.height = height; | 44 canvas2d.height = height; |
| 38 var gl = canvas2d.getContext('webgl'); | 45 var gl = canvas2d.getContext('webgl'); |
|
Justin Novosad
2017/04/13 17:37:43
weird that this one is called canvas2d
| |
| 39 gl.clearColor(0,0,0,1); | 46 gl.clearColor(0,0,0,1); |
| 40 gl.clearDepth(1); | 47 gl.clearDepth(1); |
| 41 gl.disable(gl.BLEND); | 48 gl.disable(gl.BLEND); |
| 42 | 49 |
| 43 function checkCanvas(buf, width, height) | 50 function checkCanvas(buf, width, height, webglContext) |
| 44 { | 51 { |
| 45 for (var i = 0; i < width * height; i++) { | 52 for (var i = 0; i < width * height; i++) { |
| 46 if (buf[i * 4] != 255 || buf[i * 4 + 1] != 255 || | 53 if (buf[i * 4] != 255 || buf[i * 4 + 1] != 255 || |
| 47 buf[i * 4 + 2] != 0 || buf[i * 4 + 3] != 255) { | 54 buf[i * 4 + 2] != 0 || buf[i * 4 + 3] != 255) { |
| 48 testFailed("This pixel should be red, but it is: [" + buf[i * 4] + " , " + | 55 testFailed("OffscreenCanvas." + webglContext + |
| 56 ": This pixel should be red, but it is: [" + buf[i * 4] + ", " + | |
| 49 buf[i * 4 + 1] + ", " + buf[i * 4 + 2] + ", " + buf[i * 4 + 3] + "]."); | 57 buf[i * 4 + 1] + ", " + buf[i * 4 + 2] + ", " + buf[i * 4 + 3] + "]."); |
| 50 finishJSTest(); | 58 return; |
| 51 } | 59 } |
| 52 } | 60 } |
| 61 testPassed("TransferToImageBitmap test on OffscreenCanvas." + webglContext + " passed"); | |
| 53 } | 62 } |
| 54 | 63 |
| 55 function runTestOnBindingTarget(bindingTarget, program, bitmap) | 64 function runTestOnBindingTarget(bindingTarget, program, bitmap, webglContext) |
| 56 { | 65 { |
| 57 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | 66 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); |
| 58 // Enable writes to the RGBA channels | 67 // Enable writes to the RGBA channels |
| 59 gl.colorMask(1, 1, 1, 0); | 68 gl.colorMask(1, 1, 1, 0); |
| 60 var texture = gl.createTexture(); | 69 var texture = gl.createTexture(); |
| 61 // Bind the texture to texture unit 0 | 70 // Bind the texture to texture unit 0 |
| 62 gl.bindTexture(bindingTarget, texture); | 71 gl.bindTexture(bindingTarget, texture); |
| 63 // Set up texture parameters | 72 // Set up texture parameters |
| 64 gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); | 73 gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); |
| 65 gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); | 74 gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); |
| 66 | 75 |
| 67 var targets = [gl.TEXTURE_2D]; | 76 var targets = [gl.TEXTURE_2D]; |
| 68 // Upload the image into the texture | 77 // Upload the image into the texture |
| 69 for (var tt = 0; tt < targets.length; ++tt) { | 78 for (var tt = 0; tt < targets.length; ++tt) { |
| 70 gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pi xelType], bitmap); | 79 gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pi xelType], bitmap); |
| 71 } | 80 } |
| 72 for (var tt = 0; tt < targets.length; ++tt) { | 81 for (var tt = 0; tt < targets.length; ++tt) { |
| 73 // Draw the triangles | 82 // Draw the triangles |
| 74 gl.clearColor(0, 0, 0, 1); | 83 gl.clearColor(0, 0, 0, 1); |
| 75 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | 84 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); |
| 76 gl.drawArrays(gl.TRIANGLES, 0, 6); | 85 gl.drawArrays(gl.TRIANGLES, 0, 6); |
| 77 | 86 |
| 78 var buf = new Uint8Array(width * height * 4); | 87 var buf = new Uint8Array(width * height * 4); |
| 79 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf); | 88 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf); |
| 80 checkCanvas(buf, width, height); | 89 checkCanvas(buf, width, height, webglContext); |
| 81 } | 90 } |
| 82 } | 91 } |
| 83 | 92 |
| 84 worker.onmessage = function(msg) { | 93 worker.onmessage = function(msg) { |
| 85 bitmap = msg.data.bitmap; | 94 bitmap1 = msg.data.bitmap1; |
| 95 bitmap2 = msg.data.bitmap2; | |
| 86 var program = tiu.setupTexturedQuad(gl, internalFormat); | 96 var program = tiu.setupTexturedQuad(gl, internalFormat); |
| 87 runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmap); | 97 runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmap1, "webgl"); |
| 88 testPassed("This test passed"); | 98 runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmap2, "webgl2"); |
| 89 finishJSTest(); | 99 finishJSTest(); |
| 90 } | 100 } |
| 91 worker.postMessage(""); | 101 worker.postMessage(""); |
| 92 | 102 |
| 93 </script> | 103 </script> |
| 94 </html> | 104 </html> |
| OLD | NEW |