+void LayoutDefaulter::apply(Stage &stage)
+{
+ if(stage.type==Stage::TESS_EVAL)
+ {
+ stage.content.visit(*this);
+ if((need_winding || need_spacing) && in_iface)
+ {
+ if(need_winding)
+ in_iface->layout.qualifiers.emplace_back("ccw");
+ if(need_spacing)
+ in_iface->layout.qualifiers.emplace_back("equal_spacing");
+ }
+ }
+}
+
+void LayoutDefaulter::visit(InterfaceLayout &iface)
+{
+ if(iface.interface=="in")
+ {
+ if(!in_iface)
+ in_iface = &iface;
+ for(const Layout::Qualifier &q: iface.layout.qualifiers)
+ {
+ if(q.name=="cw" || q.name=="ccw")
+ need_winding = false;
+ else if(q.name=="equal_spacing" || q.name=="fractional_even_spacing" || q.name=="fractional_odd_spacing")
+ need_spacing = false;
+ }
+ }
+}
+
+