diff options
Diffstat (limited to 'core/src/Entrypoint/main.cpp')
-rw-r--r-- | core/src/Entrypoint/main.cpp | 87 |
1 files changed, 33 insertions, 54 deletions
diff --git a/core/src/Entrypoint/main.cpp b/core/src/Entrypoint/main.cpp index 4f5dc4b..3016467 100644 --- a/core/src/Entrypoint/main.cpp +++ b/core/src/Entrypoint/main.cpp @@ -1,15 +1,10 @@ -#include "Entrypoint/Common.hpp" -#include "Entrypoint/DirectX11.hpp" -#include "Entrypoint/DirectX12.hpp" -#include "Entrypoint/Metal.hpp" -#include "Entrypoint/OpenGL2.hpp" -#include "Entrypoint/OpenGL3.hpp" -#include "Entrypoint/Vulkan.hpp" +#include "Entrypoint/Backend.hpp" #include "Model/GlobalStates.hpp" #include "UI/Localization.hpp" #include "UI/States.hpp" #include "UI/UI.hpp" #include "Utils/I18n.hpp" +#include "Utils/ScopeGuard.hpp" #include "Utils/Sigslot.hpp" #include <IconsFontAwesome.h> @@ -29,57 +24,47 @@ using namespace std::literals::string_view_literals; static std::unique_ptr<RenderingBackend> CreateDefaultBackend() { #if PLATFORM_WIN32 # if BUILD_CORE_WITH_DX12_BACKEND - try { - auto backend = std::make_unique<DirectX12Backend>(); + if (auto backend = RenderingBackend::CreateDx12Backend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_DX11_BACKEND - try { - auto backend = std::make_unique<DirectX11Backend>(); +# endif +# if BUILD_CORE_WITH_DX11_BACKEND + if (auto backend = RenderingBackend::CreateDx11Backend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_VULKAN_BACKEND - try { - auto backend = std::make_unique<VulkanBackend>(); +# endif +# if BUILD_CORE_WITH_VULKAN_BACKEND + if (auto backend = RenderingBackend::CreateVulkanBackend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_OPENGL3_BACKEND - try { - auto backend = std::make_unique<OpenGL3Backend>(); +# endif +# if BUILD_CORE_WITH_OPENGL3_BACKEND + if (auto backend = RenderingBackend::CreateOpenGL3Backend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_OPENGL2_BACKEND - try { - auto backend = std::make_unique<OpenGL2Backend>(); +# endif +# if BUILD_CORE_WITH_OPENGL2_BACKEND + if (auto backend = RenderingBackend::CreateOpenGL2Backend()) { return backend; - } catch (const std::exception&) { } # endif #elif PLATFORM_MACOS // We currently only support using metal on macos - backend = std::make_unique<MetalBackend>(); + return RenderingBackend::CreateMetalBackend(); #elif PLATFORM_LINUX # if BUILD_CORE_WITH_VULKAN_BACKEND - try { - auto backend = std::make_unique<VulkanBackend>(); + if (auto backend = RenderingBackend::CreateVulkanBackend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_OPENGL3_BACKEND - try { - auto backend = std::make_unique<OpenGL3Backend>(); +# endif +# if BUILD_CORE_WITH_OPENGL3_BACKEND + if (auto backend = RenderingBackend::CreateOpenGL3Backend()) { return backend; - } catch (const std::exception&) { } -# elif BUILD_CORE_WITH_OPENGL2_BACKEND - try { - auto backend = std::make_unique<OpenGL2Backend>(); +# endif +# if BUILD_CORE_WITH_OPENGL2_BACKEND + if (auto backend = RenderingBackend::CreateOpenGL2Backend()) { return backend; - } catch (const std::exception&) { } # endif #endif @@ -91,24 +76,23 @@ static std::unique_ptr<RenderingBackend> CreateBackend(std::string_view option) if (option == "default") { return CreateDefaultBackend(); } else if (option == "opengl2") { - return std::make_unique<OpenGL2Backend>(); + return RenderingBackend::CreateOpenGL2Backend(); } else if (option == "opengl3") { - return std::make_unique<OpenGL3Backend>(); + return RenderingBackend::CreateOpenGL3Backend(); } else if (option == "vulkan") { - return std::make_unique<VulkanBackend>(); + return RenderingBackend::CreateVulkanBackend(); } else if (option == "dx11") { - return std::make_unique<DirectX11Backend>(); + return RenderingBackend::CreateDx11Backend(); } else if (option == "dx12") { - return std::make_unique<DirectX12Backend>(); + return RenderingBackend::CreateDx12Backend(); } else if (option == "metal") { - return std::make_unique<MetalBackend>(); + return RenderingBackend::CreateMetalBackend(); } else { std::string message; message += "Unknown backend '"; message += option; message += "'.\n"; throw std::runtime_error(message); - return nullptr; } } @@ -175,18 +159,13 @@ int main(int argc, char* argv[]) { GlobalStates::Init(); } } + DEFER { GlobalStates::Shutdown(); }; UIState::Init(); + DEFER { UIState::Shutdown(); }; - auto window = backend->GetWindow(); - while (!glfwWindowShouldClose(window)) { - backend->BeginFrame(); - UI::MainWindow(); - backend->EndFrame(); - } - - UIState::Shutdown(); - GlobalStates::Shutdown(); + // Main loop + backend->RunUntilWindowClose(&UI::MainWindow); return 0; } |