
Why retro games look wrong on a sharp OLED phone
A pixel-perfect emulation of a 1992 Super Nintendo game on a 2026 OLED looks wrong. The art was drawn for fuzzy phosphor glow, scanline gaps, and the soft horizontal blur of a CRT shadow mask. Strip those away and the sprites read as harsh, blocky, and weirdly modern.
CRT shaders fix that. A good shader bends the screen into the curvature, adds the right amount of horizontal blur, simulates phosphor decay, and draws scanlines that look like the real thing instead of stencilled rules. On Android, the question is which emulators ship those shaders well and which leave you with a buzzy ZSnes-style approximation.
We tested seven Android apps with CRT shader support. Each is rated by shader fidelity, integer-scale support (CRT shaders need it), and how much tuning the average phone user can reasonably handle before a game launches.
What to look for in a CRT shader app
- Real shader support, not a generic blur filter. Look for terms like “Slang shaders” or “GLSL shaders” in the settings.
- Integer scaling, so each pixel maps cleanly to a fixed grid before the shader runs. Non-integer scaling breaks scanlines.
- Preset library so you do not have to tune values from scratch. CRT-Geom, Easymode-Halation, ZFast, and Lottes are the staples.
- Curvature option for the real CRT-bend effect (some prefer flat output).
- Performance scaling for older devices. CRT shaders are GPU-heavy.
- Per-system overrides so a Game Boy can use a Game Boy-style filter and an SNES can use a TV-style shader without juggling presets manually.
Quick comparison
| App | Best for | Free plan | Shader library | Standout feature |
|---|---|---|---|---|
| RetroArch | Universal shader hub | Yes | Hundreds | Per-core shader preset import |
| DuckStation | PlayStation 1 with CRT | Yes | Slang shaders | Dialled-in PSX defaults |
| PPSSPP | PSP with TV shaders | Yes | Built-in | Lightweight CRT-style presets |
| Dolphin Emulator | GameCube and Wii | Yes | Limited | Sharp pre-shader pipeline |
| M64Plus FZ | Nintendo 64 emulation | Yes | GLES2/3 shaders | Honest N64 look on phones |
| DraStic DS | Nintendo DS sharpening | Paid | Built-in | Dual-screen filter modes |
| SNES9x EX+ | SNES classic | Yes | Built-in | Lowest-overhead SNES shader |
The apps
1. RetroArch, the universal shader hub
RetroArch is the front-end that hosts dozens of emulator “cores” inside a single app. It is the most capable shader platform on Android, with hundreds of presets shipped or downloadable: CRT-Geom, CRT-Lottes, Easymode-Halation, ZFast, Crt-Royale, Hyllian, and many more.
Shaders attach per-core (so the Game Boy core gets a different shader than the SNES core), per-game, or globally. Integer scaling, custom curvature, and frame-blending are all present. Combine the right shader with a 1080p phone, hold the device horizontally, and you get a credible CRT impression on the SNES games you grew up with.
Where it falls short: The configuration surface is enormous. New users can easily spend an hour in menus before launching their first game. Default core selection is opinionated.
Pricing:
- Free, open source
- No IAP, no ads
Platforms: Android, iOS, Windows, Mac, Linux, consoles via various ports.
Bottom line: Pick RetroArch if you want one app to handle every retro system with the strongest shader library available on Android.
2. DuckStation, best PlayStation 1 with CRT
DuckStation is a dedicated PSX emulator with strong shader support. The default Slang shaders include CRT-Geom and a tuned PSX-specific preset that handles the system’s 240p source correctly. PS1 games tend to be the most sensitive to scanline accuracy because the 240p source is so low-resolution; DuckStation handles that out of the box.
The accuracy is also exceptional. Games that misbehave on RetroArch’s Beetle or PCSX-ReARMed cores often run cleanly on DuckStation.
Where it falls short: Single-system, so it does not replace RetroArch for users who emulate beyond PS1. Some shader presets need a Vulkan-capable phone.
Pricing:
- Free, open source
- No IAP
Platforms: Android, Windows, Mac, Linux.
Bottom line: Pick DuckStation for PSX specifically when shader accuracy on 240p source matters more than a unified emulator.
3. PPSSPP, best PSP with TV shaders
PPSSPP is the dedicated PSP emulator and ships with several built-in TV-style post-processing shaders: scanlines, CRT-with-curvature, and a sharp-bilinear fallback. PSP games render at 480x272 natively; a CRT shader on a phone screen at 1080p gives a credible “low-res TV” look that PSP fans associate with the era’s home-console tie-ins.
The performance overhead is light. Even mid-range phones can run a CRT shader at full speed on most PSP titles.
Where it falls short: Shader selection is narrower than RetroArch’s. Some PSP games (Crisis Core, God Eater) ship at higher internal resolution and benefit less from CRT effects.
Pricing:
- Free, open source
- PPSSPP Gold version ($4.99) supports development; both versions are functionally identical
Platforms: Android, iOS (sideloaded), Windows, Mac, Linux, web.
Bottom line: Pick PPSSPP for PSP titles when you want a believable CRT impression with minimal setup.
4. Dolphin Emulator, best for GameCube and Wii
Dolphin Emulator runs GameCube and Wii games on Android. CRT shader support is more limited than RetroArch’s, but the pre-shader pipeline is sharp enough that adding even a basic scanline overlay improves the look on a phone.
GameCube and Wii games are higher native resolution than the SNES-era systems, so scanline-heavy shaders work less well visually. Light CRT effects (Easymode-Halation at low intensity, or a Wii-era composite filter) are the right calibration.
Where it falls short: Demanding on hardware. Older or mid-range phones struggle with native-resolution Dolphin output even before a shader. Some GameCube titles fight the rendering pipeline.
Pricing:
- Free, open source
- No IAP
Platforms: Android, Windows, Mac, Linux.
Bottom line: Pick Dolphin for GameCube and Wii with light scanline treatment, not heavy CRT shaders.
5. M64Plus FZ, best Nintendo 64 emulation
M64Plus FZ is the active fork of Mupen64Plus on Android. CRT shader support is more modest than RetroArch’s, but the built-in GLES2 and GLES3 shaders include scanlines and an N64-tuned filter that captures the slightly fuzzy composite look the system shipped with.
N64 games are particularly resistant to pixel-sharp rendering. The console used heavy bilinear filtering already; layering a soft CRT shader on top brings everything closer to the period feel.
Where it falls short: Compatibility is core-dependent. Some games run better in RetroArch’s Mupen64Plus core than they do in M64Plus FZ directly.
Pricing:
- Free, open source
Platforms: Android.
Bottom line: Pick M64Plus FZ for N64 emulation with light CRT-style softening that matches the original era.
6. DraStic DS Emulator, best Nintendo DS sharpening
DraStic is a paid Android DS emulator with built-in filter modes. CRT shaders in the strict sense are not the point — the DS shipped with LCD screens, not CRTs. Instead, DraStic offers smoothing and sharpening modes that improve the dual-screen output on a single OLED phone.
For players who want the DS to feel less harshly pixelated on a modern display, DraStic’s built-in filters get most of the way without RetroArch’s shader complexity.
Where it falls short: Paid app and the only one on this list with an upfront cost. CRT shaders specifically are not the point — this is a DS-era LCD smoothing tool.
Pricing:
- Roughly $4.99 one-time
- No ads or IAP after purchase
Platforms: Android.
Bottom line: Pick DraStic for DS games with built-in smoothing, accepting that CRT shaders specifically are not relevant here.
7. SNES9x EX+, best low-overhead SNES shader
SNES9x EX+ is the lightweight SNES emulator that runs on almost anything Android. Built-in shader presets include scanlines, CRT-Easymode, and a sharp-pixel mode for users who prefer no shader at all. Settings are simpler than RetroArch’s and the app launches faster.
For a phone primarily used to play SNES classics, SNES9x EX+ with the Easymode shader is the lowest-overhead path to a CRT impression that does not need configuration time.
Where it falls short: SNES only. Shader library is shorter than RetroArch’s. UI is functional but plain.
Pricing:
- Free, open source
Platforms: Android.
Bottom line: Pick SNES9x EX+ for SNES games with a single shader preset and no fuss.
How to pick the right one
- The strongest shader library and most flexibility: RetroArch.
- PSX-specific accuracy with tuned shaders: DuckStation.
- PSP titles with light CRT presets: PPSSPP.
- GameCube and Wii with light scanlines: Dolphin Emulator.
- N64 with composite-era softening: M64Plus FZ.
- Nintendo DS with built-in smoothing: DraStic.
- SNES with one preset and no menus: SNES9x EX+.
For users new to shaders, the simplest path is RetroArch with Easymode-Halation as the global default. The shader looks good on most systems, runs comfortably on mid-range phones, and stops the urge to over-tune.
FAQ
What is the best CRT shader for retro games on Android? Easymode-Halation is the most common recommendation. CRT-Geom and ZFast CRT are the next-most-used. RetroArch ships all three.
Do CRT shaders work on a small phone screen? Yes, but the effect is most convincing on larger displays. A 6-inch phone shows enough scanline detail to read as CRT-style; a 4-inch screen does not.
Why do CRT shaders need integer scaling? Non-integer scaling stretches pixels unevenly. Scanlines drawn on top of unevenly stretched pixels create moiré patterns. Integer scaling keeps each source pixel mapped to the same number of output pixels.
Are CRT shaders available on AetherSX2 or NetherSX2 for PS2? AetherSX2 has limited built-in post-processing but full Slang shader support through RetroArch’s PCSX2 core. NetherSX2 inherits the same.
Will CRT shaders drain battery faster? Yes. CRT shaders are GPU-intensive. Expect a noticeable battery hit during long sessions, particularly with the heavier shaders (Crt-Royale, Lottes).
Can I use the same shader for every system? It works but it is not ideal. Game Boy benefits from a Game Boy-style green-tint shader; SNES benefits from a TV-style scanline; PSX benefits from a 240p-tuned preset. RetroArch supports per-core overrides exactly for this case.