Log In  

I have noticed that whenever PICO-8 is in fullscreen, SDL2 applies a bilinear filter to it, making it blurry. It is more noticeable on Raspberry than it is in Windows (and I think in OSX is where it is the least noticeable). It is there in all platforms nevertheless.

You can see screenshots here. The picture has been reduced, but the effect has been preserved. As you can see, the bottom screenshot (fullscreen) is noticeably blurrier. You can "open image in a new tab" to see the original and the effect more clearly.

Shouldn't it be upscaling using "nearest neighbor" to preserve crisp pixels?

(These two have some additional blur because I have magnified them, but you can appreciate the difference)

P#20800 2016-05-18 15:22 ( Edited 2016-05-31 22:32)

Uneven pixels are in my opinion worse than slightly blurry pixels. I'd say the best thing would be if integer scaling could be used and it would resize to the biggest possible fit. So on a 1920x1080 screen it would scale the 128x128 image 8 times to 1024 x 1024 and leave the rest blank.

P#20801 2016-05-18 15:48 ( Edited 2016-05-18 19:48)

Yeah, uneven pixels are worse I agree.

P#20814 2016-05-18 18:33 ( Edited 2016-05-18 22:33)

Mmmh, why not adding also a CRT-like filter/shader for compatible computers? It'd make a good complement to this retro-directed/inspired project, don't you think?

P#21183 2016-05-23 16:41 ( Edited 2016-05-23 20:41)

Please never.

P#21186 2016-05-23 16:53 ( Edited 2016-05-23 20:53)

This is especially ugly when you have neighboring colors of different components, e.g. red and green. Due to gamma curves, you get dark lines in the middle of transitions.

If you could do a gamma-corrected upscale that might help, at least.

P#21956 2016-05-31 17:57 ( Edited 2016-05-31 21:57)

If Pico8 was hardware accelerated it would be easy enough to do NN filtering with supersapmling and gamma correction. Since it's all CPU based, and the upsampling is probably OS based or SDL provided it's probably a lot of work to change it.

P#21959 2016-05-31 18:18 ( Edited 2016-05-31 22:18)

If @zep is using SDL 2 then he can use:

https://wiki.libsdl.org/SDL_RenderSetScale
...for integer scaling

or

https://wiki.libsdl.org/SDL_HINT_RENDER_SCALE_QUALITY
...to force nearest neighbour scaling

Perhaps the best thing would be a combination of the two? As forcing nearest neighbour would give you odd pixels if the window was any scale other than an integer multiple.

Maybe the control/widget that maximises the window could instead cycle through valid integer scales? i did this with one of my older Mac & PC games.

For full screen it could set the largest integer scale for the current display? This could be done without the extra window control messing around I mention above.

I'd guess that it was much easier to just set Linear scaling and not have to worry about overriding the window controls or doing that extra logic.

P#21964 2016-05-31 18:32 ( Edited 2016-05-31 22:36)

[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-03-28 20:16:12 | 0.008s | Q:24