This commit addresses serveral bugs within the audio service where OpenAL would fail to register the output device to the mapped engine.
- Increase null safety checks for all audio backends (cubeb, sdl2, openal)
- Added failsafe for Device selection
These ensure the audio_renderer can validate calls from the OpenAL engine, Credits to Hayate Yoshida for helping Identify the issue.
Credit: Hayate Yoshida <hayate_yoshida@citron-emu.org>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Convert FSR2 quality mode from number input to dropdown with 4 options
- Disable and grey out FSR sharpness slider when FSR2 is selected
- Add proper enum-based settings for FSR2 quality modes
- Update both Vulkan and OpenGL FSR2 implementations
- Connect UI state changes automatically
Provides better UX by using appropriate controls and preventing confusion
between FSR 1.0 and FSR 2.0 sharpening options.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add FSR2 to ScalingFilter enum alongside existing FSR
- Implement FSR2 classes for both Vulkan and OpenGL renderers
- Add fsr2_quality_mode setting with 4 quality levels (Quality, Balanced, Performance, Ultra Performance)
- Integrate FSR2 into present pipeline for both renderers
- Add UI support for FSR2 option in scaling filter dropdown
- Add FSR2 quality mode setting with dropdown selection
- Update translations and Android strings for new options
- Default to Performance mode for optimal balance
This provides users with FSR 2.0 as a scaling option, offering different
quality/performance characteristics compared to FSR 1.0. The implementation
uses quality-based sharpening values and integrates seamlessly with the
existing rendering pipeline.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add real-time frame time graph with min/avg/max statistics
- Implement draggable overlay functionality with cursor feedback
- Modernize UI with Material Design colors and improved typography
- Fix crash issues by throttling performance data updates
- Ensure FPS and frame time consistency
- Add proper error handling and validation
- Increase overlay size to accommodate new graph feature
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Replaced the Yuzu logo with the new Citron branding in the macOS .icns file used for the application icon. This change aligns with the project's rebranding from Yuzu to Citron and ensures consistent visual identity across platforms. No functional changes to the application.
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
Fix LTO linking issues on CachyOS with GCC 15.x
- Add LTO support to all core library targets (input_common, frontend_common,
network, shader_recompiler, web_service) that were missing LTO configuration
- Create citron_configure_lto() helper function for consistent LTO handling
- Implement CachyOS-specific detection via /etc/os-release and kernel version
- Apply conservative LTO flags (-flto=auto -ffat-lto-objects) only for
CachyOS + GCC 15+ to resolve linking errors with newer toolchains
- Other distributions continue using aggressive LTO settings for maximum performance
- Disable LTO on executable targets to prevent main function optimization issues
This resolves "undefined symbol" errors when building with -DCITRON_ENABLE_LTO=ON
on CachyOS while maintaining optimal LTO performance on other distributions.
Fixes linking errors including:
- Core::Frontend::EmuWindow symbols
- Core::System methods
- Settings::values
- Common logging functions
Tested on CachyOS with GCC 15.1.1 + LLD 20.1.8
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
- Replace citron/emu with citron/rewrite in all URLs
- Add comprehensive legal disclaimers for homebrew-only use
- Update content to emphasize legal software and developer respect
- Modernize formatting with emojis and improved structure
- Add new sections for getting started, contributing, and contact info
- Focus messaging on homebrew development and legal use cases
Signed-off-by: Zephyron <zephyron@citron-emu.org>
This patch enhances High DPI support across the Qt frontend with the following improvements:
**Windows DPI Awareness:**
- Add shellscalingapi.h include for Windows DPI functions
- Implement Per Monitor DPI Awareness (Windows 8.1+) and Per Monitor v2 DPI Awareness (Windows 10+)
- Use SetProcessDPIAware() and SetProcessDpiAwareness() for better multi-monitor scaling
- Dynamically load shcore.dll to access modern DPI awareness APIs
**Configuration Dialog Enhancements:**
- Add comprehensive High DPI responsive CSS media queries for different DPI levels (192dpi, 240dpi)
- Scale UI elements (buttons, comboboxes, line edits, checkboxes, radio buttons) based on screen DPI
- Improve scroll area styling with proper scrollbar theming for high DPI displays
- Set proper window attributes for scaling (WA_TranslucentBackground, WA_NoSystemBackground)
- Calculate logical window size based on device pixel ratio for accurate scaling
**UI Improvements:**
- Enhanced scroll area styling with custom scrollbar appearance
- Better visual feedback with hover effects on scrollbar handles
- Improved spacing and sizing for high DPI displays
- Set proper window modality and title for configuration dialog
These changes provide better visual quality and usability on high DPI displays, particularly on Windows systems with multiple monitors or high-resolution screens. The scaling is now more accurate and consistent across different display configurations.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Fix memory leak in PopulateGridView() and FilterGridView() by properly
deleting old QStandardItemModel instances before creating new ones
- Add safety checks in controller navigation to prevent crashes when
accessing uninitialized controller data
- Improve controller input handling to only send events to visible and
properly initialized views
- Add null pointer checks in SetViewMode() to prevent crashes when
setting current index on empty models
- Add proper cleanup in GameList destructor to prevent memory leaks
on application shutdown
The main issue was that switching between list and grid views created
new models without properly cleaning up old ones, leading to memory
leaks. Additionally, controller navigation would send keyboard events
to both views simultaneously, causing crashes when one view was not
properly initialized or visible.
Fixes crashes when using controller navigation in grid view mode.
Thanks to Beta Testers acarajé & Hayate Yoshida (吉田 疾風) for finding the bug.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Add HasValueType concept to prevent compilation errors when using raw
pointers like const char* with Open() templates. The templates now only
participate in overload resolution for types that have a value_type
member (e.g., std::string, std::filesystem::path).
Fixes C2039 and C2651 errors on Windows builds.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Fix multiple compilation errors preventing successful build:
* Add const qualifier to custom fmt formatter functions across codebase
- Updated formatters in logging, shader recompiler, texture cache, and other modules
- Ensures compatibility with newer fmt library versions
* Add missing fmt/ranges.h includes for fmt::join usage
- Fixed fmt::join calls in Vulkan renderer, GDB stub, NFC service, and main window
- Resolves "no member named 'join' in namespace 'fmt'" errors
* Exclude unsupported platforms from Boost.Process usage in debugger
- Extended conditional compilation to avoid Boost.Process where unavailable
* Fix type casting issues in AOC service manager
- Resolved std::min type mismatch with explicit casting
Add build system version detection as a fallback in GetCurrentVersion():
- Include common/scm_rev.h to access build version information
- Use Common::g_build_version when version.txt doesn't exist
- Automatically create version.txt with build version for future use
- Update comments to clarify version resolution priority
This ensures the updater can properly detect the current application
version even when version.txt hasn't been created yet, while maintaining
the existing priority system for version detection.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Replace direct file overwriting with a staging-based update mechanism to
resolve "file in use" errors during self-updates.
**Changes:**
- Stage updates to temporary directory instead of direct installation
- Apply staged updates on next application startup (before files are loaded)
- Add static methods for startup update detection and application
- Create update manifest to track staged update metadata
- Backup existing files before applying updates
- Update UI messaging to reflect staged update workflow
**Problem solved:**
The previous direct file replacement approach failed when trying to overwrite
DLLs and executables that were loaded into memory by the running process.
This two-stage approach stages files safely, then applies them on restart
when no files are in use.
**Workflow:**
1. Download and extract update to staging directory
2. Create manifest with update metadata
3. Show "Update ready" message to user
4. On next app startup: detect staged update, apply it, show success message
5. Clean up staging directory after successful application
This ensures reliable self-updates without file access conflicts.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Implement a complete auto-updater system for Citron with the following features:
- Add UpdaterService class for handling update checks, downloads, and installations
- Add UpdaterDialog with progress tracking and user interaction
- Support both .zip and .7z archives with Windows PowerShell fallback
- Automatic background update checking on startup (3-second delay)
- Silent notifications when updates are available
- Manual "Check for Updates" menu option in Help menu
- User setting to enable/disable automatic update checks (enabled by default)
- Graceful error handling with detailed logging
- Restart functionality after successful updates
- Libarchive integration for cross-platform archive support
The system uses HTTP URLs to bypass SSL library compatibility issues and
provides a smooth user experience with minimal interruption during automatic
checks. Manual updates show a full dialog with progress tracking and changelog
information.
Fixes update distribution workflow and keeps users informed of new releases.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Fix CMIF serialization alignment error in RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName by reordering parameters (DirectoryName before u64)
- Implement missing INotifierService and IDeliveryTaskSuspensionService classes with proper kernel event handling
- Add missing source files to CMakeLists.txt to resolve linker errors
- Update IServiceCreator to properly implement CreateDeliveryCacheProgressService methods instead of leaving them stubbed
- Add ProgressServiceBackend support to IServiceCreator with proper friend class access
- Fix kernel event creation by using KernelHelpers::ServiceContext instead of direct system calls
- Add proper includes for kernel_helpers.h and event management
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Add implementation for the TMA service which provides file I/O
and debugging functionality for development tools.
Changes:
- Add TMA service with IFileManager, IFileAccessor, and IDirectoryAccessor
- Implement stubbed file operations (ReadFile, WriteFile, GetFileSize, etc.)
- Implement stubbed directory operations (ReadDirectory, GetEntryCount, etc.)
- Add TMA logging category for service debugging
- Fix parameter alignment in ReadFile function signature
All functions are provided as-is to allow games and development tools to initialize
without errors.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add IDeviceOperator interface with 49 functions for SD card, MMC, and game card operations
- Add IEventNotifier interface for filesystem event notifications
- Add ISaveDataTransferManager and related transfer interfaces (exporter/importer)
- Add IWiper interface for BIS partition wiping
- Enhance FSP_SRV with OpenDeviceOperator, OpenSdCardDetectionEventNotifier, OpenSaveDataTransferManager, and other missing functions
- Enhance FSP_LDR with OpenCodeFileSystem, IsArchivedProgram, and SetCurrentProcess implementations
- Enhance FSP_PR with RegisterProgram, UnregisterProgram, and verification functions
- Fix ServiceContext usage for proper event creation and management
- Fix function parameter alignment issues for CMIF serialization
- Update build system to include new source files
- Update copyright headers to 2025 citron
All functions are implemented with appropriate logging and parameter validation based on Nintendo Switch filesystem services documentation.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add Unknown39 and Unknown40 functions to BSD service for [20.0.0+]
- Implement bsd:nu service with ISfUserService and ISfAssignedNetworkInterfaceService
- Add dns:priv and ethc:c/ethc:i service stubs
- Update CMakeLists.txt to include new socket service files
- All new functions include basic stub implementations following existing patterns
This completes the socket services implementation based on switchbrew.org documentation.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add all missing function declarations and implementations for HID server
- Implement functions from 15.0.0+ through 20.0.1+ firmware versions
- Add proper command buffer IDs matching switchbrew documentation:
* 1010: SetForceSixAxisSensorFusedParameters [15.0.0+]
* 1011: GetForceSixAxisSensorFusedParameters [15.0.0+]
* 1012: GetFirmwareVersionStringForUserSupportPage [20.0.0+]
* 1420: GetAppletResourceProperty [19.0.0+]
* 533: SetPalmaDisallowedActiveApplications [20.0.0+]
* 410: GetNpadOfHighestBatteryLevelForJoyLeft
- Add comprehensive Unknown function stubs for gaps in documentation
- Update HID debug server with missing functions and fix duplicate entries
- Organize functions by firmware version with proper comments
- Update firmware version string to realistic Atmosphere 1.9.1 + NX 20.1.5
- Fix GetResourceManager to use Initialize() instead of UpdateControllers()
- Ensure all functions have proper stub implementations with logging
This brings Citron's HID service implementation to full parity with the
official Nintendo Switch HID service as documented on switchbrew.org.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Bumps HOS version from 20.1.1 to 20.1.5
- Updates the corresponding `VERSION_HASH`, `DISPLAY_VERSION`, and
`DISPLAY_TITLE` strings.
Signed-off-by: Zephyron <zephyron@citron-emu.org>