trying to draw a quad, but have a bug somewhere
This commit is contained in:
parent
77f245197f
commit
85ad605930
@ -4,17 +4,85 @@ import android.opengl.GLSurfaceView;
|
|||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
import javax.microedition.khronos.opengles.GL10;
|
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.FloatBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
public class MyRenderer implements GLSurfaceView.Renderer
|
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)
|
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);
|
GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDrawFrame(GL10 unused)
|
public void onDrawFrame(GL10 unused)
|
||||||
{
|
{
|
||||||
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
|
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)
|
public void onSurfaceChanged(GL10 unused, int width, int height)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user