summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJules Blok <jules.blok@gmail.com>2015-05-19 00:54:00 +0200
committerJules Blok <jules.blok@gmail.com>2015-05-22 23:52:20 +0200
commit522e721830615fc9de3e7112fee3cf3c686df3a7 (patch)
treedddf80feea2a0b1d22a975b75831a2e4b0033379 /Source/Core
parent0e39b8d9e7037d9ff2726e8499c90eb180b7c4ba (diff)
OGL: Add glClipControl support.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoBackends/OGL/GLExtensions/ARB_clip_control.h8
-rw-r--r--Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp6
-rw-r--r--Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.h1
-rw-r--r--Source/Core/VideoBackends/OGL/OGL.vcxproj1
-rw-r--r--Source/Core/VideoBackends/OGL/OGL.vcxproj.filters3
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp10
-rw-r--r--Source/Core/VideoBackends/OGL/Render.h1
7 files changed, 27 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/OGL/GLExtensions/ARB_clip_control.h b/Source/Core/VideoBackends/OGL/GLExtensions/ARB_clip_control.h
new file mode 100644
index 0000000000..c2b8c940be
--- /dev/null
+++ b/Source/Core/VideoBackends/OGL/GLExtensions/ARB_clip_control.h
@@ -0,0 +1,8 @@
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include "VideoBackends/OGL/GLExtensions/gl_common.h"
+
+extern PFNGLCLIPCONTROLPROC glClipControl;
+
diff --git a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp
index 393cb0d404..41eb7c6d53 100644
--- a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp
+++ b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp
@@ -785,6 +785,9 @@ PFNGLENDOCCLUSIONQUERYNVPROC glEndOcclusionQueryNV;
PFNGLGETOCCLUSIONQUERYIVNVPROC glGetOcclusionQueryivNV;
PFNGLGETOCCLUSIONQUERYUIVNVPROC glGetOcclusionQueryuivNV;
+// ARB_clip_control
+PFNGLCLIPCONTROLPROC glClipControl;
+
// Creates a GLFunc object that requires a feature
#define GLFUNC_REQUIRES(x, y) { (void**)&x, #x, y }
// Creates a GLFunc object with a different function suffix
@@ -1272,6 +1275,9 @@ const GLFunc gl_function_array[] =
GLFUNC_REQUIRES(glGetOcclusionQueryivNV, "GL_NV_occlusion_query_samples"),
GLFUNC_REQUIRES(glGetOcclusionQueryuivNV, "GL_NV_occlusion_query_samples"),
+ // ARB_clip_control
+ GLFUNC_REQUIRES(glClipControl, "GL_ARB_clip_control"),
+
// gl_1_1
// OpenGL 1.1 is at the end due to a bug in Android's EGL stack.
// eglGetProcAddress can only return a finite amount of function pointers
diff --git a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.h b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.h
index 7645fcd8c3..c4aa02c1fc 100644
--- a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.h
+++ b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.h
@@ -8,6 +8,7 @@
#include "VideoBackends/OGL/GLExtensions/ARB_blend_func_extended.h"
#include "VideoBackends/OGL/GLExtensions/ARB_buffer_storage.h"
+#include "VideoBackends/OGL/GLExtensions/ARB_clip_control.h"
#include "VideoBackends/OGL/GLExtensions/ARB_debug_output.h"
#include "VideoBackends/OGL/GLExtensions/ARB_draw_elements_base_vertex.h"
#include "VideoBackends/OGL/GLExtensions/ARB_ES2_compatibility.h"
diff --git a/Source/Core/VideoBackends/OGL/OGL.vcxproj b/Source/Core/VideoBackends/OGL/OGL.vcxproj
index 8e8bbdcf2b..2d2cf22cae 100644
--- a/Source/Core/VideoBackends/OGL/OGL.vcxproj
+++ b/Source/Core/VideoBackends/OGL/OGL.vcxproj
@@ -59,6 +59,7 @@
<ClInclude Include="FramebufferManager.h" />
<ClInclude Include="GLExtensions\ARB_blend_func_extended.h" />
<ClInclude Include="GLExtensions\ARB_buffer_storage.h" />
+ <ClInclude Include="GLExtensions\ARB_clip_control.h" />
<ClInclude Include="GLExtensions\ARB_debug_output.h" />
<ClInclude Include="GLExtensions\ARB_draw_elements_base_vertex.h" />
<ClInclude Include="GLExtensions\ARB_ES2_compatibility.h" />
diff --git a/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters b/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters
index 9483aecbca..e176e3f92f 100644
--- a/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters
+++ b/Source/Core/VideoBackends/OGL/OGL.vcxproj.filters
@@ -199,6 +199,9 @@
<ClInclude Include="GLInterface\WGL.h">
<Filter>GLInterface</Filter>
</ClInclude>
+ <ClInclude Include="GLExtensions\ARB_clip_control.h">
+ <Filter>GLExtensions</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Text Include="CMakeLists.txt" />
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index 4f6fcdcffc..b2011e6cdd 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -480,12 +480,13 @@ Renderer::Renderer()
GLExtensions::Supports("GL_EXT_draw_elements_base_vertex") ||
GLExtensions::Supports("GL_OES_draw_elements_base_vertex");
g_ogl_config.bSupportsGLBufferStorage = GLExtensions::Supports("GL_ARB_buffer_storage") ||
- GLExtensions::Supports("GL_EXT_buffer_storage");;
+ GLExtensions::Supports("GL_EXT_buffer_storage");
g_ogl_config.bSupportsMSAA = GLExtensions::Supports("GL_ARB_texture_multisample");
g_ogl_config.bSupportSampleShading = GLExtensions::Supports("GL_ARB_sample_shading");
g_ogl_config.bSupportOGL31 = GLExtensions::Version() >= 310;
g_ogl_config.bSupportViewportFloat = GLExtensions::Supports("GL_ARB_viewport_array");
g_ogl_config.bSupportsDebug = GLExtensions::Supports("GL_KHR_debug") || GLExtensions::Supports("GL_ARB_debug_output");
+ g_ogl_config.bSupportsGLClipControl = GLExtensions::Supports("GL_ARB_clip_control");
if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3)
{
@@ -585,7 +586,7 @@ Renderer::Renderer()
g_ogl_config.gl_renderer,
g_ogl_config.gl_version), 5000);
- WARN_LOG(VIDEO,"Missing OGL Extensions: %s%s%s%s%s%s%s%s%s%s%s",
+ WARN_LOG(VIDEO,"Missing OGL Extensions: %s%s%s%s%s%s%s%s%s%s%s%s",
g_ActiveConfig.backend_info.bSupportsDualSourceBlend ? "" : "DualSourceBlend ",
g_ActiveConfig.backend_info.bSupportsPrimitiveRestart ? "" : "PrimitiveRestart ",
g_ActiveConfig.backend_info.bSupportsEarlyZ ? "" : "EarlyZ ",
@@ -596,7 +597,8 @@ Renderer::Renderer()
g_ogl_config.bSupportsGLSync ? "" : "Sync ",
g_ogl_config.bSupportsMSAA ? "" : "MSAA ",
g_ogl_config.bSupportSampleShading ? "" : "SSAA ",
- g_ActiveConfig.backend_info.bSupportsGSInstancing ? "" : "GSInstancing "
+ g_ActiveConfig.backend_info.bSupportsGSInstancing ? "" : "GSInstancing ",
+ g_ogl_config.bSupportsGLClipControl ? "" : "ClipControl "
);
s_last_multisample_mode = g_ActiveConfig.iMultisampleMode;
@@ -644,6 +646,8 @@ Renderer::Renderer()
glDisable(GL_STENCIL_TEST);
glEnable(GL_SCISSOR_TEST);
+ if (g_ogl_config.bSupportsGLClipControl)
+ glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
glScissor(0, 0, GetTargetWidth(), GetTargetHeight());
glBlendColor(0, 0, 0, 0.5f);
glClearDepthf(1.0f);
diff --git a/Source/Core/VideoBackends/OGL/Render.h b/Source/Core/VideoBackends/OGL/Render.h
index 834f73e3a3..cbf36fe943 100644
--- a/Source/Core/VideoBackends/OGL/Render.h
+++ b/Source/Core/VideoBackends/OGL/Render.h
@@ -25,6 +25,7 @@ struct VideoConfig
bool bSupportsGLSync;
bool bSupportsGLBaseVertex;
bool bSupportsGLBufferStorage;
+ bool bSupportsGLClipControl;
bool bSupportsMSAA;
bool bSupportSampleShading;
GLSL_VERSION eSupportedGLSLVersion;