summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-07-07 16:52:23 -0700
committerKonstantin Käfer <mail@kkaefer.com>2014-07-07 16:52:23 -0700
commit501af4a3807474d6de288939266b1f866889bf60 (patch)
tree6e709ac6b4223f3065dfa7b3c7328a90ce822d00 /common
parentf51bd7fcf17c474f106a2c14c00d527d3f8601a4 (diff)
downloadqtlocation-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.cpp32
-rw-r--r--common/headless_view.hpp10
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
};