Commit Graph

27774 Commits

Author SHA1 Message Date
Collecting
5644a406cd refactor: Change Discord Links for redirect to Help Tab
Too lazy to change links to include warning message boxes as made for the Help section. Changed all strings relating to just forward directly to it regardless so users still are prompted both warnings of reading the rules before joining the Discord.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-11 03:35:32 +00:00
Collecting
dd215ef836 feat: Warning Dialogs for Discord Support Help
People started coming into the server stating that it was meant for stuff that we do not help people with. People don't enjoy reading rules, now there's 2 QDialog warnings to ensure people are forced to read.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-11 03:16:46 +00:00
Collecting
f74fda2d56 Merge pull request 'refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow' (#67) from refactor/hotkeys into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/67
2025-12-10 11:37:47 +00:00
Collecting
69aa33f824 refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 11:36:15 +00:00
Collecting
4b00e25d8c refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 11:35:16 +00:00
Collecting
af1a934414 refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 11:34:26 +00:00
Collecting
b5528f74fa refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 11:29:14 +00:00
Collecting
c1f41ee2c1 refactor: Exit Fullscreen & Mouse Panning Hotkeys to GRenderWindow
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 11:27:37 +00:00
Collecting
bab42bccd2 fix: Hide Cursor during Mouse Panning
When incorporating mouse hiding into the GRenderWindow I ended up not providing any logic for the mouse to appropiately hide during panning. This should solve the issue.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 08:59:18 +00:00
Collecting
f1c935fc23 Merge pull request 'feat: New Autoloader & Rebrand Current to "Update Manager"' (#66) from feat/autoloader-update-manager into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/66
2025-12-10 01:32:35 +00:00
Collecting
3745341ae9 feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:29:15 +00:00
Collecting
775b26775e feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:28:49 +00:00
Collecting
be962262bc feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:28:12 +00:00
Collecting
dd6ab6d0ee feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:27:44 +00:00
Collecting
acfd055769 feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:27:08 +00:00
Collecting
80f492481d feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:25:10 +00:00
Collecting
ca8703ae52 feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:24:20 +00:00
Collecting
157b22340d feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:23:40 +00:00
Collecting
0fce0e6c6d feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:23:01 +00:00
Collecting
51a2bd004d feat: New Autoloader & "Update Manager" Rebrand & Remove Unused Variable
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:22:19 +00:00
Collecting
d57646eb33 feat: New Autoloader & Rebrand Current to "Update Manager"
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-12-10 01:17:17 +00:00
Zephyron
7c3e85152c Merge pull request 'revert d5efa255ee8a5602f60fc96512b9ad3bc1c22796' (#65) from zephyron-patch-1 into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/65
2025-12-08 20:14:08 +00:00
Zephyron
eaff58aa81 revert d5efa255ee
revert refactor(vulkan): Remove redundant query cache segment notifications

- Remove NotifySegment(true) from PrepareDraw, DrawTexture, and Clear
- Remove NotifySegment(false) from AccelerateDisplay
- Add state tracking for transform feedback to avoid redundant CounterEnable calls
- Only call CounterEnable when transform feedback enable state changes

This prevents double resume/pause operations and state management conflicts.

Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 20:13:09 +00:00
Zephyron
750af88ed9 fix(video): handle invalid texture format in format lookup table
Return default pixel format for uninitialized texture descriptors
(format=0, components=0) instead of asserting. Prevents crashes when
texture cache encounters uninitialized texture data.

Fixes assertion failures in format_lookup_table.cpp:250.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 19:39:23 +10:00
Zephyron
34800248cc fix(video_core): Replace assertions with warnings in Fermi2D and BSD sockets
- Fermi2D: Log warnings for unsupported operations, layers, depth, and clip
- BSD sockets: Return INVAL for unimplemented getsockopt optnames instead of SUCCESS

Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 17:03:51 +10:00
Zephyron
ae1b97a6dd fix(vulkan): Fix viewport handling when transformations are disabled
When viewport_scale_offset_enabled is false, properly set all viewports
using surface_clip dimensions instead of just one. This prevents vertex
explosions caused by invalid or zero-sized viewports.

- Set all viewports (Maxwell::NumViewports) when transformations disabled
- Ensure minimum viewport dimensions (1.0f) to prevent zero-sized viewports
- Respect device viewport limits when setting viewports
- Use proper viewport array instead of single viewport

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 16:20:12 +10:00
Zephyron
d5efa255ee refactor(vulkan): Remove redundant query cache segment notifications
- Remove NotifySegment(true) from PrepareDraw, DrawTexture, and Clear
- Remove NotifySegment(false) from AccelerateDisplay
- Add state tracking for transform feedback to avoid redundant CounterEnable calls
- Only call CounterEnable when transform feedback enable state changes

This prevents double resume/pause operations and state management conflicts.

Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 16:18:27 +10:00
Zephyron
220c06b5e7 fix(vulkan): Properly handle RGBX render target formats
- Filter blend factors: replace DestAlpha with One and OneMinusDestAlpha
  with Zero for RGBX formats
- Disable alpha component in color write mask for RGBX formats
- Always use actual depth test function instead of defaulting when disabled
- Add FormatHasNoAlpha helper to detect RGBX formats
- Add FilterBlendFactor helper to adjust blend factors for RGBX formats

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 16:14:36 +10:00
Zephyron
c71cd53d0d fix(shader): Fix integer texture format mismatch in SPIR-V
- Add is_integer field to TextureDescriptor and TextureDefinition
- Use IsTexturePixelFormatInteger to detect integer textures
- Update ImageType to use U32[1] for integer textures, F32[1] for float
- Merge is_integer flag when combining texture descriptors

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 16:03:40 +10:00
Zephyron
7b532d8ec7 fix(host1x): suppress VIC warnings for small dimension mismatches
Only warn when dimension differences exceed 16 pixels to avoid noise
from common codec alignment padding (e.g., 1088 vs 1080).

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-07 17:46:37 +10:00
Zephyron
9efe66e5b2 fix(vulkan): implement MirrorOnceClampOGL wrap mode
Adds support for wrap mode 7 (MirrorOnceClampOGL) in the Vulkan renderer's
WrapMode function. This mode is mapped to VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
as Vulkan doesn't have a direct equivalent to OpenGL's GL_MIRROR_CLAMP.

Fixes assertion failure: "Unimplemented wrap mode=7"

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-07 17:43:30 +10:00
Zephyron
2e7a4026d8 feat: Add lobby API URL configuration and migrate from web_api_url
- Replace web_api_url references with lobby_api_url
- Add lobby API URL field to network configuration UI with restore default
- Add ReadNetworkValues/SaveNetworkValues to QtConfig for network settings
- Fix signed/unsigned comparison in lobby filter

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-06 16:38:45 +10:00
Zephyron
b5a82bcfdc fix(audio): biquad filter effect parameter version 2 handling
Fix ParameterVersion2 structure layout to match actual format:
- Add padding and use f32 for coefficients (was incorrectly using s16)
- Update state field offset from 0x17 to 0x25

Update command generation to:
- Read from correct structure based on version
- Convert float coefficients to fixed-point Q2.14 when using version 2

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-06 15:31:24 +10:00
Zephyron
d397f379fe fix: block controller input only during loading screen
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 19:15:24 +10:00
Zephyron
6064320336 fix: GuiPrivate is mandatory for linux
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 18:01:21 +10:00
Zephyron
0befe129ce fix: Add missing action_exit_fullscreen member variable declaration
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 12:14:45 +10:00
Zephyron
78cbfcf1a7 fix: Add safety checks for input processing and callback cleanup
- Prevent controller input processing until emulation is fully running
- Add null checks and prevent double deletion of NPAD callbacks
- Set callback_key to -1 after deletion to prevent reuse

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 12:12:14 +10:00
Zephyron
79fcbf536e refactor: Improve BootGame error handling and thread initialization
- Add early validation for loader and title ID with critical error logging
- Move LoadROM call outside conditional block to always execute after validation
- Move emu_thread->start() to after all signal connections are established
- Improve code flow and organization for better maintainability

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 12:06:54 +10:00
Zephyron
240b8f7aef fix: Add safety checks to ZSTD decompression and improve HTTP client
- Add maximum packet size limit (16 MB) to prevent memory exhaustion
- Add empty input validation for ZSTD decompression
- Improve error handling with detailed logging
- Increase HTTP timeout from 30 to 60 seconds
- Enable HTTP redirect following and keep-alive connections

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 12:03:06 +10:00
Zephyron
54cba480e6 feat: Add build type system and improve fullscreen exit handling
- Add CITRON_BUILD_TYPE CMake variable (Stable/Nightly)
- Refactor GenerateSCMRev to use build type instead of repo parsing
- Update window title to display build type (Nightly/Stable)
- Improve fullscreen exit hotkey using dedicated QAction

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 12:00:07 +10:00
Zephyron
45d58d53aa refactor: Clean up setup wizard and improve updater
- Refactor setup_wizard code (remove 100+ lines of unused code)
- Change default update channel from Stable to Nightly
- Fix Windows build detection in updater (skip PGO builds)
- Remove verbose Wayland logging from Vulkan swapchain

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 11:56:01 +10:00
Zephyron
ff3759409b fix: Add destruction callback to EmulatedController for safe pointer management
Add SetDestructionCallback() method to allow observers to safely null
out pointers when the controller is destroyed. This prevents use-after-free
issues in UI components.

Also includes cleanup and const correctness improvements in
configure_input_player_widget.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-03 11:51:09 +10:00
Zephyron
eb11dd8f3b Merge pull request 'feature/android-game-file-extraction' (#61) from feature/android-game-file-extraction into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/61
2025-12-03 01:39:40 +00:00
Zephyron
5bff8ff11d fix(android): fix compilation errors in dump functions
Use VFS API for directory creation and Java Long.valueOf() for
progress callbacks. Fix variable shadowing and add JNI reference cleanup.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-29 12:20:38 +10:00
Zephyron
9c250aabda feat(android): add custom dump location selection for RomFS/ExeFS
Allow users to specify a custom directory for dumping game files via
the Android document picker, with fallback to default dump directory.
Adds optional dumpPath parameter to both dump functions and UI dialog
for location selection.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-29 09:20:40 +10:00
Zephyron
261bab49a7 feat(android): add RomFS and ExeFS dumping support
Changes:
- Add JNI functions dumpRomFS() and dumpExeFS() in native.cpp
- Add Kotlin interface methods in NativeLibrary.kt
- Add UI options in GamePropertiesFragment for dumping
- Add string resources for dump operations
- Extract files to dump/{title_id}/romfs and dump/{title_id}/exefs
- Support patched and updated game content during extraction

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-29 09:16:33 +10:00
Zephyron
32c4a9060d chore(ui): improve setup wizard and boot manager
- Change setup wizard to non-modal for better user interaction

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-28 16:12:23 +10:00
Zephyron
90eeee345c feat(filesystem): add custom save path support per game
- Add custom_save_paths map to Settings::Values
- Implement ReadCustomSavePathValues and SaveCustomSavePathValues in Config
- Update CreateSaveDataFactory to check for custom save paths
- Support per-game title ID save path overrides

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-28 16:11:07 +10:00
Zephyron
bb4574e5df feat(ui): redesign loading screen with game icons and improved UX
- Replace banner/logo with game icon display
- Add shader progress widget with ETA calculations
- Improve stage translations with game title support
- Update UI layout to horizontal layout with better spacing
- Add smooth fade animations for show/hide transitions

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-28 16:10:28 +10:00
Zephyron
8e9b179b55 feat(ui): add tab switch animations and improve responsive layout
- Add AnimateTabSwitch method to configure dialogs with slide/fade animations
- Update responsive layout breakpoint from 550px to 850px
- Improve configure UI layout structure (accent color, rainbow mode positioning)
- Update button stylesheets for horizontal/vertical navigation modes
- Add animation includes (QPropertyAnimation, QGraphicsOpacityEffect, etc.)

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-28 16:09:25 +10:00