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 <script id="myWorker" type="text/worker"> |
| 10 var canvas; |
| 11 var gl; |
| 12 var extensionName; |
| 13 var extension; |
| 14 |
| 15 var buffer; |
| 16 var framebuffer; |
| 17 var renderbuffer; |
| 18 var program; |
| 19 var shader; |
| 20 var texture; |
| 21 var uniformLocation; |
| 22 var arrayBuffer; |
| 23 var arrayBufferView; |
| 24 var imageData; |
| 25 var float32array; |
| 26 var int32array; |
| 27 var OES_vertex_array_object; |
| 28 var vertexArrayObject; |
| 29 |
| 30 var validContextResults; |
| 31 var lostContextResults; |
| 32 |
| 33 function compareGLError(glError, evalStr) |
| 34 { |
| 35 var exception; |
| 36 try { |
| 37 eval(evalStr); |
| 38 } catch (e) { |
| 39 exception = e; |
| 40 } |
| 41 if (exception) { |
| 42 return false; |
| 43 } else { |
| 44 if (gl.getError() == glError) |
| 45 return true; |
| 46 return false; |
| 47 } |
| 48 } |
| 49 |
| 50 var simpleTextureVertexShader = [ |
| 51 'attribute vec4 vPosition;', |
| 52 'attribute vec2 texCoord0;', |
| 53 'varying vec2 texCoord;', |
| 54 'void main() {', |
| 55 ' gl_Position = vPosition;', |
| 56 ' texCoord = texCoord0;', |
| 57 '}'].join('\n'); |
| 58 |
| 59 var simpleTextureFragmentShader = [ |
| 60 'precision mediump float;', |
| 61 'uniform sampler2D tex;', |
| 62 'varying vec2 texCoord;', |
| 63 'void main() {', |
| 64 ' gl_FragData[0] = texture2D(tex, texCoord);', |
| 65 '}'].join('\n'); |
| 66 |
| 67 function getShader(gl, shaderStr, type) |
| 68 { |
| 69 var shader = gl.createShader(type); |
| 70 gl.shaderSource(shader, shaderStr); |
| 71 gl.compileShader(shader); |
| 72 |
| 73 if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) |
| 74 return null; |
| 75 return shader; |
| 76 } |
| 77 |
| 78 function setupProgram(gl, shaders, opt_attribs, opt_locations) |
| 79 { |
| 80 var vertexShader = getShader(gl, simpleTextureVertexShader, gl.VERTEX_SHADER); |
| 81 var fragmentShader = getShader(gl, simpleTextureFragmentShader, gl.FRAGMENT_SH
ADER); |
| 82 var program = gl.createProgram(); |
| 83 gl.attachShader(program, vertexShader); |
| 84 gl.attachShader(program, fragmentShader); |
| 85 |
| 86 if (opt_attribs) { |
| 87 for (var ii = 0; ii < opt_attribs.length; ++ii) { |
| 88 gl.bindAttribLocation( |
| 89 program, |
| 90 opt_locations ? opt_locations[ii] : ii, |
| 91 opt_attribs[ii]); |
| 92 } |
| 93 } |
| 94 gl.linkProgram(program); |
| 95 |
| 96 // Check the link status |
| 97 var linked = gl.getProgramParameter(program, gl.LINK_STATUS); |
| 98 if (!linked) { |
| 99 // something went wrong with the link |
| 100 gl.deleteProgram(program); |
| 101 return null; |
| 102 } |
| 103 gl.useProgram(program); |
| 104 return program; |
| 105 } |
| 106 |
| 107 function setupSimpleTextureProgram(gl, opt_positionLocation, opt_texcoordLocatio
n) |
| 108 { |
| 109 opt_positionLocation = opt_positionLocation || 0; |
| 110 opt_texcoordLocation = opt_texcoordLocation || 1; |
| 111 return setupProgram(gl, |
| 112 [simpleTextureVertexShader, simpleTextureFragmentShader], |
| 113 ['vPosition', 'texCoord0'], |
| 114 [opt_positionLocation, opt_texcoordLocation]); |
| 115 } |
| 116 |
| 117 function testValidContext() |
| 118 { |
| 119 // Purposely make all results true |
| 120 var re1 = !(gl.isContextLost()); |
| 121 |
| 122 arrayBuffer = new ArrayBuffer(4); |
| 123 arrayBufferView = new Int8Array(arrayBuffer); |
| 124 |
| 125 // Generate resources for testing. |
| 126 buffer = gl.createBuffer(); |
| 127 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
| 128 framebuffer = gl.createFramebuffer(); |
| 129 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer); |
| 130 program = setupSimpleTextureProgram(gl); |
| 131 renderbuffer = gl.createRenderbuffer(); |
| 132 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer); |
| 133 shader = gl.createShader(gl.VERTEX_SHADER); |
| 134 texture = gl.createTexture(); |
| 135 gl.bindTexture(gl.TEXTURE_2D, texture); |
| 136 var re2 = (gl.getError() == gl.NO_ERROR); |
| 137 |
| 138 // Test is queries that will later be false |
| 139 var re3 = compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)"); |
| 140 var re4 = gl.isBuffer(buffer); |
| 141 var re5 = gl.isEnabled(gl.BLEND); |
| 142 var re6 = gl.isFramebuffer(framebuffer); |
| 143 var re7 = gl.isProgram(program); |
| 144 var re8 = gl.isRenderbuffer(renderbuffer); |
| 145 var re9 = gl.isShader(shader); |
| 146 var re10 = gl.isTexture(texture); |
| 147 |
| 148 validContextResults = [re1, re2, re3, re4, re5, re6, re7, re8, re9, re10]; |
| 149 } |
| 150 |
| 151 function loseContext() |
| 152 { |
| 153 // Note: this will cause the context to be lost, but the |
| 154 // webglcontextlost event listener to be queued. |
| 155 extension.loseContext(); |
| 156 } |
| 157 |
| 158 function testLostContext() |
| 159 { |
| 160 // Purposely make all results true |
| 161 // Functions with special return values. |
| 162 var re1 = gl.isContextLost(); |
| 163 var re2 = (gl.getError() == gl.CONTEXT_LOST_WEBGL); |
| 164 var re3 = (gl.getError() == gl.NO_ERROR); |
| 165 var re4 = (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_UNSUP
PORTED); |
| 166 var re5 = (gl.getAttribLocation(program, 'u_modelViewProjMatrix') == -1); |
| 167 var re6 = (gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER) == 0)
; |
| 168 |
| 169 // Test the extension itself. |
| 170 var re7 = compareGLError(gl.INVALID_OPERATION, "extension.loseContext()"); |
| 171 |
| 172 imageData = new ImageData(1, 1); |
| 173 float32array = new Float32Array(1); |
| 174 int32array = new Int32Array(1); |
| 175 |
| 176 // Test a set of functions that should not generate any GL error |
| 177 var re8 = compareGLError(gl.NO_ERROR, "gl.activeTexture(gl.TEXTURE0)"); |
| 178 var re9 = compareGLError(gl.NO_ERROR, "gl.attachShader(program, shader)"); |
| 179 var re10 = compareGLError(gl.NO_ERROR, "gl.bindBuffer(gl.ARRAY_BUFFER, buffe
r)"); |
| 180 var re11 = compareGLError(gl.NO_ERROR, "gl.bindFramebuffer(gl.FRAMEBUFFER, f
ramebuffer)"); |
| 181 var re12 = compareGLError(gl.NO_ERROR, "gl.bindRenderbuffer(gl.RENDERBUFFER,
renderbuffer)"); |
| 182 var re13 = compareGLError(gl.NO_ERROR, "gl.bindTexture(gl.TEXTURE_2D, textur
e)"); |
| 183 var re14 = compareGLError(gl.NO_ERROR, "gl.blendColor(1.0, 1.0, 1.0, 1.0)"); |
| 184 var re15 = compareGLError(gl.NO_ERROR, "gl.blendEquation(gl.FUNC_ADD)"); |
| 185 var re16 = compareGLError(gl.NO_ERROR, "gl.blendEquationSeparate(gl.FUNC_ADD
, gl.FUNC_ADD)"); |
| 186 var re17 = compareGLError(gl.NO_ERROR, "gl.blendFunc(gl.ONE, gl.ONE)"); |
| 187 var re18 = compareGLError(gl.NO_ERROR, "gl.blendFuncSeparate(gl.ONE, gl.ONE,
gl.ONE, gl.ONE)"); |
| 188 var re19 = compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, 0, gl
.STATIC_DRAW)"); |
| 189 var re20 = compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, array
BufferView, gl.STATIC_DRAW)"); |
| 190 var re21 = compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, array
Buffer, gl.STATIC_DRAW)"); |
| 191 var re22 = compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0,
arrayBufferView)"); |
| 192 var re23 = compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0,
arrayBuffer)"); |
| 193 var re24 = compareGLError(gl.NO_ERROR, "gl.clear(gl.COLOR_BUFFER_BIT)"); |
| 194 var re25 = compareGLError(gl.NO_ERROR, "gl.clearColor(1, 1, 1, 1)"); |
| 195 var re26 = compareGLError(gl.NO_ERROR, "gl.clearDepth(1)"); |
| 196 var re27 = compareGLError(gl.NO_ERROR, "gl.clearStencil(0)"); |
| 197 var re28 = compareGLError(gl.NO_ERROR, "gl.colorMask(1, 1, 1, 1)"); |
| 198 var re29 = compareGLError(gl.NO_ERROR, "gl.compileShader(shader)"); |
| 199 var re30 = compareGLError(gl.NO_ERROR, "gl.copyTexImage2D(gl.TEXTURE_2D, 0,
gl.RGBA, 0, 0, 0, 0, 0)"); |
| 200 var re31 = compareGLError(gl.NO_ERROR, "gl.copyTexSubImage2D(gl.TEXTURE_2D,
0, 0, 0, 0, 0, 0, 0)"); |
| 201 var re32 = compareGLError(gl.NO_ERROR, "gl.cullFace(gl.FRONT)"); |
| 202 var re33 = compareGLError(gl.NO_ERROR, "gl.deleteBuffer(buffer)"); |
| 203 var re34 = compareGLError(gl.NO_ERROR, "gl.deleteFramebuffer(framebuffer)"); |
| 204 var re35 = compareGLError(gl.NO_ERROR, "gl.deleteProgram(program)"); |
| 205 var re36 = compareGLError(gl.NO_ERROR, "gl.deleteRenderbuffer(renderbuffer)"
); |
| 206 var re37 = compareGLError(gl.NO_ERROR, "gl.deleteShader(shader)"); |
| 207 var re38 = compareGLError(gl.NO_ERROR, "gl.deleteTexture(texture)"); |
| 208 var re39 = compareGLError(gl.NO_ERROR, "gl.depthFunc(gl.NEVER)"); |
| 209 var re40 = compareGLError(gl.NO_ERROR, "gl.depthMask(0)"); |
| 210 var re41 = compareGLError(gl.NO_ERROR, "gl.depthRange(0, 1)"); |
| 211 var re42 = compareGLError(gl.NO_ERROR, "gl.detachShader(program, shader)"); |
| 212 var re43 = compareGLError(gl.NO_ERROR, "gl.disable(gl.BLEND)"); |
| 213 var re44 = compareGLError(gl.NO_ERROR, "gl.disableVertexAttribArray(0)"); |
| 214 var re45 = compareGLError(gl.NO_ERROR, "gl.drawArrays(gl.POINTS, 0, 0)"); |
| 215 var re46 = compareGLError(gl.NO_ERROR, "gl.drawElements(gl.POINTS, 0, gl.UNS
IGNED_SHORT, 0)"); |
| 216 var re47 = compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)"); |
| 217 var re48 = compareGLError(gl.NO_ERROR, "gl.enableVertexAttribArray(0)"); |
| 218 var re49 = compareGLError(gl.NO_ERROR, "gl.finish()"); |
| 219 var re50 = compareGLError(gl.NO_ERROR, "gl.flush()"); |
| 220 var re51 = compareGLError(gl.NO_ERROR, "gl.framebufferRenderbuffer(gl.FRAMEB
UFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer)"); |
| 221 var re52 = compareGLError(gl.NO_ERROR, "gl.framebufferTexture2D(gl.FRAMEBUFF
ER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)"); |
| 222 var re53 = compareGLError(gl.NO_ERROR, "gl.frontFace(gl.CW)"); |
| 223 var re54 = compareGLError(gl.NO_ERROR, "gl.generateMipmap(gl.TEXTURE_2D)"); |
| 224 var re55 = compareGLError(gl.NO_ERROR, "gl.hint(gl.GENERATE_MIPMAP_HINT, gl.
FASTEST)"); |
| 225 var re56 = compareGLError(gl.NO_ERROR, "gl.lineWidth(0)"); |
| 226 var re57 = compareGLError(gl.NO_ERROR, "gl.linkProgram(program)"); |
| 227 var re58 = compareGLError(gl.NO_ERROR, "gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBG
L, 0)"); |
| 228 var re59 = compareGLError(gl.NO_ERROR, "gl.polygonOffset(0, 0)"); |
| 229 var re60 = compareGLError(gl.NO_ERROR, "gl.readPixels(0, 0, 0, 0, gl.RGBA, g
l.UNSIGNED_BYTE, arrayBufferView)"); |
| 230 var re61 = compareGLError(gl.NO_ERROR, "gl.renderbufferStorage(gl.RENDERBUFF
ER, gl.RGBA4, 0, 0)"); |
| 231 var re62 = compareGLError(gl.NO_ERROR, "gl.sampleCoverage(0, 0)"); |
| 232 var re63 = compareGLError(gl.NO_ERROR, "gl.scissor(0, 0, 0, 0)"); |
| 233 var re64 = compareGLError(gl.NO_ERROR, "gl.shaderSource(shader, '')"); |
| 234 var re65 = compareGLError(gl.NO_ERROR, "gl.stencilFunc(gl.NEVER, 0, 0)"); |
| 235 var re66 = compareGLError(gl.NO_ERROR, "gl.stencilFuncSeparate(gl.FRONT, gl.
NEVER, 0, 0)"); |
| 236 var re67 = compareGLError(gl.NO_ERROR, "gl.stencilMask(0)"); |
| 237 var re68 = compareGLError(gl.NO_ERROR, "gl.stencilMaskSeparate(gl.FRONT, 0)"
); |
| 238 var re69 = compareGLError(gl.NO_ERROR, "gl.stencilOp(gl.KEEP, gl.KEEP, gl.KE
EP)"); |
| 239 var re70 = compareGLError(gl.NO_ERROR, "gl.stencilOpSeparate(gl.FRONT, gl.KE
EP, gl.KEEP, gl.KEEP)"); |
| 240 var re71 = compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.R
GBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)"); |
| 241 var re72 = compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.R
GBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData)"); |
| 242 var re73 = compareGLError(gl.NO_ERROR, "gl.texParameterf(gl.TEXTURE_2D, gl.T
EXTURE_MIN_FILTER, gl.NEAREST)"); |
| 243 var re74 = compareGLError(gl.NO_ERROR, "gl.texParameteri(gl.TEXTURE_2D, gl.T
EXTURE_MIN_FILTER, gl.NEAREST)"); |
| 244 var re75 = compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0
, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)"); |
| 245 var re76 = compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0
, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData)"); |
| 246 var re77 = compareGLError(gl.NO_ERROR, "gl.uniform1f(uniformLocation, 0)"); |
| 247 var re78 = compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, float
32array)"); |
| 248 var re79 = compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, [0])"
); |
| 249 var re80 = compareGLError(gl.NO_ERROR, "gl.uniform1i(uniformLocation, 0)"); |
| 250 var re81 = compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, int32
array)"); |
| 251 var re82 = compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, [0])"
); |
| 252 var re83 = compareGLError(gl.NO_ERROR, "gl.uniform2f(uniformLocation, 0, 0)"
); |
| 253 var re84 = compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, float
32array)"); |
| 254 var re85 = compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, [0, 0
])"); |
| 255 var re86 = compareGLError(gl.NO_ERROR, "gl.uniform2i(uniformLocation, 0, 0)"
); |
| 256 var re87 = compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, int32
array)"); |
| 257 var re88 = compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, [0, 0
])"); |
| 258 var re89 = compareGLError(gl.NO_ERROR, "gl.uniform3f(uniformLocation, 0, 0,
0)"); |
| 259 var re90 = compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, float
32array)"); |
| 260 var re91 = compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, [0, 0
, 0])"); |
| 261 var re92 = compareGLError(gl.NO_ERROR, "gl.uniform3i(uniformLocation, 0, 0,
0)"); |
| 262 var re93 = compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, int32
array)"); |
| 263 var re94 = compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, [0, 0
, 0])"); |
| 264 var re95 = compareGLError(gl.NO_ERROR, "gl.uniform4f(uniformLocation, 0, 0,
0, 0)"); |
| 265 var re96 = compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, float
32array)"); |
| 266 var re97 = compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, [0, 0
, 0, 0])"); |
| 267 var re98 = compareGLError(gl.NO_ERROR, "gl.uniform4i(uniformLocation, 0, 0,
0, 0)"); |
| 268 var re99 = compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, int32
array)"); |
| 269 var re100 = compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, [0,
0, 0, 0])"); |
| 270 var re101 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation
, false, float32array)"); |
| 271 var re102 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation
, false, [0, 0, 0, 0])"); |
| 272 var re103 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation
, false, float32array)"); |
| 273 var re104 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation
, false, [0, 0, 0, 0, 0, 0, 0, 0, 0])"); |
| 274 var re105 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation
, false, float32array)"); |
| 275 var re106 = compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation
, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"); |
| 276 var re107 = compareGLError(gl.NO_ERROR, "gl.useProgram(program)"); |
| 277 var re108 = compareGLError(gl.NO_ERROR, "gl.validateProgram(program)"); |
| 278 var re109 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib1f(0, 0)"); |
| 279 var re110 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, float32array)
"); |
| 280 var re111 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, [0])"); |
| 281 var re112 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib2f(0, 0, 0)"); |
| 282 var re113 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, float32array)
"); |
| 283 var re114 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, [0, 0])"); |
| 284 var re115 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib3f(0, 0, 0, 0)"); |
| 285 var re116 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, float32array)
"); |
| 286 var re117 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, [0, 0, 0])"); |
| 287 var re118 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib4f(0, 0, 0, 0, 0)"); |
| 288 var re119 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, float32array)
"); |
| 289 var re120 = compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, [0, 0, 0, 0])
"); |
| 290 var re121 = compareGLError(gl.NO_ERROR, "gl.vertexAttribPointer(0, 0, gl.FLO
AT, false, 0, 0)"); |
| 291 var re122 = compareGLError(gl.NO_ERROR, "gl.viewport(0, 0, 0, 0)"); |
| 292 |
| 293 // Test a set of functions that should return null |
| 294 var re123 = (gl.createBuffer() == null); |
| 295 var re124 = (gl.createFramebuffer() == null); |
| 296 var re125 = (gl.createProgram() == null); |
| 297 var re126 = (gl.createRenderbuffer() == null); |
| 298 var re127 = (gl.createShader(gl.GL_VERTEX_SHADER) == null); |
| 299 var re128 = (gl.createTexture() == null); |
| 300 var re129 = (gl.getActiveAttrib(program, 0) == null); |
| 301 var re130 = (gl.getActiveUniform(program, 0) == null); |
| 302 var re131 = (gl.getAttachedShaders(program) == null); |
| 303 var re132 = (gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE) == null)
; |
| 304 var re133 = (gl.getContextAttributes() == null); |
| 305 var re134 = (gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_A
TTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) == null); |
| 306 var re135 = (gl.getParameter(gl.CURRENT_PROGRAM) == null); |
| 307 var re136 = (gl.getProgramInfoLog(program) == null); |
| 308 var re137 = (gl.getProgramParameter(program, gl.LINK_STATUS) == null); |
| 309 var re138 = (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WI
DTH) == null); |
| 310 var re139 = (gl.getShaderInfoLog(shader) == null); |
| 311 var re140 = (gl.getShaderParameter(shader, gl.SHADER_TYPE) == null); |
| 312 var re141 = (gl.getShaderSource(shader) == null); |
| 313 var re142 = (gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S) == null); |
| 314 var re143 = (gl.getUniform(program, uniformLocation) == null); |
| 315 var re144 = (gl.getUniformLocation(program, 'vPosition') == null); |
| 316 var re145 = (gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) ==
null); |
| 317 var re146 = (gl.getSupportedExtensions() == null); |
| 318 var re147 = (eval("gl.getExtension('" + extensionName + "')") == null); |
| 319 |
| 320 // "Is" queries should all return false. |
| 321 var re148 = !(gl.isBuffer(buffer)); |
| 322 var re149 = !(gl.isEnabled(gl.BLEND)); |
| 323 var re150 = !(gl.isFramebuffer(framebuffer)); |
| 324 var re151 = !(gl.isProgram(program)); |
| 325 var re152 = !(gl.isRenderbuffer(renderbuffer)); |
| 326 var re153 = !(gl.isShader(shader)); |
| 327 var re154 = !(gl.isTexture(texture)); |
| 328 |
| 329 var re155 = (gl.getError() == gl.NO_ERROR); |
| 330 |
| 331 // test extensions |
| 332 var re156 = compareGLError(gl.NO_ERROR, "OES_vertex_array_object.bindVertexA
rrayOES(vertexArrayObject)"); |
| 333 var re157 = compareGLError(gl.NO_ERROR, "OES_vertex_array_object.isVertexArr
ayOES(vertexArrayObject)"); |
| 334 var re158 = compareGLError(gl.NO_ERROR, "OES_vertex_array_object.deleteVerte
xArrayOES(vertexArrayObject)"); |
| 335 var re159 = (OES_vertex_array_object.createVertexArrayOES() == null); |
| 336 |
| 337 lostContextResults = [re1, re2, re3, re4, re5, re6, re7, re8, re9, re10, |
| 338 re11, re12, re13, re14, re15, re16, re17, re18, re19,
re20, |
| 339 re21, re22, re23, re24, re25, re26, re27, re28, re29,
re30, |
| 340 re31, re32, re33, re34, re35, re36, re37, re38, re39,
re40, |
| 341 re41, re42, re43, re44, re45, re46, re47, re48, re49,
re50, |
| 342 re51, re52, re53, re54, re55, re56, re57, re58, re59,
re60, |
| 343 re61, re62, re63, re64, re65, re66, re67, re68, re69,
re70, |
| 344 re71, re72, re73, re74, re75, re76, re77, re78, re79,
re80, |
| 345 re81, re82, re83, re84, re85, re86, re87, re88, re89,
re90, |
| 346 re91, re92, re93, re94, re95, re96, re97, re98, re99,
re100, |
| 347 re101, re102, re103, re104, re105, re106, re107, re108
, re109, re110, |
| 348 re111, re112, re113, re114, re115, re116, re117, re118
, re119, re120, |
| 349 re121, re122, re123, re124, re125, re126, re127, re128
, re129, re130, |
| 350 re131, re132, re133, re134, re135, re136, re137, re138
, re139, re140, |
| 351 re141, re142, re143, re144, re145, re146, re147, re148
, re149, re150, |
| 352 re151, re152, re153, re154, re155, re156, re157, re158
, re159]; |
| 353 } |
| 354 |
| 355 self.onmessage = function(e) { |
| 356 canvas = new OffscreenCanvas(10, 10); |
| 357 gl = canvas.getContext('webgl'); |
| 358 |
| 359 // call testValidContext() before checking for the extension, because this i
s where we check |
| 360 // for the isContextLost() method, which we want to do regardless of the ext
ension's presence. |
| 361 testValidContext(); |
| 362 |
| 363 extensionName = "WEBGL_lose_context"; |
| 364 extension = gl.getExtension(extensionName); |
| 365 // need an extension that exposes new API methods. |
| 366 OES_vertex_array_object = gl.getExtension("OES_vertex_array_object"); |
| 367 |
| 368 canvas.addEventListener("webglcontextlost", function() { |
| 369 testLostContext(); |
| 370 self.postMessage({validRe: validContextResults, lostRe: lostContextResul
ts}); |
| 371 }); |
| 372 // We need to initialize |uniformLocation| before losing context. |
| 373 // Otherwise gl.getUniform() when context is lost will throw. |
| 374 uniformLocation = gl.getUniformLocation(program, "tex"); |
| 375 loseContext(); |
| 376 }; |
| 377 |
| 378 </script> |
| 379 |
| 380 <script> |
| 381 function makeWorker(script) |
| 382 { |
| 383 var blob = new Blob([script]); |
| 384 return new Worker(URL.createObjectURL(blob)); |
| 385 } |
| 386 |
| 387 var t = async_test('Test that WebGL context loss events can be handled with Offs
creenCanvas in a worker'); |
| 388 var worker = makeWorker(document.getElementById("myWorker").textContent); |
| 389 worker.addEventListener('message', t.step_func(function(msg) { |
| 390 var validResults = msg.data.validRe; |
| 391 var lostResults = msg.data.lostRe; |
| 392 assert_equals(validResults.length, 10); |
| 393 assert_equals(lostResults.length, 159); |
| 394 for (var i = 0; i < validResults.length; i++) |
| 395 assert_true(validResults[i], 'Result from testValidContext() should all
be true'); |
| 396 for (var i = 0; i < lostResults.length; i++) |
| 397 assert_true(lostResults[i], 'Result from testLostContext() should all be
true'); |
| 398 t.done(); |
| 399 })); |
| 400 worker.postMessage('start'); |
| 401 </script> |
| 402 </html> |
OLD | NEW |