Repository navigation
Freeze and compare
src/app.cpp (ToggleFreeze(), ToggleCompare(), ChooseCompare(),
ToggleBypass()), src/app_ui.cpp (DragCompareDivider()), src/render/shaders.h
(CompareRaw())

Three aids for setting filters, all on a key and all in the right-click menu:
| Key | Action |
|---|---|
| F11 | Freeze |
| F12 | Compare filters |
| Shift+F12 | All filters off |
They change only what is on screen and are never saved: quitting ends all three, whatever profile is loaded. The profile keeps only compare's direction and where its divider stands. They sit in the right-click menu because you reach for them while looking at the picture, not at a tab.
F11 holds the picture. Frames are still taken from the card — the queue would otherwise back up and the statistics would lie — but none of them reaches the texture. Everything behind that keeps running on the still picture: filters, scaling, picture controls. A slider moved during a freeze changes the frozen frame live, which is the point. Setting dot crawl or sharpening against a game that keeps moving is guesswork.
Leaving the freeze empties the frame delay line, if the A/V offset has one running. What stood in it is as old as the freeze was long, and showing it would first play back the past.
F12 splits the picture. On one side every filter is off, on the other every filter is on. The unfiltered side drops exactly what All filters off drops (below); deinterlacing, crop and colour run on both sides.
| Unfiltered side | Filtered side | |
|---|---|---|
| Composite filters | off | on |
| Sharpening | off | on |
| Brightness, contrast, saturation, hue | off | on |
| Native pixel grid | off | on |
| Scanlines and mask | off | on |
| Deinterlacing, crop, rotation, aspect, scaling | on | on |
| Colour range and matrix | on | on |
The split happens in two places, because the filters do. The
composite chain runs in pass 1 and skips the unfiltered
side there; the rest sits in the scale pass, where CompareRaw() decides per
pixel which side it is on. Both passes are told the same divider.
Direction. Vertical puts the unfiltered side on the left, horizontal puts it on top. The right-click menu has Compare filters as a submenu with both directions; choosing one switches compare on in that direction, choosing the one already shown switches it off. F12 itself uses whichever direction was chosen last. Settings → Picture → Compare has the same switch, the direction and the divider as a slider.
The divider can be dragged in the picture, like the crop edges. It lives in
the source's own grid rather than on the screen, so it turns with a rotated
picture; DragCompareDivider() works out where it lands on screen and turns the
mouse position back into a share of the source. A double click that starts on
the divider is a drag, not a
fullscreen switch.
Compare works on every input. Up to 4.4 it sat at the end of the composite section and compared only that chain, so it disappeared with any digital source. Sharpening, picture controls and the CRT effects exist on every input, and so does the question whether they help.

Shift+F12 shows the whole picture the way the unfiltered side of compare shows half of it. It answers a different question: not "what does this filter do" but "does any of them help at all".
What stays is what puts the picture right in the first place — deinterlacing, crop, aspect, rotation, scaling, range and matrix. Without those the picture would not be unfiltered but wrong.
Deinterlacing used to be on the other side of that line and dropped to weave. Comb lines are not the signal as it arrives, though; they are two fields that were never meant to be shown together, and next to them every filter was hard to judge. Since 5.0 it stays on.
Switching one on switches the other off: next to a picture with no filters at all there is nothing to compare. The Picture tab says at the top that the filters are off while they are, since otherwise every slider below it would seem to do nothing.
None of the three works during a recording, and starting one ends all three. The recording and the virtual camera take their picture from behind the same passes as the display, so a frozen, half filtered or unfiltered picture would end up in the file. Starting a recording turns them off rather than refusing: whoever presses F9 means the whole picture, from now.