diff options
| author | Jules Blok <jules.blok@gmail.com> | 2015-05-19 00:54:00 +0200 |
|---|---|---|
| committer | Jules Blok <jules.blok@gmail.com> | 2015-05-22 23:52:20 +0200 |
| commit | 522e721830615fc9de3e7112fee3cf3c686df3a7 (patch) | |
| tree | dddf80feea2a0b1d22a975b75831a2e4b0033379 /Source/Core | |
| parent | 0e39b8d9e7037d9ff2726e8499c90eb180b7c4ba (diff) | |
OGL: Add glClipControl support.
Diffstat (limited to 'Source/Core')
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; |
