summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GLView.h2
-rw-r--r--src/glview.cc39
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 */
}
contact: Jan Huwald // Impressum