| <html> | 
 | <head> | 
 | <script src="../../js/resources/js-test-pre.js"></script> | 
 | <script src="resources/webgl-test.js"></script> | 
 | </head> | 
 | <body> | 
 | <div id="description"></div> | 
 | <div id="console"></div> | 
 |  | 
 | <script> | 
 | description("Test of drawArrays with out-of-bounds parameters"); | 
 |  | 
 | var context = create3DContext(); | 
 | var program = loadStandardProgram(context); | 
 |  | 
 | context.useProgram(program); | 
 | var vertexObject = context.createBuffer(); | 
 | context.bindBuffer(context.ARRAY_BUFFER, vertexObject); | 
 | context.enableVertexAttribArray(0); | 
 |  | 
 | debug("Test empty buffer") | 
 | context.bufferData(context.ARRAY_BUFFER, new Float32Array([  ]), context.STATIC_DRAW); | 
 | context.vertexAttribPointer(0, 3, context.FLOAT, false, 0, 0); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 1)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 10000)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 10000000000000)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0, -1)"); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 1, 0)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -1, 0)"); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 0, 0)"); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 100, 0)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 1, -1)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -1, 1)"); | 
 |  | 
 | debug("") | 
 | debug("Test buffer with 3 float vectors") | 
 | context.bufferData(context.ARRAY_BUFFER, new Float32Array([ 0,0.5,0, -0.5,-0.5,0, 0.5,-0.5,0 ]), context.STATIC_DRAW); | 
 | context.vertexAttribPointer(0, 3, context.FLOAT, false, 0, 0); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 0, 3)"); | 
 | shouldGenerateGLError(context, context.INVALID_ENUM, "context.drawArrays(0x0009, 0, 3)"); // GL_POLYGON | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 3, 2)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 10000)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 10000000000000)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0, -1)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -1, 0)"); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 0, 0)"); | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 100, 0)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 1, -1)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -1, 1)"); | 
 |  | 
 | debug("") | 
 | debug("Test buffer with interleaved (3+2) float vectors") | 
 |  | 
 | var program2 = createProgram(context, | 
 |                              "attribute vec3 aOne;" + | 
 |                              "attribute vec2 aTwo;" + | 
 |                              "void main() { gl_Position = vec4(aOne, 1.0) + vec4(aTwo, 0.0, 1.0); }", | 
 |                              "void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }", | 
 |                              [ "aOne", "aTwo" ]); | 
 | if (!program2) { | 
 |     testFailed("failed to create test program"); | 
 | } | 
 |  | 
 | context.useProgram(program2); | 
 |  | 
 | var vbo = context.createBuffer(); | 
 | context.bindBuffer(context.ARRAY_BUFFER, vbo); | 
 | // enough for 9 vertices, so 3 triangles | 
 | context.bufferData(context.ARRAY_BUFFER, new Float32Array(9*5), context.STATIC_DRAW); | 
 |  | 
 | // bind first 3 elements, with a stride of 5 float elements | 
 | context.vertexAttribPointer(0, 3, context.FLOAT, false, 5*4, 0); | 
 | // bind 2 elements, starting after the first 3; same stride of 5 float elements | 
 | context.vertexAttribPointer(1, 2, context.FLOAT, false, 5*4, 3*4); | 
 |  | 
 | context.enableVertexAttribArray(0); | 
 | context.enableVertexAttribArray(1); | 
 |  | 
 | shouldGenerateGLError(context, context.NO_ERROR, "context.drawArrays(context.TRIANGLES, 0, 9)"); | 
 |  | 
 | // negative values must generate INVALID_VALUE; they can never be valid | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0, -500)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -200, 1)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, -200, -500)"); | 
 |  | 
 | // 0xffffffff needs to convert to a 'long' IDL argument as -1, as per | 
 | // WebIDL 4.1.7.  JS ToInt32(0xffffffff) == -1, which is the first step | 
 | // of the conversion.  Thus INVALID_VALUE. | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0, 0xffffffff)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0xffffffff, 1)"); | 
 | shouldGenerateGLError(context, context.INVALID_VALUE, "context.drawArrays(context.TRIANGLES, 0xffffffff, 0xffffffff)"); | 
 |  | 
 | // values that could otherwise be valid but aren't due to bindings generate | 
 | // INVALID_OPERATION | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 200)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0, 0x7fffffff)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0x7fffffff, 1)"); | 
 | shouldGenerateGLError(context, context.INVALID_OPERATION, "context.drawArrays(context.TRIANGLES, 0x7fffffff, 0x7fffffff)"); | 
 |  | 
 | debug("") | 
 | </script> | 
 |  | 
 | <script src="../../js/resources/js-test-post.js"></script> | 
 | </body> | 
 | </html> |