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.

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

mercurial