[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,100 @@
using UnityEngine;
namespace AllIn13DShader
{
public abstract class AbstractMaterialInfo
{
public string[] enabledKeywords;
public Material mat;
public AbstractMaterialInfo(Material mat)
{
this.enabledKeywords = new string[0];
this.mat = mat;
}
public abstract void RefreshKeywords();
public abstract void EnableKeyword(string keyword);
public abstract void DisableKeyword(string keyword);
public abstract bool IsShaderVariant();
public bool IsKeywordEnabled(string keyword)
{
bool res = false;
for (int i = 0; i < enabledKeywords.Length; i++)
{
if (enabledKeywords[i] == keyword)
{
res = true;
break;
}
}
return res;
}
public int GetEnabledKeywordIndexByEffect(AllIn13DEffectConfig effectConfig)
{
int res = -1;
for (int i = 0; i < enabledKeywords.Length; i++)
{
res = effectConfig.GetKeywordIndex(enabledKeywords[i]);
if(res >= 0)
{
break;
}
}
return res;
}
public int GetEnabledKeywordIndexByEffectProperty(EffectProperty effectProperty)
{
int res = -1;
if(effectProperty.IsEnumProperty() || effectProperty.IsToggleProperty())
{
for (int i = 0; i < enabledKeywords.Length; i++)
{
for (int j = 0; j < effectProperty.fullKeywordNames.Length; j++)
{
if (effectProperty.fullKeywordNames[j] == enabledKeywords[i])
{
res = j;
break;
}
}
if(res >= 0)
{
break;
}
}
}
return res;
}
public static AbstractMaterialInfo CreateInstance(Material mat)
{
EffectsProfileCollection effectsProfileCollection = GlobalConfiguration.instance.effectsProfileCollection;
EffectsProfile effectsProfile = effectsProfileCollection.FindEffectProfileByShader(mat.shader);
AbstractMaterialInfo res = null;
if (effectsProfile == null)
{
res = new CommonMaterialInfo(mat);
}
else
{
res = new EffectProfileMaterialInfo(effectsProfile, mat);
}
return res;
}
}
}