Changes:
- Add validation in BSD::SendToImpl to check for empty address buffers on
datagram sockets and return EINVAL instead of passing nullptr to sendto()
- Add null pointer check in ProxySocket::SendTo to prevent dereferencing
nullptr address parameters
- Improve error logging to help identify socket configuration issues
Fixes: Socket operation errors in HDR multiplayer sessions
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add list/grid view toggle button to games fragment
- Implement dual-view GameAdapter with separate ViewHolders for grid/list layouts
- Create compact card_game_list.xml layout for list view
- Add "Applets on Android" settings category to separate applet settings from Zep Zone
- Add logging settings with log filter configuration
- Add view toggle icons (ic_view_list, ic_view_grid)
- Update strings.xml with new UI text and settings descriptions
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add touch event handling to ShaderBuildingOverlayView for dragging
- Implement boundary constraints to keep overlay within screen bounds
- Add visual feedback with border color changes during dragging
- Add resetPosition() method to restore overlay to default position
- Move ShaderBuildingOverlayView to separate FrameLayout for absolute positioning
- Set container to non-clickable to prevent interference with input controls
- Maintain clickable/focusable state only on the overlay view itself
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Frame generation was marked as WIP and not ready for production use.
This commit removes all frame generation related code and UI elements
to prevent users from enabling an incomplete feature.
Changes:
- Remove frame generation settings from Android UI (Kotlin/XML)
- Remove frame generation settings from Desktop UI (Qt/C++)
- Remove frame generation enums and settings from core (C++)
- Remove frame generation Vulkan renderer implementation
- Remove frame generation shader files
- Update CMake build configuration
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add new settings for shader building overlay and performance graph
- Create ShaderBuildingOverlayView with animated shader building indicator
- Implement JNI bridge to get shader building count from core
- Add performance metrics display (FPS, frametime, emulation speed)
- Include real-time frametime graph with min/avg/max statistics
- Add menu options to toggle overlay and graph independently
- Integrate with existing overlay system in EmulationFragment
- Optimize Vulkan pipeline cache loading with pre-reservation
- Improve async shader building to reduce main thread blocking
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Accept SockAddrIn len in [6, sizeof] and warn instead of asserting to handle libnx/SSBU quirks
- Ensure TranslateFromSockAddrIn sets sin_port via htons(uint16_t) for consistent network byte-order
- Prevents assertion crashes and reduces “Broken pipe” error spam observed in Frozen's SSBU logs
Signed-off-by: Zephyron <zephyron@citron-emu.org>
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>