tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

tex-unpack-params-imagedata.html (3572B)


      1 <!--
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 -->
      6 
      7 <!DOCTYPE html>
      8 <html>
      9 <head>
     10 <meta charset="utf-8">
     11 <title>WebGL2 TexImage3D from ImageData with unpack params tests.</title>
     12 <link rel="stylesheet" href="../../../resources/js-test-style.css"/>
     13 <script src="../../../js/js-test-pre.js"></script>
     14 <script src="../../../js/webgl-test-utils.js"></script>
     15 </head>
     16 <body>
     17 <div id="description"></div>
     18 <div id="console"></div>
     19 <script>
     20 var wtu = WebGLTestUtils;
     21 var gl = wtu.create3DContext(undefined, undefined, 2);
     22 let actual;
     23 
     24 description("TexImage3D from ImageData with unpack params");
     25 
     26 debug("TexImage3D from ImageData with UNPACK_IMAGE_HEIGHT set (crbug.com/804123)");
     27 
     28 // framebuffer for readback
     29 const fbo = gl.createFramebuffer();
     30 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
     31 
     32 function makeTestData(size, start) {
     33  const data = new Uint8ClampedArray(size);
     34  for (let i = 0; i < size; ++i) {
     35    data[i] = (start + i) % 256;
     36  }
     37  return data;
     38 }
     39 
     40 // source data
     41 //
     42 //   dstWidth = 4
     43 // <-->
     44 // xxxx ^ ^ ^ ^
     45 // xxxx |   | |
     46 // xxxx |   | |
     47 // xxxx |   | v dstHeight = 4
     48 // ---- |   |
     49 // ---- |   |
     50 // ---- |   v unpackImageHeight = 7
     51 // xxxx | |
     52 // xxxx |
     53 // xxxx |
     54 // xxxx |
     55 // ---- |
     56 // ---- |
     57 // ---- |
     58 // xxxx | |
     59 // xxxx |
     60 // xxxx |
     61 // xxxx |
     62 // ---- |
     63 // ---- |
     64 // ---- |
     65 // xxxx | v dstDepth = 4
     66 // xxxx |
     67 // xxxx |
     68 // xxxx v srcHeight = 25
     69 // <-->
     70 //   srcWidth = 4
     71 const unpackImageHeight = 7;
     72 const dstWidth = 4;
     73 const dstHeight = 4;
     74 const dstDepth = 4;
     75 const srcWidth = dstWidth;
     76 const srcHeight = (dstDepth - 1) * unpackImageHeight + dstHeight;
     77 const srcSize = srcWidth * srcHeight;
     78 const sizeofR8 = 1;
     79 const sizeofRGBA8 = 4;
     80 const imageData = new ImageData(makeTestData(srcSize * sizeofRGBA8, 1), srcWidth, srcHeight);
     81 const texture = gl.createTexture();
     82 gl.bindTexture(gl.TEXTURE_3D, texture);
     83 
     84 debug("");
     85 // upload
     86 gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 2);
     87 gl.texImage3D(gl.TEXTURE_3D, 0, gl.R8, 1, 1, 1, 0, gl.RED, gl.UNSIGNED_BYTE, imageData);
     88 wtu.glErrorShouldBe(gl, gl.NO_ERROR, "small upload");
     89 // check
     90 actual = new Uint8Array(sizeofRGBA8);
     91 gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, texture, 0, 0);
     92 if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE) {
     93  gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, actual);
     94  shouldBeTrue(`areArraysEqual(actual, [1, 0, 0, 255])`);
     95  wtu.glErrorShouldBe(gl, gl.NO_ERROR);
     96 } else {
     97  debug("framebuffer incomplete: skipped");
     98 }
     99 
    100 debug("");
    101 // upload
    102 gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight);
    103 gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA8, dstWidth, dstHeight, dstDepth, 0,
    104              gl.RGBA, gl.UNSIGNED_BYTE, imageData);
    105 wtu.glErrorShouldBe(gl, gl.NO_ERROR, "larger upload");
    106 // check
    107 actual = new Uint8Array(dstWidth * dstHeight * sizeofRGBA8);
    108 let expected;
    109 for (let z = 0; z < dstDepth; ++z) {
    110  gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, texture, 0, z);
    111  shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
    112  gl.readPixels(0, 0, dstWidth, dstHeight, gl.RGBA, gl.UNSIGNED_BYTE, actual);
    113  debug(`for z = ${z}:`);
    114  expected = makeTestData(dstWidth * dstHeight * sizeofRGBA8,
    115                          1 + z * dstWidth * unpackImageHeight * sizeofRGBA8);
    116  shouldBeTrue('areArraysEqual(actual, expected)');
    117 }
    118 wtu.glErrorShouldBe(gl, gl.NO_ERROR);
    119 
    120 gl.deleteTexture(texture);
    121 
    122 var successfullyParsed = true;
    123 </script>
    124 <script src="../../../js/js-test-post.js"></script>
    125 </body>
    126 </html>