自己学习glsl语言,折腾了两天,实现了这么个玩意儿:
nds scale shader
项目地址 https://github.com/TsukiNoKnight/retroarch_nds_scale_shader
网盘链接: https://pan.baidu.com/s/1rOX-pRf6mtdiXZa9_BsP-w?pwd=cqs4 提取码: cqs4
背景介绍
在 RetroArch 中模拟 Nintendo DS 游戏时,核心仅提供"左右排列"或"混合布局"两种横屏布局选项。与 Drastic 或 MelonDS 等独立模拟器相比——这些模拟器允许自由设置双屏位置和大小——RetroArch 的布局选项过于局限,无法充分利用横屏下的显示空间。
例如,在 2400×1080 的典型安卓手机屏幕上,将两个 256×192 的屏幕分别缩放至 1280×960 (5倍) 和 1024×768 (4倍) 可以完美适配屏幕。同样,在 1920×1080 的典型安卓掌机屏幕上,缩放至 1024×768 (4倍) 和 768×576 (3倍) 也能理想地利用可用空间。这样的配置比双屏等比例缩放更能有效利用屏幕空间。
然而,由于核心向前端提供的是拼接后的完整画面而非两个独立的屏幕缓冲区,RetroArch 本身无法实现双屏独立缩放。为此,我们通过自定义着色器实现了这一功能。此外,由于双屏缩放比例不同,内置的 `lcd3x` 等屏幕着色器无法正常使用,因此本着色器还内置实现了 lcd3x 效果。
有人可能会问:为什么不直接使用独立模拟器?主要原因是,我希望在启动 DS 游戏时能够直接加载上次游玩的即时存档(savestate)。在安卓独立模拟器中,只有 Drastic 支持通过桌面快捷方式实现这一功能——但为整个 DS 游戏库创建快捷方式并不现实。此外,使用 ES-DE 或 Beacon 等前端启动器时,连这种变通方法也无法实现。
使用指南
1. 将本项目文件放入 RetroArch 着色器目录,建议为此创建一个新的子文件夹
2. 在 RetroArch 中进入 **设置 → 视频**,禁用**整数缩放**,将**宽高比**设置为**全屏**
3. 在**快捷菜单 → 独立配置**中选择**保存核心独立配置**
4. 在核心设置(如 melonDS 或其他 DS 核心)中,进入**快捷菜单 → 核心选项 → 屏幕**,将**屏幕布局**设置为**Left/Right**
5. 在**快捷菜单 → 着色器设置**中,加载 `nds_landscape_scale_lcd3x.glslp` 预设文件
6. 根据需要调整以下着色器参数:
- `screen_left_gap`(左侧边距)
- `screen_middle_gap`(两个屏幕之间间距)
- `top_screen_scale`(上屏缩放比例)
- `bottom_screen_scale`(下屏缩放比例)
默认参数针对 2400×1080 屏幕进行了优化
7. 通过**快捷菜单 → 着色器设置 → 保存预设**保存着色器配置
特别鸣谢 B站UP主 **脑浆油条** 为本项目提供的技术咨询和支持。
添加本滤镜效果图:

原始RA整数缩放效果图
