HiDPI improvements in Windows 10

Windows 10 provides a bunch of quality improvements regarding scaling user interface of applications incompatible with HiDPI (High-DPI, Retina):

  • upscaling old applications with no blur at integer zooms;
  • overriding DPI mode of an application in an arbitrary direction;
  • quality text rendering via GDI;
  • developers: ability to combine different DPI modes in the same application.

Nonblurry upscaling

UI of HiDPI-incompatible applications at integer OS-level zooms is now upscaled by simple pixel duplication — with no unreasonable blur. For example, at zoom of 200% (2.0), one logical pixel of application’s interface is rendered as a square group of 4 (2×2) identical pixels corresponding to OS resolution, and at zoom of 300% (3.0) — 9 pixels (3×3).

Blur that did before take place regardless of zoom ratios, now appears only at fractional zooms — e. g. 150% (1.5) or 250% (2.5), when interpolation and subsequent sharpness loss are really inevitable.

Overriding application’s DPI awareness

Beginning with one of preliminary builds (probably 15002) of Windows 10 Insider Preview, it’s now possible to override HiDPI compability (DPI awareness) of an application in an arbitrary direction.

Before, it was possible to disable DPI scaling (scaling by OS) only for applications formally not supporting HiDPI while actually working quite correctly in HiDPI mode.

Now it’s possible, when needed, to forcedly enable DPI scaling for applications that declare HiDPI support while not taking actions for scaling the application’s interface, de facto oriented to system-resolution pixels and therefore rendered at very small size by default (for example, at zoom of 200% — 4 times smaller than needed) or incorrectly. Examples of such applications are Samsung Magician, control panel of the ESI Juli@ sound card, and Acronis True Image Home 2011.

Quality text rendering via GDI

Beginning with the build 15002 of Windows 10 Insider Preview released in early 2017, the new “System (Enhanced)” mode is available for OS-powered scaling. In this mode, text in elements rendered via GDI is output at full system resolution, with no blur or pixelation.

The “System (Enhanced)” option is available via the dropdown list of the “Override high DPI scaling behavior. Scaling performed by” option in the window opened with the “Change high DPI settings” button in the “Compatibility” tab in properties of the executable.

For example, the HWMonitor application in this mode looks and works almost the same as if it actually supported HiDPI, and, unlike forced regular HiDPI mode (the “Application” item of the “Override … Scaling performed by” dropdown), there is no issue related to automatic setting of too small width of columns in the data table that comprises the main part of the application’s user interface.

Unfortunately for now this feature only works with some programs, and in those it works with, it may cause lack of gaps between some horizontally adjacent characters when using fonts with variable character width — e. g. in the Omea Pro RSS-reader. Also, characters along the edges of text-rendering area might be partially cropped.

Different DPI modes for windows of the same application

Beginning with Windows 10 Anniversary Update released in summer 2016, developers can now control DPI mode per window in the same application — Mixed-Mode DPI Scaling.

This allows to implement HiDPI support in existing complex applications gradually, with no need for adapting the entire application at once.

Also, this feature may be useful for applications with a system of plugins (dynamically plugged third-party program modules), allowing to upscale user interface of specific plugins (e. g. virtual VST instruments) with no need for running them in a separate process.

Nonblurry full-screen scaling?

The only missing feature that owners of 4K monitors need to be absolutely happy is now probably full-screen nonblurry integer-ratio scaling via graphics drivers to prevent image-quality loss in such applications as games running at resolutions that are integer times lower than native (physical) monitor resolution (for example, 1920×1080 or 1280×720 at physical resolution of 3840×2160).

Microsoft has figured out their mistakes and fixed them, and we are waiting for similar steps by nVidia, AMD and Intel.