From 3cf6141e274a2db16571fd2cd1c2b7ca3ac5a33f Mon Sep 17 00:00:00 2001 From: mfeemster Date: Thu, 1 Jan 2015 07:17:05 -0800 Subject: [PATCH] Derive from QOpenGLWidget instead of QGLWidget. Derive from QOpenGLWidget instead of QGLWidget. More commits to follow. --- Builds/QtCreator/Ember/Ember.pro | 3 +- .../QtCreator/EmberAnimate/EmberAnimate.pro | 6 +- Builds/QtCreator/EmberCL/EmberCL.pro | 3 +- Builds/QtCreator/EmberGenome/EmberGenome.pro | 6 +- Builds/QtCreator/EmberRender/EmberRender.pro | 6 +- Builds/QtCreator/Fractorium/Fractorium.pro | 6 +- Source/Ember/Timing.h | 4 +- Source/Fractorium/AboutDialog.ui | 21 +++++- Source/Fractorium/Fractorium.cpp | 11 ++- Source/Fractorium/FractoriumPch.h | 2 +- Source/Fractorium/FractoriumRender.cpp | 6 +- Source/Fractorium/FractoriumXforms.cpp | 16 ++--- Source/Fractorium/GLWidget.cpp | 67 ++++++++++--------- Source/Fractorium/GLWidget.h | 4 +- 14 files changed, 88 insertions(+), 73 deletions(-) diff --git a/Builds/QtCreator/Ember/Ember.pro b/Builds/QtCreator/Ember/Ember.pro index edafbbe..695a2bf 100644 --- a/Builds/QtCreator/Ember/Ember.pro +++ b/Builds/QtCreator/Ember/Ember.pro @@ -6,7 +6,7 @@ CONFIG -= app_bundle CONFIG -= qt VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -ltbb LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2 @@ -16,7 +16,6 @@ INCLUDEPATH += /usr/include/tbb INCLUDEPATH += /usr/include/libxml2 INCLUDEPATH += ../../../Source/Ember -QMAKE_CXXFLAGS_RELEASE += -O2 QMAKE_CXXFLAGS_RELEASE += -DNDEBUG QMAKE_CXXFLAGS += -march=k8 diff --git a/Builds/QtCreator/EmberAnimate/EmberAnimate.pro b/Builds/QtCreator/EmberAnimate/EmberAnimate.pro index 8bf8569..206bdb8 100644 --- a/Builds/QtCreator/EmberAnimate/EmberAnimate.pro +++ b/Builds/QtCreator/EmberAnimate/EmberAnimate.pro @@ -6,15 +6,15 @@ CONFIG -= app_bundle CONFIG -= qt VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lGL LIBS += -L/usr/lib -ljpeg LIBS += -L/usr/lib -lpng LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2 -LIBS += -L../../../Bin -lEmber -LIBS += -L../../../Bin -lEmberCL +LIBS += -L$$DESTDIR -lEmber +LIBS += -L$$DESTDIR -lEmberCL INCLUDEPATH += /usr/include/CL INCLUDEPATH += /usr/include/GL diff --git a/Builds/QtCreator/EmberCL/EmberCL.pro b/Builds/QtCreator/EmberCL/EmberCL.pro index 2c0e83d..1212aab 100644 --- a/Builds/QtCreator/EmberCL/EmberCL.pro +++ b/Builds/QtCreator/EmberCL/EmberCL.pro @@ -6,7 +6,7 @@ CONFIG -= app_bundle CONFIG -= qt VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lGL @@ -18,7 +18,6 @@ INCLUDEPATH += /usr/include/tbb INCLUDEPATH += /usr/include/libxml2 INCLUDEPATH += ../../../Source/Ember -QMAKE_CXXFLAGS_RELEASE += -O2 QMAKE_CXXFLAGS_RELEASE += -DNDEBUG QMAKE_CXXFLAGS += -march=k8 diff --git a/Builds/QtCreator/EmberGenome/EmberGenome.pro b/Builds/QtCreator/EmberGenome/EmberGenome.pro index 9e085bf..7fddeb5 100644 --- a/Builds/QtCreator/EmberGenome/EmberGenome.pro +++ b/Builds/QtCreator/EmberGenome/EmberGenome.pro @@ -6,15 +6,15 @@ CONFIG -= app_bundle CONFIG -= qt VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lGL LIBS += -L/usr/lib -ljpeg LIBS += -L/usr/lib -lpng LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2 -LIBS += -L../../../Bin -lEmber -LIBS += -L../../../Bin -lEmberCL +LIBS += -L$$DESTDIR -lEmber +LIBS += -L$$DESTDIR -lEmberCL INCLUDEPATH += /usr/include/CL INCLUDEPATH += /usr/include/GL diff --git a/Builds/QtCreator/EmberRender/EmberRender.pro b/Builds/QtCreator/EmberRender/EmberRender.pro index bad1123..cde41c2 100644 --- a/Builds/QtCreator/EmberRender/EmberRender.pro +++ b/Builds/QtCreator/EmberRender/EmberRender.pro @@ -6,15 +6,15 @@ CONFIG -= app_bundle CONFIG -= qt VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lGL LIBS += -L/usr/lib -ljpeg LIBS += -L/usr/lib -lpng LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2 -LIBS += -L../../../Bin -lEmber -LIBS += -L../../../Bin -lEmberCL +LIBS += -L$$DESTDIR -lEmber +LIBS += -L$$DESTDIR -lEmberCL INCLUDEPATH += /usr/include/CL INCLUDEPATH += /usr/include/GL diff --git a/Builds/QtCreator/Fractorium/Fractorium.pro b/Builds/QtCreator/Fractorium/Fractorium.pro index 800e816..940a35d 100644 --- a/Builds/QtCreator/Fractorium/Fractorium.pro +++ b/Builds/QtCreator/Fractorium/Fractorium.pro @@ -13,7 +13,7 @@ TEMPLATE = app CONFIG += precompile_header VERSION = 0.1.4.7 -DESTDIR = ../../../Bin +DESTDIR = $$(HOME)/Dev/fractorium/Bin LIBS += -L/usr/lib -lOpenCL LIBS += -L/usr/lib -lGL @@ -21,8 +21,8 @@ LIBS += -L/usr/lib -ljpeg LIBS += -L/usr/lib -lpng LIBS += -L/usr/lib -ltbb LIBS += -L/usr/lib/x86_64-linux-gnu -lxml2 -LIBS += -L../../../Bin -lEmber -LIBS += -L../../../Bin -lEmberCL +LIBS += -L$$DESTDIR -lEmber +LIBS += -L$$DESTDIR -lEmberCL INCLUDEPATH += /usr/include/CL INCLUDEPATH += /usr/include/GL diff --git a/Source/Ember/Timing.h b/Source/Ember/Timing.h index e5bb341..ec829aa 100644 --- a/Source/Ember/Timing.h +++ b/Source/Ember/Timing.h @@ -193,8 +193,8 @@ private: CriticalSection() { pthread_mutexattr_t attr; - - pthread_mutexattr_init(&attr); + + pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL); pthread_mutex_init(&m_CriticalSection, &attr); pthread_mutexattr_destroy(&attr); diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui index 8601547..acf1074 100644 --- a/Source/Fractorium/AboutDialog.ui +++ b/Source/Fractorium/AboutDialog.ui @@ -7,7 +7,7 @@ 0 0 488 - 617 + 565 @@ -19,13 +19,13 @@ 488 - 617 + 565 587 - 617 + 565 @@ -77,6 +77,9 @@ 4 + + 6 + @@ -105,6 +108,9 @@ 4 + + 6 + @@ -133,6 +139,9 @@ 4 + + 6 + @@ -154,6 +163,12 @@ + + 6 + + + 0 + diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp index 4843c7f..f3df81c 100644 --- a/Source/Fractorium/Fractorium.cpp +++ b/Source/Fractorium/Fractorium.cpp @@ -119,6 +119,9 @@ Fractorium::Fractorium(QWidget* p) m_ProgressBar->setMaximumWidth(progressBarWidth); ui.statusBar->addPermanentWidget(m_ProgressBar); + //Setup pointer in the GL window to point back to here. + ui.GLDisplay->SetMainWindow(this); + showMaximized(); connect(ui.DockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(dockLocationChanged(Qt::DockWidgetArea))); @@ -146,15 +149,11 @@ Fractorium::Fractorium(QWidget* p) //setStyleSheet("QGroupBox { border: 2px solid gray; border-radius: 3px; } "); m_PreviousPaletteRow = -1;//Force click handler the first time through. - - //Setup pointer in the GL window to point back to here. - ui.GLDisplay->SetMainWindow(this); - //ui.GLDisplay->setParent(this); SetCoordinateStatus(0, 0, 0, 0); SetTabOrders(); ui.GLParentScrollArea->installEventFilter(this); - + //At this point, everything has been setup except the renderer. Shortly after //this constructor exits, GLWidget::initializeGL() will create the initial flock and start the rendering timer //which executes whenever the program is idle. Upon starting the timer, the renderer @@ -263,7 +262,7 @@ bool Fractorium::eventFilter(QObject* o, QEvent* e) { m_WidthSpin->DoubleClickNonZero(ui.GLParentScrollArea->width()); m_HeightSpin->DoubleClickNonZero(ui.GLParentScrollArea->height()); - //qDebug() << "scroll area resized"; + //qDebug() << "scroll area resized"; } return QMainWindow::eventFilter(o, e); diff --git a/Source/Fractorium/FractoriumPch.h b/Source/Fractorium/FractoriumPch.h index 7ba43d2..5ca78b3 100644 --- a/Source/Fractorium/FractoriumPch.h +++ b/Source/Fractorium/FractoriumPch.h @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Source/Fractorium/FractoriumRender.cpp b/Source/Fractorium/FractoriumRender.cpp index 64e24fd..5ed9c6c 100644 --- a/Source/Fractorium/FractoriumRender.cpp +++ b/Source/Fractorium/FractoriumRender.cpp @@ -434,10 +434,10 @@ bool FractoriumEmberController::Render() { if (m_FinalImage.size() == m_Renderer->FinalBufferSize())//Make absolutely sure the correct amount of data is passed. gl->repaint(); - //gl->update(); + //gl->update(); - //m_Fractorium->update(); - //m_Fractorium->ui.GLParentScrollArea->update(); + //m_Fractorium->update(); + //m_Fractorium->ui.GLParentScrollArea->update(); //Uncomment for debugging kernel build and execution errors. //m_Fractorium->ui.InfoRenderingTextEdit->setText(QString::fromStdString(m_Fractorium->m_Wrapper.DumpInfo())); //if (rendererCL) diff --git a/Source/Fractorium/FractoriumXforms.cpp b/Source/Fractorium/FractoriumXforms.cpp index cafd799..c6c7d5f 100644 --- a/Source/Fractorium/FractoriumXforms.cpp +++ b/Source/Fractorium/FractoriumXforms.cpp @@ -30,15 +30,15 @@ void Fractorium::InitXformsUI() connect(ui.XformWeightNameTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnXformNameChanged(int, int)), Qt::QueuedConnection); ui.CurrentXformCombo->setProperty("soloxform", -1); - + #ifndef WIN32 - //For some reason linux makes these 24x24, even though the designer explicitly says 16x16. - ui.AddXformButton->setIconSize(QSize(16, 16)); - ui.DuplicateXformButton->setIconSize(QSize(16, 16)); - ui.ClearXformButton->setIconSize(QSize(16, 16)); - ui.DeleteXformButton->setIconSize(QSize(16, 16)); - ui.AddFinalXformButton->setIconSize(QSize(16, 16)); - ui.CurrentXformCombo->setIconSize(QSize(16, 16)); + //For some reason linux makes these 24x24, even though the designer explicitly says 16x16. + ui.AddXformButton->setIconSize(QSize(16, 16)); + ui.DuplicateXformButton->setIconSize(QSize(16, 16)); + ui.ClearXformButton->setIconSize(QSize(16, 16)); + ui.DeleteXformButton->setIconSize(QSize(16, 16)); + ui.AddFinalXformButton->setIconSize(QSize(16, 16)); + ui.CurrentXformCombo->setIconSize(QSize(16, 16)); #endif } diff --git a/Source/Fractorium/GLWidget.cpp b/Source/Fractorium/GLWidget.cpp index a4e4859..ab053f4 100644 --- a/Source/Fractorium/GLWidget.cpp +++ b/Source/Fractorium/GLWidget.cpp @@ -10,9 +10,9 @@ /// /// The parent widget GLWidget::GLWidget(QWidget* p) - : QGLWidget(QGLFormat(QGL::SampleBuffers), p) + : QOpenGLWidget(p) { - QGLFormat qglFormat; + QSurfaceFormat qsf; m_Init = false; m_Drawing = false; @@ -20,14 +20,12 @@ GLWidget::GLWidget(QWidget* p) m_TexHeight = 0; m_OutputTexID = 0; m_Fractorium = NULL; - qglFormat.setSwapInterval(1);//Vsync. - qglFormat.setDoubleBuffer(true); - qglFormat.setVersion(2, 0); - //qglFormat.setVersion(3, 2); - qglFormat.setProfile(QGLFormat::CompatibilityProfile); - //qglFormat.setProfile(QGLFormat::CoreProfile); - - setFormat(qglFormat); + + qsf.setSwapInterval(1);//Vsync. + qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer); + qsf.setVersion(2, 0); + + setFormat(qsf); } /// @@ -120,8 +118,10 @@ void GLEmberController::ClearWindow() m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0); + //m_GL->update(); m_GL->makeCurrent(); - m_GL->swapBuffers(); + //m_GL->context()->swapBuffers(; + //m_GL->context()->swapBuffers(m_GL->context()->surface()); m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0); @@ -144,6 +144,7 @@ void GLEmberController::SetSelectedXform(Xform* xform) m_SelectedXform = xform; if (m_GL->m_Init) + //m_GL->update(); m_GL->repaint();//Force immediate redraw with repaint() instead of update(). } } @@ -176,14 +177,14 @@ void GLWidget::initializeGL() { glClearColor(0.0, 0.0, 0.0, 1.0); - //int w = m_Fractorium->width() - m_Fractorium->ui.DockWidget->width(); - //int h = m_Fractorium->ui.DockWidget->height(); + int w = m_Fractorium->width() - m_Fractorium->ui.DockWidget->width(); + int h = m_Fractorium->ui.DockWidget->height(); - int w = m_Fractorium->ui.GLParentScrollArea->width(); - int h = m_Fractorium->ui.GLParentScrollArea->height(); + //int w = m_Fractorium->ui.GLParentScrollArea->width(); + //int h = m_Fractorium->ui.GLParentScrollArea->height(); - //show(); - //m_Fractorium->ui.GLParentScrollArea->showMaximized(); + //show(); + //m_Fractorium->ui.GLParentScrollArea->showMaximized(); SetDimensions(w, h); m_Fractorium->m_WidthSpin->setValue(w); m_Fractorium->m_HeightSpin->setValue(h); @@ -198,7 +199,7 @@ void GLWidget::initializeGL() //Start with a flock of 10 random embers. Can't do this until now because the window wasn't maximized yet, so the sizes would have been off. m_Fractorium->OnActionNewFlock(false); - //m_Fractorium->repaint(); + //m_Fractorium->repaint(); m_Fractorium->m_Controller->DelayedStartRenderTimer(); m_Init = true; } @@ -401,7 +402,7 @@ bool GLEmberControllerBase::KeyPress_(QKeyEvent* e) void GLWidget::keyPressEvent(QKeyEvent* e) { if (!GLController() || !GLController()->KeyPress_(e)) - QGLWidget::keyPressEvent(e); + QOpenGLWidget::keyPressEvent(e); update(); } @@ -441,7 +442,7 @@ bool GLEmberControllerBase::KeyRelease_(QKeyEvent* e) void GLWidget::keyReleaseEvent(QKeyEvent* e) { if (!GLController() || !GLController()->KeyRelease_(e)) - QGLWidget::keyReleaseEvent(e); + QOpenGLWidget::keyReleaseEvent(e); update(); } @@ -545,7 +546,7 @@ void GLWidget::mousePressEvent(QMouseEvent* e) if (GLEmberControllerBase* controller = GLController()) controller->MousePress(e); - QGLWidget::mousePressEvent(e); + QOpenGLWidget::mousePressEvent(e); } /// @@ -583,7 +584,7 @@ void GLWidget::mouseReleaseEvent(QMouseEvent* e) if (GLEmberControllerBase* controller = GLController()) controller->MouseRelease(e); - QGLWidget::mouseReleaseEvent(e); + QOpenGLWidget::mouseReleaseEvent(e); } /// @@ -692,7 +693,7 @@ void GLWidget::mouseMoveEvent(QMouseEvent* e) if (GLEmberControllerBase* controller = GLController()) controller->MouseMove(e); - QGLWidget::mouseMoveEvent(e); + QOpenGLWidget::mouseMoveEvent(e); } /// @@ -720,7 +721,7 @@ void GLWidget::wheelEvent(QWheelEvent* e) if (GLEmberControllerBase* controller = GLController()) controller->Wheel(e); - //Do not call QGLWidget::wheelEvent(e) because this should only affect the scale and not the position of the scroll bars. + //Do not call QOpenGLWidget::wheelEvent(e) because this should only affect the scale and not the position of the scroll bars. } /// @@ -730,12 +731,14 @@ void GLWidget::wheelEvent(QWheelEvent* e) /// the OpenGL texture it's being drawn on. /// /// The event -void GLWidget::resizeEvent(QResizeEvent* e) -{ - if (m_Fractorium) - { - } -} +//void GLWidget::resizeEvent(QResizeEvent* e) +//{ +// if (m_Fractorium) +// { +// } +// +// QOpenGLWidget::resizeEvent(e); +//} /// /// Set the dimensions of the drawing area. @@ -746,7 +749,7 @@ void GLWidget::resizeEvent(QResizeEvent* e) void GLWidget::SetDimensions(int w, int h) { setFixedSize(w, h); - //resize(w, h); + //resize(w, h); //m_Fractorium->ui.GLParentScrollAreaContents->setFixedSize(w, h); } @@ -803,7 +806,7 @@ bool GLWidget::Deallocate() if (m_OutputTexID != 0) { - glBindTexture(GL_TEXTURE_2D, m_OutputTexID); + glBindTexture(GL_TEXTURE_2D, m_OutputTexID); glDeleteTextures(1, &m_OutputTexID); m_OutputTexID = 0; deleted = true; diff --git a/Source/Fractorium/GLWidget.h b/Source/Fractorium/GLWidget.h index 2ae729e..7784c9e 100644 --- a/Source/Fractorium/GLWidget.h +++ b/Source/Fractorium/GLWidget.h @@ -28,7 +28,7 @@ static const float GridStep = 1.0f / 8.0f; /// the main window and several of its members. /// This class uses a controller-based design similar to the main window. /// -class GLWidget : public QGLWidget, protected QOpenGLFunctions_2_0//QOpenGLFunctions_3_2_Compatibility//QOpenGLFunctions_3_2_Core//, protected QOpenGLFunctions +class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions_2_0//QOpenGLFunctions_3_2_Compatibility//QOpenGLFunctions_3_2_Core//, protected QOpenGLFunctions { Q_OBJECT @@ -61,7 +61,7 @@ protected: virtual void mouseReleaseEvent(QMouseEvent* e) override; virtual void mouseMoveEvent(QMouseEvent* e) override; virtual void wheelEvent(QWheelEvent* e) override; - virtual void resizeEvent(QResizeEvent* e) override; + //virtual void resizeEvent(QResizeEvent* e) override; private: void SetDimensions(int w, int h);