Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FdsGame.cs6
-rw-r--r--ImageGooglerForm.cs21
-rw-r--r--MainForm.cs34
-rw-r--r--NesMiniApplication.cs28
-rw-r--r--SelectModsForm.Designer.cs1
-rw-r--r--SelectModsForm.cs38
-rw-r--r--WorkerForm.cs2
-rw-r--r--hakchi_gui.csproj45
-rw-r--r--mods/mod_hakchi/hakchi/init2
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit4
-rw-r--r--mods/mod_hakchi/hakchi/script/transfer6
-rw-r--r--tools/tar.exebin0 -> 158208 bytes
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/core/bsnes_cplusplus98_libretro.sobin0 -> 728776 bytes
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_accuracy_libretro.sobin0 -> 1421412 bytes
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_performance_libretro.sobin0 -> 1456028 bytes
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/core/mednafen_gba_libretro.sobin0 -> 1970471 bytes
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/retroarch.cfg4
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/5xbr-retro.glsl287
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/bead.glsl158
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/blinky.glsl242
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/pixellate.glsl175
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/quilez.glsl121
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/retro-v2.glsl150
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glsl133
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glslp13
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/sharp-bilinear.glsl109
-rw-r--r--user_mods/retroarch.hmod/etc/libretro/shaders/stock.glsl111
-rw-r--r--user_mods/retroarch.hmod/readme.txt7
28 files changed, 1628 insertions, 69 deletions
diff --git a/FdsGame.cs b/FdsGame.cs
index dd6969e3..ffd452b1 100644
--- a/FdsGame.cs
+++ b/FdsGame.cs
@@ -48,6 +48,12 @@ namespace com.clusterrr.hakchi_gui
{
if (rawRomData == null)
rawRomData = File.ReadAllBytes(fdsFileName);
+ if (Encoding.ASCII.GetString(rawRomData, 0, 3) == "FDS") // header? cut it!
+ {
+ var fdsDataNoHeader = new byte[rawRomData.Length - 0x10];
+ Array.Copy(rawRomData, 0x10, fdsDataNoHeader, 0, fdsDataNoHeader.Length);
+ rawRomData = fdsDataNoHeader;
+ }
var crc32 = CRC32(rawRomData);
var code = GenerateCode(crc32, prefixCode);
var gamePath = Path.Combine(GamesDirectory, code);
diff --git a/ImageGooglerForm.cs b/ImageGooglerForm.cs
index db1cf819..0e66503d 100644
--- a/ImageGooglerForm.cs
+++ b/ImageGooglerForm.cs
@@ -25,22 +25,23 @@ namespace com.clusterrr.hakchi_gui
get { return result; }
}
- public ImageGooglerForm(string query, NesMiniApplication app)
+ public ImageGooglerForm(NesMiniApplication app)
{
InitializeComponent();
+ Text = "Google Images - " + app.Name ?? "";
+ searchThread = new Thread(SearchThread);
+ searchThread.Start(app);
+ }
+
+ public static string[] GetImageUrls(NesMiniApplication app)
+ {
+ string query = app.Name ?? "";
if (app is NesGame)
query += " nes|famicom box art";
else if (app is FdsGame)
query += " fds box art";
else
- query += " box art";
- Text = "Google Images - " + query;
- searchThread = new Thread(SearchThread);
- searchThread.Start(query);
- }
-
- public static string[] GetImageUrls(string query)
- {
+ query += " game (box|vover) art";
var url = string.Format("https://www.google.com/search?q={0}&source=lnms&tbm=isch", HttpUtility.UrlEncode(query));
Debug.WriteLine("Web request: " + url);
var request = WebRequest.Create(url);
@@ -80,7 +81,7 @@ namespace com.clusterrr.hakchi_gui
{
try
{
- var urls = GetImageUrls(o as string);
+ var urls = GetImageUrls(o as NesMiniApplication);
foreach (var url in urls)
{
//new Thread(DownloadImageThread).Start(url);
diff --git a/MainForm.cs b/MainForm.cs
index c025f41f..e327bf47 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -333,7 +333,7 @@ namespace com.clusterrr.hakchi_gui
var selected = checkedListBoxGames.SelectedItem;
if (selected == null || !(selected is NesMiniApplication)) return;
var game = (selected as NesMiniApplication);
- var googler = new ImageGooglerForm(game.Name, game);
+ var googler = new ImageGooglerForm(game);
if (googler.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
game.Image = googler.Result;
@@ -586,25 +586,19 @@ namespace com.clusterrr.hakchi_gui
else
needOriginal = true;
}
- if (needOriginal)
- for (int i = 0; i < checkedListBoxDefaultGames.Items.Count; i++)
- {
- if (checkedListBoxDefaultGames.CheckedIndices.Contains(i))
- workerForm.Games.Add((NesDefaultGame)checkedListBoxDefaultGames.Items[i]);
- else
- hiddenGames.Add(((NesDefaultGame)checkedListBoxDefaultGames.Items[i]).Code);
- }
+ for (int i = 0; i < checkedListBoxDefaultGames.Items.Count; i++)
+ {
+ if (needOriginal && checkedListBoxDefaultGames.CheckedIndices.Contains(i))
+ workerForm.Games.Add((NesDefaultGame)checkedListBoxDefaultGames.Items[i]);
+ else
+ hiddenGames.Add(((NesDefaultGame)checkedListBoxDefaultGames.Items[i]).Code);
+ }
workerForm.Config["disable_armet"] = (ConfigIni.AntiArmetLevel > 0) ? "y" : "n";
workerForm.Config["nes_extra_args"] = ConfigIni.ExtraCommandLineArguments;
- if (needOriginal)
- workerForm.HiddenGames = hiddenGames.ToArray();
- else
- workerForm.HiddenGames = null;
+ workerForm.HiddenGames = hiddenGames.ToArray();
workerForm.FoldersMode = ConfigIni.FoldersMode;
workerForm.MaxGamesPerFolder = ConfigIni.MaxGamesPerFolder;
-
workerForm.MainForm = this;
-
workerForm.Start();
return workerForm.DialogResult == DialogResult.OK;
}
@@ -944,15 +938,7 @@ namespace com.clusterrr.hakchi_gui
private void checkedListBoxGames_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
- {
- var files = (string[])e.Data.GetData(DataFormats.FileDrop);
- foreach (var file in files)
- {
- var ext = Path.GetExtension(file).ToLower();
- if (ext == ".nes" || ext == ".fds")
- e.Effect = DragDropEffects.Copy;
- }
- }
+ e.Effect = DragDropEffects.Copy;
}
private void checkedListBoxGames_DragDrop(object sender, DragEventArgs e)
diff --git a/NesMiniApplication.cs b/NesMiniApplication.cs
index 31f964f9..ae8e9345 100644
--- a/NesMiniApplication.cs
+++ b/NesMiniApplication.cs
@@ -133,11 +133,12 @@ namespace com.clusterrr.hakchi_gui
application = "/bin/gb";
break;
case ".gba":
- prefixCode = 'G';
+ prefixCode = 'A';
application = "/bin/gba";
- break;
- case ".z64":
+ break;
case ".n64":
+ case ".z64":
+ case ".v64":
prefixCode = 'F';
application = "/bin/n64";
break;
@@ -155,7 +156,7 @@ namespace com.clusterrr.hakchi_gui
application = "/bin/sms";
break;
default:
- prefixCode = '0';
+ prefixCode = 'Z';
application = "/bin/path-to-your-app";
break;
}
@@ -309,23 +310,26 @@ namespace com.clusterrr.hakchi_gui
// Just keep aspect ratio
const int maxX = 204;
const int maxY = 204;
- if (image.Width / image.Height > maxX / maxY)
- outImage = new Bitmap(maxX, maxY * image.Height / image.Width);
+ if ((double)image.Width / (double)image.Height > (double)maxX / (double)maxY)
+ outImage = new Bitmap(maxX, (int)((double)maxY * (double)image.Height / (double)image.Width));
else
- outImage = new Bitmap(maxX * image.Width / image.Height, maxY);
- const int maxXsmall = 40;
- const int maxYsmall = 40;
- if (image.Width / image.Height > maxXsmall / maxYsmall)
- outImageSmall = new Bitmap(maxXsmall, maxYsmall * image.Height / image.Width);
+ outImage = new Bitmap((int)(maxX * (double)image.Width / (double)image.Height), maxY);
+
+ int maxXsmall = 40;
+ int maxYsmall = 40;
+ if ((double)image.Width / (double)image.Height > (double)maxXsmall / (double)maxYsmall)
+ outImageSmall = new Bitmap(maxXsmall, (int)((double)maxYsmall * (double)image.Height / (double)image.Width));
else
- outImageSmall = new Bitmap(maxXsmall * image.Width / image.Height, maxYsmall);
+ outImageSmall = new Bitmap((int)(maxXsmall * (double)image.Width / (double)image.Height), maxYsmall);
gr = Graphics.FromImage(outImage);
+ gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gr.DrawImage(image, new Rectangle(0, 0, outImage.Width, outImage.Height),
new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
gr.Flush();
outImage.Save(IconPath, ImageFormat.Png);
gr = Graphics.FromImage(outImageSmall);
+ gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gr.DrawImage(outImage, new Rectangle(0, 0, outImageSmall.Width, outImageSmall.Height),
new Rectangle(0, 0, outImage.Width, outImage.Height), GraphicsUnit.Pixel);
gr.Flush();
diff --git a/SelectModsForm.Designer.cs b/SelectModsForm.Designer.cs
index a6fb2c1e..ae8f8c2b 100644
--- a/SelectModsForm.Designer.cs
+++ b/SelectModsForm.Designer.cs
@@ -33,6 +33,7 @@
this.textBoxReadme.Location = new System.Drawing.Point(276, 12);
this.textBoxReadme.Multiline = true;
this.textBoxReadme.Name = "textBoxReadme";
+ this.textBoxReadme.ReadOnly = true;
this.textBoxReadme.Size = new System.Drawing.Size(271, 334);
this.textBoxReadme.TabIndex = 1;
//
diff --git a/SelectModsForm.cs b/SelectModsForm.cs
index af721084..a0beaf7f 100644
--- a/SelectModsForm.cs
+++ b/SelectModsForm.cs
@@ -9,6 +9,7 @@ using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Windows.Forms;
namespace com.clusterrr.hakchi_gui
@@ -50,15 +51,20 @@ namespace com.clusterrr.hakchi_gui
private void checkedListBoxMods_SelectedIndexChanged(object sender, EventArgs e)
{
+ if (checkedListBoxMods.SelectedItem != null)
+ new Thread(loadReadMe).Start(checkedListBoxMods.SelectedItem.ToString());
+ else
+ {
+ textBoxReadme.Text = "";
+ textBoxReadme.Enabled = false;
+ }
+ }
+
+ void loadReadMe(object obj)
+ {
try
{
- if (checkedListBoxMods.SelectedItem == null)
- {
- textBoxReadme.Text = "";
- textBoxReadme.Enabled = false;
- return;
- }
- var selected = checkedListBoxMods.SelectedItem.ToString();
+ var selected = obj as string;
var text = "";
var dir = Path.Combine(usermodsDirectory, selected + ".hmod");
if (Directory.Exists(dir))
@@ -99,14 +105,20 @@ namespace com.clusterrr.hakchi_gui
}
}
}
-
- textBoxReadme.Text = text;
- textBoxReadme.Enabled = text.Length > 0;
+ Invoke(new Action<string, string>(showReadMe), new object[] { selected, text });
+ }
+ catch
+ {
}
- catch (Exception ex)
+ }
+
+ void showReadMe(string mod, string readme)
+ {
+ if (checkedListBoxMods.SelectedItem != null &&
+ checkedListBoxMods.SelectedItem.ToString() == mod)
{
- Debug.WriteLine(ex.Message + ex.StackTrace);
- MessageBox.Show(this, ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ textBoxReadme.Text = readme;
+ textBoxReadme.Enabled = readme.Length > 0;
}
}
}
diff --git a/WorkerForm.cs b/WorkerForm.cs
index e4b0c8fd..e52d38f3 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -682,7 +682,7 @@ namespace com.clusterrr.hakchi_gui
{
try
{
- urls = ImageGooglerForm.GetImageUrls(game.Name);
+ urls = ImageGooglerForm.GetImageUrls(game);
break;
}
catch (Exception ex)
diff --git a/hakchi_gui.csproj b/hakchi_gui.csproj
index 18db7e3e..949468bc 100644
--- a/hakchi_gui.csproj
+++ b/hakchi_gui.csproj
@@ -511,6 +511,44 @@
<None Include="user_mods\music_hack.hmod\uninstall">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
+ <None Include="user_mods\retroarch.hmod\bin\fbgrab" />
+ <None Include="user_mods\retroarch.hmod\bin\gb" />
+ <None Include="user_mods\retroarch.hmod\bin\gba" />
+ <None Include="user_mods\retroarch.hmod\bin\md" />
+ <None Include="user_mods\retroarch.hmod\bin\n64" />
+ <None Include="user_mods\retroarch.hmod\bin\nes" />
+ <None Include="user_mods\retroarch.hmod\bin\retroarch" />
+ <None Include="user_mods\retroarch.hmod\bin\retroarch-clover" />
+ <None Include="user_mods\retroarch.hmod\bin\retroarch-mini" />
+ <None Include="user_mods\retroarch.hmod\bin\retroarch-watchdog" />
+ <None Include="user_mods\retroarch.hmod\bin\sms" />
+ <None Include="user_mods\retroarch.hmod\bin\snes" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\bsnes_cplusplus98_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\bsnes_mercury_accuracy_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\bsnes_mercury_performance_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\emux_sms_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\fceumm_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\gambatte_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\genesis_plus_gx_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\mednafen_gba_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\nestopia_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\core\snes9x2010_libretro.so" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\joypad_autoconf\clovercon1.cfg" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\joypad_autoconf\clovercon2.cfg" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\retroarch.cfg" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\5xbr-retro.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\bead.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\blinky.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\pixellate.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\quilez.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\retro-v2.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\scanline.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\scanline.glslp" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\sharp-bilinear.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\libretro\shaders\stock.glsl" />
+ <None Include="user_mods\retroarch.hmod\etc\preinit.d\pe9af_retroarch" />
+ <None Include="user_mods\retroarch.hmod\install" />
+ <None Include="user_mods\retroarch.hmod\usr\bin\clover-kachikachi" />
</ItemGroup>
<ItemGroup>
<Content Include="data\GameGenieDB.xml">
@@ -612,6 +650,8 @@
<Content Include="user_mods\music_hack.hmod\readme.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
+ <Content Include="user_mods\retroarch.hmod\etc\libretro\bios\NstDatabase.xml" />
+ <Content Include="user_mods\retroarch.hmod\readme.txt" />
<None Include="folder_images\README.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@@ -673,6 +713,11 @@
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>cd $(ProjectDir)user_mods\retroarch.hmod
+$(ProjectDir)tools\tar.exe -czvf retroarch.hmod *
+move /Y $(ProjectDir)user_mods\retroarch.hmod\retroarch.hmod $(TargetDir)user_mods\</PreBuildEvent>
+ </PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
diff --git a/mods/mod_hakchi/hakchi/init b/mods/mod_hakchi/hakchi/init
index 88e2bb4f..ac0ebf1f 100644
--- a/mods/mod_hakchi/hakchi/init
+++ b/mods/mod_hakchi/hakchi/init
@@ -24,7 +24,7 @@ else
mount_base
fi
-if [ -d "$preinit" ]; then
+if [ -f "$preinit" ]; then
source "$preinit"
preinit
else
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit
index 45aeccfe..1753621d 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit
@@ -7,7 +7,9 @@ source_parts(){
mkdir -p "$temppath"
local script=$temppath/script_$(rand)
rm -f "$script"
- for i in $(find $(dirname "$1") -maxdepth 1 -path "$1" | sort); do
+ local searchpath=$(dirname "$1")
+ [ -d "$searchpath" ] || return 1
+ for i in $(find "$searchpath" -maxdepth 1 -path "$1" | sort); do
cat "$i" >> "$script"
done
dos2unix -u "$script"
diff --git a/mods/mod_hakchi/hakchi/script/transfer b/mods/mod_hakchi/hakchi/script/transfer
index 240bf41f..485d28ea 100644
--- a/mods/mod_hakchi/hakchi/script/transfer
+++ b/mods/mod_hakchi/hakchi/script/transfer
@@ -30,10 +30,8 @@ if [ -d "$transferpath/firmware" ]; then
fi
# if we're running modified firmware, mount it now
-if [ -d "$preinitpath" ]; then
- source_parts "$preinitpath/p????_*firmware*"
- source_parts "$modpath/rootfs/etc/preinit.d/p????_*firmware*"
-fi
+source_parts "$preinitpath/p????_*firmware*"
+source_parts "$modpath/rootfs/etc/preinit.d/p????_*firmware*"
# now we can do install/repair
if [ -d "$preinitpath" ]; then
diff --git a/tools/tar.exe b/tools/tar.exe
new file mode 100644
index 00000000..b5408c71
--- /dev/null
+++ b/tools/tar.exe
Binary files differ
diff --git a/user_mods/retroarch.hmod/etc/libretro/core/bsnes_cplusplus98_libretro.so b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_cplusplus98_libretro.so
new file mode 100644
index 00000000..a46ad3a2
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_cplusplus98_libretro.so
Binary files differ
diff --git a/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_accuracy_libretro.so b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_accuracy_libretro.so
new file mode 100644
index 00000000..90d2dc73
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_accuracy_libretro.so
Binary files differ
diff --git a/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_performance_libretro.so b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_performance_libretro.so
new file mode 100644
index 00000000..0a5501f7
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/core/bsnes_mercury_performance_libretro.so
Binary files differ
diff --git a/user_mods/retroarch.hmod/etc/libretro/core/mednafen_gba_libretro.so b/user_mods/retroarch.hmod/etc/libretro/core/mednafen_gba_libretro.so
new file mode 100644
index 00000000..7b3a5c95
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/core/mednafen_gba_libretro.so
Binary files differ
diff --git a/user_mods/retroarch.hmod/etc/libretro/retroarch.cfg b/user_mods/retroarch.hmod/etc/libretro/retroarch.cfg
index 151eddc4..93bd7db9 100644
--- a/user_mods/retroarch.hmod/etc/libretro/retroarch.cfg
+++ b/user_mods/retroarch.hmod/etc/libretro/retroarch.cfg
@@ -1,4 +1,4 @@
-system_directory = "/usr/share/kachikachi"
+system_directory = "/tmp"
input_driver = "udev"
input_joypad_driver = "udev"
input_autodetect_enable = "true"
@@ -17,7 +17,7 @@ content_image_history_path = "~/content_image_history.lpl"
cursor_directory = "~/.config/retroarch/database/cursors"
screenshot_directory = "/var/cache"
input_remapping_directory = "~/.config/retroarch/config/remaps"
-video_shader_dir = "~/shaders/crt"
+video_shader_dir = "~/shaders"
video_filter_dir = "/"
core_assets_directory = "~/.config/retroarch/downloads"
assets_directory = "~/.config/retroarch/assets"
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/5xbr-retro.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/5xbr-retro.glsl
new file mode 100644
index 00000000..9c678deb
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/5xbr-retro.glsl
@@ -0,0 +1,287 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec4 _t1;
+COMPAT_VARYING vec2 _texCoord2;
+COMPAT_VARYING vec4 _position1;
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+struct out_vertex {
+ vec4 _position1;
+ vec2 _texCoord2;
+ vec4 _t1;
+};
+out_vertex _ret_0;
+input_dummy _IN1;
+vec4 _r0008;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 TEX1;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ out_vertex _OUT;
+ vec2 _ps;
+ vec2 _texCoord;
+ _r0008 = VertexCoord.x*MVPMatrix[0];
+ _r0008 = _r0008 + VertexCoord.y*MVPMatrix[1];
+ _r0008 = _r0008 + VertexCoord.z*MVPMatrix[2];
+ _r0008 = _r0008 + VertexCoord.w*MVPMatrix[3];
+ _ps = vec2(1.00000000E+00/TextureSize.x, 1.00000000E+00/TextureSize.y);
+ _texCoord = TexCoord.xy + vec2( 1.00000001E-07, 1.00000001E-07);
+ _OUT._t1.xy = vec2(0.00000000E+00, -_ps.y);
+ _OUT._t1.zw = vec2(-_ps.x, 0.00000000E+00);
+ _ret_0._position1 = _r0008;
+ _ret_0._texCoord2 = _texCoord;
+ _ret_0._t1 = _OUT._t1;
+ gl_Position = _r0008;
+ TEX0.xy = _texCoord;
+ TEX1 = _OUT._t1;
+ return;
+ TEX0.xy = _ret_0._texCoord2;
+ TEX1 = _ret_0._t1;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec4 _t1;
+COMPAT_VARYING vec2 _texCoord;
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+struct out_vertex {
+ vec2 _texCoord;
+ vec4 _t1;
+};
+vec4 _ret_0;
+vec3 _TMP18;
+vec3 _TMP19;
+float _TMP15;
+float _TMP14;
+float _TMP13;
+vec4 _TMP12;
+vec4 _TMP11;
+vec4 _TMP10;
+vec4 _TMP9;
+vec4 _TMP8;
+vec4 _TMP7;
+vec4 _TMP6;
+vec4 _TMP5;
+vec4 _TMP4;
+vec4 _TMP3;
+vec4 _TMP2;
+vec4 _TMP1;
+vec2 _TMP0;
+uniform sampler2D Texture;
+input_dummy _IN1;
+vec2 _x0032;
+vec2 _val0034;
+vec2 _c0036;
+vec2 _c0038;
+vec2 _c0040;
+vec2 _c0044;
+vec2 _c0046;
+vec2 _c0048;
+vec2 _c0050;
+vec2 _c0052;
+vec2 _c0054;
+vec2 _c0056;
+vec2 _c0058;
+float _TMP59;
+float _TMP63;
+float _TMP67;
+float _TMP71;
+float _TMP75;
+float _TMP79;
+float _TMP83;
+float _TMP87;
+float _TMP91;
+float _TMP95;
+float _TMP99;
+float _TMP103;
+float _TMP111;
+float _a0114;
+float _TMP115;
+float _a0118;
+float _TMP119;
+float _a0122;
+float _TMP123;
+float _a0126;
+float _TMP127;
+float _a0130;
+float _TMP133;
+float _a0136;
+float _TMP137;
+float _a0140;
+float _TMP141;
+float _a0144;
+float _TMP145;
+float _a0148;
+float _TMP149;
+float _a0152;
+float _TMP153;
+float _a0156;
+float _TMP157;
+float _a0160;
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 TEX1;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ bool _edr;
+ bool _px;
+ bool _interp_restriction_lv1;
+ bool _nc;
+ bool _fx;
+ vec2 _pos;
+ vec2 _dir;
+ vec2 _g1;
+ vec2 _g2;
+ _x0032 = TEX0.xy*TextureSize;
+ _TMP0 = fract(_x0032);
+ _pos = _TMP0 - vec2( 5.00000000E-01, 5.00000000E-01);
+ _val0034 = vec2(float((_pos.x > 0.00000000E+00)), float((_pos.y > 0.00000000E+00)));
+ _dir = _val0034 - vec2(float((_pos.x < 0.00000000E+00)), float((_pos.y < 0.00000000E+00)));
+ _g1 = _dir*TEX1.xy;
+ _g2 = _dir*TEX1.zw;
+ _c0036 = TEX0.xy + _g1;
+ _TMP1 = COMPAT_TEXTURE(Texture, _c0036);
+ _c0038 = (TEX0.xy + _g1) - _g2;
+ _TMP2 = COMPAT_TEXTURE(Texture, _c0038);
+ _c0040 = TEX0.xy + _g2;
+ _TMP3 = COMPAT_TEXTURE(Texture, _c0040);
+ _TMP4 = COMPAT_TEXTURE(Texture, TEX0.xy);
+ _c0044 = TEX0.xy - _g2;
+ _TMP5 = COMPAT_TEXTURE(Texture, _c0044);
+ _c0046 = (TEX0.xy - _g1) + _g2;
+ _TMP6 = COMPAT_TEXTURE(Texture, _c0046);
+ _c0048 = TEX0.xy - _g1;
+ _TMP7 = COMPAT_TEXTURE(Texture, _c0048);
+ _c0050 = (TEX0.xy - _g1) - _g2;
+ _TMP8 = COMPAT_TEXTURE(Texture, _c0050);
+ _c0052 = TEX0.xy - 2.00000000E+00*_g2;
+ _TMP9 = COMPAT_TEXTURE(Texture, _c0052);
+ _c0054 = (TEX0.xy - _g1) - 2.00000000E+00*_g2;
+ _TMP10 = COMPAT_TEXTURE(Texture, _c0054);
+ _c0056 = TEX0.xy - 2.00000000E+00*_g1;
+ _TMP11 = COMPAT_TEXTURE(Texture, _c0056);
+ _c0058 = (TEX0.xy - 2.00000000E+00*_g1) - _g2;
+ _TMP12 = COMPAT_TEXTURE(Texture, _c0058);
+ _TMP59 = dot(_TMP1.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP63 = dot(_TMP2.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP67 = dot(_TMP3.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP71 = dot(_TMP4.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP75 = dot(_TMP5.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP79 = dot(_TMP6.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP83 = dot(_TMP7.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP87 = dot(_TMP8.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP91 = dot(_TMP10.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP95 = dot(_TMP12.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP99 = dot(_TMP11.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP103 = dot(_TMP9.xyz, vec3( 1.43519993E+01, 2.81760006E+01, 5.47200012E+00));
+ _TMP13 = dot(_dir, _pos);
+ _fx = _TMP13 > 7.50000000E-01;
+ _interp_restriction_lv1 = _TMP71 != _TMP75 && _TMP71 != _TMP83;
+ _a0114 = _TMP71 - _TMP63;
+ _TMP111 = abs(_a0114);
+ _a0118 = _TMP71 - _TMP79;
+ _TMP115 = abs(_a0118);
+ _a0122 = _TMP87 - _TMP99;
+ _TMP119 = abs(_a0122);
+ _a0126 = _TMP87 - _TMP103;
+ _TMP123 = abs(_a0126);
+ _a0130 = _TMP83 - _TMP75;
+ _TMP127 = abs(_a0130);
+ _TMP14 = _TMP111 + _TMP115 + _TMP119 + _TMP123 + 4.00000000E+00*_TMP127;
+ _a0136 = _TMP83 - _TMP67;
+ _TMP133 = abs(_a0136);
+ _a0140 = _TMP83 - _TMP95;
+ _TMP137 = abs(_a0140);
+ _a0144 = _TMP75 - _TMP91;
+ _TMP141 = abs(_a0144);
+ _a0148 = _TMP75 - _TMP59;
+ _TMP145 = abs(_a0148);
+ _a0152 = _TMP71 - _TMP87;
+ _TMP149 = abs(_a0152);
+ _TMP15 = _TMP133 + _TMP137 + _TMP141 + _TMP145 + 4.00000000E+00*_TMP149;
+ _edr = _TMP14 < _TMP15 && _interp_restriction_lv1;
+ _nc = _edr && _fx;
+ _a0156 = _TMP71 - _TMP75;
+ _TMP153 = abs(_a0156);
+ _a0160 = _TMP71 - _TMP83;
+ _TMP157 = abs(_a0160);
+ _px = _TMP153 <= _TMP157;
+ if (_nc) {
+ if (_px) {
+ _TMP19 = _TMP5.xyz;
+ } else {
+ _TMP19 = _TMP7.xyz;
+ }
+ _TMP18 = _TMP19;
+ } else {
+ _TMP18 = _TMP4.xyz;
+ }
+ _ret_0 = vec4(_TMP18.x, _TMP18.y, _TMP18.z, 1.00000000E+00);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/bead.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/bead.glsl
new file mode 100644
index 00000000..ce070e33
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/bead.glsl
@@ -0,0 +1,158 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec2 _pixel_no;
+COMPAT_VARYING vec2 _c11;
+struct tex_coord {
+ vec2 _c11;
+ vec2 _pixel_no;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _oPosition1;
+input_dummy _IN1;
+vec4 _r0006;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_VARYING vec4 COL0;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX1;
+COMPAT_VARYING vec4 TEX2;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _oColor;
+ tex_coord _coords;
+ _r0006 = VertexCoord.x*MVPMatrix[0];
+ _r0006 = _r0006 + VertexCoord.y*MVPMatrix[1];
+ _r0006 = _r0006 + VertexCoord.z*MVPMatrix[2];
+ _r0006 = _r0006 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0006;
+ _oColor = COLOR;
+ _coords._c11 = TexCoord.xy;
+ _coords._pixel_no = TexCoord.xy*TextureSize;
+ gl_Position = _r0006;
+ COL0 = COLOR;
+ TEX1.xy = TexCoord.xy;
+ TEX2.xy = _coords._pixel_no;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec2 _pixel_no1;
+COMPAT_VARYING vec2 _c11;
+struct tex_coord {
+ vec2 _c11;
+ vec2 _pixel_no1;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _ret_0;
+vec4 _TMP0;
+vec2 _TMP1;
+float _TMP4;
+float _TMP5;
+uniform sampler2D Texture;
+vec3 _TMP10;
+float _TMP14;
+vec2 _delta0015;
+float _len0023;
+float _TMP24;
+float _x0025;
+float _len0029;
+float _TMP30;
+float _x0031;
+COMPAT_VARYING vec4 TEX1;
+COMPAT_VARYING vec4 TEX2;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ _TMP0 = COMPAT_TEXTURE(Texture, TEX1.xy);
+ _TMP1 = fract(TEX2.xy);
+ _delta0015 = _TMP1 - vec2( 5.00000000E-01, 5.00000000E-01);
+ _TMP4 = dot(_delta0015, _delta0015);
+ _TMP5 = inversesqrt(_TMP4);
+ _TMP14 = 1.00000000E+00/_TMP5;
+ if (_TMP14 > 2.00000003E-01 && _TMP14 < 3.49999994E-01) {
+ _TMP10 = _TMP0.xyz;
+ } else {
+ if (_TMP14 >= 3.49999994E-01) {
+ _len0023 = _TMP14 - 3.49999994E-01;
+ _x0025 = -6.00000000E+00*_len0023;
+ _TMP24 = pow(2.71828198E+00, _x0025);
+ _TMP10 = _TMP0.xyz*_TMP24;
+ } else {
+ if (_TMP14 <= 2.00000003E-01) {
+ _len0029 = 2.00000003E-01 - _TMP14;
+ _x0031 = -6.00000000E+00*_len0029;
+ _TMP30 = pow(2.71828198E+00, _x0031);
+ _TMP10 = _TMP0.xyz*_TMP30;
+ } else {
+ _TMP10 = vec3( 0.00000000E+00, 0.00000000E+00, 0.00000000E+00);
+ }
+ }
+ }
+ _ret_0 = vec4(_TMP10.x, _TMP10.y, _TMP10.z, 1.00000000E+00);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/blinky.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/blinky.glsl
new file mode 100644
index 00000000..d82e4966
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/blinky.glsl
@@ -0,0 +1,242 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec2 _tex_300;
+COMPAT_VARYING vec2 _tex_240;
+COMPAT_VARYING vec2 _tex_180;
+COMPAT_VARYING vec2 _tex_120;
+COMPAT_VARYING vec2 _tex_60;
+COMPAT_VARYING vec2 _tex_0;
+COMPAT_VARYING vec2 _tex_direct;
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+struct vert_out {
+ vec2 _tex_direct;
+ vec2 _tex_0;
+ vec2 _tex_60;
+ vec2 _tex_120;
+ vec2 _tex_180;
+ vec2 _tex_240;
+ vec2 _tex_300;
+};
+vec4 _oPosition1;
+float _TMP6;
+float _TMP5;
+float _TMP4;
+float _TMP3;
+float _TMP2;
+input_dummy _TMP14;
+input_dummy _IN1;
+vec4 _r0019;
+float _a0021;
+vec2 _r0031;
+vec2 _r0037;
+vec2 _r0043;
+vec2 _r0049;
+vec2 _r0055;
+vec2 _r0061;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX1;
+COMPAT_VARYING vec4 TEX2;
+COMPAT_VARYING vec4 TEX3;
+COMPAT_VARYING vec4 TEX4;
+COMPAT_VARYING vec4 TEX5;
+COMPAT_VARYING vec4 TEX6;
+COMPAT_VARYING vec4 TEX7;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vert_out _verts;
+ vec2 _one;
+ float _scale;
+ vec2 _TMP15[2];
+ _r0019 = VertexCoord.x*MVPMatrix[0];
+ _r0019 = _r0019 + VertexCoord.y*MVPMatrix[1];
+ _r0019 = _r0019 + VertexCoord.z*MVPMatrix[2];
+ _r0019 = _r0019 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0019;
+ _one = 1.00000000E+00/TextureSize;
+ _TMP14._frame_count = float(FrameCount)/2.00000000E+01;
+ _a0021 = 5.00000000E-01*_TMP14._frame_count;
+ _TMP2 = sin(_a0021);
+ _scale = 1.00000000E+00 + 2.00000003E-01*_TMP2;
+ _TMP3 = cos(_TMP14._frame_count);
+ _TMP4 = sin(_TMP14._frame_count);
+ _TMP5 = sin(_TMP14._frame_count);
+ _TMP6 = cos(_TMP14._frame_count);
+ _TMP15[0] = _scale*vec2(_TMP3, _TMP4);
+ _TMP15[1] = _scale*vec2(-_TMP5, _TMP6);
+ _verts._tex_direct = TexCoord.xy;
+ _r0031.x = dot(_TMP15[0], vec2( 1.00000000E+00, 0.00000000E+00));
+ _r0031.y = dot(_TMP15[1], vec2( 1.00000000E+00, 0.00000000E+00));
+ _verts._tex_0 = TexCoord.xy + _one*_r0031;
+ _r0037.x = dot(_TMP15[0], vec2( 5.00000000E-01, 6.99999988E-01));
+ _r0037.y = dot(_TMP15[1], vec2( 5.00000000E-01, 6.99999988E-01));
+ _verts._tex_60 = TexCoord.xy + _one*_r0037;
+ _r0043.x = dot(_TMP15[0], vec2( -5.00000000E-01, 6.99999988E-01));
+ _r0043.y = dot(_TMP15[1], vec2( -5.00000000E-01, 6.99999988E-01));
+ _verts._tex_120 = TexCoord.xy + _one*_r0043;
+ _r0049.x = dot(_TMP15[0], vec2( -1.00000000E+00, 0.00000000E+00));
+ _r0049.y = dot(_TMP15[1], vec2( -1.00000000E+00, 0.00000000E+00));
+ _verts._tex_180 = TexCoord.xy + _one*_r0049;
+ _r0055.x = dot(_TMP15[0], vec2( -5.00000000E-01, -6.99999988E-01));
+ _r0055.y = dot(_TMP15[1], vec2( -5.00000000E-01, -6.99999988E-01));
+ _verts._tex_240 = TexCoord.xy + _one*_r0055;
+ _r0061.x = dot(_TMP15[0], vec2( 5.00000000E-01, -6.99999988E-01));
+ _r0061.y = dot(_TMP15[1], vec2( 5.00000000E-01, -6.99999988E-01));
+ _verts._tex_300 = TexCoord.xy + _one*_r0061;
+ gl_Position = _r0019;
+ TEX1.xy = TexCoord.xy;
+ TEX2.xy = _verts._tex_0;
+ TEX3.xy = _verts._tex_60;
+ TEX4.xy = _verts._tex_120;
+ TEX5.xy = _verts._tex_180;
+ TEX6.xy = _verts._tex_240;
+ TEX7.xy = _verts._tex_300;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec2 _tex_300;
+COMPAT_VARYING vec2 _tex_240;
+COMPAT_VARYING vec2 _tex_180;
+COMPAT_VARYING vec2 _tex_120;
+COMPAT_VARYING vec2 _tex_60;
+COMPAT_VARYING vec2 _tex_0;
+COMPAT_VARYING vec2 _tex_direct;
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+struct vert_out {
+ vec2 _tex_direct;
+ vec2 _tex_0;
+ vec2 _tex_60;
+ vec2 _tex_120;
+ vec2 _tex_180;
+ vec2 _tex_240;
+ vec2 _tex_300;
+};
+vec4 _ret_0;
+float _TMP12;
+float _TMP11;
+float _TMP10;
+float _TMP9;
+vec4 _TMP7;
+vec4 _TMP6;
+vec4 _TMP5;
+vec4 _TMP4;
+vec4 _TMP3;
+vec4 _TMP2;
+vec4 _TMP1;
+vec4 _TMP0;
+uniform sampler2D Texture;
+vec4 _TMP48;
+vec4 _x0049;
+COMPAT_VARYING vec4 TEX1;
+COMPAT_VARYING vec4 TEX2;
+COMPAT_VARYING vec4 TEX3;
+COMPAT_VARYING vec4 TEX4;
+COMPAT_VARYING vec4 TEX5;
+COMPAT_VARYING vec4 TEX6;
+COMPAT_VARYING vec4 TEX7;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _tex_mid;
+ vec4 _tex0;
+ vec4 _tex60;
+ vec4 _tex120;
+ vec4 _tex180;
+ vec4 _tex240;
+ vec4 _tex300;
+ vec4 _minimum;
+ vec4 _maximum;
+ vec4 _diff;
+ _tex_mid = COMPAT_TEXTURE(Texture, TEX1.xy);
+ _tex0 = COMPAT_TEXTURE(Texture, TEX2.xy);
+ _tex60 = COMPAT_TEXTURE(Texture, TEX3.xy);
+ _tex120 = COMPAT_TEXTURE(Texture, TEX4.xy);
+ _tex180 = COMPAT_TEXTURE(Texture, TEX5.xy);
+ _tex240 = COMPAT_TEXTURE(Texture, TEX6.xy);
+ _tex300 = COMPAT_TEXTURE(Texture, TEX7.xy);
+ _TMP0 = min(_tex0, _tex60);
+ _TMP1 = min(_tex120, _tex180);
+ _TMP2 = min(_TMP0, _TMP1);
+ _TMP3 = min(_tex240, _tex300);
+ _minimum = min(_TMP2, _TMP3);
+ _TMP4 = max(_tex0, _tex60);
+ _TMP5 = max(_tex120, _tex180);
+ _TMP6 = max(_TMP4, _TMP5);
+ _TMP7 = max(_tex240, _tex300);
+ _maximum = max(_TMP6, _TMP7);
+ _x0049 = -(_maximum - _minimum);
+ _TMP9 = pow(2.71828198E+00, _x0049.x);
+ _TMP10 = pow(2.71828198E+00, _x0049.y);
+ _TMP11 = pow(2.71828198E+00, _x0049.z);
+ _TMP12 = pow(2.71828198E+00, _x0049.w);
+ _TMP48 = vec4(_TMP9, _TMP10, _TMP11, _TMP12);
+ _diff = 1.00000000E+00 - _TMP48;
+ _ret_0 = _tex_mid + 8.99999976E-01*(_diff - _tex_mid);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/pixellate.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/pixellate.glsl
new file mode 100644
index 00000000..48e3d0d7
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/pixellate.glsl
@@ -0,0 +1,175 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _oPosition1;
+vec4 _r0005;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec2 _oTex;
+ _r0005 = VertexCoord.x*MVPMatrix[0];
+ _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];
+ _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];
+ _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0005;
+ _oTex = TexCoord.xy;
+ gl_Position = _r0005;
+ TEX0.xy = TexCoord.xy;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _ret_0;
+vec2 _TMP11;
+vec4 _TMP9;
+vec2 _TMP8;
+vec4 _TMP7;
+vec2 _TMP6;
+vec4 _TMP5;
+vec2 _TMP4;
+vec4 _TMP3;
+vec2 _TMP2;
+float _TMP1;
+float _TMP0;
+uniform sampler2D Texture;
+input_dummy _IN1;
+float _a0016;
+float _a0018;
+vec2 _x0020;
+vec2 _c0022;
+vec2 _x0024;
+vec2 _c0026;
+vec2 _x0028;
+vec2 _c0030;
+vec2 _x0032;
+vec2 _c0034;
+vec2 _TMP35;
+vec2 _a0036;
+vec2 _x0038;
+vec2 _TMP39;
+vec2 _b0040;
+vec2 _x0040;
+vec2 _a0040;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec2 _texelSize;
+ vec2 _range;
+ float _left;
+ float _top;
+ float _right;
+ float _bottom;
+ float _totalArea;
+ vec3 _averageColor;
+ _texelSize = 1.00000000E+00/TextureSize;
+ _a0016 = InputSize.x/(OutputSize.x*TextureSize.x);
+ _TMP0 = abs(_a0016);
+ _a0018 = InputSize.y/(OutputSize.y*TextureSize.y);
+ _TMP1 = abs(_a0018);
+ _range = vec2(_TMP0, _TMP1);
+ _range = (_range/2.00000000E+00)*9.99000013E-01;
+ _left = TEX0.x - _range.x;
+ _top = TEX0.y + _range.y;
+ _right = TEX0.x + _range.x;
+ _bottom = TEX0.y - _range.y;
+ _x0020 = vec2(_left, _top)/_texelSize;
+ _TMP2 = floor(_x0020);
+ _c0022 = (_TMP2 + 5.00000000E-01)*_texelSize;
+ _TMP3 = COMPAT_TEXTURE(Texture, _c0022);
+ _x0024 = vec2(_right, _bottom)/_texelSize;
+ _TMP4 = floor(_x0024);
+ _c0026 = (_TMP4 + 5.00000000E-01)*_texelSize;
+ _TMP5 = COMPAT_TEXTURE(Texture, _c0026);
+ _x0028 = vec2(_left, _bottom)/_texelSize;
+ _TMP6 = floor(_x0028);
+ _c0030 = (_TMP6 + 5.00000000E-01)*_texelSize;
+ _TMP7 = COMPAT_TEXTURE(Texture, _c0030);
+ _x0032 = vec2(_right, _top)/_texelSize;
+ _TMP8 = floor(_x0032);
+ _c0034 = (_TMP8 + 5.00000000E-01)*_texelSize;
+ _TMP9 = COMPAT_TEXTURE(Texture, _c0034);
+ _a0036 = TEX0.xy/_texelSize;
+ _x0038 = _a0036 + 5.00000000E-01;
+ _TMP35 = floor(_x0038);
+ _x0040 = _TMP35*_texelSize;
+ _a0040 = vec2(_left, _bottom);
+ _b0040 = vec2(_right, _top);
+ _TMP11 = min(_b0040, _x0040);
+ _TMP39 = max(_a0040, _TMP11);
+ _totalArea = 4.00000000E+00*_range.x*_range.y;
+ _averageColor = (((_TMP39.x - _left)*(_top - _TMP39.y))/_totalArea)*_TMP3.xyz;
+ _averageColor = _averageColor + (((_right - _TMP39.x)*(_TMP39.y - _bottom))/_totalArea)*_TMP5.xyz;
+ _averageColor = _averageColor + (((_TMP39.x - _left)*(_TMP39.y - _bottom))/_totalArea)*_TMP7.xyz;
+ _averageColor = _averageColor + (((_right - _TMP39.x)*(_top - _TMP39.y))/_totalArea)*_TMP9.xyz;
+ _ret_0 = vec4(_averageColor.x, _averageColor.y, _averageColor.z, 1.00000000E+00);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/quilez.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/quilez.glsl
new file mode 100644
index 00000000..d34bdb4d
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/quilez.glsl
@@ -0,0 +1,121 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec4 _color1;
+struct output_dummy {
+ vec4 _color1;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _oPosition1;
+vec4 _r0005;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 COL0;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _oColor;
+ vec2 _otexCoord;
+ _r0005 = VertexCoord.x*MVPMatrix[0];
+ _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];
+ _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];
+ _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0005;
+ _oColor = COLOR;
+ _otexCoord = TexCoord.xy;
+ gl_Position = _r0005;
+ COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec4 _color;
+struct output_dummy {
+ vec4 _color;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+input_dummy _IN1;
+uniform sampler2D Texture;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec2 _p;
+ vec2 _i;
+ vec2 _f;
+ output_dummy _OUT;
+ _p = TEX0.xy*TextureSize + vec2( 5.00000000E-01, 5.00000000E-01);
+ _i = floor(_p);
+ _f = _p - _i;
+ _f = _f*_f*_f*(_f*(_f*6.00000000E+00 - vec2( 1.50000000E+01, 1.50000000E+01)) + vec2( 1.00000000E+01, 1.00000000E+01));
+ _p = _i + _f;
+ _p = (_p - vec2( 5.00000000E-01, 5.00000000E-01))/TextureSize;
+ _OUT._color = COMPAT_TEXTURE(Texture, _p);
+ FragColor = _OUT._color;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/retro-v2.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/retro-v2.glsl
new file mode 100644
index 00000000..e4ac7e33
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/retro-v2.glsl
@@ -0,0 +1,150 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec4 _color1;
+struct output_dummy {
+ vec4 _color1;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+};
+vec4 _oPosition1;
+vec4 _r0005;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 COL0;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _oColor;
+ vec2 _otexCoord;
+ _r0005 = VertexCoord.x*MVPMatrix[0];
+ _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];
+ _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];
+ _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0005;
+ _oColor = COLOR;
+ _otexCoord = TexCoord.xy;
+ gl_Position = _r0005;
+ COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING vec4 _color;
+struct output_dummy {
+ vec4 _color;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+};
+vec3 _TMP3;
+vec3 _TMP9;
+float _TMP7;
+float _TMP6;
+float _TMP5;
+vec2 _TMP8;
+vec4 _TMP0;
+uniform sampler2D Texture;
+input_dummy _IN1;
+vec2 _x0024;
+vec2 _TMP25;
+vec2 _x0026;
+vec2 _TMP31;
+vec2 _x0032;
+vec3 _a0040;
+vec3 _b0040;
+vec3 _TMP49;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec3 _E;
+ vec2 _fp;
+ vec2 _ps;
+ vec2 _f;
+ float _max_coord;
+ vec3 _res;
+ output_dummy _OUT;
+ _TMP0 = COMPAT_TEXTURE(Texture, TEX0.xy);
+ _TMP5 = pow(_TMP0.x, 2.40000010E+00);
+ _TMP6 = pow(_TMP0.y, 2.40000010E+00);
+ _TMP7 = pow(_TMP0.z, 2.40000010E+00);
+ _E = vec3(_TMP5, _TMP6, _TMP7);
+ _x0024 = TEX0.xy*TextureSize;
+ _fp = fract(_x0024);
+ _ps = InputSize/OutputSize;
+ _x0026 = _fp + 5.00000000E-01*_ps;
+ _TMP8 = min(vec2( 1.00000000E+00, 1.00000000E+00), _x0026);
+ _TMP25 = max(vec2( 0.00000000E+00, 0.00000000E+00), _TMP8);
+ _x0032 = _TMP25 - 8.39999974E-01;
+ _TMP8 = min(_ps.xx, _x0032);
+ _TMP31 = max(vec2( 0.00000000E+00, 0.00000000E+00), _TMP8);
+ _f = _TMP31/_ps;
+ _max_coord = max(_f.x, _f.y);
+ _a0040 = _E*(1.03999996E+00 + _fp.x*_fp.y);
+ _b0040 = _E*3.60000014E-01;
+ _res = _a0040 + _max_coord*(_b0040 - _a0040);
+ _TMP5 = pow(_res.x, 4.54545438E-01);
+ _TMP6 = pow(_res.y, 4.54545438E-01);
+ _TMP7 = pow(_res.z, 4.54545438E-01);
+ _TMP3 = vec3(_TMP5, _TMP6, _TMP7);
+ _TMP9 = min(vec3( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00), _TMP3);
+ _TMP49 = max(vec3( 0.00000000E+00, 0.00000000E+00, 0.00000000E+00), _TMP9);
+ _OUT._color = vec4(_TMP49.x, _TMP49.y, _TMP49.z, 1.00000000E+00);
+ FragColor = _OUT._color;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glsl
new file mode 100644
index 00000000..eafd5743
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glsl
@@ -0,0 +1,133 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec2 _omega;
+struct sine_coord {
+ vec2 _omega;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _oPosition1;
+input_dummy _IN1;
+vec4 _r0006;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_VARYING vec4 COL0;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 TEX2;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _oColor;
+ vec2 _oTex;
+ sine_coord _coords;
+ _r0006 = VertexCoord.x*MVPMatrix[0];
+ _r0006 = _r0006 + VertexCoord.y*MVPMatrix[1];
+ _r0006 = _r0006 + VertexCoord.z*MVPMatrix[2];
+ _r0006 = _r0006 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0006;
+ _oColor = COLOR;
+ _oTex = TexCoord.xy;
+ _coords._omega = vec2((3.14150000E+00*OutputSize.x*TextureSize.x)/InputSize.x, 6.28299999E+00*TextureSize.y);
+ gl_Position = _r0006;
+ COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+ TEX2.xy = _coords._omega;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec2 _omega;
+struct sine_coord {
+ vec2 _omega;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _ret_0;
+float _TMP2;
+vec2 _TMP1;
+float _TMP4;
+float _TMP3;
+vec4 _TMP0;
+uniform sampler2D Texture;
+vec2 _x0009;
+vec2 _a0015;
+COMPAT_VARYING vec4 TEX2;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec3 _scanline;
+ _TMP0 = COMPAT_TEXTURE(Texture, TEX0.xy);
+ _x0009 = TEX0.xy*TEX2.xy;
+ _TMP3 = sin(_x0009.x);
+ _TMP4 = sin(_x0009.y);
+ _TMP1 = vec2(_TMP3, _TMP4);
+ _a0015 = vec2( 5.00000007E-02, 1.50000006E-01)*_TMP1;
+ _TMP2 = dot(_a0015, vec2( 1.00000000E+00, 1.00000000E+00));
+ _scanline = _TMP0.xyz*(9.49999988E-01 + _TMP2);
+ _ret_0 = vec4(_scanline.x, _scanline.y, _scanline.z, 1.00000000E+00);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glslp b/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glslp
new file mode 100644
index 00000000..7539ac42
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/scanline.glslp
@@ -0,0 +1,13 @@
+shaders = "1"
+feedback_pass = "0"
+shader0 = "/etc/libretro/shaders/scanline.glsl"
+filter_linear0 = "true"
+wrap_mode0 = "clamp_to_border"
+mipmap_input0 = "false"
+alias0 = ""
+float_framebuffer0 = "false"
+srgb_framebuffer0 = "false"
+scale_type_x0 = "source"
+scale_x0 = "4.000000"
+scale_type_y0 = "source"
+scale_y0 = "4.000000"
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/sharp-bilinear.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/sharp-bilinear.glsl
new file mode 100644
index 00000000..d62c0111
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/sharp-bilinear.glsl
@@ -0,0 +1,109 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+};
+vec4 _oPosition1;
+vec4 _r0005;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec2 _otexCoord;
+ _r0005 = VertexCoord.x*MVPMatrix[0];
+ _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];
+ _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];
+ _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0005;
+ _otexCoord = TexCoord.xy;
+ gl_Position = _r0005;
+ TEX0.xy = TexCoord.xy;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+};
+vec4 _ret_0;
+vec2 _TMP1;
+uniform sampler2D Texture;
+input_dummy _IN1;
+vec2 _TMP6;
+vec2 _TMP10;
+vec2 _c0017;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec2 _texel;
+ vec2 _texel_floored;
+ vec2 _center_dist;
+ vec2 _f;
+ vec2 _mod_texel;
+ _texel = TEX0.xy*TextureSize;
+ _texel_floored = floor(_texel);
+ _TMP6 = fract(_texel);
+ _center_dist = _TMP6 - 5.00000000E-01;
+ _TMP1 = min(vec2( 3.75000000E-01, 3.75000000E-01), _center_dist);
+ _TMP10 = max(vec2( -3.75000000E-01, -3.75000000E-01), _TMP1);
+ _f = (_center_dist - _TMP10)*4.00000000E+00 + 5.00000000E-01;
+ _mod_texel = _texel_floored + _f;
+ _c0017 = _mod_texel/TextureSize;
+ _ret_0 = COMPAT_TEXTURE(Texture, _c0017);
+ FragColor = _ret_0;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/etc/libretro/shaders/stock.glsl b/user_mods/retroarch.hmod/etc/libretro/shaders/stock.glsl
new file mode 100644
index 00000000..4b111410
--- /dev/null
+++ b/user_mods/retroarch.hmod/etc/libretro/shaders/stock.glsl
@@ -0,0 +1,111 @@
+// GLSL shader autogenerated by cg2glsl.py.
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec4 _color1;
+struct output_dummy {
+ vec4 _color1;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+vec4 _oPosition1;
+vec4 _r0005;
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 COL0;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ vec4 _oColor;
+ vec2 _otexCoord;
+ _r0005 = VertexCoord.x*MVPMatrix[0];
+ _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];
+ _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];
+ _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];
+ _oPosition1 = _r0005;
+ _oColor = COLOR;
+ _otexCoord = TexCoord.xy;
+ gl_Position = _r0005;
+ COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+}
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+COMPAT_VARYING float _frame_rotation;
+COMPAT_VARYING vec4 _color;
+struct output_dummy {
+ vec4 _color;
+};
+struct input_dummy {
+ vec2 _video_size;
+ vec2 _texture_size;
+ vec2 _output_dummy_size;
+ float _frame_count;
+ float _frame_direction;
+ float _frame_rotation;
+};
+uniform sampler2D Texture;
+COMPAT_VARYING vec4 TEX0;
+
+uniform int FrameDirection;
+uniform int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+void main()
+{
+ output_dummy _OUT;
+ _OUT._color = COMPAT_TEXTURE(Texture, TEX0.xy);
+ FragColor = _OUT._color;
+ return;
+}
+#endif
diff --git a/user_mods/retroarch.hmod/readme.txt b/user_mods/retroarch.hmod/readme.txt
index 7920c128..cb7d6ea9 100644
--- a/user_mods/retroarch.hmod/readme.txt
+++ b/user_mods/retroarch.hmod/readme.txt
@@ -2,7 +2,8 @@
This module adds RetroArch emulator to your NES Mini.
-It will automatically detect unsupported NES games and run them instead of default emulator. Save states will work as usual but CRT filter will not work.
+It will automatically detect unsupported NES games and run them instead of default emulator.
+Save states will work as usual.
Also it can run games for other consoles. This pack already contains cores:
- emux_sms
@@ -27,6 +28,10 @@ Available executables and arguments:
runs "emux_sms" core
- /bin/snes <rom> <clover_args>
runs "snes9x2010" core
+- /bin/n64 <rom> <clover_args>
+ runs "mupen64plus" core
+
+Sometimes default emulator of NES mini is not working with some games when it should. So you can just add "--retroarch" command line argument to use RetroArch.
NES Mini port by madmonkey
NES Mini shell integration by Cluster