diff --git a/src/MainWindow.h b/src/MainWindow.h index 4848db67..b685bf16 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -87,7 +87,7 @@ private: void loadViewSettings(); void loadDesignSettings(); - class QMessageBox *openglbox; + class QDialog *openglbox; private slots: void actionNew(); diff --git a/src/OffscreenContextAll.hpp b/src/OffscreenContextAll.hpp index b07cea08..b845114c 100644 --- a/src/OffscreenContextAll.hpp +++ b/src/OffscreenContextAll.hpp @@ -62,7 +62,6 @@ OffscreenContext *create_offscreen_context_common(OffscreenContext *ctx) std::cerr << "Unable to init GLEW: " << glewGetErrorString(err) << "\n"; return NULL; } - //cerr << glew_dump(0); ctx->fbo = fbo_new(); if (!fbo_init(ctx->fbo, ctx->width, ctx->height)) { diff --git a/src/OffscreenContextCGL.mm b/src/OffscreenContextCGL.mm index 76c54182..76738aaf 100644 --- a/src/OffscreenContextCGL.mm +++ b/src/OffscreenContextCGL.mm @@ -83,7 +83,7 @@ OffscreenContext *create_offscreen_context(int w, int h) std::cerr << "Unable to init GLEW: " << glewGetErrorString(err) << std::endl; return NULL; } - glew_dump(false); + glew_dump(); ctx->fbo = fbo_new(); if (!fbo_init(ctx->fbo, w, h)) { diff --git a/src/OffscreenView.cc b/src/OffscreenView.cc index ee5e296b..6f9b2da0 100644 --- a/src/OffscreenView.cc +++ b/src/OffscreenView.cc @@ -150,18 +150,8 @@ bool OffscreenView::save(std::ostream &output) const std::string &OffscreenView::getRendererInfo() { std::stringstream out; - GLint rbits, gbits, bbits, abits, dbits, sbits; - glGetIntegerv(GL_RED_BITS, &rbits); - glGetIntegerv(GL_GREEN_BITS, &gbits); - glGetIntegerv(GL_BLUE_BITS, &bbits); - glGetIntegerv(GL_ALPHA_BITS, &abits); - glGetIntegerv(GL_DEPTH_BITS, &dbits); - glGetIntegerv(GL_STENCIL_BITS, &sbits); - out << glew_dump(false) - << "FBO: RGBA(" << rbits << gbits << bbits << abits - << "), depth(" << dbits - << "), stencil(" << sbits << ")\n" + out << glew_dump() << offscreen_context_getinfo(this->ctx); return out.str(); diff --git a/src/mainwin.cc b/src/mainwin.cc index bd174021..52020eca 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -942,7 +942,7 @@ void MainWindow::pasteViewportTranslation() { QTextCursor cursor = editor->textCursor(); QString txt; - txt.sprintf("[ %.2f, %.2f, %.2f ]", -this->qglview->object_trans_x, -this->qglview->object_trans_y, -this->qglview->object_trans_z); + txt.sprintf("[ %.2f, %.2f, %.2f ]", -this->qglview->object_trans.x(), -this->qglview->object_trans.y(), -this->qglview->object_trans.z()); cursor.insertText(txt); } @@ -951,7 +951,7 @@ void MainWindow::pasteViewportRotation() QTextCursor cursor = editor->textCursor(); QString txt; txt.sprintf("[ %.2f, %.2f, %.2f ]", - fmodf(360 - this->qglview->object_rot_x + 90, 360), fmodf(360 - this->qglview->object_rot_y, 360), fmodf(360 - this->qglview->object_rot_z, 360)); + fmodf(360 - this->qglview->object_rot.x() + 90, 360), fmodf(360 - this->qglview->object_rot.y(), 360), fmodf(360 - this->qglview->object_rot.z(), 360)); cursor.insertText(txt); } @@ -960,15 +960,15 @@ void MainWindow::updateTemporalVariables() this->root_ctx.set_variable("$t", Value(this->e_tval->text().toDouble())); Value::VectorType vpt; - vpt.push_back(Value(-this->qglview->object_trans_x)); - vpt.push_back(Value(-this->qglview->object_trans_y)); - vpt.push_back(Value(-this->qglview->object_trans_z)); + vpt.push_back(Value(-this->qglview->object_trans.x())); + vpt.push_back(Value(-this->qglview->object_trans.y())); + vpt.push_back(Value(-this->qglview->object_trans.z())); this->root_ctx.set_variable("$vpt", Value(vpt)); Value::VectorType vpr; - vpr.push_back(Value(fmodf(360 - this->qglview->object_rot_x + 90, 360))); - vpr.push_back(Value(fmodf(360 - this->qglview->object_rot_y, 360))); - vpr.push_back(Value(fmodf(360 - this->qglview->object_rot_z, 360))); + vpr.push_back(Value(fmodf(360 - this->qglview->object_rot.x() + 90, 360))); + vpr.push_back(Value(fmodf(360 - this->qglview->object_rot.y(), 360))); + vpr.push_back(Value(fmodf(360 - this->qglview->object_rot.z(), 360))); root_ctx.set_variable("$vpr", Value(vpr)); } @@ -1595,65 +1595,65 @@ void MainWindow::animateUpdate() void MainWindow::viewAngleTop() { - this->qglview->object_rot_x = 90; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 0; + this->qglview->object_rot.x() = 90; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 0; this->qglview->updateGL(); } void MainWindow::viewAngleBottom() { - this->qglview->object_rot_x = 270; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 0; + this->qglview->object_rot.x() = 270; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 0; this->qglview->updateGL(); } void MainWindow::viewAngleLeft() { - this->qglview->object_rot_x = 0; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 90; + this->qglview->object_rot.x() = 0; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 90; this->qglview->updateGL(); } void MainWindow::viewAngleRight() { - this->qglview->object_rot_x = 0; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 270; + this->qglview->object_rot.x() = 0; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 270; this->qglview->updateGL(); } void MainWindow::viewAngleFront() { - this->qglview->object_rot_x = 0; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 0; + this->qglview->object_rot.x() = 0; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 0; this->qglview->updateGL(); } void MainWindow::viewAngleBack() { - this->qglview->object_rot_x = 0; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = 180; + this->qglview->object_rot.x() = 0; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = 180; this->qglview->updateGL(); } void MainWindow::viewAngleDiagonal() { - this->qglview->object_rot_x = 35; - this->qglview->object_rot_y = 0; - this->qglview->object_rot_z = -25; + this->qglview->object_rot.x() = 35; + this->qglview->object_rot.y() = 0; + this->qglview->object_rot.z() = -25; this->qglview->updateGL(); } void MainWindow::viewCenter() { - this->qglview->object_trans_x = 0; - this->qglview->object_trans_y = 0; - this->qglview->object_trans_z = 0; + this->qglview->object_trans.x() = 0; + this->qglview->object_trans.y() = 0; + this->qglview->object_trans.z() = 0; this->qglview->updateGL(); } @@ -1745,14 +1745,16 @@ void MainWindow::helpLibrary() qVersion()); if (!this->openglbox) { - this->openglbox = new QMessageBox(QMessageBox::Information, - "OpenGL Info", "Detailed Library Info", - QMessageBox::Ok, this); - + this->openglbox = new QDialog( this ); + QVBoxLayout *ql = new QVBoxLayout( openglbox ); + QTextEdit *qte = new QTextEdit( openglbox ); + ql->addWidget( qte ); } - - this->openglbox->setDetailedText(libinfo + QString(this->qglview->getRendererInfo())); - this->openglbox->show(); + QTextEdit *qte = openglbox->findChild(); + qte->setText(libinfo + QString(this->qglview->getRendererInfo().c_str())); + qte->setReadOnly( true ); + openglbox->setMinimumSize( QSize(400,200) ); + openglbox->show(); } /*! diff --git a/src/qglview.cc b/src/qglview.cc index a359a682..5310eac9 100644 --- a/src/qglview.cc +++ b/src/qglview.cc @@ -149,30 +149,9 @@ void QGLView::initializeGL() fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); } - GLint rbits, gbits, bbits, abits, dbits, sbits; - glGetIntegerv(GL_RED_BITS, &rbits); - glGetIntegerv(GL_GREEN_BITS, &gbits); - glGetIntegerv(GL_BLUE_BITS, &bbits); - glGetIntegerv(GL_ALPHA_BITS, &abits); - glGetIntegerv(GL_DEPTH_BITS, &dbits); - glGetIntegerv(GL_STENCIL_BITS, &sbits); - - - this->rendererInfo.sprintf("GLEW version %s\n" - "OpenGL version %s\n" - "%s (%s)\n\n" - "RGBA(%d%d%d%d), depth(%d), stencil(%d)\n" - "Extensions:\n" - "%s\n", - glewGetString(GLEW_VERSION), - glGetString(GL_VERSION), - glGetString(GL_RENDERER), - glGetString(GL_VENDOR), - rbits, gbits, bbits, abits, dbits, sbits, - glGetString(GL_EXTENSIONS)); -// FIXME: glGetString(GL_EXTENSIONS) is deprecated in OpenGL 3.0. -// Use: glGetIntegerv(GL_NUM_EXTENSIONS, &NumberOfExtensions) and -// glGetStringi(GL_EXTENSIONS, i) + std::string glewinfo = glew_dump(); + std::string glextlist = glew_extensions_dump(); + rendererInfo = glewinfo + std::string("\n") + glextlist; const char *openscad_disable_gl20_env = getenv("OPENSCAD_DISABLE_GL20"); if (openscad_disable_gl20_env && !strcmp(openscad_disable_gl20_env, "0")) { diff --git a/src/system-gl.cc b/src/system-gl.cc index 2e3f3bc0..0c436e51 100644 --- a/src/system-gl.cc +++ b/src/system-gl.cc @@ -1,40 +1,79 @@ /* OpenGL helper functions */ +#include #include +#include #include #include #include "system-gl.h" #include +#include using namespace std; using namespace boost; -string glew_dump(bool dumpall) +double gl_version() { + string tmp((const char*)glGetString( GL_VERSION )); + vector strs; + split(strs, tmp, is_any_of(".")); + stringstream out; + if ( strs.size() >= 2) + out << strs[0] << "." << strs[1]; + else + out << "0.0"; + double d; + out >> d; + return d; +} + +string glew_extensions_dump() +{ + std::string tmp; + if ( gl_version() >= 3.0 ) { + GLint numexts = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &numexts); + for ( int i=0;i extensions; + split( extensions, tmp, is_any_of(" ")); + sort( extensions.begin(), extensions.end() ); + stringstream out; + out << "GL Extensions:"; + for ( int i=0;i -std::string glew_dump(bool dumpall); +std::string glew_dump(); +std::string glew_extensions_dump(); bool report_glerror(const char * function); #endif