Skip to content

Commit 09f0aa2

Browse files
committed
v120
2 parents 77614b5 + 125d799 commit 09f0aa2

File tree

7 files changed

+128
-339
lines changed

7 files changed

+128
-339
lines changed

FAQ.md

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,4 @@
22

33
---
44

5-
### > I'm seeing black only
6-
7-
Make sure you're using __Windows 10, version 2004__ (build 19041) or __Windows 11__.
8-
9-
---
10-
11-
### > Can I use it with Reshade?
12-
13-
While there is no special support for it, you can inject Reshade into ShaderGlass just like into any other DirectX 11 app and stack Reshade shaders on top.
14-
15-
---
16-
17-
### > I see yellow border around captured screen/window
18-
19-
#### Windows 10
20-
21-
Unfortunately yellow border is enforced on Windows 10 and there's no way to remove it. There are some ways to avoid it, for example:
22-
* start up your game in Windowed mode
23-
* in ShaderGlass choose Input -> Window -> choose your game's window
24-
* click onto your game window to give it focus
25-
* press Ctrl+Shift+G to make ShaderGlass fullscreen
26-
27-
#### Windows 11
28-
29-
It's possible to disable yellow border but only on Windows 11. If you are using Windows 11 and still seeing the border,
30-
open Windows Settings app and search for "screenshot borders". Make sure all the options and ShaderGlass are allowed to
31-
remove the border per below:
32-
33-
![screenshot](images/windows-settings.png)
34-
35-
---
36-
37-
### > I can't capture using OBS
38-
39-
OBS can capture ShaderGlass but only as a Game Capture source (not Window Capture nor Desktop Capture). Use "Capture specific window" within
40-
Game Capture to select ShaderGlass window only.
41-
42-
![screenshot](images/obs.png)
43-
44-
---
45-
46-
## > Text/letters are all blurry or pixelated
47-
48-
For maximum sharpness set Input -> Pixel Size -> x1 but note that a lot of shaders expect pixelated input so set this option accordingly to each scenario.
49-
50-
---
51-
52-
## > Can I save a profile?
53-
54-
Yes, you can save shader profiles as files, access from Recent Profiles menu and even load them on startup via a command line parameter. See [README](README.md) for details.
55-
56-
---
57-
58-
## > I don't see my favourite RetroArch shader
59-
60-
ShaderGlass includes majority of RetroArch repository at time of release, but some shaders had to be excluded because of features SG doesn't yet support (for example HDR).
61-
Differences vs RA repository are tracked in [this PR](https://github.com/mausimus/slang-shaders/pull/1).
62-
63-
---
64-
65-
## > ShaderGlass can't capture some windows
66-
67-
Unfortunately some old-style rendering windows are not supported by modern Windows Capture API. Please use Desktop mode to capture those.
68-
69-
---
70-
71-
## > Can I...
72-
73-
Please read through [README](README.md) to find functionality you are looking for.
5+
FAQ is now part of the [Online Manual](https://mausimus.github.io/ShaderGlass/MANUAL.html).

Misc/MANUAL.html

Lines changed: 103 additions & 36 deletions
Large diffs are not rendered by default.

Misc/MANUAL.pdf

12.6 KB
Binary file not shown.

Misc/README.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ShaderGlass v1.1.0
1+
ShaderGlass v1.2.0
22

33
ShaderGlass - overlay for running GPU shaders over Windows desktop
44
https://github.com/mausimus/ShaderGlass

README.md

Lines changed: 18 additions & 228 deletions
Original file line numberDiff line numberDiff line change
@@ -17,43 +17,29 @@ Overlay for running GPU shaders on top of Windows desktop.
1717
[ScummVM](https://github.com/scummvm/scummvm), [AGS](https://github.com/adventuregamestudio/ags), [VICE](https://sf.net/projects/vice-emu), [Aseprite](https://www.aseprite.org/) etc.
1818
* excellent companion for pixel art showing shaded and/or aspect-ratio corrected preview
1919
* you can even use it on top of YouTube, Twitch or modern games
20+
* allows capture from a USB source (webcam or capture card)
2021
* saving and loading profiles
2122
* import of external .slangp/.slang shaders
2223
* high customizability with various options, operating modes and shader parameters
2324
* can be captured by OBS (using Game Capture source)
2425

26+
Check out [Online Manual](https://mausimus.github.io/ShaderGlass/MANUAL.html) for details.
27+
2528
<br/>
2629

2730
### Download
2831

29-
Latest stable release (v1.1.4, 6 Jul 2025):
30-
* ability to import .slangp/.slang shaders on the fly
31-
* shader library refresh: added koko-aio and retro-crisis
32-
* ability to tag personal favorites
33-
* new frame timing mechanism for smoother capture
34-
* option to save window position
35-
* ability to crop input window (Input -> Window -> Crop)
36-
* 100% FPS now default (+option to remember)
37-
* vertical orientation option (vertical scanlines, i.e. arcade cabinet style)
38-
* option to save defaults
39-
* option to lock scale changes
40-
* advanced menu with DXGI settings
41-
* minor menu rearrangement
42-
* (1.1.1) fix input alignment when using multiple monitors with different DPIs
43-
* (1.1.2) fix mirror/repeat stages (koko-aio)
44-
* (1.1.4) fix high refresh capture (removes 65 fps limit)
45-
46-
https://github.com/mausimus/ShaderGlass/releases/download/v1.1.4/ShaderGlass-1.1.4-win-x64.zip
47-
48-
Latest beta release (v1.1.6, 2 Aug 2025):
49-
* (1.1.5) Device capture input (webcam/capture card)
50-
* (1.1.5) Hide original mouse cursor when "Capture Cursor" is enabled
51-
* (1.1.6) Ability to edit global hotkeys
52-
* (1.1.6) New hotkeys: Capture Cursor, Shader Active, Toggle Menu
53-
54-
https://github.com/mausimus/ShaderGlass/releases/download/v1.1.6/ShaderGlass-1.1.6-beta-win-x64.zip
55-
56-
Get it on Steam!
32+
Latest stable release (v1.2.0, 5 Aug 2025):
33+
* device capture input (webcam/capture card)
34+
* hide original mouse cursor when "Capture Cursor" is enabled
35+
* ability to edit global hotkeys + more of them
36+
* minor fixes
37+
38+
https://github.com/mausimus/ShaderGlass/releases/download/v1.2.0/ShaderGlass-1.2.0-win-x64.zip
39+
40+
<br/>
41+
42+
### Get it on Steam!
5743

5844
[![ShaderGlass on Steam](images/steam.png)](https://store.steampowered.com/app/3613770/ShaderGlass/)
5945

@@ -70,8 +56,6 @@ Follow [ShaderGlass on itch.io](https://mausimus.itch.io/shaderglass) for latest
7056
* Windows 11 allows the __removal of yellow border__ (see [FAQ](FAQ.md#windows-10) for tips on avoiding it on Windows 10)
7157
* DirectX 11-capable GPU
7258

73-
If the app reports missing libraries please install [Visual C++ Redistributable 2019](https://aka.ms/vs/16/release/vc_redist.x64.exe)
74-
7559
<br/>
7660

7761
### Demo
@@ -135,213 +119,19 @@ with C64 monitor shader applied.
135119

136120
<br/>
137121

138-
### Menu Options
139-
140-
Currently supported options are:
141-
142-
#### Processing
143-
144-
* __Enable Global Hotkeys__ - toggle use of global hotkeys (if they conflict with another app)
145-
146-
* __Show Menu__ - toggle menu bar ('m')
147-
148-
* __Remember Position__ - remember previous window position and size on startup
149-
150-
* __GPU__ - shows the GPU which Windows assigned to ShaderGlass (read-only)
151-
152-
* __FPS__ - by default ShaderGlass runs at V-Sync, you can reduce GPU load by lowering the frame rate (for pixel art etc.)
153-
154-
* __Remember FPS__ - tick so that ShaderGlass remembers and always uses current FPS setting (this overrides any preset)
155-
156-
* __Advanced__ - extra options for lowering latency; these options require restarting ShaderGlass
157-
* __Use Flip Mode__ - uses DXGI Flip Presentation mode (as opposed to BitBlt) which is faster but a little unstable (especially on Windows 10)
158-
* __Allow Tearing__ - removes explicit V-Sync, required for VRR to work
159-
* __Max Capture Rate__ - remove capture frame limit of WGC, only supported since Windows 11 24H2
160-
161-
* __Load/Save/Recent Profiles__ - you can save ShaderGlass' configuration into a profile file and load later
162-
163-
* __Set as default/Remove default__ - make current settings the default when starting up
164-
165-
#### Input
166-
167-
* __Desktop__ - captures the whole desktop or an individual monitor, defaults to Glass mode
168-
169-
* __Lock Current Area__ - always capture current area even if ShaderGlass window is moved
170-
171-
* __Window__ - captures the selected window, defaults to Clone mode
172-
173-
* __Rescan__ - refresh the list of open windows
174-
175-
* __Crop__ - remove border around captured window, if your emulator has a toolbar for example
176-
177-
* __File__ - load a .png or .jpg file as input
178-
179-
* __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
180-
181-
* __Adjust for DPI Scale__ - if your source always applies Windows DPI Scaling when displaying images
182-
(for example browsers) enable this option to take it into account; most emulators don't do this however
183-
184-
* __Capture Cursor__ - whether to include mouse cursor in capture
185-
186-
* __Remove Yellow Border__ - disables yellow frame around captured area (forced security feature); currently only supported on Windows 11
187-
188-
#### Output
189-
190-
* __Mode__ - overrides default mode for the input type:
191-
192-
* __Glass__ (default for Desktop) - ShaderGlass window appears transparent, you have to position it over the window or area you'd like to capture
193-
194-
* __Clone__ (default for Window) - ShaderGlass copies the content of capture so you can position it anywhere; this mode is also faster and more compatible
195-
196-
* __Window__ - override mouse behavior:
197-
198-
* __Solid__ (default for Clone) - ShaderGlass window area is solid (traps mouse events), with the only exception of passing focus to captured window when clicked
199-
200-
* __Click-through__ (default for Glass) - ShaderGlass window area is transparent and clickable/scrollable-through to window(s) underneath
201-
202-
* __Flip__ - flip output image horizontally and/or vertically
203-
204-
* __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
205-
206-
* __Free__ - allow manual resizing of ShaderGlass window (Window Clone and File modes only)
207-
208-
* __Retain__ - prevent scale from resetting when switching inputs
209-
210-
* * __Aspect Ratio Correction__ - presets for common aspect ratio correction factors (DOS, etc.), applied horizontally to preserve scanline count
211-
212-
* If you select _Custom_ you can enter your own correction ratio expressed as pixel height (1.0 being square pixel). For example,
213-
in MS-DOS era a picture of 320x200 resolution (16:10) was displayed on a 4:3 screen meaning each pixel was 1.2x tall on screen, 1.2 = (16/10) / (4/3)
214-
215-
* __Orientation__ - direction of shader effect, "Vertical" emulates display rotated 90 degrees, like in arcade cabinets
216-
217-
* __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
218-
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
219-
220-
* __Take Snapshot__ - export current image in .png format
221-
222-
#### Shader
223-
224-
* __Choose from Library__ - open Shader Browser to switch the current shader; Shader Library consists of:
225-
226-
* __Personal Favorites__ - you can mark shaders as favorites using Add/Remove Favorite buttons
227-
* __Imported__ - custom .slangp/.slang shaders you imported (these are NOT persisted between restarts)
228-
* __Community Favorites__ - selection of popular shaders
229-
* __RetroArch Library__ - built-in shaders from libretro repository
230-
231-
* __Next__ - switch to the next Shader
232-
233-
* __Random__ - choose a random Shader
234-
235-
* __Active__ - temporarily switch to 'none' Shader to see the difference (hold TAB)
236-
237-
* __Import custom__ - load and compile an external .slangp/.slang shader
238-
239-
* __Parameters__ - show and modify active shader's parameters
240-
241-
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
242-
line and ShaderGlass will load it on startup.
243-
244-
<br/>
245-
246-
### Command Line
247-
248-
```
249-
ShaderGlass.exe [-p|--paused] [-f|--fullscreen] [profile.sgp]
250-
```
251-
252-
You can pass profile filename as a command-line parameter to ShaderGlass.exe and it will be auto-loaded.
253-
If your profile file name contains spaces please put it in quotes.
254-
255-
In addition -p will launch in paused mode, and -f will launch in fullscreen mode.
256-
257-
<br/>
258-
259-
### Tuning
260-
261-
In order to achieve the best effect it's necessary to tune parameters to match your input:
262-
263-
* if you use scaling in your input, use nearest-neighbour (i.e. no smoothing) and set _Input -> Pixel Size_ to match
264-
265-
* moving/resizing the window slightly might also help find the best fit for downscaling pixels
266-
267-
* use Window Clone mode if you can, it's fastest and most compatible; if you need mouse click-through use Glass mode
268-
269-
__Always check that input is crisply pixelated using the "none" shader__ as there is often implicit
270-
scaling happening (for example even when Chrome displays an image at 100%, Windows DPI scaling is still applied).
271-
The none shader should display a pixelated image with no smoothing whatsoever,
272-
try to match Input Pixel Size setting with your input's size to achieve that.
273-
274-
### Parameters
275-
276-
All shaders start using default Parameters as defined by their authors, but you can also tweak them using
277-
_Shader -> Parameters_ menu option.
278-
279-
![params](images/params.png)
280-
281-
##### Emulators
282-
283-
Most emulators (DOSBox, FS-UAE, Altirra etc.) will capture mouse by default so you can use them in Window Clone mode.
284-
ShaderGlass window will remain topmost so just position it over the
285-
game window and Alt-Tab to the game to have mouse and focus captured.
286-
287-
##### ScummVM
288-
289-
ScummVM doesn't capture mouse cursor by default so for best results follow below steps:
290-
1) Use Window Clone mode, set Input/Output/Shader options to your liking
291-
2) Switch Output Window to Click-through
292-
3) Click or Alt-Tab to ScummVM game window so that it has focus
293-
4) Press Ctrl-M which will force ScummVM to capture mouse
294-
295-
This way you should have the mouse captured by ScummVM so that it remains within
296-
the game window until you press Ctrl-M again. You can apply output scaling
297-
and/or aspect ratio correction in ShaderGlass and enjoy the game.
298-
299-
<br/>
300-
301-
### Importing Custom Shaders
302-
303-
ShaderGlass comes with a large built-in library of shaders, but you can also import custom ones
304-
written in [RetroArch shader system](https://github.com/libretro/slang-shaders/blob/master/README.md).
305-
It accepts both individual shaders (_.slang_) and multi-pass presets (_.slangp_).
306-
307-
When working on a custom shader, you can use _Recent imports_ menu to quickly reload it.
308-
309-
#### RetroArch shader/preset packs
310-
311-
A lot of preset packs out there rely on base RetroArch shaders so to import them into ShaderGlass
312-
install them into RetroArch first, and then Import from RetroArch's shaders directory.
313-
314-
Please note some shaders might require Vulkan (ShaderGlass is DirectX 11 only) or rely on RetroArch
315-
features that ShaderGlass doesn't support so might not work just as well.
316-
317-
#### Writing your own shaders
318-
319-
ShaderGlass lets you easily experiment with your own shaders! [CustomShader.slang](Misc/CustomShader.slang) is a minimal example
320-
of a shader that swaps color channels and applies a boost, meant as an example from which you could
321-
start writing your own shaders and have them applied to your desktop. Check out
322-
[RetroArch shader repository](https://github.com/libretro/slang-shaders) for tons of examples.
323-
324-
#### Modifying RetroArch shaders
325-
326-
To modify shaders from RetroArch library, download their source code
327-
[from here](https://github.com/mausimus/slang-shaders/archive/refs/heads/shaderglass.zip),
328-
make changes and import.
329-
330-
<br/>
331-
332-
### Frequently Asked Questions
122+
### Instructions & Manual
333123

334-
See FAQ [here](FAQ.md).
124+
See [Online Manual](https://mausimus.github.io/ShaderGlass/MANUAL.html) for option explanations and Frequently Asked Questions.
335125

336126
<br/>
337127

338128
### Code
339129

340130
Built using Visual Studio 2022 using ISO C++ 20, Windows SDK 10.0.26100, Windows Capture API and DirectX 11.
341131

342-
ShaderGlass includes a limited implementation of RetroArch shader back-end.
132+
ShaderGlass includes a limited implementation of RetroArch shader back-end using DirectX 11.
343133
[ShaderGen](ShaderGen) is a command-line tool for converting Slang shaders
344-
into .h files which can be merged into ShaderGlass. The conversion process requires:
134+
into .h files which can be precompiled in ShaderGlass. The conversion process relies on:
345135
1. [glslang](https://github.com/KhronosGroup/glslang) for converting Slang/GLSL shaders to SPIR-V
346136
2. [SPIR-V cross-compiler](https://github.com/KhronosGroup/SPIRV-Cross) for converting those to HLSL (DX11 format)
347137
3. [Direct3D Shader Compiler (fxc.exe)](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/) for pre-compiling into bytecode

ShaderGlass/ShaderGlass.rc

-174 Bytes
Binary file not shown.

ShaderGlass/ShaderWindow.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,6 @@ void ShaderWindow::StartImage(bool autoScale, int pixelSize)
471471
EnableMenuItem(m_outputScaleMenu, IDM_OUTPUT_FREESCALE, MF_BYCOMMAND | MF_ENABLED);
472472

473473
// if we are *switching* to file mode, default pixel size and freescale
474-
if(pixelSize)
475-
{
476-
SendMessage(m_mainWindow, WM_COMMAND, pixelSize, 0);
477-
}
478474
if(autoScale && !ScaleLocked())
479475
{
480476
// set starting scale to fit within current window size
@@ -489,6 +485,10 @@ void ShaderWindow::StartImage(bool autoScale, int pixelSize)
489485
m_captureOptions.outputScale = (float)defaultScale;
490486
SetFreeScale();
491487
}
488+
if(pixelSize)
489+
{
490+
SendMessage(m_mainWindow, WM_COMMAND, pixelSize, 0);
491+
}
492492

493493
if(!HasCaptureAPI() && !m_captureManager.IsActive())
494494
{
@@ -1765,7 +1765,7 @@ LRESULT CALLBACK ShaderWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, L
17651765
#endif
17661766
break;
17671767
case ID_HELP_README:
1768-
ShellExecute(0, 0, L"https://github.com/mausimus/ShaderGlass/blob/master/README.md", 0, 0, SW_SHOW);
1768+
ShellExecute(0, 0, L"https://mausimus.github.io/ShaderGlass/MANUAL.html", 0, 0, SW_SHOW);
17691769
break;
17701770
case ID_HELP_FREQUENTLYASKEDQUESTIONS:
17711771
ShellExecute(0, 0, L"https://github.com/mausimus/ShaderGlass/blob/master/FAQ.md", 0, 0, SW_SHOW);

0 commit comments

Comments
 (0)