Overlay for running GPU shaders on top of Windows desktop.
Latest release (v0.9, 10 Aug 2023):
https://github.com/mausimus/ShaderGlass/releases/download/v0.9/ShaderGlass-0.9-win-x64.zip
Follow ShaderGlass on itch.io for latest updates.
If the app reports missing libraries please install Visual C++ Redistributable 2019
ShaderGlass running over multiple applications on Windows 11 desktop.
In this mode a transparent floating window will apply a shader to anything behind it. Requires Windows 10 2004 - on 1903/1909 you will see only a black window if you switch to this mode.
Wikipedia in Chrome processed by crt-geom shader which applies scanlines and CRT curvature.
When capture is fixed to a specific window it's easier to tune scaling to match the input and image can also be recaptured (screenshot/OBS etc.)
Amiga version of The Secret of Monkey Island (1990) running in FS-UAE with crt-interlaced-halation shader applied.
Ninja (1986) for the Atari XL running in Altirra with a TV-OUT simulation shader.
The Crimson Diamond (2020), a modern AGS game softened using crt-fast-bilateral-super-xbr shader.
Police Quest (1987) with its massive half-EGA pixels, aspect-ratio corrected and post-processed using newpixie-crt shader.
Rick Dangerous (1989) with C64 monitor shader applied.
Currently supported options are:
Processing -> Enable Global Hotkeys - toggle use of global hotkeys (if they conflict with another app)
Input -> Desktop - captures the whole desktop or an individual monitor, defaults to Glass mode
Input -> Window - captures the selected window, defaults to Clone mode
Input -> File... - load a .png or .jpg file as input
Input -> Capture Cursor - whether to include mouse cursor in capture
Input -> Remove Yellow Border - disables yellow frame around captured area (forced security feature); currently only supported on Windows 11
Input -> Pixel Size - indicates the size of input pixels (pre-scaling), i.e. if you run a game in x3 scaling mode set this to x3 as well so that ShaderGlass can tell the original resolution
Output -> Mode - overrides default mode for the input type:
Glass (default for Desktop) - ShaderGlass window appears transparent, you have to position it over the window or area you'd like to capture
Clone (default for Window) - ShaderGlass copies the content of capture so you can position it anywhere; this mode is also faster and more compatible
Output -> Window - override mouse behavior:
Solid (default for Clone) - ShaderGlass window area is solid (traps mouse events), with the only exception of passing focus to captured window when clicked
Click-through (default for Glass) - ShaderGlass window area is transparent and clickable/scrollable-through to window(s) underneath
Output -> Scale - apply additional scaling to the output if you'd like it to be larger; using no pre-scaling and only output scaling should result in best performance
Output -> Aspect Ratio Correction - presets for common aspect ratio correction factors (DOS, etc.), applied horizontally to preserve scanline count
Output -> Frame Skip - in order to improve performance divide frame rate by n (capture is done at VSync rate)
Output -> Take Snapshot - export current picture in .png format
Output -> Fullscreen (Ctrl+Shift+G) - turn ShaderGlass into a topmost fullscreen borderless window, in Glass mode you will still see yellow outline around the screen but if you can use Window Glass (surrounding black bars) or Window Clone (top-left aligned) with your source then you can avoid yellow edges; press Ctrl+Shift+G to revert
Shader - choose RetroArch shader to apply, or none shader for testing
Choose - open Shader Browser to switch the current shader
Next - switch to the next Shader
Random - choose a random Shader
Active - temporarily switch to 'none' Shader to see the difference (hold TAB)
Parameters - show and modify active shader's parameters
You can save and load profile files which will store all the options. It's also possible to pass profile file path on the command line and ShaderGlass will load it on startup.
ShaderGlass.exe [-p|--paused] [-f|--fullscreen] [profile.sgp]
You can pass profile filename as a command-line parameter to ShaderGlass.exe and it will be auto-loaded.
In addition -p will launch in paused mode, and -f will launch in fullscreen mode.
In order to achieve the best effect it's necessary to tune parameters to match your input:
if you use scaling in your input, use nearest-neighbour (i.e. no smoothing) and set Input -> Pixel Size to match
moving/resizing the window slightly might also help find the best fit for downscaling pixels
use Window Clone mode if you can, it's fastest and most compatible; if you need mouse click-through use Glass mode
Always check that input is crisply pixelated using the "none" shader as there is often implicit scaling happening (for example even when Chrome displays an image at 100%, Windows DPI scaling is still applied). The none shader should display a pixelated image with no smoothing whatsoever, try to match Input Pixel Size setting with your input's size to achieve that.
All shaders start using default Parameters as defined by their authors, but you can also tweak them using Shader -> Parameters menu option.
Most emulators (DOSBox, FS-UAE, Altirra etc.) will capture mouse by default so you can use them in Window Clone mode. ShaderGlass window will remain topmost so just position it over the game window and Alt-Tab to the game to have mouse and focus captured.
ScummVM doesn't capture mouse cursor by default so for best results follow below steps: 1) Use Window Clone mode, set Input/Output/Shader options to your liking 2) Switch Output Window to Click-through 3) Click or Alt-Tab to ScummVM game window so that it has focus 4) Press Ctrl-M which will force ScummVM to capture mouse
This way you should have the mouse captured by ScummVM so that it remains within the game window until you press Ctrl-M again. You can apply output scaling and/or aspect ratio correction in ShaderGlass and enjoy the game.
See FAQ here.
Built using Visual Studio 2022 using ISO C++ 20, Windows SDK 10.0.22000, Windows Capture API and DirectX 11.
ShaderGlass includes a limited implementation of RetroArch shader back-end. ShaderGen is a command-line tool for converting Slang shaders into .h files which can be merged into ShaderGlass. The conversion process requires:
ShaderGlass application is provided under GNU General Public License v3.0
Includes precompiled shaders from libretro/RetroArch shader repository. Please refer to copyright notes within shader code for detailed copyright and license information about each shader.
App icon courtesy of Icons-Land
Big kudos to RetroArch team, emulator developers and the wide retro community!
Thanks to @lonestarr for PRs :thumbsup: