[Add] All in one shader

This commit is contained in:
2026-02-23 22:01:07 +07:00
parent ec0aa86ac2
commit 4f942cd7c0
806 changed files with 401510 additions and 33 deletions
@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
namespace AllIn13DShader
{
public static class ShaderFeaturesFileCreator
{
private const string KEYWORD_FOG = "_FOG_ON";
private const string SHADER_FEATURE_FILE_ENTRY = @"#pragma shader_feature_local {0}";
private static string TEMPLATE_PATH = GlobalConfiguration.GetRootPluginFolderPath() + "/Editor/Effects Profiles/Templates/ShaderFeaturesTemplate.allin1template";
private static string DST_PATH = GlobalConfiguration.GetRootPluginFolderPath() + "/Shaders/ShaderLibrary/AllIn13DShader_ShaderFeatures.hlsl";
public static void CreateFile(EffectsProfile effectsProfile)
{
string txtGeneratedFile = File.ReadAllText(TEMPLATE_PATH);
string txtContent = string.Empty;
for (int i = 0; i < effectsProfile.groups.Count; i++)
{
EffectsProfileGroup group = effectsProfile.groups[i];
for (int j = 0; j < group.entries.Count; j++)
{
EffectsProfileEntry effectProfileEntry = group.entries[j];
if (!effectProfileEntry.isEnabled) { continue; }
txtContent = ProcessEffectConfig(txtContent, effectProfileEntry);
}
}
txtContent = AddFogEntry(txtContent);
txtGeneratedFile = txtGeneratedFile.Replace("<Content>", txtContent);
txtGeneratedFile = txtGeneratedFile.Replace("<EffectsProfileID>", effectsProfile.id);
txtGeneratedFile = EditorUtils.UnifyEOL(txtGeneratedFile);
File.WriteAllText(DST_PATH, txtGeneratedFile);
AssetDatabase.Refresh();
}
private static string ProcessEffectConfig(string input, EffectsProfileEntry entry)
{
string res = input;
List<EffectKeywordData> parentKeywords = entry.ParentKeywords;
List<EffectProperty> effectProperties = entry.EffectProperties;
for (int i = 0; i < parentKeywords.Count; i++)
{
string fileEntry = string.Format(SHADER_FEATURE_FILE_ENTRY, parentKeywords[i].keyword);
res += fileEntry;
res += "\n";
}
for (int i = 0; i < effectProperties.Count; i++)
{
EffectProperty effectProperty = effectProperties[i];
for (int j = 0; j < effectProperty.propertyKeywords.Length; j++)
{
if (effectProperty.IsEnumProperty())
{
res += string.Format(SHADER_FEATURE_FILE_ENTRY, effectProperty.fullKeywordNames[j]);
}
else
{
res += string.Format(SHADER_FEATURE_FILE_ENTRY, effectProperty.propertyKeywords[j]);
}
res += "\n";
}
}
return res;
}
private static string AddFogEntry(string fileContent)
{
string res = fileContent;
res += string.Format(SHADER_FEATURE_FILE_ENTRY, KEYWORD_FOG);
res += "\n";
return res;
}
}
}