add GL debugging outputs
This commit is contained in:
parent
85ad605930
commit
51564fcede
@ -6,12 +6,24 @@ import javax.microedition.khronos.opengles.GL10;
|
|||||||
import javax.microedition.khronos.egl.EGLConfig;
|
import javax.microedition.khronos.egl.EGLConfig;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
public class MyRenderer implements GLSurfaceView.Renderer
|
public class MyRenderer implements GLSurfaceView.Renderer
|
||||||
{
|
{
|
||||||
private int m_quad_attrib_buffer;
|
private int m_quad_attrib_buffer;
|
||||||
private int m_program;
|
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)
|
private int load_shader(int type, String source)
|
||||||
{
|
{
|
||||||
@ -20,6 +32,14 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
GLES20.glShaderSource(shader, source);
|
GLES20.glShaderSource(shader, source);
|
||||||
GLES20.glCompileShader(shader);
|
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;
|
return shader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +51,7 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
-1, -1, 0, 0, 1, 0,
|
-1, -1, 0, 0, 1, 0,
|
||||||
1, -1, 0, 0, 0, 1
|
1, -1, 0, 0, 0, 1
|
||||||
};
|
};
|
||||||
|
checkGLError("onSurfaceCreated");
|
||||||
ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4);
|
ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4);
|
||||||
bb.order(ByteOrder.nativeOrder());
|
bb.order(ByteOrder.nativeOrder());
|
||||||
FloatBuffer fb = bb.asFloatBuffer();
|
FloatBuffer fb = bb.asFloatBuffer();
|
||||||
@ -38,6 +59,7 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
fb.position(0);
|
fb.position(0);
|
||||||
int[] buffers = {0};
|
int[] buffers = {0};
|
||||||
GLES20.glGenBuffers(1, buffers, 0);
|
GLES20.glGenBuffers(1, buffers, 0);
|
||||||
|
checkGLError("glGenBuffers");
|
||||||
m_quad_attrib_buffer = buffers[0];
|
m_quad_attrib_buffer = buffers[0];
|
||||||
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
|
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
|
||||||
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, 0, fb,
|
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, v_shader);
|
||||||
GLES20.glAttachShader(m_program, f_shader);
|
GLES20.glAttachShader(m_program, f_shader);
|
||||||
GLES20.glLinkProgram(m_program);
|
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);
|
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.glUseProgram(m_program);
|
||||||
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
|
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
|
||||||
|
checkGLError("glBindBuffer");
|
||||||
int attr_pos = GLES20.glGetAttribLocation(m_program, "pos");
|
int attr_pos = GLES20.glGetAttribLocation(m_program, "pos");
|
||||||
int attr_color = GLES20.glGetAttribLocation(m_program, "color");
|
int attr_color = GLES20.glGetAttribLocation(m_program, "color");
|
||||||
GLES20.glEnableVertexAttribArray(attr_pos);
|
GLES20.glEnableVertexAttribArray(attr_pos);
|
||||||
GLES20.glEnableVertexAttribArray(attr_color);
|
GLES20.glEnableVertexAttribArray(attr_color);
|
||||||
|
checkGLError("glEnableVertexAttribArray");
|
||||||
GLES20.glVertexAttribPointer(attr_pos, 3, GLES20.GL_FLOAT, false,
|
GLES20.glVertexAttribPointer(attr_pos, 3, GLES20.GL_FLOAT, false,
|
||||||
6 * 4, 0);
|
6 * 4, 0);
|
||||||
GLES20.glVertexAttribPointer(attr_color, 3, GLES20.GL_FLOAT, false,
|
GLES20.glVertexAttribPointer(attr_color, 3, GLES20.GL_FLOAT, false,
|
||||||
6 * 4, 3 * 4);
|
6 * 4, 3 * 4);
|
||||||
|
checkGLError("glVertexAttribPointer");
|
||||||
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);
|
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
checkGLError("glDrawArrays");
|
||||||
GLES20.glDisableVertexAttribArray(attr_pos);
|
GLES20.glDisableVertexAttribArray(attr_pos);
|
||||||
GLES20.glDisableVertexAttribArray(attr_color);
|
GLES20.glDisableVertexAttribArray(attr_color);
|
||||||
|
checkGLError("glDisableVertexAttribArray");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSurfaceChanged(GL10 unused, int width, int height)
|
public void onSurfaceChanged(GL10 unused, int width, int height)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user