Upscaling old games on High DPI screens

I am playing a rather old game with Wine and it looks fine in 1280×720 resolution, but on 2560×1440, which is my screen’s resolution, it looks too tiny. Now, I could use Lutris to change the desktop resolution to 720p and play in fullscreen, but then when I Alt+Tab out of the game, my desktop is in 720p. Even worse, if the game crashes, it remains in 720p and I have to manually change the resolution. I can play in windowed mode, but that solves nothing, as the window is exactly a quarter of a screen and still tiny.

I am looking for a way to upscale the game window by a factor of 2, so that 720p becomes 1440p. I don’t need any fancy interpolation algorithms, I’d be quite happy if each pixel became four pixels, like this: ▀ → ██

I figured a rather wonky way to do it, but it works (on KDE). I use the screen zoom feature:

Settings → Workspace Behaviour → Desktop Effects → Zoom

I set:

Zoom Factor: 2.00
Mouse Tracking: disabled.

Now I set a window rule for the game, so that the window is borderless and located in the upper left corner of the screen. I move the mouse to the upper left corner of the screen and hit the magnify shortcut.

It’s fiddly, but it works.

Does anyone know of a better, less insane way to get the same effect?

Maybe this can help

https://github.com/kaueraal/run_scaled

Have you tried it? It does not work very well. Or at all.

What’s the game?

There are several of them, but one particularly problematic one is Dragon Age: Origins.

I’ve tried modding it to run in a higher resolution, and that somewhat works, but it’s crashy and the game just looks wrong (the textures and meshes are designed with low resolution in mind, and the UI does not scale very well).

1 Like

Well, it’s best to go one by one, as old games are not monolithic structure, they implement stuff VERY differently. I’ll try some stuff once i have little more time, i think i have a working idea.

The ideal solution would be upscaling any portion of the screen by a factor of 2. Like zoom in KDE, but better… This would preserve faithfully the pixelated aesthetic of old games.

That’s just a theory, ideal solution is rendering game in native monitor resolution…

The thing with old games, it’s just like flac vs mp3, you can’t really fix the quality, unless you fix the source, if you catch my drift :upside_down_face:

I don’t want to fix the quality. I want all the pixelated goodness in all its glory.

I particularly don’t want low-poly meshes and low-res textures to be rendered in high resolution, exposing all of their flaws, or attempts at UI scalling where the text is not positioned exactly in the middle of a button, because the font scales differently. Stuff like that really takes away from the enjoyment of the game.

I just want one pixel to become four, so 1280×720 becomes pixelated 2560×1440. I have plenty of computing power to pull it off, just lacking good software.

Just like you can watch a 240p video in a window of any size (or full screen), because it is upscaled pixel by pixel by your video player, the same way I would like to upscale any portion of my desktop, or any window, by some factor (it can even be an integer 2, that’s fine). The zoom feature on KDE is a proof that such a concept is not 100% crazy and off the wall and should be quite doable.

Yeah, i forgot about that. Well it’s not exactly high-dpi “problem” as you’ve described in wide-monitor thread :rofl:

Pretty insane if you ask me.
I remember we’ve tried something about it before…

Well, it is a problem with high DPI (and a pretty big one for me), and I’ve described nothing specific in that other thread. :joy:

The solution I am considering is to capture a window with ffmpeg or OBS or something like that, and then stream it to a media player (on a different monitor, perhaps), but I haven’t yet had the time to fully work out the details of it, and I’m quite worried about any latency, because playing games with input lag is… bad.

1 Like

That’s 200% more insane than even KDE zoom :rofl:
There are other ways.

ouch… Hope you like input lag :sweat_smile:

1 Like

Everyone love input lag! :rofl:

Ok, so here you go:

  1. Download dgVoodoo2 (dgVoodoo2_78.zip)

  2. Copy relevant files to directory with game’s .exe (NOT launcher, but actual .exe), so in case of DAO Dragon Age Origins/bin_ship/. You need this files:

    • dgVoodoo.conf
    • dgVoodooCpl.exe
    • MS/x86/*.dll just all files from here, note that we use x86 since that’s that game’s .exe arch, and using d3d9 since game uses DirectX 9. If you use other older DirectX (pre 9) games it will also require wine config overrides.
  3. Once all those files are in place, launch dgVoodooCpl.exe and set it up like that in DirectX tab:

    • VRAM 4096 Mb (or whatever your GPU actually supports)
    • Resolution: Max (your native monitor resolution)
    • Note there is dgVoodoo watermark option (once you’ll be sure that it works after first launch and this watermark appears on bottom right of screen - you can untick it later)

    Also there is very interesting stuff in General tab, we don’t need it for DAO, but you can read about Scaling mode by hovering cursor on it, in some VERY old game it can be a lifesaver, note that some modes may not work for given game and it will just crash.

  4. Now just launch game, set all stuff as you wish and set any game resolution, you can get as low as you want - rendering window will still be your monitor native, and you can Alt + Tab the living crap out of it (it won’t work for all games, but for this it works fine).

P.S. Oh, and interpolation at that point is controlled by ingame AA
hmm, looks like there are advanced options in fact, but be careful.

If the scaling is handled by dgVoodoo, then a resampling method can be selected. The more complex the filter is, the more computationally expensive it becomes.

Resampling methods listed in order of complexity:

  • Point sampled (unblurred pixels)
  • Bilinear (smoothed)
  • Lanczos-2 (smoothed but sharper)
  • Bicubic (smoothed but sharper)
  • Lanczos-3 (smoothed, sharpest)

In order to use it, you must first select one of Scaling modes which i’ve mentioned in 3. (General tab), choose one which uses wrapper, most appropriate is usually Centered, keep Aspect Ratio