2
\$\begingroup\$

The idea is to take old games without modifying them, but have the graphics card apply a series of filters to their output before sending them to the monitor. A very crude example would be to take a game that has a resolution of 640x480 and do:

  • Increase the resolution to 1280x960
  • Apply a blur (low pass filter)
  • Apply a sharpen (1 + high pass filter)

These steps may not necessarily be the best to improve the visuals of an old game, but there are a lot of techniques that are well-known in image processing for this purpose.

The question is, do the (NVidia) graphics cards give the ability to load a program that modifies the screen before sending it to the monitor? If so, how are they called and what terminology should I use to search? I would be comfortable with doing the programming myself if this ability is part of a library.

Also, would the solution be different between Windows and Linux? If so, either is fine, since most of the games are probably runnable by wine.

\$\endgroup\$
2
  • \$\begingroup\$ Note: I'm not entirely sure if this question fits gamedev better or stackoverflow. Feel free to migrate. \$\endgroup\$
    – Shahbaz
    Commented Oct 8, 2012 at 8:42
  • \$\begingroup\$ For posterity, this is doable in Vulkan with a custom layer! \$\endgroup\$
    – Shahbaz
    Commented May 3, 2021 at 4:02

2 Answers 2

2
\$\begingroup\$

This is non-trivial. Your best chance of success will not be by accessing the graphics card directly (unless you like re-writing hardware drivers for ever card you want to support), but rather, the rendering API that does all that for you; DirectX or OpenGL.

You'll need to hook (this is the term you'll want to search with) the API's interface with your own instructions.

https://stackoverflow.com/questions/2649702/c-sharp-hook-overlay-a-directx-game

https://stackoverflow.com/questions/10048333/capture-visual-output-of-a-directx-application-even-in-background

\$\endgroup\$
0
\$\begingroup\$

The way I would do this process is create a method that captures an off-screen (as supposed to the main image the user views); this is called page-flipping, then use that image to apply the image manipulation techniques of your programming language of choice (resize, blur and sharpen).

If you perform the aforementioned process with the least number of resources calls to your system, the speed should stay the same as if this image manipulations never happened.

These are the tutorials for what you want to do in Java language:

http://docs.oracle.com/javase/tutorial/2d/images/drawimage.html

(check the running program at the bottom of the page in the previous link)

http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

They might not be useful if you don't write in Java, but the terminology will help you do your research. :)

\$\endgroup\$
1
  • \$\begingroup\$ I think you missed the question entirely. \$\endgroup\$
    – Cypher
    Commented Oct 8, 2012 at 23:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .