aboutsummaryrefslogtreecommitdiff
path: root/core/src/Entrypoint/main.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-04-10 21:13:34 -0700
committerrtk0c <[email protected]>2021-04-10 21:13:34 -0700
commit568fcc1dfe40c37b57b7baa2dea93b291d3fa956 (patch)
tree826b410c502a950c1d4804d351959da914003b36 /core/src/Entrypoint/main.cpp
parent4303d0be47526b35e5bb3e3be001da227dae5d96 (diff)
Add dx11, dx12, and vulkan backends
Diffstat (limited to 'core/src/Entrypoint/main.cpp')
-rw-r--r--core/src/Entrypoint/main.cpp87
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;
}