add GL debugging outputs

This commit is contained in:
Josh Holtrop 2012-11-06 21:51:11 -05:00
parent 85ad605930
commit 51564fcede

View File

@ -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)