@@ -249,30 +249,18 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
249249 List<PropertyInfo> list;
250250 shader->get_shader_uniform_list (&list, true );
251251
252- HashMap<String, HashMap<String, List<PropertyInfo>>> groups;
253- LocalVector<Pair<String, LocalVector<String>>> vgroups;
254- {
255- HashMap<String, List<PropertyInfo>> none_subgroup;
256- none_subgroup.insert (" <None>" , List<PropertyInfo>());
257- groups.insert (" <None>" , none_subgroup);
258- }
252+ HashMap<String, List<PropertyInfo>> groups;
253+ LocalVector<String> vgroups;
259254
260255 String last_group = " <None>" ;
261- String last_subgroup = " <None>" ;
262256
263257 bool is_none_group_undefined = true ;
264258 bool is_none_group = true ;
265259
266260 for (const PropertyInfo &pi : list) {
267261 if (pi.usage == PROPERTY_USAGE_GROUP ) {
268262 if (!pi.name .is_empty ()) {
269- Vector<String> vgroup = pi.name .split (" ::" );
270- last_group = vgroup[0 ];
271- if (vgroup.size () > 1 ) {
272- last_subgroup = vgroup[1 ];
273- } else {
274- last_subgroup = " <None>" ;
275- }
263+ last_group = pi.name ;
276264 is_none_group = false ;
277265
278266 if (!groups.has (last_group)) {
@@ -281,36 +269,14 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
281269 info.name = last_group.capitalize ();
282270 info.hint_string = " shader_parameter/" ;
283271
284- List<PropertyInfo> none_subgroup;
285- none_subgroup.push_back (info);
286-
287- HashMap<String, List<PropertyInfo>> subgroup_map;
288- subgroup_map.insert (" <None>" , none_subgroup);
272+ List<PropertyInfo> props;
273+ props.push_back (info);
289274
290- groups.insert (last_group, subgroup_map);
291- vgroups.push_back (Pair<String, LocalVector<String>>(last_group, { " <None>" }));
292- }
293-
294- if (!groups[last_group].has (last_subgroup)) {
295- PropertyInfo info;
296- info.usage = PROPERTY_USAGE_SUBGROUP ;
297- info.name = last_subgroup.capitalize ();
298- info.hint_string = " shader_parameter/" ;
299-
300- List<PropertyInfo> subgroup;
301- subgroup.push_back (info);
302-
303- groups[last_group].insert (last_subgroup, subgroup);
304- for (Pair<String, LocalVector<String>> &group : vgroups) {
305- if (group.first == last_group) {
306- group.second .push_back (last_subgroup);
307- break ;
308- }
309- }
275+ groups.insert (last_group, props);
276+ vgroups.push_back (last_group);
310277 }
311278 } else {
312279 last_group = " <None>" ;
313- last_subgroup = " <None>" ;
314280 is_none_group = true ;
315281 }
316282 continue ; // Pass group.
@@ -323,9 +289,12 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
323289 info.usage = PROPERTY_USAGE_GROUP ;
324290 info.name = " Shader Parameters" ;
325291 info.hint_string = " shader_parameter/" ;
326- groups[" <None>" ][" <None>" ].push_back (info);
327292
328- vgroups.push_back (Pair<String, LocalVector<String>>(" <None>" , { " <None>" }));
293+ List<PropertyInfo> props;
294+ props.push_back (info);
295+
296+ groups.insert (" <None>" , props);
297+ vgroups.push_back (" <None>" );
329298 }
330299
331300 const bool is_uniform_cached = param_cache.has (pi.name );
@@ -375,16 +344,13 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
375344 param_cache.insert (pi.name , default_value);
376345 remap_cache.insert (info.name , pi.name );
377346 }
378- groups[last_group][last_subgroup] .push_back (info);
347+ groups[last_group].push_back (info);
379348 }
380349
381- for (const Pair<String, LocalVector<String>> &group_pair : vgroups) {
382- String group = group_pair.first ;
383- for (const String &subgroup : group_pair.second ) {
384- List<PropertyInfo> &prop_infos = groups[group][subgroup];
385- for (const PropertyInfo &item : prop_infos) {
386- p_list->push_back (item);
387- }
350+ for (const String &group : vgroups) {
351+ List<PropertyInfo> &prop_infos = groups[group];
352+ for (const PropertyInfo &item : prop_infos) {
353+ p_list->push_back (item);
388354 }
389355 }
390356 }
0 commit comments