tor-browser

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

framebuffer-unsupported.html (5591B)


      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>WebGL FRAMEBUFFER_UNSUPPORTED Test</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 <canvas id="canvas" width="2" height="2"> </canvas>
     20 
     21 <script>
     22 "use strict";
     23 var wtu = WebGLTestUtils;
     24 var gl;
     25 var canvas = document.getElementById("canvas");
     26 
     27 function checkFramebuffer(expected) {
     28    var actual = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
     29    if (expected.indexOf(actual) < 0) {
     30        var msg = "checkFramebufferStatus expects [";
     31        for (var index = 0; index < expected.length; ++index) {
     32            msg += wtu.glEnumToString(gl, expected[index]);
     33            if (index + 1 < expected.length)
     34                msg += ", ";
     35        }
     36        msg += "], was " + wtu.glEnumToString(gl, actual);
     37        testFailed(msg);
     38    } else {
     39        var msg = "checkFramebufferStatus got " + wtu.glEnumToString(gl, actual) +
     40                  " as expected";
     41        testPassed(msg);
     42    }
     43 }
     44 
     45 function testImageAttachedTwoPoints() {
     46    debug("");
     47    debug("Checking an image is attached to more than one color attachment in a framebuffer.");
     48 
     49    var tex1 = gl.createTexture();
     50    var tex2 = gl.createTexture();
     51    var fb = gl.createFramebuffer();
     52    gl.bindTexture(gl.TEXTURE_2D, tex1);
     53    gl.texImage2D(gl.TEXTURE_2D,
     54                  0,                                          // level
     55                  gl.RGBA,                                    // internalFormat
     56                  1,                                          // width
     57                  1,                                          // height
     58                  0,                                          // border
     59                  gl.RGBA,                                    // format
     60                  gl.UNSIGNED_BYTE,                           // type
     61                  new Uint8Array(4));                         // data
     62    gl.bindTexture(gl.TEXTURE_2D, tex2);
     63    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
     64    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Texture creation should succeed.");
     65 
     66    gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
     67    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex1, 0);
     68    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
     69    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tex2, 0);
     70    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
     71    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT2, gl.TEXTURE_2D, tex1, 0);
     72    checkFramebuffer([gl.FRAMEBUFFER_UNSUPPORTED]);
     73 
     74    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
     75    gl.deleteFramebuffer(fb);
     76    fb = gl.createFramebuffer();
     77    gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
     78    var texCube = gl.createTexture();
     79    gl.bindTexture(gl.TEXTURE_CUBE_MAP, texCube);
     80    for (var target = gl.TEXTURE_CUBE_MAP_POSITIVE_X; target < gl.TEXTURE_CUBE_MAP_POSITIVE_X + 6; target++) {
     81      gl.texImage2D(target, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
     82    }
     83    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0);
     84    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
     85    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_CUBE_MAP_POSITIVE_Y, texCube, 0);
     86    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
     87    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT2, gl.TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0);
     88    checkFramebuffer([gl.FRAMEBUFFER_UNSUPPORTED]);
     89 
     90 
     91    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
     92    gl.deleteFramebuffer(fb);
     93    fb = gl.createFramebuffer();
     94    gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
     95    var tex3d = gl.createTexture();
     96    gl.bindTexture(gl.TEXTURE_3D, tex3d);
     97    gl.texImage3D(gl.TEXTURE_3D,
     98                  0,                                          // level
     99                  gl.RGBA,                                    // internalFormat
    100                  2,                                          // width
    101                  2,                                          // height
    102                  2,                                          // depth
    103                  0,                                          // border
    104                  gl.RGBA,                                    // format
    105                  gl.UNSIGNED_BYTE,                           // type
    106                  new Uint8Array(4 * 2 * 2 * 2));             // data
    107    gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, tex3d, 0, 0);
    108    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
    109    gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, tex3d, 0, 1);
    110    checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
    111    gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT2, tex3d, 0, 0);
    112    checkFramebuffer([gl.FRAMEBUFFER_UNSUPPORTED]);
    113 
    114    // Clean up
    115    gl.deleteTexture(tex1);
    116    gl.deleteTexture(tex2);
    117    gl.deleteTexture(texCube);
    118    gl.deleteTexture(tex3d);
    119    gl.deleteFramebuffer(fb);
    120 }
    121 
    122 description("This tests FRAMEBUFFER_UNSUPPORTED.");
    123 
    124 shouldBeNonNull("gl = wtu.create3DContext(undefined, undefined, 2)");
    125 
    126 testImageAttachedTwoPoints();
    127 
    128 debug("");
    129 var successfullyParsed = true;
    130 </script>
    131 <script src="../../js/js-test-post.js"></script>
    132 
    133 </body>
    134 </html>