SDL linear filtering

Discussion of development and patch submission.
Post Reply
Posts: 4
Joined: Tue 24 Jul, 2018 2:51 pm

SDL linear filtering

Post by Nightblair » Sun 29 Jul, 2018 8:28 am

When emulating proper 4:3 aspect ratio, I use filtering to prevent oddly shaped pixels. In dosbox this looks fine with normal3x scaler. However in pcem the image is sligtly more blurry which unfortunately gives me a headache after a while.
So I've digged into the code and found that pcem is using SDL library linear filtering to do the job from the base input (if I read the code correctly). Then I've got this idea if the image is integer scaled first to higher resolution with nearest filtering with SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0") and then rescaled to 4:3 format, would the result be better, less blurry?

I've tried to do it myself, however I'm completely unfamiliar with c and SDL2, so I failed.

Do you think the theory is reasonable, though?
Last edited by Nightblair on Mon 30 Jul, 2018 5:45 am, edited 1 time in total.

User avatar
Posts: 613
Joined: Fri 25 Apr, 2014 4:47 pm

Re: SDL linear filtering

Post by leilei » Mon 30 Jul, 2018 12:53 am

If you were to have actual normal3x in PCem, you'd see this applied as normal6x as PCem properly emulates double-scanned VGA.

Your best bet is a OpenGL 3.0 shader preset of some kind...

Posts: 4
Joined: Tue 24 Jul, 2018 2:51 pm

Re: SDL linear filtering

Post by Nightblair » Mon 30 Jul, 2018 5:45 am

It does not neccesarily be like normal3x, but good point with the double scanned mode. If I use the scale function with SDL hinting off, then it might be set correctly.

I've tried some shaders from retroarch but so far no luck with any. Also, for some reason the OpenGL3 mode takes a toll on my processor a lot more than normal opengl mode.

Posts: 4
Joined: Tue 24 Jul, 2018 2:51 pm

Re: SDL linear filtering

Post by Nightblair » Tue 20 Nov, 2018 8:57 am

I've just randomly found description of the approach which I wanted to take in pcem: ... ng/d6epios

Maybe it will be better described than in my broken English. Now that I know that this is sound approach, I might try again to code this in pcem (but again, with no knowledge in C and SDL).

Posts: 14
Joined: Tue 06 Nov, 2018 3:01 am

Re: SDL linear filtering

Post by RealNC » Tue 20 Nov, 2018 11:10 am

Can't you switch from linear to nearest? I get that choice in the right-click context menu. Now I don't actually use that, I use an OpenGL 3 CRT shader instead from here:

But in the "normal" OpenGL mode, I can switch from linear to nearest by right-clicking, then selecting "Video" and then "Scale filtering."

But an OpenGL 3 CRT shader is much better at this, at least if you have a 1440p display. I'm not sure if it works that well at 1080p or lower though. I find that the scanline emulation in the CRT shader actually makes the upscaling and aspect ratio correction look much better, it's not just an aesthetic thing. The shader can also adds slight blur to make it look more similar to how "upscaling" would look on a CRT, but that's optional.

This is how it looks like here, standard VGA text mode upscaled to 1440p, 4:3 aspect corrected:

The shader I'm using is "monitor-crt-sxga99.glslp" from the Git repo I linked to above, and I configured it with these values:

Code: Select all

GAMMA_INPUT = 2.300000
GAMMA_OUTPUT = 1.000000
SHARPNESS_H = 0.600000
SHARPNESS_V = 0.850000
MASK_TYPE = 6.000000
MASK_SIZE = 1.000000
GEOM_WARP = 0.000000
HALATION = 0.040000
DIFFUSION = 0.050000
BRIGHTNESS = 1.050000
SCANBIAS = 3.280000
TARGET_INCHES = 12.500000
TARGET_NATIVERES = 8000.000000
However, again, it seems that it doesn't work correctly if you have a 1080p display or lower. It seems anything below 1200 pixels high will not produce the correct result.

Posts: 4
Joined: Tue 24 Jul, 2018 2:51 pm

Re: SDL linear filtering

Post by Nightblair » Tue 20 Nov, 2018 3:56 pm

I don't have 1440p display, but lower resolution. Nearest is great, but when you want 4:3 aspect correction then it looks like trash on my setup with 1680x1050 resolution:
There is not enough pixels to look good, so this just needs some filtering, sadly the default pcem bilinear filter is giving me headaches because of the blurriness.

But at least now I know why this is not a problem for anyone else when higher resolution is available.

Post Reply