From 1f750904af5d2bd25467fea9dd79e22153cd2bb6 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 11 Feb 2014 00:16:21 -0600 Subject: [PATCH] Fix the OpenGL About tab. Move EGLHelper to be local to the creation of the about GL/GLES tabs so we don't have 3 EGL contexts running at a time. Fix issues with OpenGL context creation here so we show the correct information. This requires adding an EGL function to the NativeLibrary since Android's JAVA bindings don't expose eglBindAPI. --- .../src/org/dolphinemu/dolphinemu/NativeLibrary.java | 3 +++ .../dolphinemu/dolphinemu/about/GLES2InfoFragment.java | 4 ++-- .../dolphinemu/dolphinemu/about/GLES3InfoFragment.java | 4 ++-- .../dolphinemu/dolphinemu/about/GLInfoFragment.java | 4 ++-- .../src/org/dolphinemu/dolphinemu/utils/EGLHelper.java | 10 ++++++++++ Source/Core/DolphinWX/MainAndroid.cpp | 6 ++++++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java index 1289ff7d01..6b5cca1448 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -200,6 +200,9 @@ public final class NativeLibrary /** Stops emulation. */ public static native void StopEmulation(); + /** Native EGL functions not exposed by Java bindings **/ + public static native void eglBindAPI(int api); + static { try diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java index a0029af330..952516165d 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES2InfoFragment.java @@ -28,8 +28,6 @@ import java.util.List; */ public final class GLES2InfoFragment extends ListFragment { - private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT); - private final Limit[] Limits = { new Limit("Vendor", GLES20.GL_VENDOR, Type.STRING), new Limit("Version", GLES20.GL_VERSION, Type.STRING), @@ -56,6 +54,8 @@ public final class GLES2InfoFragment extends ListFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT); + ListView rootView = (ListView) inflater.inflate(R.layout.gamelist_listview, container, false); List Input = new ArrayList(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java index 797a047b14..17ba49635c 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLES3InfoFragment.java @@ -28,8 +28,6 @@ import java.util.List; */ public final class GLES3InfoFragment extends ListFragment { - private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES3_BIT_KHR); - private final Limit[] Limits = { new Limit("Vendor", GLES30.GL_VENDOR, Type.STRING), new Limit("Version", GLES30.GL_VERSION, Type.STRING), @@ -88,6 +86,8 @@ public final class GLES3InfoFragment extends ListFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES3_BIT_KHR); + ListView rootView = (ListView) inflater.inflate(R.layout.gamelist_listview, container, false); List Input = new ArrayList(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java index a3d7167528..448f56d8e0 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/about/GLInfoFragment.java @@ -31,8 +31,6 @@ import javax.microedition.khronos.opengles.GL10; */ public final class GLInfoFragment extends ListFragment { - private final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_BIT); - private final Limit[] Limits = { new Limit("Vendor", GL10.GL_VENDOR, Type.STRING), new Limit("Version", GL10.GL_VERSION, Type.STRING), @@ -43,6 +41,8 @@ public final class GLInfoFragment extends ListFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final EGLHelper eglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_BIT); + ListView rootView = (ListView) inflater.inflate(R.layout.gamelist_listview, container, false); List Input = new ArrayList(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/utils/EGLHelper.java b/Source/Android/src/org/dolphinemu/dolphinemu/utils/EGLHelper.java index 94ea903ae6..c908a7631f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/utils/EGLHelper.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/utils/EGLHelper.java @@ -16,6 +16,8 @@ import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES30; import android.util.Log; +import org.dolphinemu.dolphinemu.NativeLibrary; + /** * Utility class that abstracts all the stuff about * EGL initialization out of the way if all that is @@ -41,6 +43,10 @@ public final class EGLHelper public static final int EGL_OPENGL_BIT = 0x0008; public static final int EGL_OPENGL_ES3_BIT_KHR = 0x0040; + // API types + public static final int EGL_OPENGL_ES_API = 0x30A0; + public static final int EGL_OPENGL_API = 0x30A2; + /** * Constructor *

@@ -295,6 +301,10 @@ public final class EGLHelper ctx_attribs[1] = 2; break; } + if (renderableType == EGL_OPENGL_BIT) + NativeLibrary.eglBindAPI(EGL_OPENGL_API); + else + NativeLibrary.eglBindAPI(EGL_OPENGL_ES_API); mEGLContext = mEGL.eglCreateContext(mDisplay, mEGLConfigs[0], EGL10.EGL_NO_CONTEXT, ctx_attribs); mEGLSurface = mEGL.eglCreatePbufferSurface(mDisplay, mEGLConfigs[0], attribs); diff --git a/Source/Core/DolphinWX/MainAndroid.cpp b/Source/Core/DolphinWX/MainAndroid.cpp index 3d3b052a09..23c6014333 100644 --- a/Source/Core/DolphinWX/MainAndroid.cpp +++ b/Source/Core/DolphinWX/MainAndroid.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "Android/ButtonManager.h" #include "Common/Common.h" @@ -297,6 +298,11 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SaveScreenSh Core::SaveScreenShot(); } +JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_eglBindAPI(JNIEnv *env, jobject obj, jint api) +{ + eglBindAPI(api); +} + JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig(JNIEnv *env, jobject obj, jstring jFile, jstring jKey, jstring jValue, jstring jDefault) { IniFile ini;