summaryrefslogtreecommitdiff
path: root/Source/Android/src
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2014-05-05 13:44:08 -0500
committerRyan Houdek <Sonicadvance1@gmail.com>2014-05-05 13:44:08 -0500
commit33bdc0f985d4c46c88d19677330554d1edc09b86 (patch)
treee714c10fb72aa9e31ad24e0543d30d32f1a59c2d /Source/Android/src
parent2f92b82b296629f9154f94f5d7541c0d61245807 (diff)
Adds support for the PP shaders in the Android UI.
Copies over the PP shaders to the APK's assets and installs them on run. Exposes them via the video settings UI. This is in anticipation of dropping the workaround for rotated blits on Adreno and instead forcing shader usage by the user.
Diffstat (limited to 'Source/Android/src')
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java16
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java5
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java36
3 files changed, 56 insertions, 1 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
index b28d476e23..b49763b862 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
@@ -40,6 +40,21 @@ public final class DolphinEmulator extends Activity
}
}
+ private void CopyAssetFolder(String assetFolder, String outputFolder)
+ {
+ try
+ {
+ for (String file : getAssets().list(assetFolder))
+ {
+ CopyAsset(assetFolder + File.separator + file, outputFolder + File.separator + file);
+ }
+ }
+ catch (IOException e)
+ {
+ Log.e("DolphinEmulator", "Failed to copy asset folder: " + assetFolder, e);
+ }
+ }
+
private void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
@@ -75,6 +90,7 @@ public final class DolphinEmulator extends Activity
CopyAsset("dsp_rom.bin", GCDir + File.separator + "dsp_rom.bin");
CopyAsset("font_ansi.bin", GCDir + File.separator + "font_ansi.bin");
CopyAsset("font_sjis.bin", GCDir + File.separator + "font_sjis.bin");
+ CopyAssetFolder("Shaders", BaseDir + File.separator + "Shaders");
}
// Load the configuration keys set in the Dolphin ini and gfx ini files
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java
index dcce4c51ef..1402f4393a 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java
@@ -45,6 +45,7 @@ public final class UserPreferences
editor.putString("internalResolution", getConfig("gfx_opengl.ini", "Settings", "EFBScale", "2") );
editor.putString("FSAA", getConfig("gfx_opengl.ini", "Settings", "MSAA", "0"));
editor.putString("anisotropicFiltering", getConfig("gfx_opengl.ini", "Enhancements", "MaxAnisotropy", "0"));
+ editor.putString("postProcessingShader", getConfig("gfx_opengl.ini", "Enhancements", "PostProcessingShader", ""));
editor.putBoolean("scaledEFBCopy", getConfig("gfx_opengl.ini", "Hacks", "EFBScaledCopy", "True").equals("True"));
editor.putBoolean("perPixelLighting", getConfig("gfx_opengl.ini", "Settings", "EnablePixelLighting", "False").equals("True"));
editor.putBoolean("forceTextureFiltering", getConfig("gfx_opengl.ini", "Enhancements", "ForceFiltering", "False").equals("True"));
@@ -161,6 +162,9 @@ public final class UserPreferences
// Anisotropic Filtering Level. Falls back to 1x upon error.
String anisotropicFiltLevel = prefs.getString("anisotropicFiltering", "0");
+ // Post processing shader setting
+ String postProcessing = prefs.getString("postProcessingShader", "");
+
// Whether or not Scaled EFB copies are used.
boolean usingScaledEFBCopy = prefs.getBoolean("scaledEFBCopy", true);
@@ -237,6 +241,7 @@ public final class UserPreferences
NativeLibrary.SetConfig("gfx_opengl.ini", "Settings", "EFBScale", internalResolution);
NativeLibrary.SetConfig("gfx_opengl.ini", "Settings", "MSAA", FSAALevel);
NativeLibrary.SetConfig("gfx_opengl.ini", "Enhancements", "MaxAnisotropy", anisotropicFiltLevel);
+ NativeLibrary.SetConfig("gfx_opengl.ini", "Enhancements", "PostProcessingShader", postProcessing);
NativeLibrary.SetConfig("gfx_opengl.ini", "Hacks", "EFBScaledCopy", usingScaledEFBCopy ? "True" : "False");
NativeLibrary.SetConfig("gfx_opengl.ini", "Settings", "EnablePixelLighting", usingPerPixelLighting ? "True" : "False");
NativeLibrary.SetConfig("gfx_opengl.ini", "Enhancements", "ForceFiltering", isForcingTextureFiltering ? "True" : "False");
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
index 94e411ca9e..e0ba5d3754 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java
@@ -11,6 +11,7 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
+import android.os.Environment;
import android.preference.ListPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
@@ -19,6 +20,10 @@ import android.preference.PreferenceScreen;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.utils.EGLHelper;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.microedition.khronos.opengles.GL10;
/**
@@ -54,7 +59,36 @@ public final class VideoSettingsFragment extends PreferenceFragment
videoBackends.setEntries(R.array.videoBackendEntriesNoGLES3);
videoBackends.setEntryValues(R.array.videoBackendValuesNoGLES3);
}
-
+
+ //
+ // Set available post processing shaders
+ //
+ File[] shaders = new File(Environment.getExternalStorageDirectory()+ File.separator+"dolphin-emu"+ File.separator+"Shaders").listFiles();
+ List<CharSequence> shader_names = new ArrayList<CharSequence>();
+ List<CharSequence> shader_values = new ArrayList<CharSequence>();
+
+ // Disabled option
+ shader_names.add("Disabled");
+ shader_values.add("");
+
+ for (File file : shaders)
+ {
+ if (file.isFile())
+ {
+ String filename = file.getName();
+ if (filename.contains(".glsl"))
+ {
+ // Strip the extension and put it in to the list
+ shader_names.add(filename.substring(0, filename.lastIndexOf('.')));
+ shader_values.add(filename.substring(0, filename.lastIndexOf('.')));
+ }
+ }
+ }
+
+ final ListPreference shader_preference = (ListPreference) findPreference("postProcessingShader");
+ shader_preference.setEntries(shader_names.toArray(new CharSequence[shader_names.size()]));
+ shader_preference.setEntryValues(shader_values.toArray(new CharSequence[shader_values.size()]));
+
//
// Disable all options if Software Rendering is used.
//