Skip to content

Commit bcc01b0

Browse files
committed
Add: Presets now support enable/disable Passes
Add: Main() and SubToggle() now support switch preset by value. Change: Preset() filtered out by ShowIf() will not set default values
1 parent 92338d4 commit bcc01b0

14 files changed

+294
-161
lines changed

Editor/Helper/Helper.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -899,11 +899,16 @@ public static void DoPropertyContextMenus(Rect rect, MaterialProperty prop, LWGU
899899
menus.AddSeparator("");
900900
foreach (var activePresetData in perMaterialData.activePresetDatas)
901901
{
902+
// Cull self
902903
if (activePresetData.property == prop) continue;
903904

904905
var activePreset = activePresetData.preset;
905-
var presetAsset = perShaderData.propStaticDatas[activePresetData.property.name].propertyPresetAsset;
906-
var presetPropDisplayName = perShaderData.propStaticDatas[activePresetData.property.name].displayName;
906+
var (presetPropStaticData, presetPropDynamicData) = metaDatas.GetPropDatas(activePresetData.property);
907+
var presetAsset = presetPropStaticData.propertyPresetAsset;
908+
var presetPropDisplayName = presetPropStaticData.displayName;
909+
910+
// Cull invisible presets
911+
if (!presetPropDynamicData.isShowing) continue;
907912

908913
if (activePreset.GetPropertyValue(prop.name) != null)
909914
{

Editor/Helper/PresetHelper.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public static void AddPreset(ShaderPropertyPreset preset)
4545

4646
public static ShaderPropertyPreset GetPresetFile(string presetFileName)
4747
{
48+
if (string.IsNullOrEmpty(presetFileName))
49+
return null;
50+
4851
if (!_loadedPresets.ContainsKey(presetFileName) || !_loadedPresets[presetFileName])
4952
ForceInit();
5053

Editor/MetaData/PerMaterialData.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,15 @@ public void Init(Shader shader, Material material, MaterialProperty[] props, Per
6262
// Get active presets
6363
foreach (var prop in props)
6464
{
65-
var activePreset = perShaderData.propStaticDatas[prop.name].presetDrawer
66-
?.GetActivePreset(prop, perShaderData.propStaticDatas[prop.name].propertyPresetAsset);
67-
if (activePreset != null)
65+
var propStaticData = perShaderData.propStaticDatas[prop.name];
66+
var activePreset = propStaticData.presetDrawer?.GetActivePreset(prop, propStaticData.propertyPresetAsset);
67+
if (activePreset != null
68+
// Filter invisible preset properties
69+
&& (propStaticData.showIfDatas.Count == 0
70+
|| ShowIfDecorator.GetShowIfResultFromMaterial(propStaticData.showIfDatas, this.material)))
71+
{
6872
activePresetDatas.Add(new PersetDynamicData(activePreset, prop));
73+
}
6974
}
7075

7176
{
@@ -85,16 +90,6 @@ public void Init(Shader shader, Material material, MaterialProperty[] props, Per
8590
var defaultProperties = MaterialEditor.GetMaterialProperties(new[] { defaultMaterial });
8691
Debug.Assert(defaultProperties.Length == props.Length);
8792

88-
// Override default value
89-
for (int i = 0; i < props.Length; i++)
90-
{
91-
Debug.Assert(props[i].name == defaultProperties[i].name);
92-
Debug.Assert(!propDynamicDatas.ContainsKey(props[i].name));
93-
94-
perShaderData.propStaticDatas[props[i].name].baseDrawers
95-
?.ForEach(baseDrawer => baseDrawer.OverrideDefaultValue(shader, props[i], defaultProperties[i], perShaderData));
96-
}
97-
9893
// Init propDynamicDatas
9994
for (int i = 0; i < props.Length; i++)
10095
{
@@ -132,7 +127,7 @@ public void Init(Shader shader, Material material, MaterialProperty[] props, Per
132127
}
133128
}
134129

135-
// Store Show Modified Props Only Cache
130+
// Store "Show Modified Props Only" Caches
136131
{
137132
if (perShaderData.displayModeData.showOnlyModifiedGroups || perShaderData.displayModeData.showOnlyModifiedProperties)
138133
{

Editor/ScriptableObject/ShaderPropertyPreset.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Jason Ma
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using UnityEngine;
56
using UnityEditor;
67
using Object = UnityEngine.Object;
@@ -145,6 +146,8 @@ public class Preset
145146
public List<PropertyValue> propertyValues = new List<PropertyValue>();
146147
public List<string> enabledKeywords = new List<string>();
147148
public List<string> disabledKeywords = new List<string>();
149+
public List<string> enabledPasses = new List<string>();
150+
public List<string> disabledPasses = new List<string>();
148151
public int renderQueue = -1;
149152

150153

@@ -156,11 +159,15 @@ public void ApplyToDefaultMaterial(Material material)
156159
material.EnableKeyword(enabledKeyword);
157160
foreach (var disabledKeyword in disabledKeywords)
158161
material.DisableKeyword(disabledKeyword);
162+
163+
Helper.SetShaderPassEnabled(new Object[] { material }, enabledPasses.Select(s => s.ToUpper()).ToArray(), true);
164+
Helper.SetShaderPassEnabled(new Object[] { material }, disabledPasses.Select(s => s.ToUpper()).ToArray(), false);
165+
159166
if (renderQueue >= 0)
160167
material.renderQueue = renderQueue;
161168
}
162169

163-
public void ApplyToEditingMaterial(UnityEngine.Object[] materials, PerMaterialData perMaterialData)
170+
public void ApplyToEditingMaterial(Object[] materials, PerMaterialData perMaterialData)
164171
{
165172
for (int i = 0; i < materials.Length; i++)
166173
{
@@ -171,12 +178,16 @@ public void ApplyToEditingMaterial(UnityEngine.Object[] materials, PerMaterialDa
171178
material.EnableKeyword(enabledKeyword);
172179
foreach (var disabledKeyword in disabledKeywords)
173180
material.DisableKeyword(disabledKeyword);
181+
174182
if (renderQueue >= 0)
175183
material.renderQueue = renderQueue;
176184
}
185+
186+
Helper.SetShaderPassEnabled(materials, enabledPasses.Select(s => s.ToUpper()).ToArray(), true);
187+
Helper.SetShaderPassEnabled(materials, disabledPasses.Select(s => s.ToUpper()).ToArray(), false);
177188
}
178189

179-
public void ApplyKeywordsToMaterials(UnityEngine.Object[] materials)
190+
public void ApplyKeywordsAndPassesToMaterials(Object[] materials)
180191
{
181192
for (int i = 0; i < materials.Length; i++)
182193
{
@@ -186,6 +197,9 @@ public void ApplyKeywordsToMaterials(UnityEngine.Object[] materials)
186197
foreach (var disabledKeyword in disabledKeywords)
187198
material.DisableKeyword(disabledKeyword);
188199
}
200+
201+
Helper.SetShaderPassEnabled(materials, enabledPasses.Select(s => s.ToUpper()).ToArray(), true);
202+
Helper.SetShaderPassEnabled(materials, disabledPasses.Select(s => s.ToUpper()).ToArray(), false);
189203
}
190204

191205
public PropertyValue GetPropertyValue(string propName)

0 commit comments

Comments
 (0)