52 lines
1.9 KiB
C#
52 lines
1.9 KiB
C#
|
#if UNITY_EDITOR
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEditor.Build;
|
|||
|
using UnityEditor.Rendering;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.Rendering;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
public class ShaderCompatibilityPreprocessor : IPreprocessShaders
|
|||
|
{
|
|||
|
public int callbackOrder => 1024;
|
|||
|
|
|||
|
private static ShaderKeyword _singlePassKeyword = new ShaderKeyword("UNITY_SINGLE_PASS_STEREO");
|
|||
|
private static ShaderKeyword _instancedKeyword = new ShaderKeyword("STEREO_INSTANCING_ON");
|
|||
|
|
|||
|
public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> data)
|
|||
|
{
|
|||
|
if(EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64)
|
|||
|
{
|
|||
|
List<ShaderCompilerData> reworkedData = new List<ShaderCompilerData>();
|
|||
|
foreach(ShaderCompilerData scd in data)
|
|||
|
{
|
|||
|
ShaderCompilerData reworkedScd = scd;
|
|||
|
ShaderKeywordSet shaderKeywordSet = scd.shaderKeywordSet;
|
|||
|
if(shaderKeywordSet.IsEnabled(_singlePassKeyword))
|
|||
|
{
|
|||
|
shaderKeywordSet.Disable(_singlePassKeyword);
|
|||
|
shaderKeywordSet.Enable(_instancedKeyword);
|
|||
|
reworkedScd.shaderKeywordSet = shaderKeywordSet;
|
|||
|
reworkedData.Add(reworkedScd);
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if(shaderKeywordSet.IsEnabled(_instancedKeyword))
|
|||
|
{
|
|||
|
shaderKeywordSet.Enable(_singlePassKeyword);
|
|||
|
shaderKeywordSet.Disable(_instancedKeyword);
|
|||
|
reworkedScd.shaderKeywordSet = shaderKeywordSet;
|
|||
|
reworkedData.Add(reworkedScd);
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
foreach(ShaderCompilerData entry in reworkedData)
|
|||
|
{
|
|||
|
data.Add(entry);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|