summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/OGLMain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/OGL/OGLMain.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/OGLMain.cpp68
1 files changed, 39 insertions, 29 deletions
diff --git a/Source/Core/VideoBackends/OGL/OGLMain.cpp b/Source/Core/VideoBackends/OGL/OGLMain.cpp
index c47b94ceb8..ef25e40a2a 100644
--- a/Source/Core/VideoBackends/OGL/OGLMain.cpp
+++ b/Source/Core/VideoBackends/OGL/OGLMain.cpp
@@ -74,8 +74,45 @@ std::string VideoBackend::GetDisplayName() const
return _trans("OpenGL");
}
-void VideoBackend::InitBackendInfo()
+void VideoBackend::InitBackendInfo(const WindowSystemInfo& wsi)
{
+ std::unique_ptr<GLContext> temp_gl_context =
+ GLContext::Create(wsi, g_Config.stereo_mode == StereoMode::QuadBuffer, true, false,
+ Config::Get(Config::GFX_PREFER_GLES));
+
+ if (!temp_gl_context)
+ return;
+
+ FillBackendInfo(temp_gl_context.get());
+}
+
+bool VideoBackend::InitializeGLExtensions(GLContext* context)
+{
+ // Init extension support.
+ if (!GLExtensions::Init(context))
+ {
+ // OpenGL 2.0 is required for all shader based drawings. There is no way to get this by
+ // extensions
+ PanicAlertFmtT("GPU: OGL ERROR: Does your video card support OpenGL 2.0?");
+ return false;
+ }
+
+ if (GLExtensions::Version() < 300)
+ {
+ // integer vertex attributes require a gl3 only function
+ PanicAlertFmtT("GPU: OGL ERROR: Need OpenGL version 3.\n"
+ "GPU: Does your video card support OpenGL 3?");
+ return false;
+ }
+
+ return true;
+}
+
+bool VideoBackend::FillBackendInfo(GLContext* context)
+{
+ if (!InitializeGLExtensions(context))
+ return false;
+
g_Config.backend_info.api_type = APIType::OpenGL;
g_Config.backend_info.MaxTextureSize = 16384;
g_Config.backend_info.bUsesLowerLeftOrigin = true;
@@ -123,33 +160,6 @@ void VideoBackend::InitBackendInfo()
// aamodes - 1 is to stay consistent with D3D (means no AA)
g_Config.backend_info.AAModes = {1, 2, 4, 8};
-}
-
-bool VideoBackend::InitializeGLExtensions(GLContext* context)
-{
- // Init extension support.
- if (!GLExtensions::Init(context))
- {
- // OpenGL 2.0 is required for all shader based drawings. There is no way to get this by
- // extensions
- PanicAlertFmtT("GPU: OGL ERROR: Does your video card support OpenGL 2.0?");
- return false;
- }
-
- if (GLExtensions::Version() < 300)
- {
- // integer vertex attributes require a gl3 only function
- PanicAlertFmtT("GPU: OGL ERROR: Need OpenGL version 3.\n"
- "GPU: Does your video card support OpenGL 3?");
- return false;
- }
-
- return true;
-}
-
-bool VideoBackend::FillBackendInfo()
-{
- InitBackendInfo();
// check for the max vertex attributes
GLint numvertexattribs = 0;
@@ -184,7 +194,7 @@ bool VideoBackend::Initialize(const WindowSystemInfo& wsi)
if (!main_gl_context)
return false;
- if (!InitializeGLExtensions(main_gl_context.get()) || !FillBackendInfo())
+ if (!FillBackendInfo(main_gl_context.get()))
return false;
auto gfx = std::make_unique<OGLGfx>(std::move(main_gl_context), wsi.render_surface_scale);