CRT shader running on a desktop emulator

The XDA piece on the one shader that made a whole ROM library look right again is the truth every retro player runs into eventually. A pixel-perfect 4K upscale of Super Mario World looks wrong. The sprites were drawn for a phosphor grid that bled colors into each other on purpose. Turn on a good CRT shader and the same ROM suddenly reads the way it did on a 1993 Trinitron. This roundup covers the best desktop apps for CRT shaders on emulators in 2026, based on what we ran across a Windows 11 workstation, a Fedora 40 machine, and an M2 MacBook Air.

Every app here supports either a native CRT shader chain or a first-class port of the Libretro slang shader collection.

What to look for in a CRT shader host

Quick comparison table

App Best for Platforms Shader system Standout
RetroArch Every system in one shell Win / macOS / Linux Slang, GLSL, Cg Full Libretro shader library
ShaderGlass Any emulator or app Win only Custom + Libretro ports Works on windows the emulator does not
Mesen NES / SNES / GB accuracy Win / macOS / Linux HLSL + built-in NTSC Native NES NTSC filter
Duckstation PS1 with modern shaders Win / macOS / Linux Slang PS1-specific CRT presets
MAME Arcade authenticity Win / macOS / Linux HLSL / GLSL Purpose-built arcade phosphor model
Snes9x SNES on modest hardware Win / macOS / Linux GLSL Fast, well-supported CRT presets
MelonDS Nintendo DS / DSi Win / macOS / Linux GLSL Handles DS’s LCD-not-CRT quirk correctly

The apps

1. RetroArch — Best for shader coverage across every system

RetroArch hosts the Libretro slang shader library, which is where most CRT shader development actually happens now. The presets folder alone has 200-plus entries: crt-royale, crt-guest-advanced, crt-hyllian, crt-easymode, crt-lottes, crt-consumer, and per-console tuned variants. Load a core (Nestopia for NES, Snes9x for SNES, Beetle PSX for PS1), then apply a per-system shader preset and save it. From then on, every ROM of that system comes up with the right treatment.

Where it falls short: The first-time shader menu is a maze. Some presets need parameter tuning to look right at your resolution. HDR shader chain requires a Vulkan or D3D12 driver.

Pricing:

Platforms: Windows, macOS, Linux, plus Steam Deck, Android, iOS.

Download: retroarch.com · Steam

Bottom line: The reference implementation. If you touch two or more systems, this is the shader host.

2. ShaderGlass — Best overlay for emulators that do not ship shaders

ShaderGlass is a Windows-only overlay that runs the Libretro slang shader library on top of any window. Point it at Dolphin, Cemu, PPSSPP, or a browser tab and the CRT shader applies to whatever renders inside that window. It is the answer for emulators that do not ship their own shader system and the answer for capture-card layouts where you want the CRT look on top of a live source.

Where it falls short: Windows only. Adds one frame of latency. Some HDR shaders do not composite cleanly on top of D3D11 games.

Pricing:

Platforms: Windows 10 and 11 only.

Download: ShaderGlass on GitHub

Bottom line: The tool that lets you bring CRT shaders to an emulator that never got them.

3. Mesen — Best for NES and SNES with authentic NTSC

Mesen is the accuracy-first NES, SNES, GB/GBC, and PC Engine emulator. Its built-in NTSC filter models the actual composite signal path, which is closer to what a period TV did than any generic CRT preset. Add its HLSL shader chain for scanlines and shadow-mask overlay on top and you get a look that many players consider the best available for these systems.

Where it falls short: No slang shader support; you are on HLSL and GLSL only. Older CRT shaders written for Cg do not port cleanly. UI is Windows-first.

Pricing:

Platforms: Windows, macOS, Linux.

Download: Mesen on GitHub

Bottom line: The best NES and SNES image on desktop, especially if you are picky about NTSC artifacts.

4. Duckstation — Best for PS1 with modern CRT presets

Duckstation ships the slang shader system natively and includes PS1-specific CRT presets in the default install. The presets model the way PS1 output actually behaved through a composite cable, which matters for games designed around dithering that only reads correctly through a low-pass filter.

Where it falls short: PS1 only. HDR presets are still experimental in some builds. The default upscaling can fight the shader unless you set integer scale on.

Pricing:

Platforms: Windows, macOS, Linux, Android.

Download: Duckstation on GitHub

Bottom line: The PS1 emulator that treats CRT rendering as a first-class feature.

5. MAME — Best for arcade authenticity

MAME models specific arcade PCBs and specific arcade monitors. Its built-in HLSL and GLSL shader chain is purpose-built for the CRTs those games ran on, including per-driver notes on which type of tube each cabinet used. If you care that Robotron 2084 looks like it did on a Wells-Gardner K7000, MAME is the answer.

Where it falls short: MAME is not a friendly emulator to configure. Shader tuning is per-INI. Default UI is intimidating.

Pricing:

Platforms: Windows, macOS, Linux.

Download: mamedev.org

Bottom line: Non-negotiable for arcade preservation. Overkill for anything else.

6. Snes9x — Best SNES CRT rendering on modest hardware

Snes9x carries a GLSL shader system that runs the popular CRT presets at 4K on an integrated GPU. If you are on a laptop or an older desktop, crt-easymode-halation in Snes9x costs less than the same shader in RetroArch’s shader chain.

Where it falls short: SNES only. Fewer preset variants than RetroArch. HDR chain absent.

Pricing:

Platforms: Windows, macOS, Linux, plus a maintained Snes9x EX+ on Android.

Download: snes9x.com

Bottom line: The right SNES emulator when RetroArch’s overhead is too much.

7. MelonDS — Best DS/DSi shader handling

MelonDS is a reminder that not every retro system was CRT. The DS’s dual LCDs need a different treatment: subpixel grid, backlight bleed, and slight ghosting. MelonDS’s shader options handle that quirk instead of forcing a CRT scanline pattern onto an LCD-native game. It also runs the Libretro slang chain if you actually want a scanline overlay for a specific title.

Where it falls short: DS and DSi only. Slower than Drastic on the same hardware, though more accurate.

Pricing:

Platforms: Windows, macOS, Linux.

Download: melonds.kuribo64.net

Bottom line: The DS emulator that treats the console’s actual screen physics with respect.

How to pick the right one

Skip shader mania if you play modern games on a modern display. CRT shaders were designed to correct what upscaled retro pixels lost. New games do not need them.

FAQ

What is the best CRT shader for pixel art games?

crt-royale is the most complete simulation, but it needs a mid-range GPU at 4K. crt-guest-advanced is close and cheaper to run. crt-easymode-halation is the lightweight default that still looks correct.

Do I need a 4K monitor for CRT shaders?

No, but 1440p is the minimum where scanlines and shadow-mask patterns render correctly. At 1080p, most CRT shaders produce visible moiré or lose the mask pattern entirely.

Can I use CRT shaders on the Steam Deck?

Yes. RetroArch on Steam Deck runs the full slang shader library. crt-easymode-halation runs comfortably; crt-royale is too heavy for the Deck’s GPU at native output.

Does an OLED display look different with a CRT shader?

Yes, and usually better. OLED blacks let the shadow-mask pattern read the way it does on a real CRT. HDR-aware CRT shaders (crt-guest-advanced-hdr) push phosphor highlights to real HDR peak brightness for the first time.

The emulator apps and the shaders are all legal. Whether the ROMs you load are legal depends on your local law and how you acquired them.

Which CRT shader looks best for arcade games?

Use MAME with its built-in HLSL chain. It targets the specific tubes used in each cabinet. For a generic arcade preset in RetroArch, crt-consumer or crt-royale-kurozumi both work.