mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-12-19 04:37:05 +00:00
start metal backend
This commit is contained in:
parent
4b9c7c0d30
commit
2477bad06b
19 changed files with 586 additions and 129 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#include "audio/audioDebuggerWindow.h"
|
||||
#include "gui/canvas/OpenGLCanvas.h"
|
||||
#include "gui/canvas/VulkanCanvas.h"
|
||||
#include "gui/canvas/MetalCanvas.h"
|
||||
#include "Cafe/OS/libs/nfc/nfc.h"
|
||||
#include "Cafe/OS/libs/swkbd/swkbd.h"
|
||||
#include "gui/debugger/DebuggerWindow2.h"
|
||||
|
|
@ -93,7 +94,7 @@ enum
|
|||
// options -> account
|
||||
MAINFRAME_MENU_ID_OPTIONS_ACCOUNT_1 = 20350,
|
||||
MAINFRAME_MENU_ID_OPTIONS_ACCOUNT_12 = 20350 + 11,
|
||||
|
||||
|
||||
// options -> system language
|
||||
MAINFRAME_MENU_ID_OPTIONS_LANGUAGE_JAPANESE = 20500,
|
||||
MAINFRAME_MENU_ID_OPTIONS_LANGUAGE_ENGLISH,
|
||||
|
|
@ -243,7 +244,7 @@ public:
|
|||
{
|
||||
if(!m_window->IsGameLaunched() && filenames.GetCount() == 1)
|
||||
return m_window->FileLoad(_utf8ToPath(filenames[0].utf8_string()), wxLaunchGameEvent::INITIATED_BY::DRAG_AND_DROP);
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -455,7 +456,7 @@ bool MainWindow::InstallUpdate(const fs::path& metaFilePath)
|
|||
{
|
||||
throw std::runtime_error(frame.GetExceptionMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(const AbortException&)
|
||||
{
|
||||
|
|
@ -639,13 +640,13 @@ void MainWindow::OnFileMenu(wxCommandEvent& event)
|
|||
_("Wii U executable (*.rpx, *.elf)"),
|
||||
_("All files (*.*)")
|
||||
);
|
||||
|
||||
|
||||
wxFileDialog openFileDialog(this, _("Open file to launch"), wxEmptyString, wxEmptyString, wildcard, wxFD_OPEN | wxFD_FILE_MUST_EXIST);
|
||||
|
||||
if (openFileDialog.ShowModal() == wxID_CANCEL || openFileDialog.GetPath().IsEmpty())
|
||||
return;
|
||||
|
||||
const wxString wxStrFilePath = openFileDialog.GetPath();
|
||||
const wxString wxStrFilePath = openFileDialog.GetPath();
|
||||
FileLoad(_utf8ToPath(wxStrFilePath.utf8_string()), wxLaunchGameEvent::INITIATED_BY::MENU);
|
||||
}
|
||||
else if (menuId >= MAINFRAME_MENU_ID_FILE_RECENT_0 && menuId <= MAINFRAME_MENU_ID_FILE_RECENT_LAST)
|
||||
|
|
@ -784,7 +785,7 @@ void MainWindow::TogglePadView()
|
|||
{
|
||||
if (m_padView)
|
||||
return;
|
||||
|
||||
|
||||
m_padView = new PadViewFrame(this);
|
||||
|
||||
m_padView->Bind(wxEVT_CLOSE_WINDOW, &MainWindow::OnPadClose, this);
|
||||
|
|
@ -992,7 +993,7 @@ void MainWindow::OnConsoleLanguage(wxCommandEvent& event)
|
|||
// GetConfig().cpu_mode = CPUMode::TriplecoreRecompiler;
|
||||
// else
|
||||
// cemu_assert_debug(false);
|
||||
//
|
||||
//
|
||||
// g_config.Save();
|
||||
//}
|
||||
|
||||
|
|
@ -1056,7 +1057,7 @@ void MainWindow::OnDebugSetting(wxCommandEvent& event)
|
|||
ActiveSettings::SetTimerShiftFactor(6);
|
||||
else
|
||||
cemu_assert_debug(false);
|
||||
|
||||
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
|
|
@ -1132,7 +1133,7 @@ void MainWindow::OnLoggingWindow(wxCommandEvent& event)
|
|||
return;
|
||||
|
||||
m_logging_window = new LoggingWindow(this);
|
||||
m_logging_window->Bind(wxEVT_CLOSE_WINDOW,
|
||||
m_logging_window->Bind(wxEVT_CLOSE_WINDOW,
|
||||
[this](wxCloseEvent& event) {
|
||||
m_logging_window = nullptr;
|
||||
event.Skip();
|
||||
|
|
@ -1307,7 +1308,7 @@ void MainWindow::SaveSettings()
|
|||
{
|
||||
auto lock = g_config.Lock();
|
||||
auto& config = GetConfig();
|
||||
|
||||
|
||||
if (config.window_position != Vector2i{ -1,-1 })
|
||||
{
|
||||
config.window_position.x = m_restored_position.x;
|
||||
|
|
@ -1344,7 +1345,7 @@ void MainWindow::SaveSettings()
|
|||
|
||||
if(m_game_list)
|
||||
m_game_list->SaveConfig();
|
||||
|
||||
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
|
|
@ -1374,14 +1375,14 @@ void MainWindow::OnMouseMove(wxMouseEvent& event)
|
|||
void MainWindow::OnMouseLeft(wxMouseEvent& event)
|
||||
{
|
||||
auto& instance = InputManager::instance();
|
||||
|
||||
|
||||
std::scoped_lock lock(instance.m_main_mouse.m_mutex);
|
||||
instance.m_main_mouse.left_down = event.ButtonDown(wxMOUSE_BTN_LEFT);
|
||||
auto physPos = ToPhys(event.GetPosition());
|
||||
instance.m_main_mouse.position = { physPos.x, physPos.y };
|
||||
if (event.ButtonDown(wxMOUSE_BTN_LEFT))
|
||||
instance.m_main_mouse.left_down_toggle = true;
|
||||
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
|
|
@ -1395,7 +1396,7 @@ void MainWindow::OnMouseRight(wxMouseEvent& event)
|
|||
instance.m_main_mouse.position = { physPos.x, physPos.y };
|
||||
if(event.ButtonDown(wxMOUSE_BTN_RIGHT))
|
||||
instance.m_main_mouse.right_down_toggle = true;
|
||||
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
|
|
@ -1443,7 +1444,7 @@ void MainWindow::OnKeyUp(wxKeyEvent& event)
|
|||
|
||||
void MainWindow::OnKeyDown(wxKeyEvent& event)
|
||||
{
|
||||
if ((event.AltDown() && event.GetKeyCode() == WXK_F4) ||
|
||||
if ((event.AltDown() && event.GetKeyCode() == WXK_F4) ||
|
||||
(event.CmdDown() && event.GetKeyCode() == 'Q'))
|
||||
{
|
||||
Close(true);
|
||||
|
|
@ -1458,7 +1459,7 @@ void MainWindow::OnChar(wxKeyEvent& event)
|
|||
{
|
||||
if (swkbd_hasKeyboardInputHook())
|
||||
swkbd_keyInput(event.GetUnicodeKey());
|
||||
|
||||
|
||||
// event.Skip();
|
||||
}
|
||||
|
||||
|
|
@ -1483,7 +1484,7 @@ void MainWindow::OnToolsInput(wxCommandEvent& event)
|
|||
case MAINFRAME_MENU_ID_TOOLS_DOWNLOAD_MANAGER:
|
||||
{
|
||||
const auto default_tab = id == MAINFRAME_MENU_ID_TOOLS_TITLE_MANAGER ? TitleManagerPage::TitleManager : TitleManagerPage::DownloadManager;
|
||||
|
||||
|
||||
if (m_title_manager)
|
||||
m_title_manager->SetFocusAndTab(default_tab);
|
||||
else
|
||||
|
|
@ -1533,7 +1534,7 @@ void MainWindow::OnGesturePan(wxPanGestureEvent& event)
|
|||
instance.m_main_touch.left_down = event.IsGestureStart() || !event.IsGestureEnd();
|
||||
if (event.IsGestureStart() || !event.IsGestureEnd())
|
||||
instance.m_main_touch.left_down_toggle = true;
|
||||
|
||||
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
|
@ -1567,8 +1568,10 @@ void MainWindow::CreateCanvas()
|
|||
// create canvas
|
||||
if (ActiveSettings::GetGraphicsAPI() == kVulkan)
|
||||
m_render_canvas = new VulkanCanvas(m_game_panel, wxSize(1280, 720), true);
|
||||
else
|
||||
else if (ActiveSettings::GetGraphicsAPI() == kOpenGL)
|
||||
m_render_canvas = GLCanvas_Create(m_game_panel, wxSize(1280, 720), true);
|
||||
else
|
||||
m_render_canvas = new MetalCanvas(m_game_panel, wxSize(1280, 720), true);
|
||||
|
||||
// mouse events
|
||||
m_render_canvas->Bind(wxEVT_MOTION, &MainWindow::OnMouseMove, this);
|
||||
|
|
@ -1748,10 +1751,10 @@ void MainWindow::UpdateNFCMenu()
|
|||
const auto& entry = config.recent_nfc_files[i];
|
||||
if (entry.empty())
|
||||
continue;
|
||||
|
||||
|
||||
if (!fs::exists(_utf8ToPath(entry)))
|
||||
continue;
|
||||
|
||||
|
||||
if (recentFileIndex == 0)
|
||||
m_nfcMenuSeparator0 = m_nfcMenu->AppendSeparator();
|
||||
|
||||
|
|
@ -1802,7 +1805,7 @@ void MainWindow::OnTimer(wxTimerEvent& event)
|
|||
{
|
||||
ShowCursor(false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#define BUILD_DATE __DATE__ " " __TIME__
|
||||
|
|
@ -2061,9 +2064,9 @@ void MainWindow::RecreateMenu()
|
|||
m_menuBar->Destroy();
|
||||
m_menuBar = nullptr;
|
||||
}
|
||||
|
||||
|
||||
auto& config = GetConfig();
|
||||
|
||||
|
||||
m_menuBar = new wxMenuBar();
|
||||
// file submenu
|
||||
m_fileMenu = new wxMenu();
|
||||
|
|
@ -2115,7 +2118,7 @@ void MainWindow::RecreateMenu()
|
|||
item->Check(account_id == account.GetPersistentId());
|
||||
if (m_game_launched || LaunchSettings::GetPersistentId().has_value())
|
||||
item->Enable(false);
|
||||
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
|
|
@ -2145,8 +2148,8 @@ void MainWindow::RecreateMenu()
|
|||
// options submenu
|
||||
wxMenu* optionsMenu = new wxMenu();
|
||||
m_fullscreenMenuItem = optionsMenu->AppendCheckItem(MAINFRAME_MENU_ID_OPTIONS_FULLSCREEN, _("&Fullscreen"), wxEmptyString);
|
||||
m_fullscreenMenuItem->Check(ActiveSettings::FullscreenEnabled());
|
||||
|
||||
m_fullscreenMenuItem->Check(ActiveSettings::FullscreenEnabled());
|
||||
|
||||
optionsMenu->Append(MAINFRAME_MENU_ID_OPTIONS_GRAPHIC_PACKS2, _("&Graphic packs"));
|
||||
m_padViewMenuItem = optionsMenu->AppendCheckItem(MAINFRAME_MENU_ID_OPTIONS_SECOND_WINDOW_PADVIEW, _("&Separate GamePad view"), wxEmptyString);
|
||||
m_padViewMenuItem->Check(GetConfig().pad_open);
|
||||
|
|
@ -2227,6 +2230,7 @@ void MainWindow::RecreateMenu()
|
|||
debugLoggingMenu->AppendSeparator();
|
||||
debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::OpenGLLogging), _("&OpenGL debug output"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::OpenGLLogging));
|
||||
debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::VulkanValidation), _("&Vulkan validation layer (slow)"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::VulkanValidation));
|
||||
debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::MetalLogging), _("&Metal debug output"), wxEmptyString)->Check(cemuLog_isLoggingEnabled(LogType::MetalLogging));
|
||||
debugLoggingMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_ADVANCED_PPC_INFO, _("&Log PPC context for API"), wxEmptyString)->Check(cemuLog_advancedPPCLoggingEnabled());
|
||||
m_loggingSubmenu = debugLoggingMenu;
|
||||
// debug->dump submenu
|
||||
|
|
@ -2240,7 +2244,7 @@ void MainWindow::RecreateMenu()
|
|||
debugMenu->AppendSubMenu(debugLoggingMenu, _("&Logging"));
|
||||
debugMenu->AppendSubMenu(debugDumpMenu, _("&Dump"));
|
||||
debugMenu->AppendSeparator();
|
||||
|
||||
|
||||
auto upsidedownItem = debugMenu->AppendCheckItem(MAINFRAME_MENU_ID_DEBUG_RENDER_UPSIDE_DOWN, _("&Render upside-down"), wxEmptyString);
|
||||
upsidedownItem->Check(ActiveSettings::RenderUpsideDownEnabled());
|
||||
if(LaunchSettings::RenderUpsideDownEnabled().has_value())
|
||||
|
|
@ -2296,6 +2300,7 @@ void MainWindow::RecreateMenu()
|
|||
// these options cant be toggled after the renderer backend is initialized:
|
||||
m_loggingSubmenu->Enable(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::OpenGLLogging), false);
|
||||
m_loggingSubmenu->Enable(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::VulkanValidation), false);
|
||||
m_loggingSubmenu->Enable(MAINFRAME_MENU_ID_DEBUG_LOGGING0 + stdx::to_underlying(LogType::MetalLogging), false);
|
||||
|
||||
UpdateNFCMenu();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue