Skip to content

Screen filters (CRT, Scanlines, Film) in the Graphics tab, and the free camera hides the HUD - #1488

Open
KrysGG wants to merge 7 commits into
NotRexed:mainfrom
KrysGG:feat/cheats-mods
Open

KrysGG wants to merge 7 commits into
NotRexed:mainfrom
KrysGG:feat/cheats-mods

Conversation

@KrysGG

@KrysGG KrysGG commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

What

Two additions:

  • Screen filter and Filter strength rows in the Graphics tab, after Sharpness. The filters are Off, CRT (curved glass, scanlines, an aperture grille and a vignette), Scanlines alone, and Film (a warm grade, moving grain and a vignette). Strength goes from 0 to 100%. Both are saved.
  • The free camera hides the HUD. While the debug tools' free camera is on, the hearts, item slots and minimap aren't drawn, so the screen is clear for screenshots and for looking around. Turning the free camera off brings the HUD back. The same programs draw the item wheel's cards, so those hide too while the free camera is on.

(This PR first added a Cheats/Mods tab of its own. Once #1485 gave the debug tools their own DEBUG tab, with the free camera in it, I dropped the duplicate free camera row. The filters are a picture setting, so they sit in Graphics after Sharpness, as suggested.)

How

  • vk_menu.cpp: the two rows in Graphics after Sharpness, outside the Quality preset (preset_exempt). Restart and Quit stay the table's last two rows. Filter strength is a slider (is_slider).
  • vk_draw.cpp hud_hidden: while menu_free_camera() is on, the draws of the ten programs that draw OoT's HUD and menus are left out. I found them as the programs drawn both in play and behind the item wheel, and checked them with RX_VK_SKIP_FILE: with them out, the world looks the same and no HUD shows.
  • shaders/fg_scale.comp: the filters run in the present's scale pass, after the upscale filter and the sharpen (and over Ultrawide: pause, item and map menus in the middle 16:9, sides blurred or black #1352's menu sides). The push block grows by 12 bytes (fx, strength, time) to 32. The film grain's clock is presents_now / 60. With a filter on, the pass runs even with no upscaling or sharpness, and vk_replay.cpp takes that path for it.
  • Tests: upscale_independent_test.cpp for the 32-byte push and the filter alone running the pass.

Tested

RTX 5080, Windows 11, 5120x1440:

  • The rows change with the arrows and Enter, and the strength slider works with the mouse.
  • Free camera on (Debug tools, then the free camera): the camera leaves Link (cheats: free camera at ... in the log), and no hearts, item slots or minimap show. Off brings them back.
  • CRT, Scanlines and Film show over the whole picture. Off is the picture as before.
  • tests/run_all.py: the same results as main on this machine.

#1352 is merged now; this branch has main merged in. The scale pass's push block holds both: the menu sides and the filter (32 bytes), and the filter goes over the menu sides too.

--Original--
Screenshot 2026-11-10 004707

--Filters--

[CRT]
Screenshot 2026-11-10 004535

[Film]
Screenshot 2026-11-10 004627

KrysGG and others added 3 commits November 10, 2026 00:36
…screen filters

- A fourth tab, CHEATS/MODS, before TAB_COUNT so the Motion page moves along.
  The tab strip's slots come from the tab count (menu_hit::tab_slot_w), and
  the menu is 560 wide for four titles.
- Free camera: NotRexed#785's free camera for everyone, without HOS_OOT_CHEATS. It
  mirrors free_camera (the Cheats page's row stays in step), is not saved, and
  hides the HUD: while it is on, the draws of the ten programs that draw OoT's
  HUD and menus are left out (vk_draw.cpp hud_hidden).
- Screen filter (Off, CRT, Scanlines, Film) and Filter strength, saved: in the
  present's scale pass (shaders/fg_scale.comp) after the filter and sharpen;
  the push block 8 -> 20 bytes. With a filter on the pass runs on its own.
- tests: the menu's clicks with four tabs at the new width; the scale pass
  with the filter alone; the rumble test's stand-ins for set_row's new hook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NotRexed#1485 gave the OoT debug tools (NotRexed#785) a tab of their own, DEBUG, with the free
camera turned on from the menu. So no Cheats/Mods tab: the Screen filter and
Filter strength rows join the Debug tab, the free camera row goes (main's
Debug tools has it), and the HUD hiding stays, following the free camera.
The menu's width and tab code are main's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KrysGG

KrysGG commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks, sounds good! Since #1485 gave the debug tools their own DEBUG tab, this PR only adds two rows there (Screen filter and Filter strength: tx_screen_filter plus is_slider). The rest stays out of the menu: the filters in fg_scale.comp and the scale pass, and the HUD hiding in vk_draw.cpp while the free camera is on. So the rebase on #1459 should be small. I'll update the title and description to match.

Go ahead with #1459 first. Once it's in, I'll rebase this onto it, or take your help if you'd rather, whichever is quicker for you.

@KrysGG KrysGG changed the title Insert menu: a Cheats/Mods tab with the free camera (HUD hidden) and screen filters (CRT, Scanlines, Film) Debug tab: screen filters (CRT, Scanlines, Film), and the free camera hides the HUD Nov 10, 2026
KrysGG and others added 3 commits November 10, 2026 02:55
A look for playing, not a debug tool: the rows go after Gameplay's own, before Restart and Quit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Gameplay tab, before Restart and Quit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bug tab's Free camera

The filter rows stay just before Restart and Quit, the table's last two (kQuitRow, kRestartRow). The comments in
fg_scale.comp (its SPIR-V header made again), vk_draw.cpp and vk_framegen.cpp no longer name the Cheats/Mods tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KrysGG KrysGG changed the title Debug tab: screen filters (CRT, Scanlines, Film), and the free camera hides the HUD Screen filters (CRT, Scanlines, Film) in the Gameplay tab, and the free camera hides the HUD Nov 10, 2026
@KrysGG

KrysGG commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks! Both points are addressed:

  1. Merged main (now at e4ea245). The two rows stay TAB_GAMEPLAY, placed just before Restart and Quit, which are still the table's last two rows. So kQuitRow (the last row) and kRestartRow (the one before) count back correctly. kCheatsRow no longer exists on main. fg_scale_comp_spv.h is regenerated after the shader comment change.
  2. The rows are meant to be in Gameplay (a look for playing, not a debug tool). I've updated the title and description to say so.

Nits: the "Cheats/Mods tab" comments in fg_scale.comp, vk_draw.cpp and vk_framegen.cpp now name the Gameplay tab's Screen filter and the Debug tab's Free camera. The description now also says the item wheel's cards hide while the free camera is on.

Checked on the new menu (headless, RX_VK_SHOT_MENU=1): turning on Debug → Free camera hides the hearts, item slots and minimap, and the Gameplay tab shows Screen filter and Filter strength above Restart and Quit.

On the fg_scale.comp push-block overlap with #1352: whichever of the two merges first, I'll merge it into the other and regenerate the header.

…ove to the Graphics tab, after Sharpness

NotRexed#1352's scale pass and this PR's filter share fg_scale.comp: the push block holds both, the menu sides (x0, x1, side) and the
filter (fx, strength, time), 32 bytes, and the filter goes over the sides too (its SPIR-V header made again). The rows are a
picture setting, so they sit in Graphics after Sharpness (hckrman101's suggestion), outside the Quality preset; Restart and Quit
stay the table's last two.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KrysGG KrysGG changed the title Screen filters (CRT, Scanlines, Film) in the Gameplay tab, and the free camera hides the HUD Screen filters (CRT, Scanlines, Film) in the Graphics tab, and the free camera hides the HUD Nov 10, 2026
@KrysGG

KrysGG commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Moved both rows to Graphics, right after Sharpness, as you suggested (outside the Quality preset, like Sharpness). Restart and Quit are untouched as the table's last two. Merged main with #1352 in: the scale pass now carries both, with the menu sides and the filter in one 32-byte push block, and the filter drawn over the sides too. fg_scale_comp_spv.h is regenerated. Title and description updated.

@Joey-Magnus Joey-Magnus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was approved at 5e71aeb, but main has moved about 445 commits since. A merge now conflicts in fg_scale.comp, fg_scale_comp_spv.h, vk_draw.cpp, vk_menu.cpp and vk_replay.cpp. The last CI run failed on nx2/test_draw_parameters.py (Linux) and nx2/test_nup_out_of_space.py (Windows). Neither touches your files; both were failing on main at that point.

When you rebase fg_scale.comp, note that main now compiles it twice. The second variant is FG_SCALE_PQ (rgb10_a2 dst, the game's native HDR10 PQ codes; #2038 and #2342). As written, screen_fx would multiply PQ codes for the scanlines, mask and vignette. That gives a much stronger, non-linear darkening than in SDR. Either skip the filter in the PQ variant or apply it in linear light. Please also regenerate both SPIR-V headers.

Main's title check will run on the rebase, so the title needs a conventional-commit prefix, e.g. feat(vk):. The hud_hidden part still applies: nothing on main hides the HUD under the free camera.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants