diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-10-24 15:43:05 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-10-24 16:40:08 +0200 |
commit | cd9a89257a0004ca18460befc4b141bc07ed5c22 (patch) | |
tree | e336a602b561854f043557096b83140aa04cd63a /common/headless_view.cpp | |
parent | 10c765948471e6d13e2eb45b44ac6c4d108dafc5 (diff) | |
download | qtlocation-mapboxgl-cd9a89257a0004ca18460befc4b141bc07ed5c22.tar.gz |
restructure gyp files
Diffstat (limited to 'common/headless_view.cpp')
-rw-r--r-- | common/headless_view.cpp | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/common/headless_view.cpp b/common/headless_view.cpp deleted file mode 100644 index ace41d38c0..0000000000 --- a/common/headless_view.cpp +++ /dev/null @@ -1,200 +0,0 @@ -#include "headless_view.hpp" -#include <mbgl/util/timer.hpp> - -#include <stdexcept> - -namespace mbgl { - -HeadlessView::HeadlessView() { -#if MBGL_USE_CGL - // TODO: test if OpenGL 4.1 with GL_ARB_ES2_compatibility is supported - // If it is, use kCGLOGLPVersion_3_2_Core and enable that extension. - CGLPixelFormatAttribute attributes[] = { - kCGLPFAOpenGLProfile, - (CGLPixelFormatAttribute) kCGLOGLPVersion_Legacy, - kCGLPFAAccelerated, - (CGLPixelFormatAttribute) 0 - }; - - CGLPixelFormatObj pixelFormat; - GLint num; - CGLError error = CGLChoosePixelFormat(attributes, &pixelFormat, &num); - if (error) { - fprintf(stderr, "Error pixel format\n"); - return; - } - - error = CGLCreateContext(pixelFormat, NULL, &gl_context); - CGLDestroyPixelFormat(pixelFormat); - if (error) { - fprintf(stderr, "Error creating GL context object\n"); - return; - } -#endif - -#if MBGL_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, - GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, - GLX_BLUE_SIZE, 8, - GLX_ALPHA_SIZE, 8, - GLX_DEPTH_SIZE, 24, - GLX_STENCIL_SIZE, 8, - None - }; - - x_info = glXChooseVisual(x_display, DefaultScreen(x_display), pixelFormat); - - 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 -} - - -void HeadlessView::resize(uint16_t width, uint16_t height, float pixelRatio) { - clear_buffers(); - - width *= pixelRatio; - height *= pixelRatio; - -#if MBGL_USE_CGL - make_active(); - - // Create depth/stencil buffer - glGenRenderbuffersEXT(1, &fbo_depth_stencil); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo_depth_stencil); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, width, height); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - - glGenRenderbuffersEXT(1, &fbo_color); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo_color); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, width, height); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - - glGenFramebuffersEXT(1, &fbo); - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); - - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, fbo_color); - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER_EXT, fbo_depth_stencil); - - GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - - if (status != GL_FRAMEBUFFER_COMPLETE_EXT) { - fprintf(stderr, "Couldn't create framebuffer: "); - switch (status) { - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: fprintf(stderr, "incomplete attachment\n"); break; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: fprintf(stderr, "incomplete missing attachment\n"); break; - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: fprintf(stderr, "incomplete draw buffer\n"); break; - case GL_FRAMEBUFFER_UNSUPPORTED: fprintf(stderr, "unsupported\n"); break; - default: fprintf(stderr, "other\n"); break; - } - return; - } -#endif - -#if MBGL_USE_GLX - x_pixmap = XCreatePixmap(x_display, DefaultRootWindow(x_display), width, height, 32); - glx_pixmap = glXCreateGLXPixmap(x_display, x_info, x_pixmap); - - make_active(); -#endif - -} - -void HeadlessView::clear_buffers() { -#if MBGL_USE_CGL - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - - if (fbo) { - glDeleteFramebuffersEXT(1, &fbo); - fbo = 0; - } - - if (fbo_color) { - glDeleteTextures(1, &fbo_color); - fbo_color = 0; - } - - if (fbo_depth_stencil) { - glDeleteRenderbuffersEXT(1, &fbo_depth_stencil); - fbo_depth_stencil = 0; - } -#endif - -#if MBGL_USE_GLX - if (glx_pixmap) { - glXDestroyGLXPixmap(x_display, glx_pixmap); - glx_pixmap = 0; - } - - if (x_pixmap) { - XFreePixmap(x_display, x_pixmap); - x_pixmap = 0; - } -#endif -} - -HeadlessView::~HeadlessView() { - clear_buffers(); - -#if MBGL_USE_CGL - CGLDestroyContext(gl_context); -#endif - -#if MBGL_USE_GLX - glXMakeCurrent(x_display, None, NULL); - glXDestroyContext(x_display, gl_context); - XFree(x_info); - XCloseDisplay(x_display); -#endif -} - -void HeadlessView::notify() { - // no-op -} - -void HeadlessView::notify_map_change(mbgl::MapChange /*change*/, mbgl::timestamp /*delay*/) { - // no-op -} - -void HeadlessView::make_active() { -#if MBGL_USE_CGL - CGLError error = CGLSetCurrentContext(gl_context); - if (error) { - fprintf(stderr, "Switching OpenGL context failed\n"); - } -#endif - -#if MBGL_USE_GLX - if (!glXMakeCurrent(x_display, glx_pixmap, gl_context)) { - fprintf(stderr, "Switching OpenGL context failed\n"); - } -#endif -} - -void HeadlessView::swap() {} - -unsigned int HeadlessView::root_fbo() { -#if MBGL_USE_CGL - return fbo; -#endif - - return 0; -} - -} - |