@@ -38,6 +38,15 @@ PipelineFlowChart::~PipelineFlowChart()
38
38
39
39
void PipelineFlowChart::setStages (const QStringList &abbrevs, const QStringList &names)
40
40
{
41
+ int prev = -1 ;
42
+ QString prevAbbrev;
43
+
44
+ if (!m_StageNames.empty () && names.count () != m_StageNames.count ())
45
+ {
46
+ prev = m_SelectedStage;
47
+ prevAbbrev = m_StageAbbrevs[prev];
48
+ }
49
+
41
50
m_StageNames = names;
42
51
m_StageAbbrevs = abbrevs;
43
52
m_StageFlows.reserve (m_StageNames.count ());
@@ -51,7 +60,41 @@ void PipelineFlowChart::setStages(const QStringList &abbrevs, const QStringList
51
60
}
52
61
53
62
update ();
54
- setSelectedStage (selectedStage ());
63
+
64
+ if (prev >= 0 )
65
+ {
66
+ int exact = m_StageAbbrevs.indexOf (prevAbbrev);
67
+
68
+ if (exact >= 0 )
69
+ {
70
+ setSelectedStage (exact);
71
+ }
72
+ else
73
+ {
74
+ // this is most likely a change between mesh/vertex pipeline, default to either the mesh
75
+ // shader or vertex shader if we can find it. Fortunately those names are identical
76
+ int vert = m_StageNames.indexOf (tr (" Vertex Shader" ));
77
+ int mesh = m_StageNames.indexOf (tr (" Mesh Shader" ));
78
+
79
+ if (vert >= 0 )
80
+ {
81
+ setSelectedStage (vert);
82
+ }
83
+ else if (mesh >= 0 )
84
+ {
85
+ setSelectedStage (mesh);
86
+ }
87
+ else
88
+ {
89
+ qWarning () << " Couldn't find default stage when names changed" ;
90
+ setSelectedStage (selectedStage ());
91
+ }
92
+ }
93
+ }
94
+ else
95
+ {
96
+ setSelectedStage (selectedStage ());
97
+ }
55
98
}
56
99
57
100
void PipelineFlowChart::setStageName (int index, const QString &abbrev, const QString &name)
0 commit comments