* Base starting commit for Feature Impl
* Base commit 2 (off of closed PR, impl details of the actual button will likely be different.)
* Added Combo Button Bool setting to use for later implementation.
* Added Combo Button Submenu and associated strings. Need to implement button displaying for user to interact with.
* Added layout file for combo settings for potential impl
* Removed combo settings as it wasn't liked. Starting Multi Choice impl
* Added Multi Choice Impl. Need to Refactor OnClick for MultiChoice and debug Impl when adding combo button.
* Change List<> in Multi Files to be MutableSet<> to allow adds while prevent potential duplicates. Finished primary multi choice backend impl.
* used correct lisencing procedure for multi files
* Added code in arrays.xml to display the buttons.
This code has the buttons display but clicking on them crashes the app. Will debug further.
Also replaced setSelectedValues with add and remove SelectedValue for clarity purposes.
* Deleted Int Combo Value array in arrays.xml as it was not needed. Able to Click multiple buttons at once but unchecking them causes app to crash. (within the MultiChoice OnClick for SettingsAdapter.kt)
Also debating whether to remove the normal MultiChoice addition as it wasn't added.
* Attempt to deal with merge conflicts
* Moved OnSettingChange after I add or remove selected vals to fix crashing issue.
* Displayed combo button in both landscape and portrait
* WIP on Button Impl, made combo button setting run time editable
* Changed the combo_key string into button_combo, added functionality (impl could be better), added combo key as an input bindable setting within the buttons tab
* Moved Combo Settings into just controls instead of having its own submenu
* Made ComboHelper code more readable and added the key setting to be toggleable in game
* Edited Layout integers of combo button. Made Combo Button display properly in normal portrait mode.
* Code Cleanup and Start of Reimplementation based off #1430
* Progress commit for better impl, need to have the pop up menu show up to select buttons
* Code cleanup and bug fix to properly map values.
* Deleted Multi String Setting, added basic error handling, added comment explaining hardcoded size
* Changed Combo Button to be a HotKey, changed impl to be default multi choice, and removed StringMultiChoice details
* Remove Commented Code
* Changed ComboHelper.kt to use Native Button ints, removed rest of initial implementation traces
* Commented out debug logging, added back missing TODO statement regarding magic numbers
* Cleanup
* Changed Combo Key to Combo Button in kotlin code (will need to test)
* Trying to integrate combo button as a SettingsKey setting. Running into issues with malformed/missing key
* latest changes (added setting to default ini). Still debugging file issue
* added possible fix to touchscreen latency issue, will need to test
* Reverted MultiChoice code to original, removed unused strings and variables and ensured consistent naming, fixed latency issues with button,
* reverted int list setting change as its no longer needed.
* `combo_buttons` --> `combo_button_buttons`
* default_ini.h: Adjust ini comment for combo_button_buttons
* Fix "Reset Overlay" not affecting combo button
* Better center default position of combo button in portrait layout
* `combo_button_options` --> `combo_button_settings`
Better reflects string content
* Last-minute minor string nitpicks
---------
Co-authored-by: OpenSauce <opensauce04@gmail.com>
* video_core: Implement texture-layer clears
Allow specific texture-layers to be targetted for clears rather than just defaulting to the first layer, or clearing all layers after in the case of Vulkan. Allows specific faces of a cubemap to be cleared.
* video_core: Initialize `NULL_SURFACE_CUBE_ID`
Properly initialize the `NULL_SURFACE_CUBE_ID` texture to ensure that all 6 of its faces are black-transparent.
* renderer_gl: Add explicit texture-unit target state tracking
The `.target` field can be either a `GL_TEXTURE_2D` or a
`GL_TEXTURE_CUBE_MAP` and must be explicitly set when assigning the
`.texture_2d` or there is a risk of leaking a previous texture state
into the current one in the case that a texture-cube was binded into
slot 0 and it becomes a texture-2d sometime after.
As far as I can tell the line added here really shouldn't be necessary and wasn't until a relatively recent change in either Qt or macOS. The exact reason behind the original issue is unclear, but by educated guess it could have been caused by some kind of race condition within Qt?
* audio_core: Add '#include <cstring>' to cubeb_sink and cubeb_input.cpp
This fixes a build failure encountered when compiling: https://pastebin.com/JQ4mbhyu
* Fix: License header
The IsSystemAppletId and IsApplicationAppletId checks were prone to
collisions due to the way they were implemented. For example, the
application app ID would pass IsSystemAppletId since 0x300 & 0x100 != 0
To account for masking collisions, add a generic `TypeMask` enum value
used to mask the app ID type correctly, and then match the masked value
with the app ID we're looking for.
Fixes issues with system applets that use objects from the caller
applications, since the edge case for sysapplet parameters being sent to
applications was also passing the other way around.
* macos: fix Vulkan/Metal renderer on macOS 26+ and bump MoltenVK
Four related changes that together let the Vulkan backend boot a game
on Apple Silicon Macs running macOS 26.x. Each is needed independently;
the combination was tested on a Mac16,6 (M4 Max) / macOS 26.4.1.
CMakeModules/DownloadExternals.cmake:
Bump bundled MoltenVK from v1.2.9 to v1.4.1. v1.2.9 does not
recognize macOS 26 surface objects and traps with an Objective-C
"unrecognized selector" inside vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
src/video_core/renderer_vulkan/vk_instance.cpp:
Disable VK_EXT_tooling_info on MoltenVK. MoltenVK advertises the
extension but does not expose vkGetPhysicalDeviceToolPropertiesEXT
through its dispatcher, so the call inside CollectToolingInfo()
trips a vulkan-hpp assertion in Debug and dereferences NULL in
Release.
src/citra_qt/bootmanager.cpp:
Force-install a fresh CAMetalLayer on the NSView before handing it
to createMetalSurfaceEXT. Qt 6.11's QWindow::MetalSurface does not
always back the view with a CAMetalLayer on macOS 26, and MoltenVK
1.3+ aborts in MVKSurface::getNaturalExtent() if the layer is not
the right class. Implemented via objc_msgSend so no .mm conversion
is needed.
src/citra_meta/CMakeLists.txt:
Gate LaunchScreen.storyboard behind 'if (IOS)'. The storyboard is
iOS-only and previously broke the Xcode generator on macOS with
"iOS storyboards do not support target device type 'mac'."
* Move Metal layer creation logic into MetalUtil::CreateMetalLayer ObjC++ function
This change makes the code much more readable, as the logic is now in its native language
---------
Co-authored-by: SergeyMild <>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
* renderer_gl: Add `DebugScopes` to rasterizer and texture-runtime
Some debug scopes I added while working on https://github.com/azahar-emu/azahar/pull/2053 to help better attribute OpenGL API calls to the particular C++ callstack that called it. Helps greatly for diagnosing rendering issues.
* renderer_gl: Fix DebugScope unconditional incrementing of `global_scope_depth`
`global_scope_depth` was being incremented unconditionally in the ctor, but the
dtor was decrementing it conditionally based on
`Settings::values.renderer_debug`, allowing an imbalanced scope-depth hazard in
the case that `Settings::values.renderer_debug` is operated at runtime during a
debug-scope.
* Add a new Secondary Display Layout option on android that makes the secondary display honor swap button
* add quick menu option for secondary layout
* fix icon
* added other secondary layouts
* Add a new Secondary Display Layout option on android that makes the secondary display honor swap button
# Conflicts:
# src/core/frontend/framebuffer_layout.cpp
* add quick menu option for secondary layout
* fix icon
* added other secondary layouts
* updated secondary menu with functionality to switch external displays
Conflicts:
src/android/app/src/main/java/org/citra/citra_emu/display/SecondaryDisplay.kt
* safety checks for crash prevention
* make secondary menu only appear if a secondary display is available
* update default displayid behavior to exclude "Built"
* update odin 2 bugfix to handle other languages
* Apply clang-format
* Rename "Opposite of Primary Display" option for brevity
* Rename menu_secondary_layout_reverse_primary for consistency
* Rename SecondaryDisplayLayout::ReversePrimary for consistency
* first round of code fixes based on review
* Added android-side enable_secondary_display boolean setting, replacing secondary_display_layout = none on the android side. Exposed it in Layout settings, and secondary display layout is now only selectable if it is enabled. Support for the old option is still in the code, but should no longer be selectable.
Also renamed opposite to reverse_primary in a few other places.
* Update framebuffer layout and renderers to correctly render hybrid mode on both primary and secondary displays
* Apply clang format
* Re-apply terminology changes which were undone by a recent commit
* Removed unused string emulation_secondary_display_default
---------
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
* [cmake] Fix MoltenVK fetch order/library conflicts
Rather than dealing with `find_library` shenanigans, just set the
library path directly (when using bundled MoltenVK). System MoltenVK
solely uses `find_library`.
Avoids cache nonsense that can cause system/bundled versions to get
mixed up, and overall makes the system/bundled mvk handling a lot more
consistent
```
cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=ON
-- Using MoltenVK at /opt/homebrew/lib/libMoltenVK.dylib.
cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=OFF
-- Using MoltenVK at /Users/crueter/code/azahar/build/externals/MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib.
cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=ON
-- Using MoltenVK at /opt/homebrew/lib/libMoltenVK.dylib.
```
Signed-off-by: crueter <crueter@eden-emu.dev>
* remove old comment
Signed-off-by: crueter <crueter@eden-emu.dev>
* Cleanup
---------
Signed-off-by: crueter <crueter@eden-emu.dev>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>