Skip to content

Commit e502d10

Browse files
committed
Fixed issue with moduleInspectorList
Added custom action hook for post generation edit
1 parent e117f3c commit e502d10

File tree

2 files changed

+52
-9
lines changed

2 files changed

+52
-9
lines changed

Editor/ShaderGenerator.cs

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.IO;
34
using System.Linq;
45
using System.Text;
@@ -17,6 +18,18 @@ public static class ShaderGenerator
1718
/// <param name="shader">Modular shader to use</param>
1819
/// <param name="hideVariants">Hide variants from the shader selector on the material, showing only the shader with all variants disabled from the menu</param>
1920
public static void GenerateShader(string path, ModularShader shader, bool hideVariants = false)
21+
{
22+
GenerateShader(path, shader, null,hideVariants);
23+
}
24+
25+
/// <summary>
26+
/// Generates a shader with all shader variants, you can give a custom PostGeneration action to handle the shader result for some custom modifications (build keywords are still available at this stage)
27+
/// </summary>
28+
/// <param name="path">path for the shader files</param>
29+
/// <param name="shader">Modular shader to use</param>
30+
/// <param name="postGeneration">Actions to performs post generation and before cleanup </param>
31+
/// <param name="hideVariants">Hide variants from the shader selector on the material, showing only the shader with all variants disabled from the menu</param>
32+
public static void GenerateShader(string path, ModularShader shader, Action<StringBuilder, ShaderContext> postGeneration, bool hideVariants = true)
2033
{
2134
var modules = FindAllModules(shader);
2235

@@ -42,6 +55,7 @@ public static void GenerateShader(string path, ModularShader shader, bool hideVa
4255
contexts.Add(new ShaderContext
4356
{
4457
Shader = shader,
58+
PostGeneration = postGeneration,
4559
ActiveEnablers = variant,
4660
FreshAssets = freshAssets,
4761
FilePath = path,
@@ -68,14 +82,26 @@ public static void GenerateShader(string path, ModularShader shader, bool hideVa
6882
foreach (var context in contexts)
6983
shader.LastGeneratedShaders.Add(AssetDatabase.LoadAssetAtPath<Shader>($"{path}/" + context.VariantFileName));
7084
}
71-
85+
7286
/// <summary>
7387
/// Generates a shader with all shader variants
7488
/// </summary>
7589
/// <param name="path">path for the shader files</param>
7690
/// <param name="shader">Modular shader to use</param>
7791
/// <param name="materials">List of materials given</param>
7892
public static void GenerateMinimalShader(string path, ModularShader shader, IEnumerable<Material> materials)
93+
{
94+
GenerateMinimalShader(path, shader, materials, null);
95+
}
96+
97+
/// <summary>
98+
/// Generates a shader with all shader variants
99+
/// </summary>
100+
/// <param name="path">path for the shader files</param>
101+
/// <param name="shader">Modular shader to use</param>
102+
/// <param name="materials">List of materials given</param>
103+
/// <param name="postGeneration">Actions to performs post generation and before cleanup </param>
104+
public static void GenerateMinimalShader(string path, ModularShader shader, IEnumerable<Material> materials, Action<StringBuilder, ShaderContext> postGeneration)
79105
{
80106
var modules = FindAllModules(shader);
81107
var possibleVariants = GetMinimalVariants(modules, materials);
@@ -87,6 +113,7 @@ public static void GenerateMinimalShader(string path, ModularShader shader, IEnu
87113
contexts.Add(new ShaderContext
88114
{
89115
Shader = shader,
116+
PostGeneration = postGeneration,
90117
ActiveEnablers = variant,
91118
FilePath = path,
92119
OptimizedShader = true,
@@ -97,7 +124,7 @@ public static void GenerateMinimalShader(string path, ModularShader shader, IEnu
97124

98125
contexts.GenerateMinimalShaders();
99126
}
100-
127+
101128
/// <summary>
102129
/// Enqueues shaders to generate
103130
/// </summary>
@@ -106,6 +133,19 @@ public static void GenerateMinimalShader(string path, ModularShader shader, IEnu
106133
/// <param name="materials">List of materials given</param>
107134
/// <returns>A list of the shaderContexts</returns>
108135
public static List<ShaderContext> EnqueueShadersToGenerate(string path, ModularShader shader, IEnumerable<Material> materials)
136+
{
137+
return EnqueueShadersToGenerate(path, shader, materials, null);
138+
}
139+
140+
/// <summary>
141+
/// Enqueues shaders to generate
142+
/// </summary>
143+
/// <param name="path">path for the shader files</param>
144+
/// <param name="shader">Modular shader to use</param>
145+
/// <param name="materials">List of materials given</param>
146+
/// <returns>A list of the shaderContexts</returns>
147+
/// <param name="postGeneration">Actions to performs post generation and before cleanup </param>
148+
public static List<ShaderContext> EnqueueShadersToGenerate(string path, ModularShader shader, IEnumerable<Material> materials, Action<StringBuilder, ShaderContext> postGeneration)
109149
{
110150
var modules = FindAllModules(shader);
111151
var possibleVariants = GetMinimalVariants(modules, materials);
@@ -117,6 +157,7 @@ public static List<ShaderContext> EnqueueShadersToGenerate(string path, ModularS
117157
contexts.Add(new ShaderContext
118158
{
119159
Shader = shader,
160+
PostGeneration = postGeneration,
120161
ActiveEnablers = variant,
121162
FilePath = path,
122163
OptimizedShader = true,
@@ -297,6 +338,7 @@ public class ShaderContext
297338
public ModularShader Shader;
298339
public Dictionary<string, int> ActiveEnablers;
299340
public Dictionary<TemplateAsset, TemplateAsset> FreshAssets;
341+
public Action<StringBuilder, ShaderContext> PostGeneration;
300342
private List<EnableProperty> _liveUpdateEnablers;
301343
public string FilePath;
302344
public string VariantFileName;
@@ -370,6 +412,7 @@ public void GenerateShader()
370412
ShaderFile.AppendLine($"CustomEditor \"{Shader.CustomEditor}\"");
371413
ShaderFile.AppendLine("}");
372414

415+
PostGeneration?.Invoke(ShaderFile, this);
373416

374417
MatchCollection m = Regex.Matches(ShaderFile.ToString(), @"#K#.*$", RegexOptions.Multiline);
375418
for (int i = m.Count - 1; i >= 0; i--)
@@ -545,15 +588,15 @@ private void WriteFunctionsToKeywords()
545588
if (!keywordedCode.ContainsKey(keyword))
546589
keywordedCode.Add(keyword, new StringBuilder());
547590

548-
keywordedCode[keyword].AppendLine(freshAsset.Template);
591+
if (freshAsset != null) keywordedCode[keyword].AppendLine(freshAsset.Template);
549592
}
550593
}
551594
else
552595
{
553596
if (!keywordedCode.ContainsKey(MSSConstants.DEFAULT_CODE_KEYWORD))
554597
keywordedCode.Add(MSSConstants.DEFAULT_CODE_KEYWORD, new StringBuilder());
555598

556-
keywordedCode[MSSConstants.DEFAULT_CODE_KEYWORD].AppendLine(freshAsset.Template);
599+
if (freshAsset != null) keywordedCode[MSSConstants.DEFAULT_CODE_KEYWORD].AppendLine(freshAsset.Template);
557600
}
558601
}
559602

Editor/Windows/ModuleInspectorList.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ public void UpdateList()
157157

158158
for (int j = 0; j < _array.arraySize; j++)
159159
{
160-
var field = ((ObjectField)x.target).parent.parent.parent.ElementAt(j).ElementAt(0);
161-
Label label = field.ElementAt(1) as Label;
160+
var element = ((ObjectField)x.target).parent.parent.parent.ElementAt(j*2+1).ElementAt(1);
161+
Label label = element.ElementAt(1) as Label;
162162
if (index == j)
163-
CheckModuleValidity(newValue, label, field);
163+
CheckModuleValidity(newValue, label, element);
164164
else
165-
CheckModuleValidity((ShaderModule)_array.GetArrayElementAtIndex(j).objectReferenceValue, label, field);
165+
CheckModuleValidity((ShaderModule)_array.GetArrayElementAtIndex(j).objectReferenceValue, label, element);
166166
}
167167
});
168168

0 commit comments

Comments
 (0)