Merge pull request #1267 from reicast/lk/android-studio

Cleanup and improvements to Android Studio
This commit is contained in:
Out of Office 2018-08-08 11:49:59 -04:00 committed by GitHub
commit 14bf4b5b1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 260 additions and 356 deletions

View File

@ -229,6 +229,13 @@ void dc_term()
TermAudio();
}
#if defined(_ANDROID)
void dc_pause()
{
SaveRomFiles(get_writable_data_path("/data/"));
}
#endif
void dc_stop()
{
sh4_cpu.Stop();

View File

@ -123,11 +123,6 @@
android:screenOrientation="sensorLandscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
<service
android:name=".emu.EmuService"
android:configChanges="orientation"
android:enabled="true"
android:exported="true" />
</application>
</manifest>

View File

@ -172,13 +172,12 @@ public class FileBrowser extends Fragment {
* findViewById(R.id.about).setOnTouchListener(viblist);
*/
File home = new File(mPrefs.getString(Config.pref_home, home_directory));
if (!home.exists() || !home.isDirectory()) {
String temp = mPrefs.getString(Config.pref_home, null);
if (temp == null || !new File(temp).isDirectory()) {
showToastMessage(getActivity().getString(R.string.config_home), Snackbar.LENGTH_LONG);
} else {
installButtons();
}
if (!ImgBrowse && !games) {
new LocateGames(R.array.flash).execute(home_directory);
} else {

View File

@ -3,7 +3,6 @@ package com.reicast.emulator;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
@ -22,7 +21,6 @@ import android.view.WindowManager;
import android.widget.PopupWindow;
import com.reicast.emulator.config.Config;
import com.reicast.emulator.emu.EmuService;
import com.reicast.emulator.emu.GL2JNIView;
import com.reicast.emulator.emu.JNIdc;
import com.reicast.emulator.emu.OnScreenMenu;
@ -39,7 +37,6 @@ import java.util.HashMap;
import tv.ouya.console.api.OuyaController;
public class GL2JNIActivity extends Activity {
private Intent serviceIntent;
public GL2JNIView mView;
OnScreenMenu menu;
public MainPopup popUp;
@ -61,10 +58,6 @@ public class GL2JNIActivity extends Activity {
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
}
//serviceIntent = new Intent(this, EmuService.class);
//serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_FROM_BACKGROUND);
//serviceIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES | Intent.FLAG_ACTIVITY_NO_ANIMATION);
//startService(serviceIntent);
Emulator app = (Emulator)getApplicationContext();
app.getConfigurationPrefs(prefs);
@ -566,26 +559,18 @@ public class GL2JNIActivity extends Activity {
protected void onPause() {
super.onPause();
mView.onPause();
JNIdc.pause();
moga.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//if (serviceRunning(EmuService.class))
// stopService(serviceIntent);
mView.onDestroy();
JNIdc.terminate();
JNIdc.destroy();
moga.onDestroy();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
// mView.onStop();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

View File

@ -75,6 +75,13 @@ public class GL2JNINative extends NativeActivity {
app.getConfigurationPrefs(prefs);
menu = new OnScreenMenu(GL2JNINative.this, prefs);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
pad.compat[0] = true;
pad.compat[1] = true;
pad.compat[2] = true;
pad.compat[3] = true;
}
String fileName = null;
// Call parent onCreate()
@ -567,6 +574,7 @@ public class GL2JNINative extends NativeActivity {
protected void onPause() {
super.onPause();
mView.onPause();
JNIdc.pause();
moga.onPause();
}
@ -574,14 +582,13 @@ public class GL2JNINative extends NativeActivity {
protected void onDestroy() {
super.onDestroy();
mView.onDestroy();
JNIdc.terminate();
JNIdc.destroy();
moga.onDestroy();
}
@Override
protected void onStop() {
super.onStop();
// mView.onStop();
}
@Override

View File

@ -259,9 +259,9 @@ public class MainActivity extends AppCompatActivity implements
builder.setPositiveButton(R.string.browse,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
onMainBrowseSelected(false,
Environment.getExternalStorageDirectory().getAbsolutePath(),
false, null);
String home_directory = mPrefs.getString(Config.pref_home,
Environment.getExternalStorageDirectory().getAbsolutePath());
onMainBrowseSelected(false, home_directory, false, null);
}
});
builder.setNegativeButton(R.string.gdrive,

View File

@ -15,7 +15,6 @@ public class Config {
public static final String pref_showfps = "show_fps";
public static final String pref_rendertype = "render_type";
public static final String pref_renderdepth = "depth_render";
public static final String pref_egl14 = "use_egl14";
public static final String pref_touchvibe = "touch_vibration_enabled";
public static final String pref_vibrationDuration = "vibration_duration";

View File

@ -522,38 +522,13 @@ public class OptionsFragment extends Fragment {
fps_opt.setChecked(counter);
fps_opt.setOnCheckedChangeListener(fps_options);
final CompoundButton use_egl14_opt = (CompoundButton) getView().findViewById(R.id.force_gpu_option);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
OnCheckedChangeListener force_gpu_options = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPrefs.edit().putBoolean(Config.pref_egl14, isChecked).apply();
}
};
boolean enhanced = mPrefs.getBoolean(Config.pref_egl14, false);
use_egl14_opt.setChecked(enhanced);
use_egl14_opt.setOnCheckedChangeListener(force_gpu_options);
} else {
use_egl14_opt.setEnabled(false);
}
CompoundButton force_software_opt = (CompoundButton) getView().findViewById(
R.id.software_option);
OnCheckedChangeListener force_software = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mPrefs.edit()
.putInt(Config.pref_rendertype, isChecked
? GL2JNIView.LAYER_TYPE_SOFTWARE : GL2JNIView.LAYER_TYPE_HARDWARE
).apply();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (isChecked) {
use_egl14_opt.setEnabled(false);
mPrefs.edit().putBoolean(Config.pref_egl14, false).apply();
} else {
use_egl14_opt.setEnabled(true);
}
}
mPrefs.edit().putInt(Config.pref_rendertype, isChecked ?
GL2JNIView.LAYER_TYPE_SOFTWARE : GL2JNIView.LAYER_TYPE_HARDWARE).apply();
}
};
int software = mPrefs.getInt(Config.pref_rendertype, GL2JNIView.LAYER_TYPE_HARDWARE);

View File

@ -1,48 +0,0 @@
package com.reicast.emulator.emu;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import com.reicast.emulator.R;
public class EmuService extends Service {
private final static int FOREGROUND_ID = 999;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getAction() != null
&& intent.getAction().equals("com.reicast.emulator.KYS")) {
stopSelf();
} else {
Intent intentService = new Intent(this, EmuService.class);
intentService.setAction("com.reicast.emulator.KYS");
PendingIntent pendingIntent = PendingIntent.getService(this,
(int) System.currentTimeMillis(), intentService,
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setTicker(getString(R.string.service_ticker))
.setContentTitle(getString(R.string.service_title))
.setContentText(getString(R.string.service_content))
.setContentIntent(pendingIntent);
startForeground(FOREGROUND_ID, builder.build());
return START_STICKY_COMPATIBILITY;
}
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
stopForeground(true);
}
}

View File

@ -6,12 +6,10 @@ import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.os.Environment;
@ -37,8 +35,6 @@ import com.reicast.emulator.emu.OnScreenMenu.FpsPopup;
import com.reicast.emulator.periph.VJoy;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
@ -183,29 +179,18 @@ public class GL2JNIView extends GLSurfaceView
// is interpreted as any 32-bit surface with alpha by SurfaceFlinger.
if(translucent) this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
if (prefs.getBoolean(Config.pref_egl14, false)) {
setEGLContextFactory(new GLCFactory14.ContextFactory());
setEGLConfigChooser(
translucent?
new GLCFactory14.ConfigChooser(8, 8, 8, 8, depth, stencil)
: new GLCFactory14.ConfigChooser(5, 6, 5, 0, depth, stencil)
);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
} else {
// Setup the context factory for 2.0 rendering.
// See ContextFactory class definition below
setEGLContextFactory(new GLCFactory.ContextFactory());
// Setup the context factory for 2.0 rendering.
// See ContextFactory class definition below
setEGLContextFactory(new GLCFactory.ContextFactory());
// We need to choose an EGLConfig that matches the format of
// our surface exactly. This is going to be done in our
// custom config chooser. See ConfigChooser class definition
// below.
setEGLConfigChooser(
translucent?
new GLCFactory.ConfigChooser(8, 8, 8, 8, depth, stencil)
: new GLCFactory.ConfigChooser(5, 6, 5, 0, depth, stencil)
);
}
// We need to choose an EGLConfig that matches the format of
// our surface exactly. This is going to be done in our
// custom config chooser. See ConfigChooser class definition
// below.
setEGLConfigChooser(translucent?
new GLCFactory.ConfigChooser(8, 8, 8, 8, depth, stencil)
: new GLCFactory.ConfigChooser(5, 6, 5, 0, depth, stencil)
);
// Set the renderer responsible for frame rendering
setRenderer(rend=new Renderer(this));
@ -695,24 +680,10 @@ public class GL2JNIView extends GLSurfaceView
}
// public void onStop() {
// // TODO Auto-generated method stub
// System.exit(0);
// try {
// ethd.join();
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
public void onDestroy() {
// TODO Auto-generated method stub
System.exit(0);
try {
ethd.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

View File

@ -2,17 +2,19 @@ package com.reicast.emulator.emu;
import android.annotation.TargetApi;
import android.opengl.EGL14;
import android.opengl.EGLConfig;
import android.opengl.EGLContext;
import android.opengl.EGLDisplay;
import android.opengl.EGLExt;
import android.opengl.GLSurfaceView;
import android.opengl.EGLSurface;
import android.opengl.GLES20;
import android.os.Build;
import android.util.Log;
import android.view.Window;
import java.util.Locale;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class GLCFactory14 {
@ -25,33 +27,52 @@ public class GLCFactory14 {
private int EGL_DEPTH_ENCODING_NV = 0x30E2;
private int EGL_DEPTH_ENCODING_NONLINEAR_NV = 0x30E3;
public static class ContextFactory implements GLSurfaceView.EGLContextFactory
private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
private void configureWindow() {
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
}
public EGLDisplay getDisplay() {
EGLDisplay eglDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
if (eglDisplay == EGL14.EGL_NO_DISPLAY) {
throw new RuntimeException("eglGetDisplay failed");
}
int[] major = new int[1];
int[] minor = new int[1];
if (!EGL14.eglInitialize(eglDisplay, major, 0, minor, 0)) {
throw new RuntimeException("eglInitialize failed");
}
if (minor[0] < 4) {
throw new RuntimeException("EGL 1.4 required");
}
return eglDisplay;
}
public void terminate(EGLDisplay display) {
EGL14.eglTerminate(display);
}
public EGLContext createContext(EGLDisplay display, EGLConfig eglConfig)
{
private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
EGLContext context = EGL14.EGL_NO_CONTEXT;
for ( int clientVersion = 3; clientVersion >= 2; clientVersion-- ) {
int[] attrList = { EGL_CONTEXT_CLIENT_VERSION, clientVersion, EGL14.EGL_NONE };
public EGLContext createContext(EGL10 egl,EGLDisplay display,EGLConfig eglConfig)
{
EGLContext context = EGL10.EGL_NO_CONTEXT;
for ( int clientVersion = 3; clientVersion >= 2; clientVersion-- ) {
int[] attrList = { EGL_CONTEXT_CLIENT_VERSION, clientVersion, EGL14.EGL_NONE };
LOGI("Creating OpenGL ES " + clientVersion + " context");
LOGI("Creating OpenGL ES " + clientVersion + " context");
checkEglError("Before eglCreateContext",egl);
context = egl.eglCreateContext(display,eglConfig,EGL10.EGL_NO_CONTEXT,attrList);
checkEglError("After eglCreateContext",egl);
if (context != EGL10.EGL_NO_CONTEXT) {
break;
}
context = EGL14.eglCreateContext(display, eglConfig, EGL14.EGL_NO_CONTEXT, attrList, 0);
if (context != EGL14.EGL_NO_CONTEXT) {
break;
}
return(context);
}
return(context);
}
public void destroyContext(EGL10 egl,EGLDisplay display,EGLContext context)
{
LOGI("Destroying OpenGL ES X context");
egl.eglDestroyContext(display,context);
}
public void destroyContext(EGLDisplay display, EGLContext context) {
EGL14.eglDestroyContext(display, context);
}
private static void checkEglError(String prompt,EGL10 egl)
@ -62,200 +83,193 @@ public class GLCFactory14 {
LOGE(String.format(Locale.getDefault(), "%s: EGL error: 0x%x",prompt,error));
}
public static class ConfigChooser implements GLSurfaceView.EGLConfigChooser
{
// Subclasses can adjust these values:
protected int mRedSize;
protected int mGreenSize;
protected int mBlueSize;
protected int mAlphaSize;
protected int mDepthSize;
protected int mStencilSize;
private int[] mValue = new int[1];
// Subclasses can adjust these values:
protected int mRedSize;
protected int mGreenSize;
protected int mBlueSize;
protected int mAlphaSize;
protected int mDepthSize;
protected int mStencilSize;
private int[] mValue = new int[1];
public ConfigChooser(int r,int g,int b,int a,int depth,int stencil)
{
mRedSize = r;
mGreenSize = g;
mBlueSize = b;
mAlphaSize = a;
mDepthSize = depth;
mStencilSize = stencil;
public EGLConfig chooseConfig(EGLDisplay display) {
mValue = new int[1];
int glAPIToTry = EGLExt.EGL_OPENGL_ES3_BIT_KHR;
int[] configSpec = null;
do {
EGL14.eglBindAPI(glAPIToTry);
int renderableType;
if (glAPIToTry == EGLExt.EGL_OPENGL_ES3_BIT_KHR) {
renderableType = EGLExt.EGL_OPENGL_ES3_BIT_KHR;
// If this API does not work, try ES2 next.
glAPIToTry = EGL14.EGL_OPENGL_ES2_BIT;
} else {
renderableType = EGL14.EGL_OPENGL_ES2_BIT;
// If this API does not work, is a potato.
glAPIToTry = EGL10.EGL_NONE;
}
// This EGL config specification is used to specify 3.0 rendering.
// We use a minimum size of 8 bits for red/green/blue, but will
// perform actual matching in chooseConfig() below.
configSpec = new int[] {
EGL14.EGL_RED_SIZE, 8,
EGL14.EGL_GREEN_SIZE, 8,
EGL14.EGL_BLUE_SIZE, 8,
EGL14.EGL_RENDERABLE_TYPE, renderableType,
EGL14.EGL_DEPTH_SIZE, 16,
EGL14.EGL_NONE
};
if (!EGL14.eglChooseConfig(display, configSpec, 0,null, 0, 0, mValue, 0)) {
configSpec[9] = 16;
if (!EGL14.eglChooseConfig(display, configSpec, 0,null, 0, 0, mValue, 0)) {
throw new IllegalArgumentException("Could not get context count");
}
}
} while (glAPIToTry != EGL10.EGL_NONE && mValue[0]<=0);
if (mValue[0]<=0) {
throw new IllegalArgumentException("No configs match configSpec");
}
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
mValue = new int[1];
// Get all matching configurations.
EGLConfig[] configs = new EGLConfig[mValue[0]];
if (GL2JNIView.DEBUG)
LOGW(String.format(Locale.getDefault(), "%d configurations", configs.length));
if (!EGL14.eglChooseConfig(display, configSpec, 0, configs,0, mValue[0], mValue, 0)) {
throw new IllegalArgumentException("Could not get config data");
}
int glAPIToTry = EGLExt.EGL_OPENGL_ES3_BIT_KHR;
int[] configSpec = null;
for (int i = 0; i < configs.length; ++i) {
EGLConfig config = configs[i];
int d = findConfigAttrib(display, config, EGL14.EGL_DEPTH_SIZE, 0);
int s = findConfigAttrib(display, config, EGL14.EGL_STENCIL_SIZE, 0);
do {
EGL14.eglBindAPI(glAPIToTry);
// We need at least mDepthSize and mStencilSize bits
if (d >= mDepthSize || s >= mStencilSize) {
// We want an *exact* match for red/green/blue/alpha
int r = findConfigAttrib(display, config, EGL14.EGL_RED_SIZE, 0);
int g = findConfigAttrib(display, config, EGL14.EGL_GREEN_SIZE, 0);
int b = findConfigAttrib(display, config, EGL14.EGL_BLUE_SIZE, 0);
int a = findConfigAttrib(display, config, EGL14.EGL_ALPHA_SIZE, 0);
int renderableType;
if (glAPIToTry == EGLExt.EGL_OPENGL_ES3_BIT_KHR) {
renderableType = EGLExt.EGL_OPENGL_ES3_BIT_KHR;
// If this API does not work, try ES2 next.
glAPIToTry = EGL14.EGL_OPENGL_ES2_BIT;
} else {
renderableType = EGL14.EGL_OPENGL_ES2_BIT;
// If this API does not work, is a potato.
glAPIToTry = EGL10.EGL_NONE;
}
// This EGL config specification is used to specify 2.0 rendering.
// We use a minimum size of 4 bits for red/green/blue, but will
// perform actual matching in chooseConfig() below.
configSpec = new int[] {
EGL14.EGL_RED_SIZE, 4,
EGL14.EGL_GREEN_SIZE, 4,
EGL14.EGL_BLUE_SIZE, 4,
EGL14.EGL_RENDERABLE_TYPE, renderableType,
EGL14.EGL_DEPTH_SIZE, 16,
EGL14.EGL_NONE
};
if (!egl.eglChooseConfig(display, configSpec, null, 0, mValue)) {
configSpec[9] = 16;
if (!egl.eglChooseConfig(display, configSpec, null, 0, mValue)) {
throw new IllegalArgumentException("Could not get context count");
if (r == mRedSize && g == mGreenSize && b == mBlueSize
&& a == mAlphaSize)
if (GL2JNIView.DEBUG) {
LOGW(String.format("Configuration %d:", i));
printConfig(display, configs[i]);
}
}
} while (glAPIToTry != EGL10.EGL_NONE && mValue[0]<=0);
if (mValue[0]<=0) {
throw new IllegalArgumentException("No configs match configSpec");
return config;
}
// Get all matching configurations.
EGLConfig[] configs = new EGLConfig[mValue[0]];
if (GL2JNIView.DEBUG)
LOGW(String.format(Locale.getDefault(), "%d configurations", configs.length));
if (!egl.eglChooseConfig(display, configSpec, configs, mValue[0], mValue)) {
throw new IllegalArgumentException("Could not get config data");
}
for (int i = 0; i < configs.length; ++i) {
EGLConfig config = configs[i];
int d = findConfigAttrib(egl, display, config,
EGL14.EGL_DEPTH_SIZE, 0);
int s = findConfigAttrib(egl, display, config,
EGL14.EGL_STENCIL_SIZE, 0);
// We need at least mDepthSize and mStencilSize bits
if (d >= mDepthSize || s >= mStencilSize) {
// We want an *exact* match for red/green/blue/alpha
int r = findConfigAttrib(egl, display, config,
EGL14.EGL_RED_SIZE, 0);
int g = findConfigAttrib(egl, display, config,
EGL14.EGL_GREEN_SIZE, 0);
int b = findConfigAttrib(egl, display, config,
EGL14.EGL_BLUE_SIZE, 0);
int a = findConfigAttrib(egl, display, config,
EGL14.EGL_ALPHA_SIZE, 0);
if (r == mRedSize && g == mGreenSize && b == mBlueSize
&& a == mAlphaSize)
if (GL2JNIView.DEBUG) {
LOGW(String.format("Configuration %d:", i));
printConfig(egl, display, configs[i]);
}
return config;
}
}
throw new IllegalArgumentException("Could not find suitable EGL config");
}
private int findConfigAttrib(EGL10 egl,EGLDisplay display,EGLConfig config,int attribute,int defaultValue)
{
return(egl.eglGetConfigAttrib(display,config,attribute,mValue)? mValue[0] : defaultValue);
}
throw new IllegalArgumentException("Could not find suitable EGL config");
}
private void printConfig(EGL10 egl,EGLDisplay display,EGLConfig config)
{
final int[] attributes =
private int findConfigAttrib(EGLDisplay display, EGLConfig config, int defaultValue, int attribute) {
int[] value = new int[1];
if (EGL14.eglGetConfigAttrib(display, config, attribute, value, 0)) {
return value[0];
}
return defaultValue;
}
private void printConfig(EGLDisplay display, EGLConfig config)
{
final int[] attributes =
{
EGL14.EGL_BUFFER_SIZE,
EGL14.EGL_ALPHA_SIZE,
EGL14.EGL_BLUE_SIZE,
EGL14.EGL_GREEN_SIZE,
EGL14.EGL_RED_SIZE,
EGL14.EGL_DEPTH_SIZE,
EGL14.EGL_STENCIL_SIZE,
EGL14.EGL_CONFIG_CAVEAT,
EGL14.EGL_CONFIG_ID,
EGL14.EGL_LEVEL,
EGL14.EGL_MAX_PBUFFER_HEIGHT,
EGL14.EGL_MAX_PBUFFER_PIXELS,
EGL14.EGL_MAX_PBUFFER_WIDTH,
EGL14.EGL_NATIVE_RENDERABLE,
EGL14.EGL_NATIVE_VISUAL_ID,
EGL14.EGL_NATIVE_VISUAL_TYPE,
0x3030, // EGL14.EGL_PRESERVED_RESOURCES,
EGL14.EGL_SAMPLES,
EGL14.EGL_SAMPLE_BUFFERS,
EGL14.EGL_SURFACE_TYPE,
EGL14.EGL_TRANSPARENT_TYPE,
EGL14.EGL_TRANSPARENT_RED_VALUE,
EGL14.EGL_TRANSPARENT_GREEN_VALUE,
EGL14.EGL_TRANSPARENT_BLUE_VALUE,
EGL14.EGL_BIND_TO_TEXTURE_RGB,
EGL14.EGL_BIND_TO_TEXTURE_RGBA,
EGL14.EGL_MIN_SWAP_INTERVAL,
EGL14.EGL_MAX_SWAP_INTERVAL,
EGL14.EGL_LUMINANCE_SIZE,
EGL14.EGL_ALPHA_MASK_SIZE,
EGL14.EGL_COLOR_BUFFER_TYPE,
EGL14.EGL_RENDERABLE_TYPE,
EGL14.EGL_CONFORMANT
EGL14.EGL_BUFFER_SIZE,
EGL14.EGL_ALPHA_SIZE,
EGL14.EGL_BLUE_SIZE,
EGL14.EGL_GREEN_SIZE,
EGL14.EGL_RED_SIZE,
EGL14.EGL_DEPTH_SIZE,
EGL14.EGL_STENCIL_SIZE,
EGL14.EGL_CONFIG_CAVEAT,
EGL14.EGL_CONFIG_ID,
EGL14.EGL_LEVEL,
EGL14.EGL_MAX_PBUFFER_HEIGHT,
EGL14.EGL_MAX_PBUFFER_PIXELS,
EGL14.EGL_MAX_PBUFFER_WIDTH,
EGL14.EGL_NATIVE_RENDERABLE,
EGL14.EGL_NATIVE_VISUAL_ID,
EGL14.EGL_NATIVE_VISUAL_TYPE,
0x3030, // EGL14.EGL_PRESERVED_RESOURCES,
EGL14.EGL_SAMPLES,
EGL14.EGL_SAMPLE_BUFFERS,
EGL14.EGL_SURFACE_TYPE,
EGL14.EGL_TRANSPARENT_TYPE,
EGL14.EGL_TRANSPARENT_RED_VALUE,
EGL14.EGL_TRANSPARENT_GREEN_VALUE,
EGL14.EGL_TRANSPARENT_BLUE_VALUE,
EGL14.EGL_BIND_TO_TEXTURE_RGB,
EGL14.EGL_BIND_TO_TEXTURE_RGBA,
EGL14.EGL_MIN_SWAP_INTERVAL,
EGL14.EGL_MAX_SWAP_INTERVAL,
EGL14.EGL_LUMINANCE_SIZE,
EGL14.EGL_ALPHA_MASK_SIZE,
EGL14.EGL_COLOR_BUFFER_TYPE,
EGL14.EGL_RENDERABLE_TYPE,
EGL14.EGL_CONFORMANT
};
final String[] names =
final String[] names =
{
"EGL_BUFFER_SIZE",
"EGL_ALPHA_SIZE",
"EGL_BLUE_SIZE",
"EGL_GREEN_SIZE",
"EGL_RED_SIZE",
"EGL_DEPTH_SIZE",
"EGL_STENCIL_SIZE",
"EGL_CONFIG_CAVEAT",
"EGL_CONFIG_ID",
"EGL_LEVEL",
"EGL_MAX_PBUFFER_HEIGHT",
"EGL_MAX_PBUFFER_PIXELS",
"EGL_MAX_PBUFFER_WIDTH",
"EGL_NATIVE_RENDERABLE",
"EGL_NATIVE_VISUAL_ID",
"EGL_NATIVE_VISUAL_TYPE",
"EGL_PRESERVED_RESOURCES",
"EGL_SAMPLES",
"EGL_SAMPLE_BUFFERS",
"EGL_SURFACE_TYPE",
"EGL_TRANSPARENT_TYPE",
"EGL_TRANSPARENT_RED_VALUE",
"EGL_TRANSPARENT_GREEN_VALUE",
"EGL_TRANSPARENT_BLUE_VALUE",
"EGL_BIND_TO_TEXTURE_RGB",
"EGL_BIND_TO_TEXTURE_RGBA",
"EGL_MIN_SWAP_INTERVAL",
"EGL_MAX_SWAP_INTERVAL",
"EGL_LUMINANCE_SIZE",
"EGL_ALPHA_MASK_SIZE",
"EGL_COLOR_BUFFER_TYPE",
"EGL_RENDERABLE_TYPE",
"EGL_CONFORMANT"
"EGL_BUFFER_SIZE",
"EGL_ALPHA_SIZE",
"EGL_BLUE_SIZE",
"EGL_GREEN_SIZE",
"EGL_RED_SIZE",
"EGL_DEPTH_SIZE",
"EGL_STENCIL_SIZE",
"EGL_CONFIG_CAVEAT",
"EGL_CONFIG_ID",
"EGL_LEVEL",
"EGL_MAX_PBUFFER_HEIGHT",
"EGL_MAX_PBUFFER_PIXELS",
"EGL_MAX_PBUFFER_WIDTH",
"EGL_NATIVE_RENDERABLE",
"EGL_NATIVE_VISUAL_ID",
"EGL_NATIVE_VISUAL_TYPE",
"EGL_PRESERVED_RESOURCES",
"EGL_SAMPLES",
"EGL_SAMPLE_BUFFERS",
"EGL_SURFACE_TYPE",
"EGL_TRANSPARENT_TYPE",
"EGL_TRANSPARENT_RED_VALUE",
"EGL_TRANSPARENT_GREEN_VALUE",
"EGL_TRANSPARENT_BLUE_VALUE",
"EGL_BIND_TO_TEXTURE_RGB",
"EGL_BIND_TO_TEXTURE_RGBA",
"EGL_MIN_SWAP_INTERVAL",
"EGL_MAX_SWAP_INTERVAL",
"EGL_LUMINANCE_SIZE",
"EGL_ALPHA_MASK_SIZE",
"EGL_COLOR_BUFFER_TYPE",
"EGL_RENDERABLE_TYPE",
"EGL_CONFORMANT"
};
int[] value = new int[1];
int[] value = new int[1];
for(int i=0 ; i<attributes.length ; i++)
if(egl.eglGetConfigAttrib(display,config,attributes[i],value))
LOGI(String.format(Locale.getDefault(), " %s: %d\n",names[i],value[0]));
else
while(egl.eglGetError()!=EGL14.EGL_SUCCESS);
}
for(int i=0 ; i<attributes.length ; i++)
if(EGL14.eglGetConfigAttrib(display, config, attributes[i], value,0))
LOGI(String.format(Locale.getDefault(), " %s: %d\n",names[i],value[0]));
else
while(EGL14.eglGetError() != EGL14.EGL_SUCCESS);
}
public EGLSurface createWindowSurface(EGLDisplay display, EGLConfig config, Window window) {
EGLSurface eglSurface = EGL14.eglCreateWindowSurface(display, config, window, null, 0);
return eglSurface;
}
public void destroySurface(EGLDisplay display, EGLSurface window) {
EGL14.eglDestroySurface(display, window);
}
}

View File

@ -8,8 +8,8 @@ public final class JNIdc
public static native void config(String dirName);
public static native void init(String fileName);
public static native void run(Object track);
public static native void stop();
public static native void terminate();
public static native void pause();
public static native void destroy();
public static native int send(int cmd, int opt);
public static native int data(int cmd, byte[] data);

View File

@ -25,8 +25,8 @@ extern "C"
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_config(JNIEnv *env,jobject obj,jstring dirName) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_init(JNIEnv *env,jobject obj,jstring fileName) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_run(JNIEnv *env,jobject obj,jobject emu_thread) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_terminate(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_pause(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_destroy(JNIEnv *env,jobject obj) __attribute__((visibility("default")));
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_send(JNIEnv *env,jobject obj,jint id, jint v) __attribute__((visibility("default")));
JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_data(JNIEnv *env,jobject obj,jint id, jbyteArray d) __attribute__((visibility("default")));
@ -165,7 +165,7 @@ void egl_stealcntx();
void SetApplicationPath(wchar *path);
int dc_init(int argc,wchar* argv[]);
void dc_run();
//void dc_stop();
void dc_pause();
void dc_term();
void mcfg_Create(MapleDeviceType type,u32 bus,u32 port);
@ -376,12 +376,12 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_setupVmu(JNIEnv *env,
//jpix=env->NewByteArray(1536);
}
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_stop(JNIEnv *env,jobject obj)
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_pause(JNIEnv *env,jobject obj)
{
// dc_stop();
dc_pause();
}
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_terminate(JNIEnv *env,jobject obj)
JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_destroy(JNIEnv *env,jobject obj)
{
dc_term();
}