void VisitPolygon(const AirspacePolygon &airspace) { if (!PreparePolygon(airspace.GetPoints())) return; if (!warning_manager.IsAcked(airspace) && SetupInterior(airspace)) { // fill interior without overpainting any previous outlines GLEnable blend(GL_BLEND); DrawPrepared(); } // draw outline if (SetupOutline(airspace)) DrawPrepared(); }
void VisitPolygon(const AirspacePolygon &airspace) { if (!PreparePolygon(airspace.GetPoints())) return; const AirspaceClassRendererSettings &class_settings = settings.classes[airspace.GetType()]; bool fill_airspace = warning_manager.HasWarning(airspace) || warning_manager.IsInside(airspace) || class_settings.fill_mode == AirspaceClassRendererSettings::FillMode::ALL; if (!warning_manager.IsAcked(airspace) && class_settings.fill_mode != AirspaceClassRendererSettings::FillMode::NONE) { GLEnable stencil(GL_STENCIL_TEST); if (!fill_airspace) { // set stencil for filling (bit 0) SetFillStencil(); DrawPrepared(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } // fill interior without overpainting any previous outlines { SetupInterior(airspace, !fill_airspace); GLEnable blend(GL_BLEND); DrawPrepared(); } if (!fill_airspace) { // clear fill stencil (bit 0) ClearFillStencil(); DrawPrepared(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } } // draw outline if (SetupOutline(airspace)) DrawPrepared(); }
void DrawPolygon(const SearchPointVector &points) { if (PreparePolygon(points)) DrawPrepared(); }