Skip to content

Commit da4cda2

Browse files
alex-vazquez-unity3dEvergreen
authored andcommitted
[SRPF][Graphics Tools] Render Pipeline Converter - Search Request was wrongly handled and disposed before it was completed.
As the Search request is executed asyncronously. if we dispose the context. The RP converter for Buit in materials can not finish properly. Disposing the context, when is finished.
1 parent ba49d61 commit da4cda2

File tree

2 files changed

+46
-37
lines changed

2 files changed

+46
-37
lines changed

Packages/com.unity.render-pipelines.universal/Editor/Converter/ReadonlyMaterialConverter.cs

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using System.Text;
55
using UnityEditor.SceneManagement;
6+
using UnityEditor.Search;
67
using UnityEngine;
78
using UnityEngine.SceneManagement;
89
using Object = UnityEngine.Object;
@@ -46,40 +47,43 @@ internal class ReadonlyMaterialConverter : RenderPipelineConverter
4647

4748
public override void OnInitialize(InitializeConverterContext ctx, Action callback)
4849
{
49-
var context = Search.SearchService.CreateContext("asset", "urp=convert-readonly a=URPConverterIndex");
50-
51-
Search.SearchService.Request(context, (c, items) =>
52-
{
53-
// we're going to do this step twice in order to get them ordered, but it should be fast
54-
var orderedRequest = items.OrderBy(req =>
50+
Search.SearchService.Request
51+
(
52+
Search.SearchService.CreateContext("asset", "urp=convert-readonly a=URPConverterIndex"),
53+
(searchContext, items) =>
5554
{
56-
GlobalObjectId.TryParse(req.id, out var gid);
57-
return gid.assetGUID;
58-
});
55+
// we're going to do this step twice in order to get them ordered, but it should be fast
56+
var orderedRequest = items.OrderBy(req =>
57+
{
58+
GlobalObjectId.TryParse(req.id, out var gid);
59+
return gid.assetGUID;
60+
});
5961

60-
foreach (var r in orderedRequest)
61-
{
62-
if (r == null || !GlobalObjectId.TryParse(r.id, out var gid))
62+
foreach (var r in orderedRequest)
6363
{
64-
continue;
65-
}
64+
if (string.IsNullOrEmpty(r?.id) ||
65+
!GlobalObjectId.TryParse(r.id, out var gid))
66+
{
67+
continue;
68+
}
6669

67-
var label = r.provider.fetchLabel(r, r.context);
68-
var description = r.provider.fetchDescription(r, r.context);
70+
var label = r.provider.fetchLabel(r, r.context);
71+
var description = r.provider.fetchDescription(r, r.context);
6972

70-
var item = new ConverterItemDescriptor()
71-
{
72-
name = description.Split('/').Last().Split('.').First(),
73-
info = $"{label}",
74-
};
75-
guids.Add(gid.ToString());
73+
var item = new ConverterItemDescriptor()
74+
{
75+
name = description.Split('/').Last().Split('.').First(),
76+
info = $"{label}",
77+
};
78+
guids.Add(gid.ToString());
7679

77-
ctx.AddAssetToConvert(item);
78-
}
80+
ctx.AddAssetToConvert(item);
81+
}
7982

80-
callback.Invoke();
81-
});
82-
context?.Dispose();
83+
callback.Invoke();
84+
searchContext?.Dispose();
85+
}
86+
);
8387
}
8488

8589
public override void OnRun(ref RunItemContext ctx)

Packages/com.unity.render-pipelines.universal/Editor/Converter/RenderPipelineConvertersEditor.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,15 @@ void HideConverterLayout(VisualElement element)
355355
}
356356
void ToggleAllNone(ClickEvent evt, int index, bool value, VisualElement item)
357357
{
358+
void ToggleSelection(Label labelSelected, Label labelNotSelected)
359+
{
360+
labelSelected.AddToClassList("selected");
361+
labelSelected.RemoveFromClassList("not_selected");
362+
363+
labelNotSelected.AddToClassList("not_selected");
364+
labelNotSelected.RemoveFromClassList("selected");
365+
}
366+
358367
var conv = m_ConverterStates[index];
359368
if (conv.items.Count > 0)
360369
{
@@ -363,22 +372,18 @@ void ToggleAllNone(ClickEvent evt, int index, bool value, VisualElement item)
363372
convItem.isActive = value;
364373
}
365374
UpdateSelectedConverterItems(index, item);
375+
376+
var allLabel = item.Q<Label>("all");
377+
var noneLabel = item.Q<Label>("none");
378+
366379
// Changing the look of the labels
367380
if (value)
368381
{
369-
item.Q<Label>("all").AddToClassList("selected");
370-
item.Q<Label>("all").RemoveFromClassList("not_selected");
371-
372-
item.Q<Label>("none").AddToClassList("not_selected");
373-
item.Q<Label>("none").RemoveFromClassList("selected");
382+
ToggleSelection(allLabel, noneLabel);
374383
}
375384
else
376385
{
377-
item.Q<Label>("none").AddToClassList("selected");
378-
item.Q<Label>("none").RemoveFromClassList("not_selected");
379-
380-
item.Q<Label>("all").AddToClassList("not_selected");
381-
item.Q<Label>("all").RemoveFromClassList("selected");
386+
ToggleSelection(noneLabel, allLabel);
382387
}
383388
}
384389
}

0 commit comments

Comments
 (0)