tor-browser

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

rapid-resizing.html (4250B)


      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 Rapid Resizing 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 <canvas id="canvas1" style="width: 256px; height: 256px;"> </canvas>
     19 <canvas id="canvas2" style="width: 256px; height: 256px;"> </canvas>
     20 <div id="console"></div>
     21 <script id="vshader" type="x-shader/x-vertex">
     22 attribute vec2 position;
     23 void main()
     24 {
     25  gl_Position = vec4(position, 0.0, 1.0);
     26 }
     27 </script>
     28 
     29 <script id="fshader" type="x-shader/x-fragment">
     30 void main()
     31 {
     32  gl_FragColor = vec4(0.0,1.0,0.0,1.0);
     33 }
     34 </script>
     35 <script>
     36 "use strict";
     37 
     38 description("Verifies that rapidly resizing the canvas works correctly.");
     39 
     40 debug("");
     41 debug("Regression test for Chromium <a href='http://crbug.com/299371'>Issue 299371</a> and <a href='http://crbug.com/557848'>Issue 557848</a>");
     42 debug("");
     43 
     44 var err;
     45 var wtu = WebGLTestUtils;
     46 var canvas;
     47 var largeSize = 256;
     48 var smallSize = 128;
     49 var currentSize;
     50 var gl;
     51 var program;
     52 var numFrames = 0;
     53 var testNumber = 0;
     54 
     55 function nextTest() {
     56  ++testNumber;
     57  numFrames = 0;
     58  currentSize = largeSize;
     59  if (testNumber > 2) {
     60    finishTest();
     61    return;
     62  }
     63 
     64  canvas = document.getElementById("canvas" + testNumber);
     65  canvas.width = currentSize;
     66  canvas.height = currentSize;
     67  var usePreserveDrawingBuffer = (testNumber == 1) ? true : false;
     68  debug("Testing preserveDrawingBuffer = " + usePreserveDrawingBuffer);
     69  gl = wtu.create3DContext(canvas, { preserveDrawingBuffer: usePreserveDrawingBuffer });
     70 
     71  if (!gl) {
     72    testFailed("context does not exist");
     73 
     74    wtu.requestAnimFrame(nextTest);
     75  } else {
     76    testPassed("context exists");
     77 
     78    gl.clearColor(0, 0, 0, 1);
     79 
     80    program = wtu.setupProgram(gl, ["vshader", "fshader"], ["position"]);
     81    shouldBeNonNull("program");
     82 
     83    // Prepare to draw quads
     84    var quadSize = 0.1;
     85 
     86    var vertexBuffer = gl.createBuffer();
     87    gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
     88    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
     89      // Lower left
     90      -1, -1 + quadSize,
     91      -1, -1,
     92      -1 + quadSize, -1,
     93      -1 + quadSize, -1 + quadSize,
     94 
     95      // Lower right
     96      1 - quadSize, -1 + quadSize,
     97      1 - quadSize, -1,
     98      1, -1,
     99      1, -1 + quadSize,
    100 
    101      // Upper right
    102      1 - quadSize, 1,
    103      1 - quadSize, 1 - quadSize,
    104      1, 1 - quadSize,
    105      1, 1,
    106 
    107      // Upper left
    108      -1, 1,
    109      -1, 1 - quadSize,
    110      -1 + quadSize, 1 - quadSize,
    111      -1 + quadSize, 1
    112    ]), gl.STATIC_DRAW);
    113    gl.enableVertexAttribArray(0);
    114    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
    115 
    116    var indexBuffer = gl.createBuffer();
    117    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
    118    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([
    119      0, 1, 2,
    120      0, 2, 3,
    121 
    122      4, 5, 6,
    123      4, 6, 7,
    124 
    125      8, 9, 10,
    126      8, 10, 11,
    127 
    128      12, 13, 14,
    129      12, 14, 15
    130    ]), gl.STATIC_DRAW);
    131 
    132    wtu.requestAnimFrame(render);
    133  }
    134 }
    135 
    136 function render() {
    137  if (++numFrames < 30) {
    138    if (currentSize == largeSize) {
    139      canvas.height = smallSize;
    140      currentSize = smallSize;
    141    } else {
    142      canvas.height = largeSize;
    143      currentSize = largeSize;
    144    }
    145  }
    146 
    147  gl.viewport(0, 0, largeSize, currentSize);
    148  gl.clear(gl.COLOR_BUFFER_BIT);
    149  gl.drawElements(gl.TRIANGLES, 24, gl.UNSIGNED_SHORT, 0);
    150 
    151  // Check the four corners
    152  var green = [ 0, 255, 0, 255 ];
    153  var inset = 3;
    154  wtu.checkCanvasRect(gl, inset, inset, 1, 1, green, "lower left should be green", 1);
    155  wtu.checkCanvasRect(gl, largeSize - inset, inset, 1, 1, green, "lower right should be green", 1);
    156  wtu.checkCanvasRect(gl, inset, currentSize - inset, 1, 1, green, "upper left should be green", 1);
    157  wtu.checkCanvasRect(gl, largeSize - inset, currentSize - inset, 1, 1, green, "upper right should be green", 1);
    158 
    159  if (numFrames < 60) {
    160    wtu.requestAnimFrame(render);
    161  } else {
    162    wtu.requestAnimFrame(nextTest);
    163  }
    164 }
    165 
    166 wtu.requestAnimFrame(nextTest);
    167 
    168 </script>
    169 
    170 </body>
    171 </html>