tor-browser

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

gl-max-texture-dimensions.html (3092B)


      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 the max advertized texture size is supported.</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 <canvas id="example" width="4" height="4" style="width: 40px; height: 30px;"></canvas>
     18 <div id="description"></div>
     19 <div id="console"></div>
     20 <script id="vshader" type="x-shader/x-vertex">
     21 attribute vec4 vPosition;
     22 attribute vec2 texCoord0;
     23 varying vec2 texCoord;
     24 void main()
     25 {
     26    gl_Position = vPosition;
     27    texCoord = texCoord0;
     28 }
     29 </script>
     30 
     31 <script id="fshader" type="x-shader/x-fragment">
     32 precision mediump float;
     33 uniform samplerCube tex;
     34 varying vec2 texCoord;
     35 void main()
     36 {
     37    gl_FragColor = textureCube(tex, normalize(vec3(texCoord, 1)));
     38 }
     39 </script>
     40 <script>
     41 "use strict";
     42 description(document.title);
     43 var wtu = WebGLTestUtils;
     44 var gl = wtu.create3DContext("example");
     45 var program = wtu.setupTexturedQuad(gl);
     46 
     47 function shouldBePowerOfTwo(n, name) {
     48    var power = Math.round(Math.log(n) / Math.log(2));
     49    if (Math.pow(2, power) == n) {
     50        testPassed(name + ' is a power of two.');
     51    } else {
     52        testFailed(name + ' should be a power of two, but was ' + n);
     53    }
     54 }
     55 
     56 // Note: It seems like a reasonable assuption that a 1xN texture size should
     57 // work. Even 1 by 128k is only 512k
     58 var maxSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
     59 debug("advertised max size: " + maxSize);
     60 debug("verifying max size is power-of-two (implied by GLES 2.0 section 3.7.1)");
     61 shouldBePowerOfTwo(maxSize, 'Max size');
     62 var testSize = Math.min(maxSize, 128 * 1024);
     63 var pixels = new Uint8Array(testSize * 4);
     64 for (var ii = 0; ii < testSize; ++ii) {
     65  var off = ii * 4;
     66  pixels[off + 0] = 0;
     67  pixels[off + 1] = 255;
     68  pixels[off + 2] = 128;
     69  pixels[off + 3] = 255;
     70 }
     71 var tex = gl.createTexture();
     72 gl.bindTexture(gl.TEXTURE_2D, tex);
     73 
     74 debug("test " + testSize + "x1");
     75 gl.texImage2D(
     76    gl.TEXTURE_2D, 0, gl.RGBA, testSize, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
     77    pixels);
     78 gl.generateMipmap(gl.TEXTURE_2D);
     79 
     80 wtu.clearAndDrawUnitQuad(gl);
     81 wtu.checkCanvas(gl, [0, 255, 128, 255],
     82                "Should be 0, 255, 128, 255");
     83 debug("test 1x" + testSize);
     84 gl.texImage2D(
     85    gl.TEXTURE_2D, 0, gl.RGBA, 1, testSize, 0, gl.RGBA, gl.UNSIGNED_BYTE,
     86    pixels);
     87 gl.generateMipmap(gl.TEXTURE_2D);
     88 
     89 wtu.clearAndDrawUnitQuad(gl);
     90 wtu.checkCanvas(gl, [0, 255, 128, 255],
     91                "Should be 0, 255, 128, 255");
     92 
     93 var program = wtu.setupProgram(
     94    gl, ['vshader', 'fshader'], ['vPosition', 'texCoord0'], [0, 1]);
     95 
     96 wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors.");
     97 
     98 // NOTE: We can't easily test cube maps because they require width == height
     99 // and we might not have enough memory for maxSize by maxSize texture.
    100 
    101 var successfullyParsed = true;
    102 
    103 </script>
    104 <script src="../../js/js-test-post.js"></script>
    105 
    106 </body>
    107 </html>