summaryrefslogtreecommitdiff
path: root/Source/Android/src
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android/src')
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/Button.java33
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java43
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java76
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java13
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java165
5 files changed, 68 insertions, 262 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/Button.java b/Source/Android/src/org/dolphinemu/dolphinemu/Button.java
deleted file mode 100644
index 629e572d83..0000000000
--- a/Source/Android/src/org/dolphinemu/dolphinemu/Button.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.dolphinemu.dolphinemu;
-
-public class Button {
- private String ButtonID;
- private float _x;
- private float _y;
- private float _ex;
- private float _ey;
- public Button(String Button, float[] Coords)
- {
- ButtonID = Button;
- _x = Coords[0];
- _y = Coords[1];
- _ex = Coords[4];
- _ey = Coords[5];
- }
- public float X()
- {
- return _x;
- }
- public float Y()
- {
- return _y;
- }
- public float EX()
- {
- return _ex;
- }
- public float EY()
- {
- return _ey;
- }
-}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java b/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java
deleted file mode 100644
index ee7a8f79d0..0000000000
--- a/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.dolphinemu.dolphinemu;
-
-public class ButtonManager {
-
- private final int NUMBUTTONS = 15;
-
- Button[] Buttons;
- float[][] ButtonCoords =
- { // X, Y, X, EY, EX, EY, EX, Y
- {0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f},
- {0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f},
- };
- public ButtonManager()
- {
- Buttons = new Button[NUMBUTTONS];
-
- Buttons[0] = new Button("A", ButtonCoords[0]);
- Buttons[1] = new Button("B", ButtonCoords[1]);
-
- }
- Button GetButton(int ID)
- {
- return Buttons[ID];
- }
- float[][] GetButtonCoords()
- {
- return ButtonCoords;
- }
- public int ButtonPressed(int action, float x, float y)
- {
- for (int a = 0; a < 2; ++a)
- {
- if (x >= Buttons[a].X() &&
- x <= Buttons[a].EX() &&
- -y >= Buttons[a].Y() &&
- -y <= Buttons[a].EY())
- {
- return a;
- }
- }
- return -1;
- }
-}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
index 249ec33703..5c79ab94fd 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
@@ -1,29 +1,29 @@
package org.dolphinemu.dolphinemu;
-import javax.microedition.khronos.egl.EGL10;
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.egl.EGLContext;
-import javax.microedition.khronos.egl.EGLDisplay;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import android.app.Activity;
import android.content.Intent;
-import android.content.res.Configuration;
-import android.opengl.GLSurfaceView;
import android.os.Bundle;
+import android.os.Environment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.WindowManager;
-public class DolphinEmulator<MainActivity> extends Activity {
-
+public class DolphinEmulator<MainActivity> extends Activity
+{
static private NativeGLSurfaceView GLview = null;
static private boolean Running = false;
private float screenWidth;
private float screenHeight;
- public static native void SetKey(int Value, int Key);
+ public static native void onTouchEvent(int Action, float X, float Y);
static
{
@@ -36,6 +36,29 @@ public class DolphinEmulator<MainActivity> extends Activity {
Log.w("me", ex.toString());
}
}
+ private void CopyAsset(String asset, String output) {
+ InputStream in = null;
+ OutputStream out = null;
+ try {
+ in = getAssets().open(asset);
+ out = new FileOutputStream(output);
+ copyFile(in, out);
+ in.close();
+ in = null;
+ out.flush();
+ out.close();
+ out = null;
+ } catch(IOException e) {
+ Log.e("tag", "Failed to copy asset file: " + asset, e);
+ }
+ }
+ private void copyFile(InputStream in, OutputStream out) throws IOException {
+ byte[] buffer = new byte[1024];
+ int read;
+ while((read = in.read(buffer)) != -1){
+ out.write(buffer, 0, read);
+ }
+ }
@Override
public void onStop()
{
@@ -67,6 +90,30 @@ public class DolphinEmulator<MainActivity> extends Activity {
{
Intent ListIntent = new Intent(this, NativeListView.class);
startActivityForResult(ListIntent, 1);
+
+ // Make the assets directory
+ try
+ {
+ File directory = new File(Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu");
+ directory.mkdirs();
+ }
+ catch (Exception ex)
+ {
+ Log.w("me", ex.toString());
+ }
+
+ // Copy assets if needed
+ java.io.File file = new java.io.File(
+ Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonStart.png");
+ if(!file.exists())
+ {
+ CopyAsset("ButtonA.png",
+ Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonA.png");
+ CopyAsset("ButtonB.png",
+ Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonB.png");
+ CopyAsset("ButtonStart.png",
+ Environment.getExternalStorageDirectory()+File.separator+"dolphin-emu" + File.separator + "ButtonStart.png");
+ }
}
}
@@ -85,7 +132,7 @@ public class DolphinEmulator<MainActivity> extends Activity {
String FileName = data.getStringExtra("Select");
GLview = new NativeGLSurfaceView(this);
-
+ //this.getWindow().setUiOptions(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
GLview.SetDimensions(screenWidth, screenHeight);
GLview.SetFileName(FileName);
setContentView(GLview);
@@ -102,10 +149,11 @@ public class DolphinEmulator<MainActivity> extends Activity {
Y = event.getY();
Action = event.getActionMasked();
- //int Button = Renderer.ButtonPressed(Action, ((X / screenWidth) * 2.0f) - 1.0f, ((Y / screenHeight) * 2.0f) - 1.0f);
-
- //if (Button != -1)
- //SetKey(Action, Button);
+ // Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0
+ float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f;
+ float ScreenY = ((Y / screenHeight) * -2.0f) + 1.0f;
+
+ onTouchEvent(Action, ScreenX, ScreenY);
return false;
}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java b/Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java
index 22cba8a4e9..25c7ace0a0 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java
@@ -16,7 +16,6 @@ public class NativeGLSurfaceView extends SurfaceView {
static private float height;
public static native void main(String File, Surface surf, int width, int height);
-
public static native void UnPauseEmulation();
public static native void PauseEmulation();
public static native void StopEmulation();
@@ -32,7 +31,6 @@ public class NativeGLSurfaceView extends SurfaceView {
Log.w("me", ex.toString());
}
}
-
public NativeGLSurfaceView(Context context) {
super(context);
@@ -46,11 +44,13 @@ public class NativeGLSurfaceView extends SurfaceView {
}
};
getHolder().addCallback(new SurfaceHolder.Callback() {
-
-
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
- myRun.start();
+ if (!Running)
+ {
+ myRun.start();
+ Running = true;
+ }
}
public void surfaceChanged(SurfaceHolder arg0, int arg1,
@@ -72,11 +72,10 @@ public class NativeGLSurfaceView extends SurfaceView {
{
FileName = file;
}
+
public void SetDimensions(float screenWidth, float screenHeight)
{
width = screenWidth;
height = screenHeight;
}
-
-
}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java b/Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java
deleted file mode 100644
index 031d9aff17..0000000000
--- a/Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.dolphinemu.dolphinemu;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Matrix;
-import android.opengl.GLES20;
-import android.opengl.GLSurfaceView;
-import android.opengl.GLUtils;
-import android.util.Log;
-
-public class NativeRenderer implements GLSurfaceView.Renderer {
- // Button Manager
- private static ButtonManager Buttons;
-
- private static boolean Running = false;
-
- // Context
- private static Context _gContext;
-
- // Native
- public static native void DrawME();
- public static native void DrawButton(int GLTex, int ID);
- public static native void SetButtonCoords(float[] Coords);
- public static native void PrepareME();
-
- // Texture loading
- private static int buttonA = -1;
- private static int buttonB = -1;
-
- // Get a new texture id:
- private static int newTextureID(GL10 gl)
- {
- int[] temp = new int[1];
- gl.glGenTextures(1, temp, 0);
- return temp[0];
- }
-
- // Will load a texture out of a drawable resource file, and return an OpenGL texture ID:
- private int loadTexture(GL10 gl, String resource)
- {
- // In which ID will we be storing this texture?
- int id = newTextureID(gl);
-
- // Load up, and flip the texture:
- InputStream File = null;
- try {
- File = _gContext.getAssets().open(resource);
- }
- catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return 0;
- }
-
- Bitmap bmp = BitmapFactory.decodeStream(File);
-
- gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
-
- // Set all of our texture parameters:
- gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
- gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
- gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
- gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
-
- // Generate, and load up all of the mipmaps:
- for(int level=0, height = bmp.getHeight(), width = bmp.getWidth(); true; level++)
- {
- // Push the bitmap onto the GPU:
- GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bmp, 0);
-
- // We need to stop when the texture is 1x1:
- if(height==1 && width==1) break;
-
- // Resize, and let's go again:
- width >>= 1; height >>= 1;
- if(width<1) width = 1;
- if(height<1) height = 1;
-
- Bitmap bmp2 = Bitmap.createScaledBitmap(bmp, width, height, true);
- bmp.recycle();
- bmp = bmp2;
- }
- bmp.recycle();
-
- return id;
- }
-
- static
- {
- try
- {
- System.loadLibrary("dolphin-emu-nogui");
- }
- catch (Exception ex)
- {
- Log.w("me", ex.toString());
- }
- if (!Running)
- Buttons = new ButtonManager();
- }
-
- public void onSurfaceChanged(GL10 gl, int width, int height)
- {
- gl.glViewport(0, 0, width, height);
- }
-
- public void onSurfaceCreated(GL10 gl, EGLConfig config)
- {
- if (!Running)
- {
- gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- gl.glEnable(GL10.GL_BLEND);
- gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
-
- buttonA = loadTexture(gl, "ButtonA.png");
- buttonB = loadTexture(gl, "ButtonB.png");
- SetButtonCoords(Flatten(Buttons.GetButtonCoords()));
- PrepareME();
- Running = true;
- }
- }
- public static float[] Flatten(float[][] data) {
-
- float[] list = new float[data.length * data[0].length];
-
- for(int y = 0; y < data.length; ++y)
- for (int x = 0; x < data[y].length; ++x)
- list[y * data[0].length + x] = data[y][x];
- return list;
- }
- public void onDrawFrame(GL10 gl)
- {
- if (Running)
- {
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
- DrawME();
-
- // -1 is left
- // -1 is bottom
-
- DrawButton(buttonA, 0);
- DrawButton(buttonB, 1);
- }
- }
- public void setContext(Context ctx)
- {
- _gContext = ctx;
- }
- public int ButtonPressed(int action, float x, float y)
- {
- return Buttons.ButtonPressed(action, x, y);
- }
-}