From 4f0e0f16500bd91693bed666dd0d615bedd42c7c Mon Sep 17 00:00:00 2001 From: Yuri Rubinsky Date: Fri, 16 Sep 2022 08:56:59 +0300 Subject: Fix sorting of uniform items in the material properties Co-authored-by: Chia-Hsiang Cheng --- scene/resources/material.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'scene/resources/material.cpp') diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index e47bfef576..c1e30dd93c 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -257,23 +257,25 @@ void ShaderMaterial::_get_property_list(List *p_list) const { groups[last_group][last_subgroup].push_back(info); } - // Sort groups alphabetically. - List props; + List group_names; for (HashMap>>::Iterator group = groups.begin(); group; ++group) { - for (HashMap>::Iterator subgroup = group->value.begin(); subgroup; ++subgroup) { - for (List::Element *item = subgroup->value.front(); item; item = item->next()) { - if (subgroup->key == "") { - props.push_back({ group->key, item->get() }); - } else { - props.push_back({ group->key + "::" + subgroup->key, item->get() }); - } - } - } + group_names.push_back(group->key); } - props.sort_custom(); + group_names.sort(); - for (List::Element *E = props.front(); E; E = E->next()) { - p_list->push_back(E->get().info); + for (const String &group_name : group_names) { + List subgroup_names; + HashMap> &subgroups = groups[group_name]; + for (HashMap>::Iterator subgroup = subgroups.begin(); subgroup; ++subgroup) { + subgroup_names.push_back(subgroup->key); + } + subgroup_names.sort(); + for (const String &subgroup_name : subgroup_names) { + List &prop_infos = subgroups[subgroup_name]; + for (List::Element *item = prop_infos.front(); item; item = item->next()) { + p_list->push_back(item->get()); + } + } } } } -- cgit v1.2.3