Update grid properly

This commit is contained in:
Miodrag Milanovic 2018-10-27 11:07:14 +02:00
parent d08fe2109d
commit cb6baa0f6a
2 changed files with 28 additions and 16 deletions

View File

@ -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++) {

View File

@ -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;