content/canvas/test/webgl-conformance/conformance/textures/texture-formats-test.html

Thu, 15 Jan 2015 21:03:48 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 21:03:48 +0100
branch
TOR_BUG_9701
changeset 11
deefc01c0e14
permissions
-rw-r--r--

Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)

     1 <!--
     2 Copyright (c) 2011 The Chromium Authors. All rights reserved.
     3 Use of this source code is governed by a BSD-style license that can be
     4 found in the LICENSE file.
     5  -->
     6 <!DOCTYPE html>
     7 <html>
     8 <head>
     9 <meta charset="utf-8">
    10 <title>WebGL Texture Format Conformance Tests</title>
    11 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
    12 <script src="../../resources/desktop-gl-constants.js" type="text/javascript"></script>
    13 <script src="../../debug/webgl-debug.js" type="text/javascript"></script>
    14 <script src="../../resources/js-test-pre.js"></script>
    15 <script src="../resources/webgl-test.js"></script>
    16 <script src="../resources/webgl-test-utils.js"></script>
    17 </head>
    18 <body>
    19 <div id="description"></div>
    20 <div id="console"></div>
    21 <canvas id="canvas2d" width="2" height="2" style="width: 50px; height: 50px; border: 1px solid black;"></canvas>
    22 <canvas id="canvas" width="2" height="2" style="width: 100px; height:100px; border: 1px solid black;"> </canvas>
    23 <script>
    24 description("This test ensures WebGL implementations allow the OpenGL ES 2.0 texture formats and do not allow DesktopGL texture formats.");
    26 debug("");
    27 debug("Canvas.getContext");
    29 var wtu = WebGLTestUtils;
    30 var gl = wtu.create3DContext(document.getElementById("canvas"));
    31 if (!gl) {
    32   testFailed("context does not exist");
    33 } else {
    34   testPassed("context exists");
    35   if ("WebGLDebugUtils" in window)
    36     WebGLDebugUtils.init(gl);
    37   else
    38     WebGLDebugUtils = false;
    40   debug("");
    41   debug("Checking texture formats.");
    43   function createTexture(internalFormat, format, opt_border) {
    44       var border = (opt_border === undefined) ? 0 : opt_border;
    45       var tex = gl.createTexture();
    46       gl.bindTexture(gl.TEXTURE_2D, tex);
    47       gl.texImage2D(gl.TEXTURE_2D,
    48                     0,                 // level
    49                     internalFormat,    // internalFormat
    50                     16,                // width
    51                     16,                // height
    52                     border,            // border
    53                     format,            // format
    54                     gl.UNSIGNED_BYTE,  // type
    55                     null);             // data
    56   }
    58   function testValidFormat(internalFormat, formatName) {
    59       createTexture(internalFormat, internalFormat);
    60       glErrorShouldBe(gl, gl.NO_ERROR,
    61                 "was able to create texture of " + formatName);
    62   }
    64   function testInvalidFormat(internalFormat, formatName) {
    65       createTexture(internalFormat, internalFormat);
    66       var err = gl.getError();
    67       if (err == gl.NO_ERROR) {
    68           testFailed("should NOT be able to create texture of type " + formatName);
    69       } else if (err == gl.INVALID_OPERATION) {
    70           testFailed("should return gl.INVALID_ENUM for type " + formatName);
    71       } else if (err == gl.INVALID_ENUM) {
    72           testPassed("not able to create invalid format: " + formatName);
    73       }
    74   }
    76   var invalidEnums = [
    77     '1',
    78     '2',
    79     '3',
    80     '4',
    81     'RGB4',
    82     'RGB5',
    83     'RGB8',
    84     'RGB10',
    85     'RGB12',
    86     'RGB16',
    87     'RGBA2',
    88     'RGBA4',
    89     'RGB5_A1',
    90     'RGBA8',
    91     'RGB10_A2',
    92     'RGBA12',
    93     'RGBA16',
    94     'BGR',
    95     'BGRA',
    96     'ALPHA4_EXT',
    97     'ALPHA8_EXT',
    98     'ALPHA12_EXT',
    99     'ALPHA16_EXT',
   100     'COMPRESSED_ALPHA',
   101     'COMPRESSED_LUMINANCE',
   102     'COMPRESSED_LUMINANCE_ALPHA',
   103     'COMPRESSED_INTENSITY',
   104     'COMPRESSED_RGB',
   105     'COMPRESSED_RGBA',
   106     'DEPTH_COMPONENT16',
   107     'DEPTH_COMPONENT24',
   108     'DEPTH_COMPONENT32',
   109     'LUMINANCE4_EXT',
   110     'LUMINANCE8_EXT',
   111     'LUMINANCE12_EXT',
   112     'LUMINANCE16_EXT',
   113     'LUMINANCE4_ALPHA4_EXT',
   114     'LUMINANCE6_ALPHA2_EXT',
   115     'LUMINANCE8_ALPHA8_EXT',
   116     'LUMINANCE12_ALPHA4_EXT',
   117     'LUMINANCE12_ALPHA12_EXT',
   118     'LUMINANCE16_ALPHA16_EXT',
   119     'INTENSITY_EXT',
   120     'INTENSITY4_EXT',
   121     'INTENSITY8_EXT',
   122     'INTENSITY12_EXT',
   123     'INTENSITY16_EXT',
   124     'RGB4_EXT',
   125     'RGB5_EXT',
   126     'RGB8_EXT',
   127     'RGB10_EXT',
   128     'RGB12_EXT',
   129     'RGB16_EXT',
   130     'RGBA2_EXT',
   131     'RGBA4_EXT',
   132     'RGB5_A1_EXT',
   133     'RGBA8_EXT',
   134     'RGB10_A2_EXT',
   135     'RGBA12_EXT',
   136     'RGBA16_EXT',
   137     'SLUMINANCE_EXT',
   138     'SLUMINANCE8_EXT',
   139     'SLUMINANCE_ALPHA_EXT',
   140     'SLUMINANCE8_ALPHA8_EXT',
   141     'SRGB_EXT',
   142     'SRGB8_EXT',
   143     'SRGB_ALPHA_EXT',
   144     'SRGB8_ALPHA8'
   145   ];
   147   for (var ii = 0; ii < invalidEnums.length; ++ii) {
   148     var formatName = invalidEnums[ii]
   149     if (desktopGL[formatName] === undefined) {
   150       debug("bad format" + formatName)
   151     } else {
   152       testInvalidFormat(desktopGL[formatName], "GL_" + formatName);
   153     }
   154   }
   156   var validEnums = [
   157     'ALPHA',
   158     'RGB',
   159     'RGBA',
   160     'LUMINANCE',
   161     'LUMINANCE_ALPHA'
   162   ];
   164   for (var ii = 0; ii < validEnums.length; ++ii) {
   165     var formatName = validEnums[ii]
   166     testValidFormat(gl[formatName], "gl." + formatName);
   167   }
   169   debug("");
   170   debug("checking non 0 border parameter to gl.TexImage2D");
   171   createTexture(gl['RGBA'], gl['RGBA'], 1);
   172   glErrorShouldBe(gl, gl.INVALID_VALUE,
   173             "non 0 border to gl.TexImage2D should return INVALID_VALUE");
   176   function checkTypes() {
   177     var canvas = document.getElementById("canvas");
   178     gl = wtu.create3DContext(canvas);
   179     var program = wtu.setupTexturedQuad(gl);
   181     gl.disable(gl.DEPTH_TEST);
   182     gl.disable(gl.BLEND);
   184     var tex = gl.createTexture();
   185     gl.bindTexture(gl.TEXTURE_2D, tex);
   186     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
   187     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
   188     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
   190     var loc = gl.getUniformLocation(program, "tex");
   191     gl.uniform1i(loc, 0);
   193     function checkType(r, g, b, a, type, format, buf) {
   194       var typeName = WebGLDebugUtils ? WebGLDebugUtils.glEnumToString(type) : type;
   195       debug("");
   196       debug("checking gl.texImage2D with type: " + typeName);
   197       gl.texImage2D(gl.TEXTURE_2D,
   198                     0,                 // level
   199                     format,            // internalFormat
   200                     2,                 // width
   201                     2,                 // height
   202                     0,                 // border
   203                     format,            // format
   204                     type,              // type
   205                     buf);              // data
   207       glErrorShouldBe(gl, gl.NO_ERROR,
   208                 "gl.texImage2D with " + typeName + " should generate NO_ERROR");
   210       wtu.drawQuad(gl, [255, 0, 0, 255]);
   211       wtu.checkCanvas(gl, [r,g,b,a],
   212                       "texture type " + typeName + " should draw with " +
   213                       r + ", " + g + ", " + b + ", " + a);
   215    }
   216    checkType(0, 255, 0, 255, gl.UNSIGNED_BYTE, gl.RGBA,
   217                     new Uint8Array([
   218            0, 255, 0, 255,
   219            0, 255, 0, 255,
   220            0, 255, 0, 255,
   221            0, 255, 0, 255]));
   222    checkType(0, 0, 255, 255, gl.UNSIGNED_SHORT_4_4_4_4, gl.RGBA,
   223                     new Uint16Array([
   224            255, 255,
   225            255, 255,
   226            255, 255,
   227            255, 255]));
   228    checkType(0, 255, 0, 255, gl.UNSIGNED_SHORT_5_6_5, gl.RGB,
   229                     new Uint16Array([
   230            2016, 2016,
   231            2016, 2016,
   232            2016, 2016,
   233            2016, 2016]));
   234    checkType(0, 0, 255, 255, gl.UNSIGNED_SHORT_5_5_5_1, gl.RGBA,
   235                     new Uint16Array([
   236            63, 63,
   237            63, 63,
   238            63, 63,
   239            63, 63]));
   240   }
   241   checkTypes();
   242 }
   244 debug("");
   245 successfullyParsed = true;
   247 </script>
   248 <script>finishTest();</script>
   250 </body>
   251 </html>

mercurial