Please show off what crt shaders can do!


Yes, I added it to the slang version a couple of months ago but have not added it to the GLSL version.


New ps1 “hi-def” preset!


Current apex of my work on new shaders involving adaptive-width scanlines, subtle blooms, and a phosphor texture utilizing LCD subpixels for conveying finer details.


Recent changes for Beetle PSX which brought Super Sampling have fixed a lot of issues with inconsistent resolution and bad mixing of 3D and 2D objects.

But I would like to showcase you how well 3D and 2D objects can be merged just by using a shader preset without losing details. This is my shader chain for PSX I presented previously with some minor adjustments:

ia_black_level = "0.100000"
ia_R = "1.050000"
OverlayMix = "0.500000"


That looks quite nice Great_dragon!

Below are GB, GBC, and GBA games with a crt shader. The results are quite interesting. All are using crt-royale-tvout+image-adjustment. Link’s Awakening looks fantastic.


@torridgristle - fantastic work, man!

@Great_Dragon - yeah that looks great. Is it 1x or 2x internal res?

@Arviel - I too run everything, including handhelds, with crt shaders. They look much better than LCD filters imo. GBA and DS become particularly handsome


It’s 4x internal resolution. No Super Sampling applied. No MSAA.


This is how I solved that riddle back in the day. It looks good enough I’d say!


A bunch of games using crt-royale-tvout+image-adjustment. Would it be possible to convert this shader to slang? I see other royal variants but not this one.


I specifically setup my shaders so that at the touch of a hotkey I can switch between different ‘connection’ types. These look phenomenal on my KD5 CRT PC Monitor running at 1280x960 (4x 240p) I’m always tweaking these, but here are my current ones:

  • NTSC-Colors
  • GTUv50
  • Image-Adjustment
  • CRT-Geom
  • Interlacing
  • Dotmask

The HDMI Shader is XBRZ-Freepass instead of GTUv50

RGB simply lacks GTUv50 or XBR as well as NTSC colors








has this been converted to GLSL yet? I’d like to try this. Using the LCD subpixels to convey finer details is a very cool idea.


@Arviel - those look phenomenal! Also, a great selection of games.

Happy new year everyone! Damn 2019 sounds like science fiction…

Some exciting news. @guest.r has been developing a crt shader which I’m currently experimenting with, and I believe it has enormous potential.

The (very interesting) discussion where I learnt about it can be found here, together with glsl files for RA. It seems to do it all: scanlines, masks, glow, curvature, white balance and other image adjustments… pretty sure it will soon be in the official repo.

Great to see @torridgristle’s awesome Grits-scanlines there too :smiley:


Thanks for the pointer on the new crt shader @Squalo :male_detective:

Wow @guest.r, you kept that one quiet! Just tried the crt-guest-dotmask and crt-guest-dr-venom variations out and they certainly do look great with some very unique effects going and along with a host of new parameters. Can’t wait for it to appear in the official repo.


Well, I’ve come around to the conclusion that a very slight amount of blur enhances the picture quality for 240p content and also more closely approximates how a CRT works compared to pure nearest neighbor filtering.

The tricky thing about blurs is that almost all of them are too heavy-handed, smearing the colors too much and destroying the contrast around highlights. It’s the difference between adjacent light and dark colors that causes the highlights to stand out (or “pop”), and this is lost when too much artificial blur is added. The resulting image is flat, dull, and lifeless.

The key is to make the blur radius less than the radius of the emulated pixels, e.g., if you’re using a 6x5 integer scale, the blur needs to be less than 6 pixels wide (referring to the LCD’s pixels). Otherwise, you ruin the highlights (IMO).

The first shot below is using nearest neighbor filtering. The second shot is using modified Quilez scaling. Both have scanlines and an RGB aperture grille overlay. In the second shot, I set shader filter to linear and set the “x-axis blur” parameter to 0.00. This is using the z_fast CRT shader. This results in a 2 pixel(?) wide horizontal blur and gives the scanlines a more “rounded” appearance. This makes the transitions between adjacent light and dark pixels somewhat less harsh and more natural looking without completely destroying the contrast around highlights.


Some screenshots showing off guest.r’s shader.


I’m really digging those beam dynamics.


Was thinking the same. The glow looks nice, too- not terribly exaggerated. Though, again, it seems like there’s probably a bit too much bloom going on, at least for a properly calibrated CRT.

I’d like to see some shots with the bloom toned down a bit and some chunkier phosphors instead of the BVM-like phosphors in the above examples, and with the curvature disabled.

Overall, looks very promising!


Oh yes! That shader is looking fine! I truly hope it wont be very demanding on the specs. Thanks for sharing @Arviel.


I skimmed through the shader files (but didn’t see a preset file anywhere), and the curvature and mask code are borrowed from lottes, so the curvature’s easy to disable and the chunkier masks are there, as well. The bloom passes can be replaced with stock shaders or tighter bloom passes as desired.


Thanks for the feedback on the shader. :nerd_face: It’s true i left it a bit in “disorder”, mostly because Dr. Venom (emu fellow with some great ideas) modified it to his liking afterwards and i was focusing on other aspects. Originally the preset involved the dotmask shader, but i needed to use the mask code before glow was added so it was assimilated (and cgwg mask was fixed, it’s buggy without frag coords with my adapter). I think folks here are proficient with the dotmask shader, so altering the settings should go as usual.

I think the shader has two strong-points, one for simpler gfx. (sharp, no mask, some glow…) and one for “plenty of colors” gfx. (low sharpness, lottes masks). The current setup is a bit neutral, as i mentioned.

New things added are blooming, which means getting closer to old crt’s, which blow up the image a bit rendering brighter screens, the other is color temperature a.k.a. white points.

Anyway, thanks for giving it a try. :heart_eyes:

@hunterk Here is the preset (i swear it was there last time i looked): :grin:


 shaders = 10

shader0 = shaders/guest/d65-d50.glsl
filter_linear0 = false
scale_type0 = source
scale0 = 1.0

shader1 = ../stock.glsl
filter_linear1 = true
scale_type1 = source
scale1 = 0.5

shader2 = ../stock.glsl
filter_linear2 = true
scale_type2 = source
scale2 = 0.5

shader3 = ../stock.glsl
filter_linear3 = true
scale_type3 = source
scale3 = 0.5

shader4 = shaders/guest/avg-lum.glsl
filter_linear4 = true
scale_type4 = source
scale4 = 1.0

shader5 = ../stock.glsl
filter_linear5 = false
scale_type5 = source
scale5 = 8.0

shader6 = shaders/guest/linearize.glsl
filter_linear6 = true
scale_type6 = source
scale6 = 1.0
float_framebuffer6 = true

shader7 = shaders/guest/blur_horiz.glsl
filter_linear7 = true
scale_type7 = source
scale7 = 1.0
float_framebuffer7 = true

shader8 = shaders/guest/blur_vert.glsl
filter_linear8 = true
scale_type8 = source
scale8 = 1.0
float_framebuffer8 = true

shader9 = shaders/crt-guest-dr-venom.glsl
filter_linear9 = true
scale_type9 = viewport
scale9 = 1.0 

Btw., is there a chance “frame history” - accessing previous frames - to be available with GLSL? I read the slang specs and it’s supported there. Currently my adapter is GLSL/DX only with RA and i would like to add phosphor afterglow to the shader. No hurries…:relaxed: