Skip to content

Commit f8cf257

Browse files
committed
fixes: limit allow editing of gltf materials to only pur materials and materiallibraries gltfs
1 parent 7d2674e commit f8cf257

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

Editor/Scripts/ShaderGraph/InternalShaderGraph/PBRGraphGUI.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,23 @@ public override void AssignNewShaderToMaterial(Material material, Shader oldShad
594594
public delegate void OnImmutableMaterialChanged(Material material);
595595
public static event OnImmutableMaterialChanged ImmutableMaterialChanged;
596596

597+
public delegate bool IsMaterialEditableCallback(Material material);
598+
public static event IsMaterialEditableCallback IsMaterialEditable;
599+
600+
internal static bool GetIsMaterialEditable(Material material)
601+
{
602+
603+
try
604+
{
605+
return IsMaterialEditable?.Invoke(material) ?? false;
606+
}
607+
catch (Exception e)
608+
{
609+
Debug.LogException(e);
610+
return false;
611+
}
612+
}
613+
597614
internal static void InvokeMaterialChangedEvent(Material material)
598615
{
599616
try
@@ -639,9 +656,9 @@ internal static bool CanEdit(Material materialEditorTarget)
639656
{
640657
if (CanEditCache.TryGetValue(materialEditorTarget, out var canEdit))
641658
return canEdit;
642-
643-
// we can only edit this material if it's from a .gltf file right now. We're caching this here to avoid having to re-parse the file
644-
canEdit = AssetDatabase.GetAssetPath(materialEditorTarget).EndsWith(".gltf", StringComparison.OrdinalIgnoreCase);
659+
660+
canEdit = PBRGraphGUI.GetIsMaterialEditable(materialEditorTarget);
661+
645662
CanEditCache.Add(materialEditorTarget, canEdit);
646663
return canEdit;
647664
}

Editor/Scripts/ShaderGraph/MaterialEditorBridge.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.IO;
34
using System.Linq;
@@ -12,6 +13,28 @@ internal static class MaterialEditorBridge
1213
private static void ConnectGltfExporterToPbrGraphGUI()
1314
{
1415
PBRGraphGUI.ImmutableMaterialChanged += OnImmutableMaterialChanged;
16+
PBRGraphGUI.IsMaterialEditable += IsMaterialEditable;
17+
}
18+
19+
internal static bool IsMaterialEditable(Material material)
20+
{
21+
if (!material) return false;
22+
if (!AssetDatabase.Contains(material)) return false;
23+
24+
var assetPath = AssetDatabase.GetAssetPath(material);
25+
if (!assetPath.EndsWith(".gltf", StringComparison.OrdinalIgnoreCase))
26+
{
27+
// If the material is not part of a GLTF asset, we don't want to edit it.
28+
return false;
29+
}
30+
31+
var mainAssetType = AssetDatabase.GetMainAssetTypeAtPath(assetPath);
32+
if (mainAssetType != typeof(Material) && mainAssetType != typeof(MaterialLibrary))
33+
{
34+
return false;
35+
}
36+
37+
return true;
1538
}
1639

1740
internal static void OnImmutableMaterialChanged(Material material)

0 commit comments

Comments
 (0)