diff --git a/src/com/homelinux/holtrop/opengltest/MyRenderer.java b/src/com/homelinux/holtrop/opengltest/MyRenderer.java index aa72d4a..2d3e495 100644 --- a/src/com/homelinux/holtrop/opengltest/MyRenderer.java +++ b/src/com/homelinux/holtrop/opengltest/MyRenderer.java @@ -6,12 +6,24 @@ import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.egl.EGLConfig; import java.nio.ByteBuffer; import java.nio.FloatBuffer; +import java.nio.IntBuffer; import java.nio.ByteOrder; +import android.util.Log; public class MyRenderer implements GLSurfaceView.Renderer { private int m_quad_attrib_buffer; private int m_program; + private final String DBGTAG = "JoshsOpenGL"; + + public void checkGLError(String glOperation) + { + int error; + while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) + { + Log.e(DBGTAG, glOperation + ": glError " + error); + } + } private int load_shader(int type, String source) { @@ -20,6 +32,14 @@ public class MyRenderer implements GLSurfaceView.Renderer GLES20.glShaderSource(shader, source); GLES20.glCompileShader(shader); + IntBuffer ib = IntBuffer.allocate(1); + GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, ib); + if (ib.get(0) != 1) + { + String info_log = GLES20.glGetShaderInfoLog(shader); + Log.e(DBGTAG, "Error compiling shader: " + info_log); + } + return shader; } @@ -31,6 +51,7 @@ public class MyRenderer implements GLSurfaceView.Renderer -1, -1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 1 }; + checkGLError("onSurfaceCreated"); ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4); bb.order(ByteOrder.nativeOrder()); FloatBuffer fb = bb.asFloatBuffer(); @@ -38,6 +59,7 @@ public class MyRenderer implements GLSurfaceView.Renderer fb.position(0); int[] buffers = {0}; GLES20.glGenBuffers(1, buffers, 0); + checkGLError("glGenBuffers"); m_quad_attrib_buffer = buffers[0]; GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer); GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, 0, fb, @@ -62,6 +84,14 @@ public class MyRenderer implements GLSurfaceView.Renderer GLES20.glAttachShader(m_program, v_shader); GLES20.glAttachShader(m_program, f_shader); GLES20.glLinkProgram(m_program); + checkGLError("glLinkProgram"); + IntBuffer ib = IntBuffer.allocate(1); + GLES20.glGetProgramiv(m_program, GLES20.GL_LINK_STATUS, ib); + if (ib.get(0) != 1) + { + String info_log = GLES20.glGetProgramInfoLog(m_program); + Log.e(DBGTAG, "Program log: " + info_log); + } GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f); } @@ -72,17 +102,22 @@ public class MyRenderer implements GLSurfaceView.Renderer GLES20.glUseProgram(m_program); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer); + checkGLError("glBindBuffer"); int attr_pos = GLES20.glGetAttribLocation(m_program, "pos"); int attr_color = GLES20.glGetAttribLocation(m_program, "color"); GLES20.glEnableVertexAttribArray(attr_pos); GLES20.glEnableVertexAttribArray(attr_color); + checkGLError("glEnableVertexAttribArray"); GLES20.glVertexAttribPointer(attr_pos, 3, GLES20.GL_FLOAT, false, 6 * 4, 0); GLES20.glVertexAttribPointer(attr_color, 3, GLES20.GL_FLOAT, false, 6 * 4, 3 * 4); + checkGLError("glVertexAttribPointer"); GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4); + checkGLError("glDrawArrays"); GLES20.glDisableVertexAttribArray(attr_pos); GLES20.glDisableVertexAttribArray(attr_color); + checkGLError("glDisableVertexAttribArray"); } public void onSurfaceChanged(GL10 unused, int width, int height)