diff options
| author | Matthew Parlane <parlane@gmail.com> | 2013-08-23 00:51:12 +1200 |
|---|---|---|
| committer | Matthew Parlane <parlane@gmail.com> | 2013-08-23 00:51:12 +1200 |
| commit | b6e054a2beef3236822e27d95dfe38a4ccee2eb1 (patch) | |
| tree | 6f744593b14def9c2fbc7be9e509df5507835cc4 /Source/Core/VideoCommon/Src/VideoBackendBase.cpp | |
| parent | f274b3b074fb8bb0477b0e9f4e88db0e08bf4f2c (diff) | |
| parent | 41c25d0c90a2461c3e34bf9659dcf1da5e1e8580 (diff) | |
Merge branch 'master' into wii-network
Conflicts:
Source/Core/Core/Core.vcxproj
Source/Core/Core/Core.vcxproj.filters
Source/Core/Core/Src/CoreParameter.cpp
Source/Core/DolphinWX/Dolphin.vcxproj
Source/Core/DolphinWX/Dolphin.vcxproj.filters
Diffstat (limited to 'Source/Core/VideoCommon/Src/VideoBackendBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/VideoBackendBase.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/Src/VideoBackendBase.cpp b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp new file mode 100644 index 0000000000..4769ede3a0 --- /dev/null +++ b/Source/Core/VideoCommon/Src/VideoBackendBase.cpp @@ -0,0 +1,82 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "VideoBackendBase.h" + +// TODO: ugly +#ifdef _WIN32 +#include "../../../Plugins/Plugin_VideoDX9/Src/VideoBackend.h" +#include "../../../Plugins/Plugin_VideoDX11/Src/VideoBackend.h" +#endif +#if !defined(USE_GLES) || USE_GLES3 +#include "../../../Plugins/Plugin_VideoOGL/Src/VideoBackend.h" +#endif +#include "../../../Plugins/Plugin_VideoSoftware/Src/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 > D3D9 > SW +#ifdef _WIN32 + g_available_video_backends.push_back(backends[2] = new DX9::VideoBackend); + 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 (int i = 0; i < 4; ++i) + { + if (backends[i]) + { + s_default_backend = g_video_backend = backends[i]; + 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; +} |
