RetroArch

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

Quick comparison

AppBest forFree planShader libraryStandout feature
RetroArchUniversal shader hubYesHundredsPer-core shader preset import
DuckStationPlayStation 1 with CRTYesSlang shadersDialled-in PSX defaults
PPSSPPPSP with TV shadersYesBuilt-inLightweight CRT-style presets
Dolphin EmulatorGameCube and WiiYesLimitedSharp pre-shader pipeline
M64Plus FZNintendo 64 emulationYesGLES2/3 shadersHonest N64 look on phones
DraStic DSNintendo DS sharpeningPaidBuilt-inDual-screen filter modes
SNES9x EX+SNES classicYesBuilt-inLowest-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:

Platforms: Android, iOS, Windows, Mac, Linux, consoles via various ports.

Download: AptoideGoogle PlayF-Droid

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:

Platforms: Android, Windows, Mac, Linux.

Download: Google Play

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:

Platforms: Android, iOS (sideloaded), Windows, Mac, Linux, web.

Download: Google PlayF-Droid

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:

Platforms: Android, Windows, Mac, Linux.

Download: Google Play

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:

Platforms: Android.

Download: Google PlayF-Droid

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:

Platforms: Android.

Download: Google Play

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:

Platforms: Android.

Download: Google Play

Bottom line: Pick SNES9x EX+ for SNES games with a single shader preset and no fuss.

How to pick the right one

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.