diff options
-rw-r--r-- | pugl/pugl_win.cpp | 32 | ||||
-rw-r--r-- | wscript | 10 |
2 files changed, 27 insertions, 15 deletions
diff --git a/pugl/pugl_win.cpp b/pugl/pugl_win.cpp index 9dfa70c..16c6b0b 100644 --- a/pugl/pugl_win.cpp +++ b/pugl/pugl_win.cpp @@ -71,6 +71,27 @@ puglInitInternals() return (PuglInternals*)calloc(1, sizeof(PuglInternals)); } +void +puglEnterContext(PuglView* view) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL) { + wglMakeCurrent(view->impl->hdc, view->impl->hglrc); + } +#endif +} + +void +puglLeaveContext(PuglView* view, bool flush) +{ +#ifdef PUGL_HAVE_GL + if (view->ctx_type == PUGL_GL && flush) { + glFlush(); + SwapBuffers(view->impl->hdc); + } +#endif +} + int puglCreateWindow(PuglView* view, const char* title) { @@ -178,12 +199,10 @@ puglDestroy(PuglView* view) static void puglReshape(PuglView* view, int width, int height) { - wglMakeCurrent(view->impl->hdc, view->impl->hglrc); + puglEnterContext(view); if (view->reshapeFunc) { view->reshapeFunc(view, width, height); - } else { - puglDefaultReshape(view, width, height); } view->width = width; @@ -193,16 +212,13 @@ puglReshape(PuglView* view, int width, int height) static void puglDisplay(PuglView* view) { - wglMakeCurrent(view->impl->hdc, view->impl->hglrc); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glLoadIdentity(); + puglEnterContext(view); if (view->displayFunc) { view->displayFunc(view); } - glFlush(); - SwapBuffers(view->impl->hdc); + puglLeaveContext(view, true); view->redisplay = false; } @@ -54,13 +54,9 @@ def configure(conf): autowaf.display_header('Pugl Configuration') if not Options.options.no_gl: - conf.check(function_name = 'glLoadIdentity', - header_name = 'GL/gl.h', - define_name = 'HAVE_GL', - lib = ['GL'], - mandatory = False) - if conf.is_defined('HAVE_GL'): - autowaf.define(conf, 'PUGL_HAVE_GL', 1) + # TODO: Portable check for OpenGL + conf.define('HAVE_GL', 1) + autowaf.define(conf, 'PUGL_HAVE_GL', 1) if not Options.options.no_cairo: autowaf.check_pkg(conf, 'cairo', |