aboutsummaryrefslogtreecommitdiffstats
path: root/gui/fpgaviewwidget.cc
diff options
context:
space:
mode:
authorSergiusz Bazanski <q3k@q3k.org>2018-07-20 10:58:30 +0100
committerSergiusz Bazanski <q3k@q3k.org>2018-07-20 10:58:30 +0100
commit0385ad1b1cc3dcd4673b3c674bc28ca12a7c7450 (patch)
treed5240f82ad875e2959a4d578bfb57021326f2447 /gui/fpgaviewwidget.cc
parent03508faabfc2f5b76039cfd13d02a341baa848a4 (diff)
downloadnextpnr-0385ad1b1cc3dcd4673b3c674bc28ca12a7c7450.tar.gz
nextpnr-0385ad1b1cc3dcd4673b3c674bc28ca12a7c7450.tar.bz2
nextpnr-0385ad1b1cc3dcd4673b3c674bc28ca12a7c7450.zip
Refactor renderer thread
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r--gui/fpgaviewwidget.cc31
1 files changed, 7 insertions, 24 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc
index f4bd2b97..9a03b2a5 100644
--- a/gui/fpgaviewwidget.cc
+++ b/gui/fpgaviewwidget.cc
@@ -23,7 +23,6 @@
#include <QApplication>
#include <QCoreApplication>
#include <QMouseEvent>
-#include <QTimer>
#include <QWidget>
#include "fpgaviewwidget.h"
@@ -242,7 +241,7 @@ void LineShader::draw(const LineShaderData &line, const QColor &color, float thi
}
FPGAViewWidget::FPGAViewWidget(QWidget *parent)
- : QOpenGLWidget(parent), lineShader_(this), zoom_(500.f), ctx_(nullptr), rendererData_(new FPGAViewWidget::RendererData), rendererArgs_(new FPGAViewWidget::RendererArgs)
+ : QOpenGLWidget(parent), lineShader_(this), zoom_(500.f), ctx_(nullptr), paintTimer_(this), rendererData_(new FPGAViewWidget::RendererData), rendererArgs_(new FPGAViewWidget::RendererArgs)
{
colors_.background = QColor("#000000");
colors_.grid = QColor("#333");
@@ -276,16 +275,12 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent)
printf("Could not get OpenGL 3.1 context - trying anyway...\n ");
}
- QTimer *timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(update()));
- timer->start(1000/20);
+ connect(&paintTimer_, SIGNAL(timeout()), this, SLOT(update()));
+ paintTimer_.start(std::chrono::duration<int, std::milli>(1000/20)); // paint GL 20 times per second
- timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(pokeRenderer()));
- timer->start(1000/2);
-
- renderThread_ = std::unique_ptr<QThread>(QThread::create([this] { renderLinesWorker(); }));
- renderThread_->start();
+ renderRunner_ = std::unique_ptr<PeriodicRunner>(new PeriodicRunner(this, [this] { renderLines(); }));
+ renderRunner_->start();
+ renderRunner_->startTimer(std::chrono::duration<int, std::milli>(1000/2)); // render line 2 times per second
}
FPGAViewWidget::~FPGAViewWidget() {}
@@ -423,19 +418,7 @@ void FPGAViewWidget::paintGL()
}
void FPGAViewWidget::pokeRenderer(void) {
- render_.wakeOne();
-}
-
-void FPGAViewWidget::renderLinesWorker(void) {
- for (;;) {
- QMutex mutex;
- mutex.lock();
- render_.wait(&mutex);
-
- renderLines();
-
- mutex.unlock();
- }
+ renderRunner_->poke();
}
void FPGAViewWidget::renderLines(void)