tor-browser

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

context-hidden-alpha.html (4185B)


      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 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
     12 <script src="../../js/js-test-pre.js"></script>
     13 <script src="../../js/webgl-test-utils.js"></script>
     14 <script id='vs' type='x-shader/x-vertex'>
     15    attribute vec2 aPosCoord;
     16 
     17    void main(void) {
     18        gl_Position = vec4(aPosCoord, 0.0, 1.0);
     19    }
     20 </script>
     21 
     22 <script id='fs' type='x-shader/x-fragment'>
     23    precision mediump float;
     24 
     25    void main(void) {
     26        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
     27    }
     28 </script>
     29 <script>
     30 "use strict";
     31 
     32 var posCoords_arr = new Float32Array(2 * 4);
     33 var posCoords_buff = null;
     34 function DrawQuad(gl, prog, x0, y0, x1, y1) {
     35    gl.useProgram(prog);
     36 
     37    if (!posCoords_buff) {
     38        posCoords_buff = gl.createBuffer();
     39    }
     40    gl.bindBuffer(gl.ARRAY_BUFFER, posCoords_buff);
     41    posCoords_arr[0] = x0;
     42    posCoords_arr[1] = y0;
     43 
     44    posCoords_arr[2] = x1;
     45    posCoords_arr[3] = y0;
     46 
     47    posCoords_arr[4] = x0;
     48    posCoords_arr[5] = y1;
     49 
     50    posCoords_arr[6] = x1;
     51    posCoords_arr[7] = y1;
     52    gl.bufferData(gl.ARRAY_BUFFER, posCoords_arr, gl.STREAM_DRAW);
     53 
     54    gl.enableVertexAttribArray(prog.aPosCoord);
     55    gl.vertexAttribPointer(prog.aPosCoord, 2, gl.FLOAT, false, 0, 0);
     56 
     57    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
     58 }
     59 
     60 function DrawSquare(gl, prog, size) {
     61    DrawQuad(gl, prog, -size, -size, size, size);
     62 }
     63 
     64 function Reset(gl) {
     65    gl.canvas.width += 1;
     66    gl.canvas.width -= 1;
     67 }
     68 
     69 var iColor;
     70 var pixel;
     71 var dataURL_pre;
     72 var dataURL_post;
     73 
     74 function Test(gl, prog, shouldFinish) {
     75    gl.enable(gl.BLEND);
     76    gl.blendFunc(gl.ZERO, gl.DST_ALPHA);
     77 
     78    iColor = 64;
     79    var fColor = iColor / 255.0;
     80 
     81    //////////////////
     82 
     83    debug('clear(R,G,B,0)');
     84 
     85    Reset(gl);
     86 
     87    gl.clearColor(fColor, fColor, fColor, 0.0);
     88    gl.clear(gl.COLOR_BUFFER_BIT);
     89 
     90    dataURL_pre = gl.canvas.toDataURL();
     91    //console.log('Before blending: ' + dataURL_pre);
     92 
     93    DrawSquare(gl, prog, 0.7);
     94 
     95    WebGLTestUtils.checkCanvasRect(gl, gl.drawingBufferWidth/2,
     96                                   gl.drawingBufferHeight/2, 1, 1,
     97                                   [iColor, iColor, iColor, 255],
     98                                   'Should blend as if alpha is 1.0.');
     99 
    100    dataURL_post = gl.canvas.toDataURL();
    101    //console.log('After blending: ' + dataURL_post);
    102    shouldBe("dataURL_post", "dataURL_pre");
    103 
    104    //////////////////
    105 
    106    debug('mask(R,G,B,0), clear(R,G,B,1)');
    107 
    108    Reset(gl);
    109 
    110    gl.colorMask(true, true, true, false);
    111    gl.clearColor(fColor, fColor, fColor, 1.0);
    112    gl.clear(gl.COLOR_BUFFER_BIT);
    113    gl.colorMask(true, true, true, true);
    114 
    115    dataURL_pre = gl.canvas.toDataURL();
    116    //console.log('Before blending: ' + dataURL_pre);
    117 
    118    DrawSquare(gl, prog, 0.7);
    119 
    120    WebGLTestUtils.checkCanvasRect(gl, gl.drawingBufferWidth/2,
    121                                   gl.drawingBufferHeight/2, 1, 1,
    122                                   [iColor, iColor, iColor, 255],
    123                                   'Should blend as if alpha is 1.0.');
    124 
    125    dataURL_post = gl.canvas.toDataURL();
    126    //console.log('After blending: ' + dataURL_post);
    127    shouldBe("dataURL_post", "dataURL_pre");
    128 
    129    ////////////////
    130 
    131    WebGLTestUtils.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors");
    132 
    133    if (shouldFinish)
    134        finishTest();
    135 }
    136 
    137 var gl;
    138 function init() {
    139    var canvas = document.getElementById('canvas');
    140    var attribs = {
    141        alpha: false,
    142        antialias: false,
    143        premultipliedAlpha: false,
    144    };
    145    gl = canvas.getContext('experimental-webgl', attribs);
    146    shouldBeNonNull(gl);
    147    shouldBe("gl.getParameter(gl.ALPHA_BITS)", "0");
    148 
    149    var prog = WebGLTestUtils.setupProgram(gl, ['vs', 'fs']);
    150    shouldBeNonNull(prog);
    151    prog.aPosCoord = gl.getAttribLocation(prog, 'aPosCoord');
    152 
    153    Test(gl, prog, false);
    154 
    155    requestAnimationFrame(function(){ Test(gl, prog, true); });
    156 }
    157 
    158 </script>
    159 </head>
    160 <body onload="init()">
    161 <canvas id='canvas'></canvas>
    162 <br/>
    163 <div id="description"></div>
    164 <div id="console"></div>
    165 </body>
    166 </html>