diff options
author | Marius Kintel <marius@kintel.net> | 2011-11-27 21:52:28 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-11-27 21:52:28 (GMT) |
commit | 3bf98dd19f9ed6b23f8d6ffba480ea62e22b0de4 (patch) | |
tree | 5bad7951cda03925300ea4f6f0eba7cbf3c33c7d | |
parent | 0fee2c55403a34014893f125682b3930a81ad2ed (diff) |
Check for GL extensions, not just OpenGL 2, before dismissing OpenCSG capabilities.
-rw-r--r-- | src/GLView.h | 2 | ||||
-rw-r--r-- | src/glview.cc | 39 |
2 files changed, 32 insertions, 9 deletions
diff --git a/src/GLView.h b/src/GLView.h index 3a36a15..8b281dd 100644 --- a/src/GLView.h +++ b/src/GLView.h @@ -79,6 +79,8 @@ private: void normalizeAngle(GLdouble& angle); #ifdef ENABLE_OPENCSG + bool is_opencsg_capable; + bool has_shaders; private slots: void display_opengl20_warning(); #endif diff --git a/src/glview.cc b/src/glview.cc index d69e43d..a27d913 100644 --- a/src/glview.cc +++ b/src/glview.cc @@ -83,6 +83,8 @@ void GLView::init() setMouseTracking(true); #ifdef ENABLE_OPENCSG + this->is_opencsg_capable = false; + this->has_shaders = false; this->opencsg_support = true; static int sId = 0; this->opencsg_id = sId++; @@ -124,11 +126,36 @@ void GLView::initializeGL() if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); } + const char *openscad_disable_gl20_env = getenv("OPENSCAD_DISABLE_GL20"); - if (openscad_disable_gl20_env && !strcmp(openscad_disable_gl20_env, "0")) + if (openscad_disable_gl20_env && !strcmp(openscad_disable_gl20_env, "0")) { openscad_disable_gl20_env = NULL; - if (glewIsSupported("GL_VERSION_2_0") && openscad_disable_gl20_env == NULL) - { + } + + // All OpenGL 2 contexts are OpenCSG capable + if (GLEW_VERSION_2_0 && !openscad_disable_gl20_env) this->is_opencsg_capable = true; + // If OpenGL < 2, check for extensions + else if (GLEW_ARB_framebuffer_object) this->is_opencsg_capable = true; + else if (GLEW_EXT_framebuffer_object && GLEW_EXT_packed_depth_stencil) { + this->is_opencsg_capable = true; + } +#ifdef WIN32 + else if (WGLEW_ARB_pbuffer && WGLEW_ARB_pixel_format) this->is_opencsg_capable = true; +#elif !defined(__APPLE__) + else if (GLXEW_SGIX_pbuffer && GLXEW_SGIX_fbconfig) this->is_opencsg_capable = true; +#endif + + if (GLEW_VERSION_2_0 && !openscad_disable_gl20_env) this->has_shaders = true; + + if (!this->is_opencsg_capable) { + opencsg_support = false; + QSettings settings; + // FIXME: This should be an OpenCSG capability warning, not an OpenGL 2 warning + if (settings.value("editor/opengl20_warning_show",true).toBool()) { + QTimer::singleShot(0, this, SLOT(display_opengl20_warning())); + } + } + if (opencsg_support && this->has_shaders) { const char *vs_source = "uniform float xscale, yscale;\n" "attribute vec3 pos_b, pos_c;\n" @@ -212,12 +239,6 @@ void GLView::initializeGL() fprintf(stderr, "OpenGL Program Validation results:\n%.*s", loglen, logbuffer); } } - } else { - opencsg_support = false; - QSettings settings; - if (settings.value("editor/opengl20_warning_show",true).toBool()) { - QTimer::singleShot(0, this, SLOT(display_opengl20_warning())); - } } #endif /* ENABLE_OPENCSG */ } |