From cb6baa0f6aa208b46291f50202babc69cce97d7b Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sat, 27 Oct 2018 11:07:14 +0200 Subject: Update grid properly --- gui/fpgaviewwidget.cc | 41 +++++++++++++++++++++++++---------------- gui/fpgaviewwidget.h | 3 +++ 2 files changed, 28 insertions(+), 16 deletions(-) (limited to 'gui') diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 22c748a7..55ed9315 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -56,6 +56,7 @@ FPGAViewWidget::FPGAViewWidget(QWidget *parent) colors_.highlight[7] = QColor("#da70d6"); rendererArgs_->changed = false; + rendererArgs_->gridChanged = false; rendererArgs_->flags.zoomOutbound = true; auto fmt = format(); @@ -86,6 +87,11 @@ FPGAViewWidget::~FPGAViewWidget() {} void FPGAViewWidget::newContext(Context *ctx) { ctx_ = ctx; + { + QMutexLocker lock(&rendererArgsLock_); + + rendererArgs_->gridChanged = true; + } onSelectedArchItem(std::vector(), false); for (int i = 0; i < 8; i++) onHighlightGroupChanged(std::vector(), i); @@ -109,21 +115,6 @@ void FPGAViewWidget::initializeGL() QtImGui::initialize(this); glClearColor(colors_.background.red() / 255, colors_.background.green() / 255, colors_.background.blue() / 255, 0.0); - - - { - QMutexLocker locker(&rendererDataLock_); - // Render grid. - auto grid = LineShaderData(); - for (float i = 0.0f; i < 1.0f * ctx_->getGridDimX() + 1; i += 1.0f) { - PolyLine(i, 0.0f, i, 1.0f * ctx_->getGridDimY()).build(grid); - } - for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) { - PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(grid); - } - grid.last_render = 1; - lineShader_.update_vbos(GraphicElement::STYLE_GRID, grid); - } } float FPGAViewWidget::PickedElement::distance(Context *ctx, float wx, float wy) const @@ -446,6 +437,7 @@ void FPGAViewWidget::renderLines(void) DecalXY hoveredDecal; std::vector highlightedDecals[8]; bool highlightedOrSelectedChanged; + bool gridChanged; PassthroughFlags flags; { // Take the renderer arguments lock, copy over all we need. @@ -458,7 +450,9 @@ void FPGAViewWidget::renderLines(void) highlightedDecals[i] = rendererArgs_->highlightedDecals[i]; highlightedOrSelectedChanged = rendererArgs_->changed; + gridChanged = rendererArgs_->gridChanged; rendererArgs_->changed = false; + rendererArgs_->gridChanged = false; flags = rendererArgs_->flags; } @@ -530,6 +524,7 @@ void FPGAViewWidget::renderLines(void) // If we're not re-rendering any highlights/selections, let's // copy them over from teh current object. + data->gfxGrid = rendererData_->gfxGrid; if (!highlightedOrSelectedChanged) { data->gfxSelected = rendererData_->gfxSelected; data->gfxHovered = rendererData_->gfxHovered; @@ -541,7 +536,19 @@ void FPGAViewWidget::renderLines(void) rendererData_ = std::move(data); } } - + if (gridChanged) + { + QMutexLocker locker(&rendererDataLock_); + rendererData_->gfxGrid.clear(); + // Render grid. + for (float i = 0.0f; i < 1.0f * ctx_->getGridDimX() + 1; i += 1.0f) { + PolyLine(i, 0.0f, i, 1.0f * ctx_->getGridDimY()).build(rendererData_->gfxGrid); + } + for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) { + PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(rendererData_->gfxGrid); + } + rendererData_->gfxGrid.last_render++; + } if (highlightedOrSelectedChanged) { QMutexLocker locker(&rendererDataLock_); @@ -879,6 +886,8 @@ void FPGAViewWidget::leaveEvent(QEvent *event) void FPGAViewWidget::update_vbos() { + lineShader_.update_vbos(GraphicElement::STYLE_GRID, rendererData_->gfxGrid); + for (int style = GraphicElement::STYLE_FRAME; style < GraphicElement::STYLE_HIGHLIGHTED0; style++) { diff --git a/gui/fpgaviewwidget.h b/gui/fpgaviewwidget.h index de272ab9..8c0ad609 100644 --- a/gui/fpgaviewwidget.h +++ b/gui/fpgaviewwidget.h @@ -265,6 +265,8 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions DecalXY hoveredDecal; // Whether to render the above three or skip it. bool changed; + // Whether to render grid or skip it. + bool gridChanged; // Flags to pass back into the RendererData. PassthroughFlags flags; @@ -278,6 +280,7 @@ class FPGAViewWidget : public QOpenGLWidget, protected QOpenGLFunctions struct RendererData { + LineShaderData gfxGrid; LineShaderData gfxByStyle[GraphicElement::STYLE_MAX]; LineShaderData gfxSelected; LineShaderData gfxHovered; -- cgit v1.2.3