diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-07-07 16:52:23 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-07-07 16:52:23 -0700 |
commit | 501af4a3807474d6de288939266b1f866889bf60 (patch) | |
tree | 6e709ac6b4223f3065dfa7b3c7328a90ce822d00 /common | |
parent | f51bd7fcf17c474f106a2c14c00d527d3f8601a4 (diff) | |
download | qtlocation-mapboxgl-501af4a3807474d6de288939266b1f866889bf60.tar.gz |
fix headless rendering on travis and actually execute the headless test
fixes #357
Diffstat (limited to 'common')
-rw-r--r-- | common/headless_view.cpp | 32 | ||||
-rw-r--r-- | common/headless_view.hpp | 10 |
2 files changed, 27 insertions, 15 deletions
diff --git a/common/headless_view.cpp b/common/headless_view.cpp index 4fd7b42aeb..a44c6e6edb 100644 --- a/common/headless_view.cpp +++ b/common/headless_view.cpp @@ -39,9 +39,13 @@ HeadlessView::HeadlessView() { } #endif - #ifdef USE_GLX +#if LLMR_USE_GLX x_display = XOpenDisplay(0); + if (x_display == nullptr) { + throw std::runtime_error("Failed to open X display"); + } + static int pixelFormat[] = { GLX_RGBA, GLX_DOUBLEBUFFER, @@ -55,10 +59,16 @@ HeadlessView::HeadlessView() { }; x_info = glXChooseVisual(x_display, DefaultScreen(x_display), pixelFormat); - gl_context = glXCreateContext(display, x_info, 0, GL_TRUE); - #endif - make_active(); + if (x_info == nullptr) { + throw std::runtime_error("Error pixel format"); + } + + gl_context = glXCreateContext(x_display, x_info, 0, GL_TRUE); + if (gl_context == nullptr) { + throw std::runtime_error("Error creating GL context object"); + } +#endif } @@ -66,6 +76,8 @@ void HeadlessView::resize(int width, int height) { clear_buffers(); #if LLMR_USE_CGL + make_active(); + // Create depth/stencil buffer glGenRenderbuffersEXT(1, &fbo_depth_stencil); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo_depth_stencil); @@ -99,8 +111,10 @@ void HeadlessView::resize(int width, int height) { #endif #if LLMR_USE_GLX - x_pixmap = XCreatePixmap(display, DefaultRootWindow(display), width, height, 32); - glx_pixmap = glXCreateGLXPixmap(display, x_info, x_pixmap); + x_pixmap = XCreatePixmap(x_display, DefaultRootWindow(x_display), width, height, 32); + glx_pixmap = glXCreateGLXPixmap(x_display, x_info, x_pixmap); + + make_active(); #endif } @@ -128,12 +142,12 @@ void HeadlessView::clear_buffers() { #if LLMR_USE_GLX if (glx_pixmap) { glXDestroyGLXPixmap(x_display, glx_pixmap); - glx_pixmap = nullptr; + glx_pixmap = 0; } if (x_pixmap) { XFreePixmap(x_display, x_pixmap); - x_pixmap = nullptr; + x_pixmap = 0; } #endif } @@ -155,7 +169,7 @@ void HeadlessView::make_active() { #endif #if LLMR_USE_GLX - if (!glXMakeCurrent(display, glx_pixmap, gl_context)) { + if (!glXMakeCurrent(x_display, glx_pixmap, gl_context)) { fprintf(stderr, "Switching OpenGL context failed\n"); } #endif diff --git a/common/headless_view.hpp b/common/headless_view.hpp index 57cdec5246..a203d477e0 100644 --- a/common/headless_view.hpp +++ b/common/headless_view.hpp @@ -3,11 +3,9 @@ #ifdef __APPLE__ #define LLMR_USE_CGL 1 -#define LLMR_CONTEXT_OBJ CGLContextObj #else #include <GL/glx.h> #define LLMR_USE_GLX 1 -#define LLMR_CONTEXT_OBJ GLXContext #endif #include <llmr/map/view.hpp> @@ -31,19 +29,19 @@ private: private: - LLMR_CONTEXT_OBJ gl_context; - #ifdef LLMR_USE_CGL + CGLContextObj gl_context; GLuint fbo = 0; GLuint fbo_depth_stencil = 0; GLuint fbo_color = 0; #endif #ifdef LLMR_USE_GLX + GLXContext gl_context = nullptr; XVisualInfo *x_info = nullptr; Display *x_display = nullptr; - Pixmap x_pixmap; - GLXPixmap glx_pixmap; + Pixmap x_pixmap = 0; + GLXPixmap glx_pixmap = 0; #endif }; |