Update grid properly
This commit is contained in:
parent
d08fe2109d
commit
cb6baa0f6a
@ -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++) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user