[Add] All in one shader
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user