From 213ca43656411a06bbf1c0d18e4ebacaf545eb34 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 3 Oct 2016 00:10:01 +0300 Subject: [PATCH] Add support for swap interval control --- source/graphics/cgl/glcontext.cpp | 5 +++++ source/graphics/egl_android/glcontext.cpp | 5 +++++ source/graphics/glcontext.cpp | 3 +++ source/graphics/glcontext.h | 2 ++ source/graphics/glx/glcontext.cpp | 9 +++++++++ source/graphics/wgl/glcontext.cpp | 11 +++++++++++ 6 files changed, 35 insertions(+) diff --git a/source/graphics/cgl/glcontext.cpp b/source/graphics/cgl/glcontext.cpp index 4d51052..02c4d44 100644 --- a/source/graphics/cgl/glcontext.cpp +++ b/source/graphics/cgl/glcontext.cpp @@ -67,6 +67,11 @@ GLContext::~GLContext() delete priv; } +void GLContext::set_swap_interval(unsigned) +{ + // TODO +} + void GLContext::swap_buffers() { flush_gl_buffer(priv->context); diff --git a/source/graphics/egl_android/glcontext.cpp b/source/graphics/egl_android/glcontext.cpp index 0e98739..7853b21 100644 --- a/source/graphics/egl_android/glcontext.cpp +++ b/source/graphics/egl_android/glcontext.cpp @@ -109,6 +109,11 @@ GLContext::~GLContext() delete priv; } +void GLContext::set_swap_interval(unsigned) +{ + // TODO +} + void GLContext::swap_buffers() { eglSwapBuffers(priv->display, priv->surface); diff --git a/source/graphics/glcontext.cpp b/source/graphics/glcontext.cpp index ab0ea7a..47e1e59 100644 --- a/source/graphics/glcontext.cpp +++ b/source/graphics/glcontext.cpp @@ -41,6 +41,9 @@ void GLContext::platform_init(const GLOptions &) GLContext::~GLContext() { } +void GLContext::set_swap_interval(unsigned) +{ } + void GLContext::swap_buffers() { } diff --git a/source/graphics/glcontext.h b/source/graphics/glcontext.h index a248090..8cf75c8 100644 --- a/source/graphics/glcontext.h +++ b/source/graphics/glcontext.h @@ -44,6 +44,8 @@ private: public: ~GLContext(); + void set_swap_interval(unsigned); + void swap_buffers(); private: void window_resized(unsigned, unsigned); diff --git a/source/graphics/glx/glcontext.cpp b/source/graphics/glx/glcontext.cpp index e4662f3..46da6d1 100644 --- a/source/graphics/glx/glcontext.cpp +++ b/source/graphics/glx/glcontext.cpp @@ -84,6 +84,15 @@ GLContext::~GLContext() delete priv; } +void GLContext::set_swap_interval(unsigned i) +{ + const GLubyte *name = reinterpret_cast("glXSwapIntervalEXT"); + PFNGLXSWAPINTERVALEXTPROC func = reinterpret_cast(glXGetProcAddress(name)); + if(!func) + throw runtime_error("glXSwapIntervalEXT not found"); + func(display.get_private().display, priv->subwnd, i); +} + void GLContext::swap_buffers() { glXSwapBuffers(display.get_private().display, priv->subwnd); diff --git a/source/graphics/wgl/glcontext.cpp b/source/graphics/wgl/glcontext.cpp index 844f7a7..3df83f3 100644 --- a/source/graphics/wgl/glcontext.cpp +++ b/source/graphics/wgl/glcontext.cpp @@ -1,8 +1,11 @@ #include #include +#include #include "glcontext.h" #include "window_private.h" +using namespace std; + namespace Msp { namespace Graphics { @@ -53,6 +56,14 @@ GLContext::~GLContext() delete priv; } +void GLContext::set_swap_interval(unsigned i) +{ + PFNWGLSWAPINTERVALEXTPROC func = reinterpret_cast(wglGetProcAddress("wglSwapIntervalEXT")); + if(!func) + throw runtime_error("wglSwapIntervalEXT not found"); + func(i); +} + void GLContext::swap_buffers() { HDC dc = GetDC(window.get_private().window); -- 2.43.0