update last_render in case of change of any element, not just number of them
optimize for hover/select/highlight where number matters
This commit is contained in:
parent
f2ec5b0ff3
commit
40a8e17db6
@ -213,7 +213,6 @@ void FPGAViewWidget::renderGraphicElement(LineShaderData &out, PickQuadTree::Bou
|
|||||||
|
|
||||||
void FPGAViewWidget::renderDecal(LineShaderData &out, PickQuadTree::BoundingBox &bb, const DecalXY &decal)
|
void FPGAViewWidget::renderDecal(LineShaderData &out, PickQuadTree::BoundingBox &bb, const DecalXY &decal)
|
||||||
{
|
{
|
||||||
out.last_render++;
|
|
||||||
if (decal.decal == DecalId())
|
if (decal.decal == DecalId())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -236,7 +235,6 @@ void FPGAViewWidget::renderArchDecal(LineShaderData out[GraphicElement::STYLE_MA
|
|||||||
case GraphicElement::STYLE_FRAME:
|
case GraphicElement::STYLE_FRAME:
|
||||||
case GraphicElement::STYLE_INACTIVE:
|
case GraphicElement::STYLE_INACTIVE:
|
||||||
case GraphicElement::STYLE_ACTIVE:
|
case GraphicElement::STYLE_ACTIVE:
|
||||||
out[el.style].last_render++;
|
|
||||||
renderGraphicElement(out[el.style], bb, el, offsetX, offsetY);
|
renderGraphicElement(out[el.style], bb, el, offsetX, offsetY);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -443,12 +441,18 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
|
|
||||||
highlightedOrSelectedChanged = rendererArgs_->changed;
|
highlightedOrSelectedChanged = rendererArgs_->changed;
|
||||||
rendererArgs_->changed = false;
|
rendererArgs_->changed = false;
|
||||||
|
|
||||||
flags = rendererArgs_->flags;
|
flags = rendererArgs_->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render decals if necessary.
|
// Render decals if necessary.
|
||||||
if (decalsChanged) {
|
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);
|
auto data = std::unique_ptr<FPGAViewWidget::RendererData>(new FPGAViewWidget::RendererData);
|
||||||
// Reset bounding box.
|
// Reset bounding box.
|
||||||
data->bbGlobal.clear();
|
data->bbGlobal.clear();
|
||||||
@ -514,7 +518,8 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
data->gfxHighlighted[i] = rendererData_->gfxHighlighted[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);
|
rendererData_ = std::move(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -525,6 +530,7 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
// Whether the currently being hovered decal is also selected.
|
// Whether the currently being hovered decal is also selected.
|
||||||
bool hoveringSelected = false;
|
bool hoveringSelected = false;
|
||||||
// Render selected.
|
// Render selected.
|
||||||
|
int prev = rendererData_->gfxSelected.indices.size();
|
||||||
rendererData_->bbSelected.clear();
|
rendererData_->bbSelected.clear();
|
||||||
rendererData_->gfxSelected.clear();
|
rendererData_->gfxSelected.clear();
|
||||||
for (auto &decal : selectedDecals) {
|
for (auto &decal : selectedDecals) {
|
||||||
@ -532,19 +538,27 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
hoveringSelected = true;
|
hoveringSelected = true;
|
||||||
renderDecal(rendererData_->gfxSelected, rendererData_->bbSelected, decal);
|
renderDecal(rendererData_->gfxSelected, rendererData_->bbSelected, decal);
|
||||||
}
|
}
|
||||||
|
int curr = rendererData_->gfxSelected.indices.size();
|
||||||
|
if (curr!=prev) rendererData_->gfxSelected.last_render++;
|
||||||
|
|
||||||
// Render hovered.
|
// Render hovered.
|
||||||
|
prev = rendererData_->gfxHovered.indices.size();
|
||||||
rendererData_->gfxHovered.clear();
|
rendererData_->gfxHovered.clear();
|
||||||
if (!hoveringSelected) {
|
if (!hoveringSelected) {
|
||||||
renderDecal(rendererData_->gfxHovered, rendererData_->bbGlobal, hoveredDecal);
|
renderDecal(rendererData_->gfxHovered, rendererData_->bbGlobal, hoveredDecal);
|
||||||
}
|
}
|
||||||
|
curr = rendererData_->gfxHovered.indices.size();
|
||||||
|
if (curr!=prev) rendererData_->gfxHovered.last_render++;
|
||||||
|
|
||||||
// Render highlighted.
|
// Render highlighted.
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
|
prev = rendererData_->gfxHighlighted[i].indices.size();
|
||||||
rendererData_->gfxHighlighted[i].clear();
|
rendererData_->gfxHighlighted[i].clear();
|
||||||
for (auto &decal : highlightedDecals[i]) {
|
for (auto &decal : highlightedDecals[i]) {
|
||||||
renderDecal(rendererData_->gfxHighlighted[i], rendererData_->bbGlobal, decal);
|
renderDecal(rendererData_->gfxHighlighted[i], rendererData_->bbGlobal, decal);
|
||||||
}
|
}
|
||||||
|
curr = rendererData_->gfxHighlighted[i].indices.size();
|
||||||
|
if (curr!=prev) rendererData_->gfxHighlighted[i].last_render++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user