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>
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>
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>
- 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>
- 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>
- 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>
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>
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>
- 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>
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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
- 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>
- 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>
- Add STABLE_UPDATE_URL and NIGHTLY_UPDATE_URL constants
- Update CheckForUpdates() to read channel from QSettings
- Implement channel-aware version checking
- Nightly: Always use commit hash from build version
- Stable: Prioritize version.txt file, fallback to commit hash
- Update ParseUpdateResponse() to handle different API formats
- Stable: Parse tag_name from Gitea API
- Nightly: Extract commit hash from GitHub release name
- Update Linux AppImage updates to manage version.txt based on channel
- Remove update_url parameter from CheckForUpdates() methods
- Update main.cpp to use new CheckForUpdates() signature
The updater now supports both Stable and Nightly channels with
appropriate version checking and update source selection for each.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add update channel combo box (Stable/Nightly) in General settings
- Store channel preference in QSettings
- Change compact layout breakpoint from 950px to 550px
- Improve layout switching logic to move screenshots group box
- Add translation support for update channel labels
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Force the updater dialog to be non-modal so users can continue using
the application while checking for or downloading updates. This improves
user experience by not blocking interaction with the main window.
The dialog is explicitly set to non-modal in the constructor, overriding
any setting from the UI file.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Add recursion guard (m_is_updating_theme) to prevent UpdateUITheme()
from entering an infinite loop when palette changes trigger recursive
theme updates. This eliminates the need for manual qt-config.ini edits
on Arch Linux systems.
The guard ensures that if UpdateUITheme() is already running, subsequent
calls will exit immediately, preventing stack overflow and application
freezing.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add responsive layout switching (compact/wide) based on window width
- Move UI positioning combo to UI file for better maintainability
- Convert layouts to QFormLayout for better organization
- Add resizeEvent handling for dynamic layout adjustments
- Reduce minimum window size from 1000x600 to 700x600
The configuration dialog now adapts to smaller window sizes by switching
to a single-column layout when the width is less than 950px, improving
usability on smaller screens.
Signed-off-by: Zephyron <zephyron@citron-emu.org>