summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VideoBackendBase.cpp
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2013-12-07 15:14:29 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2013-12-31 14:03:19 -0500
commit34692ab826abc8f8faa61bdb2280b742424528f1 (patch)
treeb0eedc645badbea316ff59c125eaf808b28777ec /Source/Core/VideoCommon/VideoBackendBase.cpp
parent43e618682e8093602fc83dfa902ee7ae3fd3a4f6 (diff)
Remove unnecessary Src/ folders
Diffstat (limited to 'Source/Core/VideoCommon/VideoBackendBase.cpp')
-rw-r--r--Source/Core/VideoCommon/VideoBackendBase.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp
new file mode 100644
index 0000000000..cf45c7b929
--- /dev/null
+++ b/Source/Core/VideoCommon/VideoBackendBase.cpp
@@ -0,0 +1,80 @@
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "VideoBackendBase.h"
+
+// TODO: ugly
+#ifdef _WIN32
+#include "../VideoBackends/D3D/VideoBackend.h"
+#endif
+#if !defined(USE_GLES) || USE_GLES3
+#include "../VideoBackends/OGL/VideoBackend.h"
+#endif
+#include "../VideoBackends/Software/VideoBackend.h"
+
+std::vector<VideoBackend*> g_available_video_backends;
+VideoBackend* g_video_backend = NULL;
+static VideoBackend* s_default_backend = NULL;
+
+#ifdef _WIN32
+#include <windows.h>
+
+// http://msdn.microsoft.com/en-us/library/ms725491.aspx
+static bool IsGteVista()
+{
+ OSVERSIONINFOEX osvi;
+ DWORDLONG dwlConditionMask = 0;
+
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ osvi.dwMajorVersion = 6;
+
+ VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
+
+ return VerifyVersionInfo(&osvi, VER_MAJORVERSION, dwlConditionMask) != FALSE;
+}
+#endif
+
+void VideoBackend::PopulateList()
+{
+ VideoBackend* backends[4] = { NULL };
+
+ // D3D11 > OGL > SW
+#ifdef _WIN32
+ if (IsGteVista())
+ g_available_video_backends.push_back(backends[0] = new DX11::VideoBackend);
+#endif
+#if !defined(USE_GLES) || USE_GLES3
+ g_available_video_backends.push_back(backends[1] = new OGL::VideoBackend);
+#endif
+ g_available_video_backends.push_back(backends[3] = new SW::VideoSoftware);
+
+ for (auto& backend : backends)
+ {
+ if (backend)
+ {
+ s_default_backend = g_video_backend = backend;
+ break;
+ }
+ }
+}
+
+void VideoBackend::ClearList()
+{
+ while (!g_available_video_backends.empty())
+ {
+ delete g_available_video_backends.back();
+ g_available_video_backends.pop_back();
+ }
+}
+
+void VideoBackend::ActivateBackend(const std::string& name)
+{
+ if (name.length() == 0) // If NULL, set it to the default backend (expected behavior)
+ g_video_backend = s_default_backend;
+
+ for (std::vector<VideoBackend*>::const_iterator it = g_available_video_backends.begin(); it != g_available_video_backends.end(); ++it)
+ if (name == (*it)->GetName())
+ g_video_backend = *it;
+}