diff --git a/src/xenia/app/emulator_window.cc b/src/xenia/app/emulator_window.cc index 87d21120c..acb35ce8e 100644 --- a/src/xenia/app/emulator_window.cc +++ b/src/xenia/app/emulator_window.cc @@ -30,21 +30,23 @@ namespace app { class VulkanWindow : public QVulkanWindow { public: - VulkanWindow(EmulatorWindow* parent) : window_(parent) {} + VulkanWindow(gpu::vulkan::VulkanGraphicsSystem* gfx) + : graphics_system_(gfx) {} QVulkanWindowRenderer* createRenderer() override; private: - EmulatorWindow* window_; + gpu::vulkan::VulkanGraphicsSystem* graphics_system_; }; class VulkanRenderer : public QVulkanWindowRenderer { public: - VulkanRenderer(VulkanWindow* window, xe::Emulator* emulator) - : window_(window), emulator_(emulator) {} + VulkanRenderer(VulkanWindow* window, + gpu::vulkan::VulkanGraphicsSystem* graphics_system) + : window_(window), graphics_system_(graphics_system) {} void startNextFrame() override { // Copy the graphics frontbuffer to our backbuffer. - auto swap_state = emulator_->graphics_system()->swap_state(); + auto swap_state = graphics_system_->swap_state(); auto cmd = window_->currentCommandBuffer(); auto src = reinterpret_cast(swap_state->front_buffer_texture); @@ -85,24 +87,22 @@ class VulkanRenderer : public QVulkanWindowRenderer { } private: - xe::Emulator* emulator_; + gpu::vulkan::VulkanGraphicsSystem* graphics_system_; VulkanWindow* window_; }; QVulkanWindowRenderer* VulkanWindow::createRenderer() { - return new VulkanRenderer(this, window_->emulator()); + return new VulkanRenderer(this, graphics_system_); } -EmulatorWindow::EmulatorWindow() {} - -bool EmulatorWindow::Setup() { +EmulatorWindow::EmulatorWindow() { // TODO(DrChat): Pass in command line arguments. emulator_ = std::make_unique(L""); // Initialize the graphics backend. // TODO(DrChat): Pick from gpu command line flag. if (!InitializeVulkan()) { - return false; + return; } auto audio_factory = [&](cpu::Processor* processor, @@ -121,6 +121,7 @@ bool EmulatorWindow::Setup() { auto graphics = std::make_unique(); if (graphics->Setup(processor, kernel_state, graphics_provider_->CreateOffscreenContext())) { + graphics->Shutdown(); return std::unique_ptr(nullptr); } @@ -135,8 +136,6 @@ bool EmulatorWindow::Setup() { Qt::QueuedConnection); }); } - - return result == X_STATUS_SUCCESS; } bool EmulatorWindow::InitializeVulkan() { @@ -150,7 +149,9 @@ bool EmulatorWindow::InitializeVulkan() { return false; } - graphics_window_ = std::make_unique(this); + graphics_window_ = std::make_unique( + reinterpret_cast( + emulator_->graphics_system())); graphics_window_->setVulkanInstance(vulkan_instance_.get()); // Now set the graphics window as our central widget. @@ -161,8 +162,6 @@ bool EmulatorWindow::InitializeVulkan() { return true; } -void EmulatorWindow::SwapVulkan() {} - bool EmulatorWindow::Launch(const std::wstring& path) { return emulator_->LaunchPath(path) == X_STATUS_SUCCESS; } diff --git a/src/xenia/app/emulator_window.h b/src/xenia/app/emulator_window.h index 86cc1a4ba..8e7db336d 100644 --- a/src/xenia/app/emulator_window.h +++ b/src/xenia/app/emulator_window.h @@ -30,9 +30,6 @@ class EmulatorWindow : public QMainWindow { public: EmulatorWindow(); - bool Setup(); - bool InitializeVulkan(); - void SwapVulkan(); bool Launch(const std::wstring& path); xe::Emulator* emulator() { return emulator_.get(); } @@ -45,6 +42,8 @@ class EmulatorWindow : public QMainWindow { private: void CreateMenuBar(); + bool InitializeVulkan(); + std::unique_ptr emulator_; std::unique_ptr graphics_window_; diff --git a/src/xenia/app/premake5.lua b/src/xenia/app/premake5.lua index 073af7564..a53f35172 100644 --- a/src/xenia/app/premake5.lua +++ b/src/xenia/app/premake5.lua @@ -61,6 +61,9 @@ project("xenia-app") files({ "xenia_main.cc", "../base/main_"..platform_suffix..".cc", + + -- Qt files + "*.qrc", }) filter("platforms:Windows") files({ diff --git a/src/xenia/app/xenia.qrc b/src/xenia/app/xenia.qrc index 858cb94f0..af8a564b3 100644 --- a/src/xenia/app/xenia.qrc +++ b/src/xenia/app/xenia.qrc @@ -1,4 +1,4 @@ - - - - \ No newline at end of file + + + + diff --git a/src/xenia/app/xenia_main.cc b/src/xenia/app/xenia_main.cc index 7ca13b23b..ed5106e8d 100644 --- a/src/xenia/app/xenia_main.cc +++ b/src/xenia/app/xenia_main.cc @@ -37,9 +37,6 @@ int xenia_main(const std::vector& args) { char* argv[] = {"xenia", nullptr}; QApplication app(argc, argv); EmulatorWindow main_wnd; - if (!main_wnd.Setup()) { - return 1; - } main_wnd.setFixedSize(1280, 720);