This test ensures WebGL implementations handle uniform arrays correctly.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".



check float
PASS 1 uniform found
PASS uniform name is 'color[0]' not 'color' as per OpenGL ES 2.0.24 section 2.10
PASS getError was expected value: INVALID_OPERATION : should fail if there is no current program
PASS getError was expected value: INVALID_VALUE : should fail with insufficient array size with gl.uniform1fv
PASS getError was expected value: NO_ERROR : can set an array of uniforms with gl.uniform1fv
PASS getError was expected value: NO_ERROR : can call gl.getUniform
PASS gl.getUniform returns the correct type.
PASS getError was expected value: NO_ERROR : can get location of element 0 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 0 of array from gl.getUniform
PASS value put in (16) matches value pulled out (16)
PASS getError was expected value: NO_ERROR : can get location of element 1 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 1 of array from gl.getUniform
PASS value put in (15) matches value pulled out (15)
PASS getError was expected value: NO_ERROR : can get location of element 2 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 2 of array from gl.getUniform
PASS value put in (14) matches value pulled out (14)
PASS getError was expected value: INVALID_OPERATION : using the wrong size of gl.Uniform fails
PASS getError was expected value: NO_ERROR : can call gl.useProgram(null)

check vec2
PASS 1 uniform found
PASS uniform name is 'color[0]' not 'color' as per OpenGL ES 2.0.24 section 2.10
PASS getError was expected value: INVALID_OPERATION : should fail if there is no current program
PASS getError was expected value: INVALID_VALUE : should fail with insufficient array size with gl.uniform2fv
PASS getError was expected value: INVALID_VALUE : should fail with non-multiple array size with gl.uniform2fv
PASS getError was expected value: NO_ERROR : can set an array of uniforms with gl.uniform2fv
PASS getError was expected value: NO_ERROR : can call gl.getUniform
PASS gl.getUniform returns the correct type.
PASS getError was expected value: NO_ERROR : can get location of element 0 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 0 of array from gl.getUniform
PASS value put in ([16, 15]) matches value pulled out ([16, 15])
PASS getError was expected value: NO_ERROR : can get location of element 1 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 1 of array from gl.getUniform
PASS value put in ([14, 13]) matches value pulled out ([14, 13])
PASS getError was expected value: NO_ERROR : can get location of element 2 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 2 of array from gl.getUniform
PASS value put in ([12, 11]) matches value pulled out ([12, 11])
PASS getError was expected value: INVALID_OPERATION : using the wrong size of gl.Uniform fails
PASS passing non-array to glUniform*fv should throw TypeError
PASS getError was expected value: NO_ERROR : can call gl.useProgram(null)

check vec3
PASS 1 uniform found
PASS uniform name is 'color[0]' not 'color' as per OpenGL ES 2.0.24 section 2.10
PASS getError was expected value: INVALID_OPERATION : should fail if there is no current program
PASS getError was expected value: INVALID_VALUE : should fail with insufficient array size with gl.uniform3fv
PASS getError was expected value: INVALID_VALUE : should fail with non-multiple array size with gl.uniform3fv
PASS getError was expected value: NO_ERROR : can set an array of uniforms with gl.uniform3fv
PASS getError was expected value: NO_ERROR : can call gl.getUniform
PASS gl.getUniform returns the correct type.
PASS getError was expected value: NO_ERROR : can get location of element 0 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 0 of array from gl.getUniform
PASS value put in ([16, 15, 14]) matches value pulled out ([16, 15, 14])
PASS getError was expected value: NO_ERROR : can get location of element 1 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 1 of array from gl.getUniform
PASS value put in ([13, 12, 11]) matches value pulled out ([13, 12, 11])
PASS getError was expected value: NO_ERROR : can get location of element 2 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 2 of array from gl.getUniform
PASS value put in ([10, 9, 8]) matches value pulled out ([10, 9, 8])
PASS getError was expected value: INVALID_OPERATION : using the wrong size of gl.Uniform fails
PASS passing non-array to glUniform*fv should throw TypeError
PASS getError was expected value: NO_ERROR : can call gl.useProgram(null)

check vec4
PASS 1 uniform found
PASS uniform name is 'color[0]' not 'color' as per OpenGL ES 2.0.24 section 2.10
PASS getError was expected value: INVALID_OPERATION : should fail if there is no current program
PASS getError was expected value: INVALID_VALUE : should fail with insufficient array size with gl.uniform4fv
PASS getError was expected value: INVALID_VALUE : should fail with non-multiple array size with gl.uniform4fv
PASS getError was expected value: NO_ERROR : can set an array of uniforms with gl.uniform4fv
PASS getError was expected value: NO_ERROR : can call gl.getUniform
PASS gl.getUniform returns the correct type.
PASS getError was expected value: NO_ERROR : can get location of element 0 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 0 of array from gl.getUniform
PASS value put in ([16, 15, 14, 13]) matches value pulled out ([16, 15, 14, 13])
PASS getError was expected value: NO_ERROR : can get location of element 1 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 1 of array from gl.getUniform
PASS value put in ([12, 11, 10, 9]) matches value pulled out ([12, 11, 10, 9])
PASS getError was expected value: NO_ERROR : can get location of element 2 of array from gl.getUniformLocation
PASS getError was expected value: NO_ERROR : can get value of element 2 of array from gl.getUniform
PASS value put in ([8, 7, 6, 5]) matches value pulled out ([8, 7, 6, 5])
PASS getError was expected value: INVALID_OPERATION : using the wrong size of gl.Uniform fails
PASS passing non-array to glUniform*fv should throw TypeError
PASS getError was expected value: NO_ERROR : can call gl.useProgram(null)

PASS successfullyParsed is true

TEST COMPLETE

