From 3ad9c7ba847aa3d2d20f2b3183f95792981867ed Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 16 Jun 2012 22:47:16 +0200 Subject: [PATCH] (Android) OpenGL ES 2.0 skeleton driver - shows a triangle right now --- android/AndroidManifest.xml | 5 +- .../classes/com/retroarch/MainActivity.class | Bin 507 -> 907 bytes android/src/com/retroarch/MainActivity.java | 39 ++++++- android/src/com/retroarch/rgl.java | 95 ++++++++++++++++++ 4 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 android/src/com/retroarch/rgl.java diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index b8c7093233..7e450a1267 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -19,5 +19,6 @@ - - \ No newline at end of file + + + diff --git a/android/bin/classes/com/retroarch/MainActivity.class b/android/bin/classes/com/retroarch/MainActivity.class index 45b23bfee91f67844495aec97b596278d6aa51a2..377b626eae8132a695bb6877f9e398d2c31935dc 100644 GIT binary patch literal 907 zcmaKqYj4vq6oy}SY13t)TQ8J#j9nO)HUlC)4^4tfAf$p2MU~*o<`n7-l`t}3BL)^DfVAu$vu^$T^M?4Nr{TE!S$AOkp zsXyAV7#ds+<46vDKAHFzCk&-PpB;@thOOR3LNpO-6#CD4{WLz|ffz{f;eaw9NhS3m z!&195V6eK;P&in^iVGWMhSi=_;$=EM7V#T?914b7FA8`#;ITC8*`}pWWx}x8`?p?d zR*qCR7F-jh*`6y){3odzhT@a>ztLH zD(!dkEFvz0Ty#-H$)RY|#SLsRR1%@H9HosBm-I|&!_Vw7j?@x96~pH$(Odza(NWJ1|lKHpiVi#oxx3OpA4mJMYJ7mth7D+nJYCA6O=CvILryr$pAf8I&ef7@| z@Zde4a_T~FM?Z$4U@l3KMKQe{jmxz1X=XGRy>mF9C@8?Cv6O9=afMMeEPXu4xyI16bK`0XOKvrXnhq4j?3rlh}}0IDjij#C$5T znRzd7=9hOcUYhxQ-yZ`j_aS6QBB z`C^&w1S;YDd=$yqmEj(cj1oXK$W7>iu17c2E*vCT_@0$EI9p|a-sDC;9I7hMn3gIL m#W%Df&%2`iXV~Clr0JwI*jB8OUlx8a1rN|8PN2`T#NY#BOBuER diff --git a/android/src/com/retroarch/MainActivity.java b/android/src/com/retroarch/MainActivity.java index c9364e2ea9..aae2172216 100644 --- a/android/src/com/retroarch/MainActivity.java +++ b/android/src/com/retroarch/MainActivity.java @@ -1,13 +1,44 @@ package com.retroarch; import android.app.Activity; +import android.content.Context; +import android.opengl.GLSurfaceView; import android.os.Bundle; -public class MainActivity extends Activity { - /** Called when the activity is first created. */ +public class MainActivity extends Activity +{ + private GLSurfaceView ctx_gl; + @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) + { super.onCreate(savedInstanceState); - setContentView(R.layout.main); + + ctx_gl = new rgl_context(this); + setContentView(ctx_gl); } + + @Override + protected void onPause() + { + super.onPause(); + ctx_gl.onPause(); + } + + @Override + protected void onResume() + { + super.onResume(); + ctx_gl.onResume(); + } +} + +class rgl_context extends GLSurfaceView +{ + public rgl_context(Context context) + { + super(context); + setEGLContextClientVersion(2); + setRenderer(new rgl()); + } } \ No newline at end of file diff --git a/android/src/com/retroarch/rgl.java b/android/src/com/retroarch/rgl.java new file mode 100644 index 0000000000..7c71ca21fb --- /dev/null +++ b/android/src/com/retroarch/rgl.java @@ -0,0 +1,95 @@ +package com.retroarch; + +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.ByteOrder; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; + +public class rgl implements GLSurfaceView.Renderer +{ + private int cprg; + private int v_position_handle; + private FloatBuffer triangle_vbo; + + private void triangles_init() + { + float triangle_coords[] = { + // X, Y, Z + -0.5f, -0.25f, 0, + 0.5f, -0.25f, 0, + 0.0f, 0.559016994f, 0 + }; + + ByteBuffer vbb = ByteBuffer.allocateDirect(triangle_coords.length * 4); + vbb.order(ByteOrder.nativeOrder()); + triangle_vbo = vbb.asFloatBuffer(); + triangle_vbo.put(triangle_coords); + triangle_vbo.position(0); + } + + private void shader_init() + { + final String vprg = + "attribute vec4 vPosition; \n" + + "void main(){ \n" + + " gl_Position = vPosition; \n" + + "} \n"; + final String fprg = + "precision mediump float; \n" + + "void main(){ \n" + + " gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" + + "} \n"; + + int vertex_shader, fragment_shader; + + vertex_shader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER); + + GLES20.glShaderSource(vertex_shader, vprg); + GLES20.glCompileShader(vertex_shader); + + fragment_shader = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER); + + GLES20.glShaderSource(fragment_shader, fprg); + GLES20.glCompileShader(fragment_shader); + + cprg = GLES20.glCreateProgram(); + GLES20.glAttachShader(cprg, vertex_shader); + GLES20.glAttachShader(cprg, fragment_shader); + GLES20.glLinkProgram(cprg); + + //get handle to the vertex shader's vPosition member + v_position_handle = GLES20.glGetAttribLocation(cprg, "vPosition"); +; } + + public void onSurfaceCreated(GL10 unused, EGLConfig config) + { + //background color + GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); + + triangles_init(); + shader_init(); + } + + public void onDrawFrame(GL10 unused) + { + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + + GLES20.glUseProgram(cprg); + + // Triangle + GLES20.glVertexAttribPointer(v_position_handle, 3, GLES20.GL_FLOAT, false, 12, triangle_vbo); + GLES20.glEnableVertexAttribArray(v_position_handle); + + GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3); + } + + public void onSurfaceChanged(GL10 unused, int width, int height) + { + GLES20.glViewport(0, 0, width, height); + } +}