(I edited my previous post to reflect I was talking about MM6 which scales perfectly, not MM5 (sorry--I just finished playing through MM4+5).)
Dege wrote:Well, the whole process can be divided into 2 phases:
...
So, if you want sharp output appearance then your best choose is selecting 'centered' scaling mode. Additionally, you can force the game resolution to 'Max ISF' to make the output image as large as possible.
This produces the same result as unspecified scaling + Max ISF for me, I believe because I have scaling set to GPU 'no scaling' mode in the driver control panel. 640x480 becomes 1280x960 with bilinear applied in MM7-8, and 640x480 becomes 1280x960 with pixels cleanly doubled (nearest 2x) in MM6 like I want. These all come out 1:1 with black borders on all sides as intended by the way, something I should have specified previously. I never use hardware scaling because my eyes just won't allow me--guaranteed migraine after a few minutes reading fuzzy text. This makes older text-heavy Win32 games on an LCD off-limits to me, whereas I can use integer locked nearest neighbor in DOSBox and console emulators. I only wish it was just a matter of snobbery. 😜
For some sad reason 'Centered' doesn't work for me on nVidia and AMD. I always get some stretched garbage. Works perfectly on Intel though. DXGI scaling modes seem to be totally unreliable for me.
That's why I've just added a new 'Centered, keep AR' to dgVoodoo. Max ISF + Centered AR seem to work very well.
Your problem with centered on Nvidia/AMD is it stretches outside the aspect ratio? It maintains AR for me (GTX 970, latest drivers or nearly) so I guess I can expect Max ISF + Centered AR to perform the same in my case. If it matters I use DVI.
I don't know, isn't the game itself designed to render with nearest point? What if you force the texture filtering to bilinear, or enable 'Bilinear blit stretch'?
Forcing texture filtering does nothing as the game has no hardware texturing, but bilinear blit stretch gives me the familiar awful fuzzy mess of MM7 and 8--so the game defaults to nearest with pixels doubled as desired under Max ISF, but if bilinear blit stretch is selected it scales blurry just like the latter games. I didn't think about games with fixed resolutions as having specified scaling, but I suppose the 1:1 rendering method and scaling method are one in the same--something is still rendered nearest even if it's 1:1 and not doubled (or multiplied by a non-integer). I was hoping it wasn't game-specific but API-specific which might have made it easier to override the scaling method of slightly newer games like MM7/8. 🙁
I had thought the wrapper was solely at the mercy of graphics drivers, but if the forced resolution scaling method is game-specific, I guess we may be screwed until graphics drivers (for Windows) come along that can achieve it when outputting to display without forcing the game's internal resolution. Nvidia just recently added nearest neighbor integer scaling to its Linux drivers. I am very jealous, and there's no guarantee it's coming for Windows. 😒
- If scaling modes 'Stretched, *' are selected then dgVoodoo does its own scaling. First it determines the native resolution of the output (in fact, it assumes that desktop resolution for the output in question is the same as its native resolution), and works with an output buffer with that size (similar to fake fullscreen).
In this way it's ensured that dgVoodoo's output is mapped by 1:1 to the screen and so the driver/display scaling process is omitted.
I'm probably misunderstanding the possibilities here and am clutching at straws, but is it possible to keep the game's internal resolution its native (640x480) while using non-existent dgVoodoo scaling mode 'Stretched AR, nearest'? I know nearest neighbor fullscreen is a problem because few games scale neatly to e.g. 1920x1080 or 1440x1080 (would need to be 720x540 internal resolution) and nearest neighbor with non-integer factors looks terrible, but if the output resolution could be specified upon launch, or desktop resolution is manually switched by the user to 1280x960 beforehand so that dgVoodoo can keep assuming desktop = native resolution, then... See where I'm going? If I set the desktop resolution to 1280x960 beforehand, what's to keep dgVoodoo, if it had the option, from doing nearest neighbor instead of bilinear since the GPU driver/display scaler is out of the loop? My change of desktop resolution would ensure it scales cleanly. I wouldn't be the only elated person if this were possible.
I really appreciate your taking the time. I'm a novice but really want to understand the hurdles here as I feel cut off from many of my favorite older games because I use an LCD for which ideal scaling is rarely possible, and I have little faith Nvidia or AMD will ever implement additional driver-level scaling options. Some have speculated they don't want to offer a way to make 1920x1080 look sharp on 4k displays because it would attenuate sales of monster cards capable of running games 4k @ 60 fps. The truth is such an option would be useful in more ways than one.