public void OnSurfaceCreated(IGL10 unused, EGLConfig config)
{
int program = GLES20.GlCreateProgram();
addShaderTo(GLES20.GlVertexShader, VERTEX_SHADER_STRING, program);
addShaderTo(GLES20.GlFragmentShader, FRAGMENT_SHADER_STRING, program);
GLES20.GlLinkProgram(program);
int[] result = new int[] { GLES20.GlFalse };
result[0] = GLES20.GlFalse;
GLES20.GlGetProgramiv(program, GLES20.GlLinkStatus, result, 0);
abortUnless(result[0] == GLES20.GlTrue, GLES20.GlGetProgramInfoLog(program));
GLES20.GlUseProgram(program);
GLES20.GlUniform1i(GLES20.GlGetUniformLocation(program, "y_tex"), 0);
GLES20.GlUniform1i(GLES20.GlGetUniformLocation(program, "u_tex"), 1);
GLES20.GlUniform1i(GLES20.GlGetUniformLocation(program, "v_tex"), 2);
// Actually set in drawRectangle(), but queried only once here.
posLocation = GLES20.GlGetAttribLocation(program, "in_pos");
int tcLocation = GLES20.GlGetAttribLocation(program, "in_tc");
GLES20.GlEnableVertexAttribArray(tcLocation);
GLES20.GlVertexAttribPointer(tcLocation, 2, GLES20.GlFloat, false, 0, textureCoords);
GLES20.GlClearColor(0.0f, 0.0f, 0.0f, 1.0f);
checkNoGLES2Error();
}