trying to draw a quad, but have a bug somewhere

This commit is contained in:
Josh Holtrop 2012-11-04 22:13:19 -05:00
parent 77f245197f
commit 85ad605930

View File

@ -4,17 +4,85 @@ import android.opengl.GLSurfaceView;
import android.opengl.GLES20;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.egl.EGLConfig;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.ByteOrder;
public class MyRenderer implements GLSurfaceView.Renderer
{
private int m_quad_attrib_buffer;
private int m_program;
private int load_shader(int type, String source)
{
int shader = GLES20.glCreateShader(type);
GLES20.glShaderSource(shader, source);
GLES20.glCompileShader(shader);
return shader;
}
public void onSurfaceCreated(GL10 unused, EGLConfig config)
{
final float attribs[] = {
1, 1, 0, 1, 1, 1,
-1, 1, 0, 1, 0, 0,
-1, -1, 0, 0, 1, 0,
1, -1, 0, 0, 0, 1
};
ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer fb = bb.asFloatBuffer();
fb.put(attribs);
fb.position(0);
int[] buffers = {0};
GLES20.glGenBuffers(1, buffers, 0);
m_quad_attrib_buffer = buffers[0];
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, 0, fb,
GLES20.GL_STATIC_DRAW);
final String v_shader_src =
"attribute vec3 pos;" +
"attribute vec3 color;" +
"varying vec3 color_i;" +
"void main() {" +
" gl_Position = vec4(pos / 2.0, 1);" +
" color_i = color;" +
"}";
final String f_shader_src =
"varying vec3 color_i;" +
"void main() {" +
" gl_FragColor = vec4(color_i, 1);" +
"}";
int v_shader = load_shader(GLES20.GL_VERTEX_SHADER, v_shader_src);
int f_shader = load_shader(GLES20.GL_FRAGMENT_SHADER, f_shader_src);
m_program = GLES20.glCreateProgram();
GLES20.glAttachShader(m_program, v_shader);
GLES20.glAttachShader(m_program, f_shader);
GLES20.glLinkProgram(m_program);
GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f);
}
public void onDrawFrame(GL10 unused)
{
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glUseProgram(m_program);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, m_quad_attrib_buffer);
int attr_pos = GLES20.glGetAttribLocation(m_program, "pos");
int attr_color = GLES20.glGetAttribLocation(m_program, "color");
GLES20.glEnableVertexAttribArray(attr_pos);
GLES20.glEnableVertexAttribArray(attr_color);
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);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);
GLES20.glDisableVertexAttribArray(attr_pos);
GLES20.glDisableVertexAttribArray(attr_color);
}
public void onSurfaceChanged(GL10 unused, int width, int height)