glUniformMatrix doesn't do transposing in GL ES; need to specify floating point precision in fragment shaders.