diff options
-rw-r--r-- | src/MainWindow.h | 2 | ||||
-rw-r--r-- | src/OffscreenContextAll.hpp | 1 | ||||
-rw-r--r-- | src/OffscreenContextCGL.mm | 2 | ||||
-rw-r--r-- | src/OffscreenView.cc | 14 | ||||
-rw-r--r-- | src/mainwin.cc | 82 | ||||
-rw-r--r-- | src/qglview.cc | 27 | ||||
-rw-r--r-- | src/system-gl.cc | 79 | ||||
-rw-r--r-- | src/system-gl.h | 3 |
8 files changed, 110 insertions, 100 deletions
diff --git a/src/MainWindow.h b/src/MainWindow.h index 4848db6..b685bf1 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 b07cea0..b845114 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 76c5418..76738aa 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 ee5e296..6f9b2da 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 bd17402..52020ec 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->setDetailedText(libinfo + QString(this->qglview->getRendererInfo())); - this->openglbox->show(); + this->openglbox = new QDialog( this ); + QVBoxLayout *ql = new QVBoxLayout( openglbox ); + QTextEdit *qte = new QTextEdit( openglbox ); + ql->addWidget( qte ); + } + QTextEdit *qte = openglbox->findChild<QTextEdit *>(); + 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 a359a68..5310eac 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 2e3f3bc..0c436e5 100644 --- a/src/system-gl.cc +++ b/src/system-gl.cc @@ -1,40 +1,79 @@ /* OpenGL helper functions */ +#include <algorithm> #include <iostream> +#include <vector> #include <sstream> #include <string> #include "system-gl.h" #include <boost/algorithm/string.hpp> +#include <boost/format.hpp> using namespace std; using namespace boost; -string glew_dump(bool dumpall) +double gl_version() { - stringstream out; - out << "GLEW version: " << glewGetString(GLEW_VERSION) << endl - << "GL Renderer: " << (const char *)glGetString(GL_RENDERER) << endl - << "GL Vendor: " << (const char *)glGetString(GL_VENDOR) << endl - << "OpenGL Version: " << (const char *)glGetString(GL_VERSION) << endl; - - out << "GL Extensions: " << endl; - if (dumpall) { - string extensions((const char *)glGetString(GL_EXTENSIONS)); - replace_all( extensions, " ", "\n " ); - out << " " << extensions << endl; - } + string tmp((const char*)glGetString( GL_VERSION )); + vector<string> 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<numexts;i++ ) { + tmp += (const char *) glGetStringi(GL_EXTENSIONS, i); + tmp += " "; + } + } else { + tmp = (const char *) glGetString(GL_EXTENSIONS); + } + vector<string> extensions; + split( extensions, tmp, is_any_of(" ")); + sort( extensions.begin(), extensions.end() ); + stringstream out; + out << "GL Extensions:"; + for ( int i=0;i<extensions.size();i++ ) out << extensions[i] << "\n"; + return out.str(); +} + +string glew_dump() +{ + 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 << "GL_ARB_framebuffer_object: " + stringstream out; + out << "GLEW version: " << glewGetString(GLEW_VERSION) + << "\nOpenGL Version: " << (const char *)glGetString(GL_VERSION) + << "\nGL Renderer: " << (const char *)glGetString(GL_RENDERER) + << "\nGL Vendor: " << (const char *)glGetString(GL_VENDOR) + << boost::format("\nRGBA(%d%d%d%d), depth(%d), stencil(%d)") % + rbits % gbits % bbits % abits % dbits % sbits; + out << "\nGL_ARB_framebuffer_object: " << (glewIsSupported("GL_ARB_framebuffer_object") ? "yes" : "no") - << endl - << "GL_EXT_framebuffer_object: " + << "\nGL_EXT_framebuffer_object: " << (glewIsSupported("GL_EXT_framebuffer_object") ? "yes" : "no") - << endl - << "GL_EXT_packed_depth_stencil: " + << "\nGL_EXT_packed_depth_stencil: " << (glewIsSupported("GL_EXT_packed_depth_stencil") ? "yes" : "no") - << endl; - + << "\n"; return out.str(); }; diff --git a/src/system-gl.h b/src/system-gl.h index 57e9080..4a9474f 100644 --- a/src/system-gl.h +++ b/src/system-gl.h @@ -15,7 +15,8 @@ #include <string> -std::string glew_dump(bool dumpall); +std::string glew_dump(); +std::string glew_extensions_dump(); bool report_glerror(const char * function); #endif |