guide · static export
Emulation

Use a CRT Shader in RetroArch Without Blurring the Image

Scanlines and phosphor masks make 240p games look right - if the scale is integer and the shader matches the panel. Two settings decide crisp or mush.

by@guidox updated:10/30/26 time:15 min level:Intermediate tested on:Windows 11 24H2, RetroArch 1.19 works on:Windows 10, Windows 11, RetroArch 1.19+ tools:RetroArch
TL;DR

Turn on **integer scale**, pick **crt-geom** for a 1080p panel or **crt-royale** for 1440p and above, and switch **bilinear filtering off**. A shader on a non-integer scale turns the mask into moiré.

Before you start

Requirements

  • RetroArch 1.19 or newer
  • A core and a game that runs
  • A GPU that handles a multi-pass shader at your resolution
Step by step

Instructions

01

Set the scale before the shader

Open **Settings > Video > Scaling**, enable **Integer Scale** and set the aspect ratio to **Core provided** or **1:1**. Stretching to 16:9 destroys the geometry a CRT shader assumes.

Integer Scale: On
Aspect Ratio: Core provided
⚠ warningNon-integer scaling is what produces the shimmering pattern people blame on the shader.
02

Pick a shader for your panel

Load a preset from the shader menu: **crt-geom** is cheap and looks right at 1080p, **crt-royale** is heavier but resolves scanlines properly at 1440p and above.

crt-geom.slangp
crt-royale.slangp
03

Turn bilinear filtering off

Enable **Hard GPU Sync** and disable **Bilinear Filtering**. The shader does the smoothing; the emulator's own filter only removes detail first.

Bilinear Filtering: Off
Hard GPU Sync: On
04

Match the mask to the panel

Aperture grille looks best on high-DPI panels, slot mask on 1080p. If the image shimmers while scrolling, the mask is too fine for the pixel density - pick the coarser variant.

tipAt 4K, most people prefer a mask with two to three pixels per phosphor line.
05

Watch the frame time

Scroll a fast game for a minute and check for drops. A shader that costs more than the core's budget stutters, especially at 4K with run-ahead active.

06

Save it per core

Save the settings as a **core override** so the shader stays with that system. A shader tuned for SNES is wrong for a 3D console.

Quick Menu > Overrides > Save Core Overrides
Troubleshooting

Common issues

The image shimmers when scrolling

Integer scale is off or the mask is too fine for the panel. Fix the scale first, then pick a coarser mask.

Everything looks soft

Bilinear filtering is still on, or the shader is being upscaled from a lower internal resolution.

Black screen after loading a shader

The preset is incompatible with the current video driver. Switch between Vulkan and gl, then reload the preset.

Input lag got worse

Heavy multi-pass shaders add GPU time. Drop to crt-geom or disable run-ahead for that core.

FAQ

Frequently asked

Do CRT shaders belong on a 4K TV?

Yes, they resolve better there. Use a sharper mask and keep integer scale on.

Why not just a scanline filter?

A single scanline overlay ignores the phosphor triad and the beam. A proper shader simulates both.

How to undo this

Load the **No Shader** preset, turn integer scale and the aspect ratio back to your defaults, and delete the core override if you saved one.

Changelog · 1 entry
  1. 2026-10-30
    First version
Interactive version: checklist, feedback, related guides →

Free · no account needed · tracks your progress