> I was under the impression this is just a MAME thing. Shouldn’t it be possible to
> allow for resolution to switch dependent on the mode?
real resolution switching isn't instant, so is automatically out.
low-resolution and high-resolution scanlines can be mixed, this was very common on platforms like the Amstrad CPC (and even used on things like Doom for the Jaguar) in such cases part of the screen would need to be pixel doubled anyway, so the effect wouldn't work anyway, the shaders wouldn't know how to deal with some lines being high resolution and others low resolution for the same reasons.
fake resolution switching would still require the higher resolution screenmode in advance anyway due to the ability to mix modes, it would also just complicate the code as it already has to be able to double pixels etc. to handle the aformentioned case.
and as already stated, some systems mix resolutions, so there's no chance of it working there (and trying to use any shaders like the ones mentioned would just make a hideous mess)
It's a limitation of shaders that assume things about relative pixels etc.
MAME just does it in the way that actually works for emulation cases.
Don't use crap shaders. This is one reason MAMEdev were against adding such shaders for a long time.
even if MAME was to stop using internal bitmaps, and use a series of lines of variable length, and try to do the scaling outside of the driver that would fail completely for cases where different layers are different resolutions.
what you could do for the SNES case is write a shader that knows the expected resolution and knows some pixels are going to be stretched and some might be higher resolution, checks that they're all the same colour, and disables the effect if they're not (which would indicate a high resolution part) otherwise processes it, but that's extra work. It's all about shaders making bad assumptions tho, they only really work if you dumb down the cases your emulator can otherwise handle properly.