public static __WebGLProgram createAndLinkProgram(this gl gl, __WebGLShader vertexShaderHandle, __WebGLShader fragmentShaderHandle, params string[] attributes) { var programHandle = gl.createProgram(); // Bind the vertex shader to the program. gl.attachShader(programHandle, vertexShaderHandle); // Bind the fragment shader to the program. gl.attachShader(programHandle, fragmentShaderHandle); // Bind attributes if (attributes != null) { int size = attributes.Length; for (int i = 0; i < size; i++) { GLES20.glBindAttribLocation(programHandle.value, i, attributes[i]); } } // Link the two shaders together into a program. gl.linkProgram(programHandle); // Get the link status. int[] linkStatus = new int[1]; GLES20.glGetProgramiv(programHandle.value, GLES20.GL_LINK_STATUS, linkStatus, 0); // If the link failed, delete the program. if (linkStatus[0] == 0) { Log.e("createAndLinkProgram", GLES20.glGetProgramInfoLog(programHandle.value)); gl.deleteProgram(programHandle); programHandle = null; } //if (programHandle == 0) //{ // throw null; // //throw new RuntimeException("Error creating program."); //} return(programHandle); }