function testTransferToImageBitmap(webglContextVersion, bitmap) { var internalFormat = "RGBA"; var pixelFormat = "RGBA"; var pixelType = "UNSIGNED_BYTE"; var width = 32; var height = 32; var canvas = document.createElement("canvas"); canvas.width = width; canvas.height = height; var gl = WebGLTestUtils.create3DContext(canvas); gl.clearColor(0,0,0,1); gl.clearDepth(1); gl.disable(gl.BLEND); TexImageUtils.setupTexturedQuad(gl, internalFormat); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Enable writes to the RGBA channels gl.colorMask(1, 1, 1, 0); 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); var targets = [gl.TEXTURE_2D]; // Upload the image into the texture for (var tt = 0; tt < targets.length; ++tt) { gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], bitmap); } for (var tt = 0; tt < targets.length; ++tt) { // Draw the triangles gl.clearColor(0, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 6); var buf = new Uint8Array(width * height * 4); gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf); _checkCanvas(buf, width, height, webglContextVersion); } } function _checkCanvas(buf, width, height, webglContextVersion) { for (var i = 0; i < width * height; i++) { if (buf[i * 4] != 255 || buf[i * 4 + 1] != 255 || buf[i * 4 + 2] != 0 || buf[i * 4 + 3] != 255) { testFailed("OffscreenCanvas." + webglContextVersion + ": This pixel should be [255, 255, 0, 255], but it is: [" + buf[i * 4] + ", " + buf[i * 4 + 1] + ", " + buf[i * 4 + 2] + ", " + buf[i * 4 + 3] + "]."); return; } } testPassed("TransferToImageBitmap test on OffscreenCanvas." + webglContextVersion + " passed"); }