OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head> |
| 4 <script src="../../../resources/testharness.js"></script> |
| 5 <script src="../../../resources/testharnessreport.js"></script> |
| 6 <script src="./resources/webgl-test-utils-full.js"></script> |
| 7 </head> |
| 8 |
| 9 <body> |
| 10 <script> |
| 11 var wtu; |
| 12 var canvas; |
| 13 var gl; |
| 14 var extensionName; |
| 15 var extension; |
| 16 |
| 17 var buffer; |
| 18 var framebuffer; |
| 19 var program; |
| 20 var renderbuffer; |
| 21 var shader; |
| 22 var texture; |
| 23 var uniformLocation; |
| 24 var arrayBuffer; |
| 25 var arrayBufferView |
| 26 var image; |
| 27 var video; |
| 28 var canvas2d; |
| 29 var ctx2d; |
| 30 var imageData; |
| 31 var float32array; |
| 32 var int32array; |
| 33 var OES_vertex_array_object; |
| 34 var vertexArrayObject; |
| 35 |
| 36 async_test(function(t) { |
| 37 wtu = WebGLTestUtils; |
| 38 canvas = new OffscreenCanvas(10, 10); |
| 39 gl = canvas.getContext('webgl'); |
| 40 |
| 41 // call testValidContext() before checking for the extension, because this i
s where we check |
| 42 // for the isContextLost() method, which we want to do regardless of the ext
ension's presence. |
| 43 testValidContext(); |
| 44 |
| 45 extensionName = wtu.getSupportedExtensionWithKnownPrefixes(gl, "WEBGL_lose_c
ontext"); |
| 46 if (!extensionName) { |
| 47 assert_true(false, "Could not find WEBGL_lose_context extension"); |
| 48 } |
| 49 extension = gl.getExtension(extensionName); |
| 50 |
| 51 // need an extension that exposes new API methods. |
| 52 OES_vertex_array_object = wtu.getExtensionWithKnownPrefixes(gl, "OES_vertex_
array_object"); |
| 53 |
| 54 canvas.addEventListener("webglcontextlost", t.step_func_done(function() { |
| 55 testLostContext(); |
| 56 })); |
| 57 |
| 58 // We need to initialize |uniformLocation| before losing context. |
| 59 // Otherwise gl.getUniform() when context is lost will throw. |
| 60 uniformLocation = gl.getUniformLocation(program, "tex"); |
| 61 loseContext(); |
| 62 }, 'Test that WebGL context loss events can be handled with OffscreenCanvas'); |
| 63 |
| 64 function loseContext() |
| 65 { |
| 66 // Note: this will cause the context to be lost, but the |
| 67 // webglcontextlost event listener to be queued. |
| 68 extension.loseContext(); |
| 69 } |
| 70 |
| 71 function compareGLError(glError, evalStr) |
| 72 { |
| 73 var exception; |
| 74 try { |
| 75 eval(evalStr); |
| 76 } catch (e) { |
| 77 exception = e; |
| 78 } |
| 79 if (exception) { |
| 80 assert_true(false, evalStr + " threw exception " + exception); |
| 81 } else { |
| 82 assert_equals(gl.getError(), glError); |
| 83 } |
| 84 } |
| 85 |
| 86 function testValidContext() |
| 87 { |
| 88 assert_false(gl.isContextLost()); |
| 89 |
| 90 arrayBuffer = new ArrayBuffer(4); |
| 91 arrayBufferView = new Int8Array(arrayBuffer); |
| 92 |
| 93 // Generate resources for testing. |
| 94 buffer = gl.createBuffer(); |
| 95 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 96 framebuffer = gl.createFramebuffer(); |
| 97 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); |
| 98 program = wtu.setupSimpleTextureProgram(gl); |
| 99 renderbuffer = gl.createRenderbuffer(); |
| 100 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); |
| 101 shader = gl.createShader(gl.VERTEX_SHADER); |
| 102 texture = gl.createTexture(); |
| 103 gl.bindTexture(gl.TEXTURE_2D, texture); |
| 104 assert_equals(gl.getError(), gl.NO_ERROR); |
| 105 |
| 106 // Test is queries that will later be false |
| 107 compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)"); |
| 108 assert_true(gl.isBuffer(buffer)); |
| 109 assert_true(gl.isEnabled(gl.BLEND)); |
| 110 assert_true(gl.isFramebuffer(framebuffer)); |
| 111 assert_true(gl.isProgram(program)); |
| 112 assert_true(gl.isRenderbuffer(renderbuffer)); |
| 113 assert_true(gl.isShader(shader)); |
| 114 assert_true(gl.isTexture(texture)); |
| 115 } |
| 116 |
| 117 function testLostContext() |
| 118 { |
| 119 // Functions with special return values. |
| 120 assert_true(gl.isContextLost()); |
| 121 assert_equals(gl.getError(), gl.CONTEXT_LOST_WEBGL); |
| 122 assert_equals(gl.getError(), gl.NO_ERROR); |
| 123 assert_equals(gl.checkFramebufferStatus(gl.FRAMEBUFFER), gl.FRAMEBUFFER_UNSU
PPORTED); |
| 124 assert_equals(gl.getAttribLocation(program, 'u_modelViewProjMatrix'), -1); |
| 125 assert_equals(gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER), 0
); |
| 126 |
| 127 // Test the extension itself. |
| 128 compareGLError(gl.INVALID_OPERATION, "extension.loseContext()"); |
| 129 |
| 130 image = document.createElement("img"); |
| 131 video = document.createElement("video"); |
| 132 canvas2d = document.createElement("canvas"); |
| 133 ctx2d = canvas2d.getContext("2d"); |
| 134 imageData = ctx2d.createImageData(1, 1); |
| 135 float32array = new Float32Array(1); |
| 136 int32array = new Int32Array(1); |
| 137 |
| 138 // Test a set of functions that should not generate any GL error |
| 139 compareGLError(gl.NO_ERROR, "gl.activeTexture(gl.TEXTURE0)"); |
| 140 compareGLError(gl.NO_ERROR, "gl.attachShader(program, shader)"); |
| 141 compareGLError(gl.NO_ERROR, "gl.bindBuffer(gl.ARRAY_BUFFER, buffer)"); |
| 142 compareGLError(gl.NO_ERROR, "gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)
"); |
| 143 compareGLError(gl.NO_ERROR, "gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuff
er)"); |
| 144 compareGLError(gl.NO_ERROR, "gl.bindTexture(gl.TEXTURE_2D, texture)"); |
| 145 compareGLError(gl.NO_ERROR, "gl.blendColor(1.0, 1.0, 1.0, 1.0)"); |
| 146 compareGLError(gl.NO_ERROR, "gl.blendEquation(gl.FUNC_ADD)"); |
| 147 compareGLError(gl.NO_ERROR, "gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_A
DD)"); |
| 148 compareGLError(gl.NO_ERROR, "gl.blendFunc(gl.ONE, gl.ONE)"); |
| 149 compareGLError(gl.NO_ERROR, "gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl
.ONE)"); |
| 150 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRA
W)"); |
| 151 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView,
gl.STATIC_DRAW)"); |
| 152 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl.
STATIC_DRAW)"); |
| 153 compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffe
rView)"); |
| 154 compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffe
r)"); |
| 155 compareGLError(gl.NO_ERROR, "gl.clear(gl.COLOR_BUFFER_BIT)"); |
| 156 compareGLError(gl.NO_ERROR, "gl.clearColor(1, 1, 1, 1)"); |
| 157 compareGLError(gl.NO_ERROR, "gl.clearDepth(1)"); |
| 158 compareGLError(gl.NO_ERROR, "gl.clearStencil(0)"); |
| 159 compareGLError(gl.NO_ERROR, "gl.colorMask(1, 1, 1, 1)"); |
| 160 compareGLError(gl.NO_ERROR, "gl.compileShader(shader)"); |
| 161 compareGLError(gl.NO_ERROR, "gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0,
0, 0, 0, 0)"); |
| 162 compareGLError(gl.NO_ERROR, "gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0,
0, 0, 0)"); |
| 163 compareGLError(gl.NO_ERROR, "gl.cullFace(gl.FRONT)"); |
| 164 compareGLError(gl.NO_ERROR, "gl.deleteBuffer(buffer)"); |
| 165 compareGLError(gl.NO_ERROR, "gl.deleteFramebuffer(framebuffer)"); |
| 166 compareGLError(gl.NO_ERROR, "gl.deleteProgram(program)"); |
| 167 compareGLError(gl.NO_ERROR, "gl.deleteRenderbuffer(renderbuffer)"); |
| 168 compareGLError(gl.NO_ERROR, "gl.deleteShader(shader)"); |
| 169 compareGLError(gl.NO_ERROR, "gl.deleteTexture(texture)"); |
| 170 compareGLError(gl.NO_ERROR, "gl.depthFunc(gl.NEVER)"); |
| 171 compareGLError(gl.NO_ERROR, "gl.depthMask(0)"); |
| 172 compareGLError(gl.NO_ERROR, "gl.depthRange(0, 1)"); |
| 173 compareGLError(gl.NO_ERROR, "gl.detachShader(program, shader)"); |
| 174 compareGLError(gl.NO_ERROR, "gl.disable(gl.BLEND)"); |
| 175 compareGLError(gl.NO_ERROR, "gl.disableVertexAttribArray(0)"); |
| 176 compareGLError(gl.NO_ERROR, "gl.drawArrays(gl.POINTS, 0, 0)"); |
| 177 compareGLError(gl.NO_ERROR, "gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT
, 0)"); |
| 178 compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)"); |
| 179 compareGLError(gl.NO_ERROR, "gl.enableVertexAttribArray(0)"); |
| 180 compareGLError(gl.NO_ERROR, "gl.finish()"); |
| 181 compareGLError(gl.NO_ERROR, "gl.flush()"); |
| 182 compareGLError(gl.NO_ERROR, "gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.C
OLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer)"); |
| 183 compareGLError(gl.NO_ERROR, "gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLO
R_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)"); |
| 184 compareGLError(gl.NO_ERROR, "gl.frontFace(gl.CW)"); |
| 185 compareGLError(gl.NO_ERROR, "gl.generateMipmap(gl.TEXTURE_2D)"); |
| 186 compareGLError(gl.NO_ERROR, "gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST)"); |
| 187 compareGLError(gl.NO_ERROR, "gl.lineWidth(0)"); |
| 188 compareGLError(gl.NO_ERROR, "gl.linkProgram(program)"); |
| 189 compareGLError(gl.NO_ERROR, "gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0)"); |
| 190 compareGLError(gl.NO_ERROR, "gl.polygonOffset(0, 0)"); |
| 191 compareGLError(gl.NO_ERROR, "gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_
BYTE, arrayBufferView)"); |
| 192 compareGLError(gl.NO_ERROR, "gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA
4, 0, 0)"); |
| 193 compareGLError(gl.NO_ERROR, "gl.sampleCoverage(0, 0)"); |
| 194 compareGLError(gl.NO_ERROR, "gl.scissor(0, 0, 0, 0)"); |
| 195 compareGLError(gl.NO_ERROR, "gl.shaderSource(shader, '')"); |
| 196 compareGLError(gl.NO_ERROR, "gl.stencilFunc(gl.NEVER, 0, 0)"); |
| 197 compareGLError(gl.NO_ERROR, "gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0
)"); |
| 198 compareGLError(gl.NO_ERROR, "gl.stencilMask(0)"); |
| 199 compareGLError(gl.NO_ERROR, "gl.stencilMaskSeparate(gl.FRONT, 0)"); |
| 200 compareGLError(gl.NO_ERROR, "gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)"); |
| 201 compareGLError(gl.NO_ERROR, "gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP
, gl.KEEP)"); |
| 202 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0,
0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)"); |
| 203 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB
A, gl.UNSIGNED_BYTE, imageData)"); |
| 204 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB
A, gl.UNSIGNED_BYTE, image)"); |
| 205 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB
A, gl.UNSIGNED_BYTE, canvas2d)"); |
| 206 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB
A, gl.UNSIGNED_BYTE, video)"); |
| 207 compareGLError(gl.NO_ERROR, "gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_
FILTER, gl.NEAREST)"); |
| 208 compareGLError(gl.NO_ERROR, "gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_
FILTER, gl.NEAREST)"); |
| 209 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0,
gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)"); |
| 210 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB
A, gl.UNSIGNED_BYTE, imageData)"); |
| 211 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB
A, gl.UNSIGNED_BYTE, image)"); |
| 212 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB
A, gl.UNSIGNED_BYTE, canvas2d)"); |
| 213 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB
A, gl.UNSIGNED_BYTE, video)"); |
| 214 compareGLError(gl.NO_ERROR, "gl.uniform1f(uniformLocation, 0)"); |
| 215 compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, float32array)"); |
| 216 compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, [0])"); |
| 217 compareGLError(gl.NO_ERROR, "gl.uniform1i(uniformLocation, 0)"); |
| 218 compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, int32array)"); |
| 219 compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, [0])"); |
| 220 compareGLError(gl.NO_ERROR, "gl.uniform2f(uniformLocation, 0, 0)"); |
| 221 compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, float32array)"); |
| 222 compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, [0, 0])"); |
| 223 compareGLError(gl.NO_ERROR, "gl.uniform2i(uniformLocation, 0, 0)"); |
| 224 compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, int32array)"); |
| 225 compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, [0, 0])"); |
| 226 compareGLError(gl.NO_ERROR, "gl.uniform3f(uniformLocation, 0, 0, 0)"); |
| 227 compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, float32array)"); |
| 228 compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, [0, 0, 0])"); |
| 229 compareGLError(gl.NO_ERROR, "gl.uniform3i(uniformLocation, 0, 0, 0)"); |
| 230 compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, int32array)"); |
| 231 compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, [0, 0, 0])"); |
| 232 compareGLError(gl.NO_ERROR, "gl.uniform4f(uniformLocation, 0, 0, 0, 0)"); |
| 233 compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, float32array)"); |
| 234 compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, [0, 0, 0, 0])"); |
| 235 compareGLError(gl.NO_ERROR, "gl.uniform4i(uniformLocation, 0, 0, 0, 0)"); |
| 236 compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, int32array)"); |
| 237 compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, [0, 0, 0, 0])"); |
| 238 compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation, false, flo
at32array)"); |
| 239 compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation, false, [0,
0, 0, 0])"); |
| 240 compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation, false, flo
at32array)"); |
| 241 compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation, false, [0,
0, 0, 0, 0, 0, 0, 0, 0])"); |
| 242 compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation, false, flo
at32array)"); |
| 243 compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation, false, [0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"); |
| 244 compareGLError(gl.NO_ERROR, "gl.useProgram(program)"); |
| 245 compareGLError(gl.NO_ERROR, "gl.validateProgram(program)"); |
| 246 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1f(0, 0)"); |
| 247 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, float32array)"); |
| 248 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, [0])"); |
| 249 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2f(0, 0, 0)"); |
| 250 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, float32array)"); |
| 251 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, [0, 0])"); |
| 252 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3f(0, 0, 0, 0)"); |
| 253 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, float32array)"); |
| 254 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, [0, 0, 0])"); |
| 255 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4f(0, 0, 0, 0, 0)"); |
| 256 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, float32array)"); |
| 257 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, [0, 0, 0, 0])"); |
| 258 compareGLError(gl.NO_ERROR, "gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0
, 0)"); |
| 259 compareGLError(gl.NO_ERROR, "gl.viewport(0, 0, 0, 0)"); |
| 260 |
| 261 // Test a set of functions that should return null |
| 262 assert_equals(gl.createBuffer(), null); |
| 263 assert_equals(gl.createFramebuffer(), null); |
| 264 assert_equals(gl.createProgram(), null); |
| 265 assert_equals(gl.createRenderbuffer(), null); |
| 266 assert_equals(gl.createShader(gl.GL_VERTEX_SHADER), null); |
| 267 assert_equals(gl.createTexture(), null); |
| 268 assert_equals(gl.getActiveAttrib(program, 0), null); |
| 269 assert_equals(gl.getActiveUniform(program, 0), null); |
| 270 assert_equals(gl.getAttachedShaders(program), null); |
| 271 assert_equals(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE), null); |
| 272 assert_equals(gl.getContextAttributes(), null); |
| 273 assert_equals(gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_
ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME), null); |
| 274 assert_equals(gl.getParameter(gl.CURRENT_PROGRAM), null); |
| 275 assert_equals(gl.getProgramInfoLog(program), null); |
| 276 assert_equals(gl.getProgramParameter(program, gl.LINK_STATUS), null); |
| 277 assert_equals(gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_W
IDTH), null); |
| 278 assert_equals(gl.getShaderInfoLog(shader), null); |
| 279 assert_equals(gl.getShaderParameter(shader, gl.SHADER_TYPE), null); |
| 280 assert_equals(gl.getShaderSource(shader), null); |
| 281 assert_equals(gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S), null); |
| 282 assert_equals(gl.getUniform(program, uniformLocation), null); |
| 283 assert_equals(gl.getUniformLocation(program, 'vPosition'), null); |
| 284 assert_equals(gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING),
null); |
| 285 assert_equals(gl.getSupportedExtensions(), null); |
| 286 assert_equals(eval("gl.getExtension('" + extensionName + "')"), null); |
| 287 |
| 288 // "Is" queries should all return false. |
| 289 assert_false(gl.isBuffer(buffer)); |
| 290 assert_false(gl.isEnabled(gl.BLEND)); |
| 291 assert_false(gl.isFramebuffer(framebuffer)); |
| 292 assert_false(gl.isProgram(program)); |
| 293 assert_false(gl.isRenderbuffer(renderbuffer)); |
| 294 assert_false(gl.isShader(shader)); |
| 295 assert_false(gl.isTexture(texture)); |
| 296 |
| 297 assert_equals(gl.getError(), gl.NO_ERROR); |
| 298 |
| 299 // test extensions |
| 300 if (OES_vertex_array_object) { |
| 301 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.bindVertexArrayOES(
vertexArrayObject)"); |
| 302 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.isVertexArrayOES(ve
rtexArrayObject)"); |
| 303 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.deleteVertexArrayOE
S(vertexArrayObject)"); |
| 304 assert_equals(OES_vertex_array_object.createVertexArrayOES(), null); |
| 305 } |
| 306 } |
| 307 |
| 308 </script> |
| 309 </body> |
| 310 </html> |
OLD | NEW |