Commit Graph

24681 Commits

Author SHA1 Message Date
Zephyron
544456b8be fix(android): Correct GC Aggressiveness description to match actual options
Updated description to accurately describe Off and Light options instead
of implying multiple "higher levels" that don't exist.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-02-01 14:18:26 +10:00
Zephyron
c3a90a1f59 fix(ui): Correct GC Aggressiveness tooltip to match actual options
The tooltip described 5 levels (Off, Light, Moderate, Heavy, Extreme)
but only Off and Light are implemented in the enum.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-02-01 14:16:37 +10:00
Zephyron
6a9c5f39e4 fix(ui): Add SVG support and fallback icons for Surprise Me button
Added Qt6::Svg to CMake configuration and implemented fallback
icon chain.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-02-01 14:13:51 +10:00
Zephyron
5c5baf69e2 chore(version): bump to 2026.02.1
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-02-01 12:09:56 +10:00
Collecting
97ebddea66 fix(CLI): Defer the game boot for main event loop
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-02-01 00:30:25 +01:00
Collecting
ef22699020 Fix: Defer EmuThread start to fix shortcut launch hang
a race condition where the BootGame() function was called directly from the GMainWindow constructor. This would create and start the EmuThread before the main Qt application event loop (app.exec()) had begun. As a result, the LoadingScreen UI was not fully initialized and could not properly process the progress signals from the background emulation thread, causing the hang.

The fix defers the call to emu_thread->start() by wrapping it in a QTimer::singleShot(0, ...) with a lambda function. This places the start command on the Qt event queue, ensuring it only executes after the GMainWindow has been fully constructed and the event loop is active. This guarantees the UI is ready to receive signals, resolving the race condition.

Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 22:39:59 +01:00
Zephyron
22a458a53c fix(am): Fix library applet controller freeze
- Cache focus state result to prevent race condition from double-call
- Signal caller applet resume notification on PopOutData

Fixes freezes in games using controller applet (e.g. Mario Kart 8 Deluxe).

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-01-31 18:35:56 +10:00
Collecting
e6dda72bfa fix(ui): Light/Dark text issues
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 02:38:00 +01:00
Collecting
7205c083ef fix(ui): Light/Dark issues with text
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 02:37:21 +01:00
Collecting
38591a62a9 fix(ui): Ensure consistency w/ new button designs
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 00:52:35 +01:00
Collecting
1d41763c46 fix(ui): Remove UI logic for styling
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 00:51:31 +01:00
Collecting
1060224438 fix(ui): Ensure consistency & create new button designs
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 00:50:59 +01:00
Collecting
d06bb79dd9 fix(ui): Adjust for consistency
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 00:49:59 +01:00
Collecting
dcef7593cf fix(ui): Make styling more consistent
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-31 00:49:26 +01:00
Collecting
87e9352444 fix(ui): Att void for setStyleSheet
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-30 22:52:37 +01:00
Collecting
e23f80d772 fix(ui): Coloring of Search Field & Game list
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-30 22:52:07 +01:00
Zephyron
2272b62171 fix(android): prevent RomFS/ExeFS dump while emulation is running
Add safety checks to prevent dumping game files while emulation is active, which could cause crashes or data corruption.

- Check EmulationSession.IsRunning() before starting dump in native.cpp

- Check NativeLibrary.isRunning() in GamePropertiesFragment.kt

- Show user-friendly toast message when dump is blocked
2026-01-30 17:58:08 +10:00
Zephyron
1543418260 refactor(settings): simplify GC aggressiveness to Off/Light only
Remove Moderate, Heavy, and Extreme GC aggressiveness levels, keeping only Off and Light options for simpler configuration.

- Light mode now uses 75%/90% VRAM thresholds

- Simplified switch statements in texture/buffer cache

- Updated UI dropdowns for desktop and Android

- Light is now the default and recommended setting
2026-01-30 17:55:43 +10:00
Collecting
4229eaa8fd fix(msvc): Please and thank you
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 02:37:53 +01:00
Collecting
01ca952b6a fix(macOS): static_cast requirement for out_displays
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 02:06:32 +01:00
Collecting
b29d1d7d3f fix(msvc): Float Requirement
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 02:03:57 +01:00
Collecting
ce83b341a7 feat(add): Initial Boot icon animation & core logic for hiding entries
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:20:02 +01:00
Collecting
0bb1c53c55 feat(add): Icon Animation during initial boot
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:15:32 +01:00
Collecting
a73aa4f19d feat(add): Emit Configuration Saved
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:15:05 +01:00
Collecting
8820ae568c feat(add): Configuration Saved
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:14:19 +01:00
Collecting
783f30be0e feat(add): Hidden Paths logic for saving to qt_config
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:13:51 +01:00
Collecting
4f7cd049ef feat(add): QStringList for paths to hide specific games
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-29 01:13:16 +01:00
Zephyron
08a88e8d55 Merge pull request 'feat/qlaunch-home-menu-support' (#115) from feat/qlaunch-home-menu-support into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/115
2026-01-28 07:46:11 +01:00
Zephyron
5600aefcd5 chore(core): update build config for QLaunch services
- Add application_observer and system_process_common_functions to CMakeLists

- Add enable_home_menu setting option
2026-01-28 16:43:07 +10:00
Zephyron
a5632d7576 feat(ui): add QLaunch/Home Menu support to menubar
- Add Tools > Open QLaunch menu action

- Implement OnOpenQLaunch() to launch firmware home menu

- Add translation strings for QLaunch option
2026-01-28 16:42:51 +10:00
Zephyron
626ea63cbc feat(hle): implement misc service stubs for QLaunch compatibility
- audctl: Add GetAudioController (cmd 5000) returning IAudioController

- vi: Improve display service with better non-default display handling

- psc/ovln: Add GetReceiveEventHandle for overlay notifications

- omm: Add GetNotificationMessageEventHandle for power state

- olsc: Implement GetNativeHandle returning valid event

- prepo: Add SaveSystemReport2 (cmd 20102) stub
2026-01-28 16:42:35 +10:00
Zephyron
5fa71ce5b0 feat(hle/ns): implement application manager interface stubs for 20.0.0+
- Add Cmd4022, Cmd4023, Cmd4088 stubs for application readiness checks

- Add GetApplicationRecord stub returning empty list

- Required for QLaunch application enumeration
2026-01-28 16:42:14 +10:00
Zephyron
3bfa2ebc58 feat(hle/pctl): implement parental control service stubs for 18.0.0+
- Add GetPlayTimerSettingsVer2 (cmd 1456) with proper struct

- Add GetPlayTimerRemainingTime (cmd 1454)

- Add GetPlayTimerRemainingTimeDisplayInfo (cmd 1459) for 20.0.0+

- Add GetExtendedPlayTimerEvent (cmd 1475) with kernel event

- Define PlayTimerSettingsVer2 and PlayTimerRemainingTimeDisplayInfo types
2026-01-28 16:41:58 +10:00
Zephyron
37863fcb09 feat(hle/am): implement applet and home menu management
- Add home menu popup event and request handling

- Implement various self controller functions for applet lifecycle

- Add applet common functions with event support

- Implement application accessor and debug function stubs

- Add window system hooks for QLaunch integration
2026-01-28 16:41:40 +10:00
Zephyron
53fc6bf107 feat(hle/am): add event handling for state controllers
- Implement GetGpuErrorDetectedSystemEvent (cmd 1020)

- Implement GetFriendInvitationStorageChannelEvent (cmd 1030)

- Implement GetNotificationStorageChannelEvent (cmd 1040)

- Implement GetHealthWarningDisappearedSystemEvent (cmd 1050)

- Implement GetAccumulatedSuspendedTickChangedEvent (cmd 63)
2026-01-28 16:41:21 +10:00
Zephyron
ab93279542 feat(hle/am): implement system applet proxies and observer services
- Add OpenHomeMenuProxy (cmd 110) for QLaunch support

- Add GetSystemProcessCommonFunctions (cmd 450)

- Add Cmd460 stub for system process initialization

- Implement IApplicationObserver and ISystemProcessCommonFunctions services
2026-01-28 16:41:03 +10:00
Collecting
ea9c04bccb feat(ui): Surprise Me! Logic
The main logic for the Surprise Me feature.

Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-28 07:38:38 +01:00
Collecting
b465783bf7 feat(ui): Surprise Me! Option
Needed the thingies

Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-28 07:37:53 +01:00
Collecting
5b90431380 feat: dice.svg into qrc
For rendering of the Surprise Me! icon.

Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-28 07:37:22 +01:00
Collecting
af5eb92450 fix(graphics/adv): Ensure STPE is auto-disabled
Games appear to have horrendous VRAM leaking with this setting enabled. By default, this setting was turned on, leaving users without any information of the setting or what the setting does and seems to have adverse effects in certain titles. Disabling it so that users don't have it automatically chosen.

Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-26 00:26:05 +01:00
Collecting
0caf8866fa fix(android): He say give me more static_cast, I say yes
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 15:34:10 +01:00
Collecting
f842dfb7fe fix(android): moar static cast, me hungry
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 15:07:21 +01:00
Collecting
dcf6e4058f fix(android): Required multiple static_cast fixes
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 14:36:41 +01:00
Collecting
7c14003ebd fix(android): Double for static_cast
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 14:35:44 +01:00
Collecting
6253352e1e fix(compiler): generate the vtable within settings.cpp
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 13:42:55 +01:00
Collecting
f428c20bf6 fix(compiler): static_cast w/ unsigned long long to remove ambiguity
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 13:42:19 +01:00
Collecting
47656f1fdf fix(compiler): static_cast w/ unsigned long long to remove ambiguity
Signed-off-by: Collecting <collecting@noreply.localhost>
2026-01-25 13:41:26 +01:00
Zephyron
8eaa38540c refactor(settings): simplify VRAM usage mode to Conservative/Aggressive
The removed modes added complexity without significant benefit now that
the new VRAM management system (gc_aggressiveness, vram_limit_mb)
provides finer-grained control over memory pressure.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-01-25 15:29:25 +10:00
Zephyron
3e2137a470 feat(video_core): implement comprehensive VRAM management system
Add automatic VRAM leak prevention with configurable garbage collection
to prevent device loss crashes during extended play sessions.

New Settings:
- vram_limit_mb: Configurable VRAM limit (0 = auto-detect 80%)
- gc_aggressiveness: Off/Light/Moderate/Heavy/Extreme levels
- texture_eviction_frames: Frames before texture eviction (default 2)
- buffer_eviction_frames: Frames before buffer eviction (default 5)
- sparse_texture_priority_eviction: Prioritize large sparse textures
- log_vram_usage: Enable VRAM statistics logging

Core Changes:
- Enhanced texture cache with LRU eviction and sparse texture priority
- Enhanced buffer cache with configurable eviction thresholds
- Added VRAM pressure monitoring using VK_EXT_memory_budget
- Emergency GC triggers at 90%/95% VRAM usage thresholds

Platform Support:
- Desktop: Settings in Graphics > Advanced tab
- Android: Settings in Zep Zone category

Fixes VRAM climbing steadily during gameplay until device loss.
Target: Stable VRAM usage below configured limit for 2+ hours.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-01-25 15:21:02 +10:00
Zephyron
44f9cb6347 fix(ssl): implement SetVerifyOption instead of stubbing it
Games can now properly disable SSL certificate verification by setting
option=0, which was previously ignored causing handshake failures.

Thanks to Raytwo and DogeThis (https://github.com/Raytwo/Cobalt) for
helping debug this issue.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2026-01-24 14:46:34 +10:00