Wed, 31 Dec 2014 07:22:50 +0100
Correct previous dual key logic pending first delivery installment.
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> |