stella-emu / stella

A multi-platform Atari 2600 Emulator
https://stella-emu.github.io
GNU General Public License v2.0
624 stars 111 forks source link

Add "disable all scaling" option #680

Closed thrust26 closed 4 years ago

thrust26 commented 4 years ago

This option should disable aspect ratio correction. Probably only available via command line because it is required for a very special case.

https://atariage.com/forums/topic/307760-stella-62-released/?do=findComment&comment=4590628

sa666666 commented 4 years ago

As mentioned before, this basically comes down to sizing the window to the destination rectangle, instead of the other way around. And of course, using only integer zoom levels instead of floats. if it's done correctly, then it needn't be restricted to only 2x zoom; it would actually work for any zoom level 2x or above.

I don't want to get into a 1x mode though. It just brings up too many other issues.

sa666666 commented 4 years ago

Maybe we can also take the opportunity to refactor FrameBuffer::VideoMode stuff here, since it has gotten a little complicated.

thrust26 commented 4 years ago

1x is not required by Nathan, so 2x should be fine.

What are your ideas about FrameBuffer::VideoMode?

sa666666 commented 4 years ago

What are your ideas about FrameBuffer::VideoMode?

I don't recall right now; you were the one that originally said the code was too complicated :)

thrust26 commented 4 years ago

Actually I wonder why we even need these modes. Couldn't we just define them on-the-fly?

IMO the FrameBuffer class itself has become quite complex.

sa666666 commented 4 years ago

Yep, maybe that's what it was; just calculating on the fly rather than pre-calculating all the options. It's not like it takes a lot of time to do it for each mode change, so there's really no need to pre-allocate.

FrameBuffer has become complicated because of constantly adding new features. I think it could be refactored a little better.

sa666666 commented 4 years ago

This is basically the same as https://github.com/stella-emu/stella/issues/669, so I'm going to close that one and redirect all discussion here.

DirtyHairy commented 4 years ago

I still don't really understand what the result of this should be. Just the raw TIA output, without scaling to 4:3?

sa666666 commented 4 years ago

The following are not exact numbers, but should be enough to explain what's going on and what's required:

What is needed is as follows:

Note that the only difference is window size. If we create a 4:3 window and scale our framebuffer to that, we get a 4:3, aspect-corrected ratio. If we instead create a window the same integer-scaled size as the TIA output, we effectively disable aspect ratio correction.

sa666666 commented 4 years ago

Really want to get this one done for 6.3 too, if possible.

DirtyHairy commented 4 years ago

Implemented behind a command line flag -plain-video 1. This will disable all non-integer scaling and all post-processing. Window width and height are set to the TIA output dimensions, with the width scaled by an integer factor of two.