Reorder initialization and rendering to prevent color flicker

This commit is contained in:
Dan Paulat 2022-04-03 21:28:16 -05:00
parent 5a0224631d
commit dd3751313f
5 changed files with 21 additions and 5 deletions

View file

@ -106,6 +106,12 @@ void ColorTableLayer::Render(const QMapbox::CustomLayerRenderParameters& params)
{
gl::OpenGLFunctions& gl = context()->gl_;
if (!context()->radarProductView_->IsInitialized())
{
// Defer rendering until view is initialized
return;
}
glm::mat4 projection = glm::ortho(0.0f,
static_cast<float>(params.width),
0.0f,

View file

@ -274,8 +274,6 @@ void MapWidget::SelectRadarProduct(common::Level2Product product)
util::async(
[=]()
{
radarProductView->Initialize();
std::string colorTableFile =
manager::SettingsManager::palette_settings()->palette(
common::GetLevel2Palette(product));
@ -285,6 +283,8 @@ void MapWidget::SelectRadarProduct(common::Level2Product product)
common::ColorTable::Load(colorTableFile);
radarProductView->LoadColorTable(colorTable);
}
radarProductView->Initialize();
});
if (p->map_ != nullptr)

View file

@ -630,9 +630,9 @@ void Level2ProductView::ComputeSweep()
BOOST_LOG_TRIVIAL(debug)
<< logPrefix_ << "Vertices calculated in " << timer.format(6, "%ws");
emit SweepComputed();
UpdateColorTable();
emit SweepComputed();
}
std::shared_ptr<Level2ProductView> Level2ProductView::Create(

View file

@ -24,9 +24,10 @@ static const uint16_t DEFAULT_COLOR_TABLE_MAX = 255u;
class RadarProductViewImpl
{
public:
explicit RadarProductViewImpl() : sweepMutex_ {} {}
explicit RadarProductViewImpl() : initialized_ {false}, sweepMutex_ {} {}
~RadarProductViewImpl() = default;
bool initialized_;
std::mutex sweepMutex_;
};
@ -73,10 +74,17 @@ std::mutex& RadarProductView::sweep_mutex()
void RadarProductView::Initialize()
{
ComputeSweep();
p->initialized_ = true;
}
void RadarProductView::SelectElevation(float elevation) {}
bool RadarProductView::IsInitialized() const
{
return p->initialized_;
}
std::vector<float> RadarProductView::GetElevationCuts() const
{
return {};

View file

@ -45,6 +45,8 @@ public:
virtual void SelectTime(std::chrono::system_clock::time_point time) = 0;
virtual void Update() = 0;
bool IsInitialized() const;
virtual common::RadarProductGroup GetRadarProductGroup() const = 0;
virtual std::string GetRadarProductName() const = 0;
virtual std::vector<float> GetElevationCuts() const;