content/canvas/test/webgl-conformance/conformance/state/gl-object-get-calls.html

Wed, 31 Dec 2014 07:16:47 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:16:47 +0100
branch
TOR_BUG_9701
changeset 3
141e0f1194b1
permissions
-rw-r--r--

Revert simplistic fix pending revisit of Mozilla integration attempt.

     1 <!--
     2 Copyright (C) 2011 Apple Computer, Inc.  All rights reserved.
     4 Redistribution and use in source and binary forms, with or without
     5 modification, are permitted provided that the following conditions
     6 are met:
     7 1. Redistributions of source code must retain the above copyright
     8    notice, this list of conditions and the following disclaimer.
     9 2. Redistributions in binary form must reproduce the above copyright
    10    notice, this list of conditions and the following disclaimer in the
    11    documentation and/or other materials provided with the distribution.
    13 THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. AS IS AND ANY
    14 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    15 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    16 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    17 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    18 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    19 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    20 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    21 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    22 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    24 -->
    25 <!DOCTYPE html>
    26 <html>
    27 <head>
    28 <meta charset="utf-8">
    29 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
    30 <script src="../../resources/js-test-pre.js"></script>
    31 <script src="../resources/webgl-test.js"></script>
    32 </head>
    33 <body>
    34 <div id="description"></div>
    35 <div id="console"></div>
    37 <script>
    38 description("Test of get calls against GL objects like getBufferParameter, etc.");
    40 function sizeInBytes(type) {
    41   switch (type) {
    42   case gl.BYTE:
    43   case gl.UNSIGNED_BYTE:
    44     return 1;
    45   case gl.SHORT:
    46   case gl.UNSIGNED_SHORT:
    47     return 2;
    48   case gl.INT:
    49   case gl.UNSIGNED_INT:
    50   case gl.FLOAT:
    51     return 4;
    52   default:
    53     throw "unknown type";
    54   }
    55 }
    57 var gl = create3DContext();
    59 var standardVert = loadStandardVertexShader(gl);
    60 var standardFrag = loadStandardFragmentShader(gl);
    61 var standardProgram = gl.createProgram();
    62 gl.attachShader(standardProgram, standardVert);
    63 gl.attachShader(standardProgram, standardFrag);
    64 gl.linkProgram(standardProgram);
    65 var shaders = gl.getAttachedShaders(standardProgram);
    66 shouldBe('shaders.length', '2');
    67 shouldBeTrue('shaders[0] == standardVert && shaders[1] == standardFrag || shaders[1] == standardVert && shaders[0] == standardFrag');
    68 glErrorShouldBe(gl, gl.NO_ERROR);
    69 shouldBeNull('gl.getAttachedShaders(null)');
    70 glErrorShouldBe(gl, gl.INVALID_VALUE);
    71 shouldThrow('gl.getAttachedShaders(standardVert)');
    72 glErrorShouldBe(gl, gl.NO_ERROR);
    74 // Test getBufferParameter
    75 var buffer = gl.createBuffer();
    76 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
    77 gl.bufferData(gl.ARRAY_BUFFER, 16, gl.DYNAMIC_DRAW);
    78 shouldBe('gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE)', '16');
    79 shouldBe('gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE)', 'gl.DYNAMIC_DRAW');
    81 // Test getFramebufferAttachmentParameter
    82 var texture = gl.createTexture();
    83 gl.bindTexture(gl.TEXTURE_2D, texture);
    84 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2, 2, 0, gl.RGBA, gl.UNSIGNED_BYTE,
    85               new Uint8Array([
    86                   0, 0, 0, 255,
    87                   255, 255, 255, 255,
    88                   255, 255, 255, 255,
    89                   0, 0, 0, 255]));
    90 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    91 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    92 gl.bindTexture(gl.TEXTURE_2D, null);
    93 var framebuffer = gl.createFramebuffer();
    94 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
    95 gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
    96 var renderbuffer = gl.createRenderbuffer();
    97 glErrorShouldBe(gl, gl.NO_ERROR);
    98 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
    99 glErrorShouldBe(gl, gl.NO_ERROR);
   100 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 2, 2);
   101 glErrorShouldBe(gl, gl.NO_ERROR);
   102 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);
   103 // FIXME: on some machines (in particular the WebKit commit bots) the
   104 // framebuffer status is FRAMEBUFFER_UNSUPPORTED; more investigation
   105 // is needed why this is the case, because the FBO allocated
   106 // internally by the WebKit implementation has almost identical
   107 // parameters to this one. See https://bugs.webkit.org/show_bug.cgi?id=31843.
   108 shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
   109 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.TEXTURE');
   110 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)', 'texture');
   111 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL)', '0');
   112 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE)', '0');
   114 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.RENDERBUFFER');
   115 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)', 'renderbuffer');
   117 // Test getProgramParameter
   118 shouldBe('gl.getProgramParameter(standardProgram, gl.DELETE_STATUS)', 'false');
   119 shouldBe('gl.getProgramParameter(standardProgram, gl.LINK_STATUS)', 'true');
   120 shouldBe('typeof gl.getProgramParameter(standardProgram, gl.VALIDATE_STATUS)', '"boolean"');
   121 shouldBe('gl.getProgramParameter(standardProgram, gl.ATTACHED_SHADERS)', '2');
   122 shouldBe('gl.getProgramParameter(standardProgram, gl.ACTIVE_ATTRIBUTES)', '2');
   123 shouldBe('gl.getProgramParameter(standardProgram, gl.ACTIVE_UNIFORMS)', '1');
   125 // Test getRenderbufferParameter
   126 shouldBe('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)', '2');
   127 shouldBe('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)', '2');
   128 // Note: we can't test the actual value of the internal format since
   129 // the implementation is allowed to change it.
   130 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT)');
   131 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE)');
   132 var colorbuffer = gl.createRenderbuffer();
   133 glErrorShouldBe(gl, gl.NO_ERROR);
   134 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
   135 glErrorShouldBe(gl, gl.NO_ERROR);
   136 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 2, 2);
   137 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE)');
   138 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE)');
   139 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE)');
   140 shouldBeNonZero('gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE)');
   142 // Test getShaderParameter
   143 shouldBe('gl.getShaderParameter(standardVert, gl.SHADER_TYPE)', 'gl.VERTEX_SHADER');
   144 shouldBe('gl.getShaderParameter(standardVert, gl.DELETE_STATUS)', 'false');
   145 shouldBe('gl.getShaderParameter(standardVert, gl.COMPILE_STATUS)', 'true');
   147 // Test getTexParameter
   148 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
   149 gl.bindTexture(gl.TEXTURE_2D, texture);
   150 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
   151 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
   152 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
   153 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
   154 shouldBe('gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER)', 'gl.NEAREST');
   155 shouldBe('gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER)', 'gl.NEAREST');
   156 shouldBe('gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S)', 'gl.CLAMP_TO_EDGE');
   157 shouldBe('gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T)', 'gl.CLAMP_TO_EDGE');
   159 // Test getUniform with all variants of data types
   160 // Boolean uniform variables
   161 var boolProgram = loadProgram(gl, "../resources/boolUniformShader.vert", "../resources/noopUniformShader.frag");
   162 shouldBe('gl.getProgramParameter(boolProgram, gl.LINK_STATUS)', 'true');
   163 var bvalLoc = gl.getUniformLocation(boolProgram, "bval");
   164 var bval2Loc = gl.getUniformLocation(boolProgram, "bval2");
   165 var bval3Loc = gl.getUniformLocation(boolProgram, "bval3");
   166 var bval4Loc = gl.getUniformLocation(boolProgram, "bval4");
   167 gl.useProgram(boolProgram);
   168 gl.uniform1i(bvalLoc, 1);
   169 gl.uniform2i(bval2Loc, 1, 0);
   170 gl.uniform3i(bval3Loc, 1, 0, 1);
   171 gl.uniform4i(bval4Loc, 1, 0, 1, 0);
   172 glErrorShouldBe(gl, gl.NO_ERROR);
   173 shouldBe('gl.getUniform(boolProgram, bvalLoc)', 'true');
   174 shouldBe('gl.getUniform(boolProgram, bval2Loc)', '[true, false]');
   175 shouldBe('gl.getUniform(boolProgram, bval3Loc)', '[true, false, true]');
   176 shouldBe('gl.getUniform(boolProgram, bval4Loc)', '[true, false, true, false]');
   177 // Integer uniform variables
   178 var intProgram = loadProgram(gl, "../resources/intUniformShader.vert", "../resources/noopUniformShader.frag");
   179 shouldBe('gl.getProgramParameter(intProgram, gl.LINK_STATUS)', 'true');
   180 var ivalLoc = gl.getUniformLocation(intProgram, "ival");
   181 var ival2Loc = gl.getUniformLocation(intProgram, "ival2");
   182 var ival3Loc = gl.getUniformLocation(intProgram, "ival3");
   183 var ival4Loc = gl.getUniformLocation(intProgram, "ival4");
   184 gl.useProgram(intProgram);
   185 gl.uniform1i(ivalLoc, 1);
   186 gl.uniform2i(ival2Loc, 2, 3);
   187 gl.uniform3i(ival3Loc, 4, 5, 6);
   188 gl.uniform4i(ival4Loc, 7, 8, 9, 10);
   189 glErrorShouldBe(gl, gl.NO_ERROR);
   190 shouldBe('gl.getUniform(intProgram, ivalLoc)', '1');
   191 shouldBe('gl.getUniform(intProgram, ival2Loc)', '[2, 3]');
   192 shouldBe('gl.getUniform(intProgram, ival3Loc)', '[4, 5, 6]');
   193 shouldBe('gl.getUniform(intProgram, ival4Loc)', '[7, 8, 9, 10]');
   194 // Float uniform variables
   195 var floatProgram = loadProgram(gl, "../resources/floatUniformShader.vert", "../resources/noopUniformShader.frag");
   196 shouldBe('gl.getProgramParameter(floatProgram, gl.LINK_STATUS)', 'true');
   197 var fvalLoc = gl.getUniformLocation(floatProgram, "fval");
   198 var fval2Loc = gl.getUniformLocation(floatProgram, "fval2");
   199 var fval3Loc = gl.getUniformLocation(floatProgram, "fval3");
   200 var fval4Loc = gl.getUniformLocation(floatProgram, "fval4");
   201 gl.useProgram(floatProgram);
   202 gl.uniform1f(fvalLoc, 11);
   203 gl.uniform2f(fval2Loc, 12, 13);
   204 gl.uniform3f(fval3Loc, 14, 15, 16);
   205 gl.uniform4f(fval4Loc, 17, 18, 19, 20);
   206 glErrorShouldBe(gl, gl.NO_ERROR);
   207 shouldBe('gl.getUniform(floatProgram, fvalLoc)', '11');
   208 shouldBe('gl.getUniform(floatProgram, fval2Loc)', '[12, 13]');
   209 shouldBe('gl.getUniform(floatProgram, fval3Loc)', '[14, 15, 16]');
   210 shouldBe('gl.getUniform(floatProgram, fval4Loc)', '[17, 18, 19, 20]');
   211 // Sampler uniform variables
   212 var samplerProgram = loadProgram(gl, "../resources/noopUniformShader.vert", "../resources/samplerUniformShader.frag");
   213 shouldBe('gl.getProgramParameter(samplerProgram, gl.LINK_STATUS)', 'true');
   214 var s2DValLoc = gl.getUniformLocation(samplerProgram, "s2D");
   215 var sCubeValLoc = gl.getUniformLocation(samplerProgram, "sCube");
   216 gl.useProgram(samplerProgram);
   217 gl.uniform1i(s2DValLoc, 0);
   218 gl.uniform1i(sCubeValLoc, 1);
   219 glErrorShouldBe(gl, gl.NO_ERROR);
   220 shouldBe('gl.getUniform(samplerProgram, s2DValLoc)', '0');
   221 shouldBe('gl.getUniform(samplerProgram, sCubeValLoc)', '1');
   222 // Matrix uniform variables
   223 var matProgram = loadProgram(gl, "../resources/matUniformShader.vert", "../resources/noopUniformShader.frag");
   224 shouldBe('gl.getProgramParameter(matProgram, gl.LINK_STATUS)', 'true');
   225 var mval2Loc = gl.getUniformLocation(matProgram, "mval2");
   226 var mval3Loc = gl.getUniformLocation(matProgram, "mval3");
   227 var mval4Loc = gl.getUniformLocation(matProgram, "mval4");
   228 gl.useProgram(matProgram);
   229 gl.uniformMatrix2fv(mval2Loc, false, [1, 2, 3, 4]);
   230 gl.uniformMatrix3fv(mval3Loc, false, [5, 6, 7, 8, 9, 10, 11, 12, 13]);
   231 gl.uniformMatrix4fv(mval4Loc, false, [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]);
   232 glErrorShouldBe(gl, gl.NO_ERROR);
   233 shouldBe('gl.getUniform(matProgram, mval2Loc)', '[1, 2, 3, 4]');
   234 shouldBe('gl.getUniform(matProgram, mval3Loc)', '[5, 6, 7, 8, 9, 10, 11, 12, 13]');
   235 shouldBe('gl.getUniform(matProgram, mval4Loc)', '[14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]');
   237 // Test getVertexAttrib
   238 var array = new Float32Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
   239 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
   240 gl.bufferData(gl.ARRAY_BUFFER, array, gl.DYNAMIC_DRAW);
   241 // Vertex attribute 0 is special in that it has no current state, so
   242 // fetching GL_CURRENT_VERTEX_ATTRIB generates an error. Use attribute
   243 // 1 for these tests instead.
   244 gl.enableVertexAttribArray(1);
   245 gl.vertexAttribPointer(1, 4, gl.FLOAT, false, 0, 0);
   246 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)', 'buffer');
   247 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_ENABLED)', 'true');
   248 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_SIZE)', '4');
   249 // Stride MUST be the value the user put in.
   250 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_STRIDE)', '0');
   251 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_TYPE)', 'gl.FLOAT');
   252 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_NORMALIZED)', 'false');
   253 gl.vertexAttribPointer(1, 4, gl.FLOAT, false, 36, 12);
   254 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_STRIDE)', '36');
   255 shouldBe('gl.getVertexAttribOffset(1, gl.VERTEX_ATTRIB_ARRAY_POINTER)', '12');
   256 gl.disableVertexAttribArray(1);
   257 shouldBe('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_ENABLED)', 'false');
   258 gl.vertexAttrib4f(1, 5, 6, 7, 8);
   259 shouldBe('gl.getVertexAttrib(1, gl.CURRENT_VERTEX_ATTRIB)', '[5, 6, 7, 8]');
   260 glErrorShouldBe(gl, gl.NO_ERROR);
   262 // Test cases where name == 0
   263 gl.deleteTexture(texture);
   264 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.NONE');
   265 gl.deleteRenderbuffer(renderbuffer);
   266 shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.NONE');
   267 gl.deleteBuffer(buffer);
   268 shouldBeNull('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)');
   269 glErrorShouldBe(gl, gl.NO_ERROR);
   271 successfullyParsed = true;
   272 </script>
   274 <script>finishTest();</script>
   275 </body>
   276 </html>

mercurial