aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gui/fpgaviewwidget.cc24
-rw-r--r--gui/lineshader.cc8
2 files changed, 19 insertions, 13 deletions
diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc
index 16f70056..a6552ec9 100644
--- a/gui/fpgaviewwidget.cc
+++ b/gui/fpgaviewwidget.cc
@@ -202,8 +202,6 @@ void FPGAViewWidget::renderGraphicElement(LineShaderData &out, PickQuadTree::Bou
bb.setY0(std::min(bb.y0(), y + el.y1));
bb.setX1(std::max(bb.x1(), x + el.x2));
bb.setY1(std::max(bb.y1(), y + el.y2));
-
- out.last_render++;
return;
}
@@ -213,8 +211,6 @@ void FPGAViewWidget::renderGraphicElement(LineShaderData &out, PickQuadTree::Bou
bb.setY0(std::min(bb.y0(), y + el.y1));
bb.setX1(std::max(bb.x1(), x + el.x2));
bb.setY1(std::max(bb.y1(), y + el.y2));
-
- out.last_render++;
return;
}
}
@@ -461,12 +457,18 @@ void FPGAViewWidget::renderLines(void)
highlightedOrSelectedChanged = rendererArgs_->changed;
rendererArgs_->changed = false;
-
flags = rendererArgs_->flags;
}
// Render decals if necessary.
if (decalsChanged) {
+ int last_render[GraphicElement::STYLE_HIGHLIGHTED0];
+ {
+ QMutexLocker locker(&rendererDataLock_);
+ for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++)
+ last_render[i] = rendererData_->gfxByStyle[(enum GraphicElement::style_t)i].last_render;
+ }
+
auto data = std::unique_ptr<FPGAViewWidget::RendererData>(new FPGAViewWidget::RendererData);
// Reset bounding box.
data->bbGlobal.clear();
@@ -532,7 +534,8 @@ void FPGAViewWidget::renderLines(void)
for (int i = 0; i < 8; i++)
data->gfxHighlighted[i] = rendererData_->gfxHighlighted[i];
}
-
+ for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++)
+ data->gfxByStyle[(enum GraphicElement::style_t)i].last_render = ++last_render[i];
rendererData_ = std::move(data);
}
}
@@ -543,6 +546,7 @@ void FPGAViewWidget::renderLines(void)
// Whether the currently being hovered decal is also selected.
bool hoveringSelected = false;
// Render selected.
+ int prev = rendererData_->gfxSelected.indices.size();
rendererData_->bbSelected.clear();
rendererData_->gfxSelected.clear();
for (auto &decal : selectedDecals) {
@@ -550,19 +554,27 @@ void FPGAViewWidget::renderLines(void)
hoveringSelected = true;
renderDecal(rendererData_->gfxSelected, rendererData_->bbSelected, decal);
}
+ int curr = rendererData_->gfxSelected.indices.size();
+ if (curr!=prev) rendererData_->gfxSelected.last_render++;
// Render hovered.
+ prev = rendererData_->gfxHovered.indices.size();
rendererData_->gfxHovered.clear();
if (!hoveringSelected) {
renderDecal(rendererData_->gfxHovered, rendererData_->bbGlobal, hoveredDecal);
}
+ curr = rendererData_->gfxHovered.indices.size();
+ if (curr!=prev) rendererData_->gfxHovered.last_render++;
// Render highlighted.
for (int i = 0; i < 8; i++) {
+ prev = rendererData_->gfxHighlighted[i].indices.size();
rendererData_->gfxHighlighted[i].clear();
for (auto &decal : highlightedDecals[i]) {
renderDecal(rendererData_->gfxHighlighted[i], rendererData_->bbGlobal, decal);
}
+ curr = rendererData_->gfxHighlighted[i].indices.size();
+ if (curr!=prev) rendererData_->gfxHighlighted[i].last_render++;
}
}
diff --git a/gui/lineshader.cc b/gui/lineshader.cc
index 0f762b38..fc726df5 100644
--- a/gui/lineshader.cc
+++ b/gui/lineshader.cc
@@ -214,14 +214,8 @@ void LineShader::update_vbos(enum GraphicElement::style_t style,
buffers_[style].last_vbo_update = line.last_render;
buffers_[style].indices = line.indices.size();
- if (buffers_[style].indices == 0) {
- // invalidate buffers
- buffers_[style].position.allocate(nullptr, 0);
- buffers_[style].normal.allocate(nullptr, 0);
- buffers_[style].miter.allocate(nullptr, 0);
- buffers_[style].index.allocate(nullptr, 0);
+ if (buffers_[style].indices == 0)
return;
- }
buffers_[style].position.bind();
buffers_[style].position.allocate(&line.vertices[0], sizeof(Vertex2DPOD) * line.vertices.size());