aboutsummaryrefslogtreecommitdiffstats
path: root/gui/fpgaviewwidget.cc
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-10-27 11:07:14 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-10-27 12:02:01 +0200
commitcb6baa0f6aa208b46291f50202babc69cce97d7b (patch)
tree2ef32d2a55e157b5477d75f6b74f6ce531c07010 /gui/fpgaviewwidget.cc
parentd08fe2109dcb7e037d4321f9804a5c0aeca3b87b (diff)
downloadnextpnr-cb6baa0f6aa208b46291f50202babc69cce97d7b.tar.gz
nextpnr-cb6baa0f6aa208b46291f50202babc69cce97d7b.tar.bz2
nextpnr-cb6baa0f6aa208b46291f50202babc69cce97d7b.zip
Update grid properly
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r--gui/fpgaviewwidget.cc41
1 files changed, 25 insertions, 16 deletions
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<DecalXY>(), false);
for (int i = 0; i < 8; i++)
onHighlightGroupChanged(std::vector<DecalXY>(), 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<DecalXY> 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++) {