- Validator: Added option to enable/disable certain validators - Project Settings: Fixed issue, where changes weren't always saved - Unity: Removed deprecated warnings in Unity 6.4
43 lines
No EOL
1.6 KiB
C#
43 lines
No EOL
1.6 KiB
C#
using System.Collections.Generic;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace Module.ProjectValidator.Editor
|
|
{
|
|
internal sealed class AssetValidatorMaterialShader : IAssetValidator<Material>
|
|
{
|
|
public void Validate(Material obj, List<ValidatorResult> results)
|
|
{
|
|
if (obj.shader == null)
|
|
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, "Shader is Null"));
|
|
else if (!IsCompatible(obj.shader))
|
|
results.Add(ValidatorResult.Create(EValidatorSeverity.Warning, $"Shader '{obj.shader.name}' is not compatible with render pipeline"));
|
|
else if (!obj.shader.isSupported)
|
|
results.Add(ValidatorResult.Create(EValidatorSeverity.Warning, $"Shader '{obj.shader.name}' is not supported"));
|
|
else if (ShaderUtil.ShaderHasError(obj.shader))
|
|
results.Add(ValidatorResult.Create(EValidatorSeverity.Error, $"Shader '{obj.shader.name}' has compile errors"));
|
|
}
|
|
|
|
private static bool IsCompatible(Shader shader)
|
|
{
|
|
var pipeline = GraphicsSettings.currentRenderPipeline;
|
|
|
|
if (pipeline == null)
|
|
return true;
|
|
|
|
var tagSearch = new ShaderTagId("RenderPipeline");
|
|
var tagPipeline = new ShaderTagId(pipeline.renderPipelineShaderTag);
|
|
|
|
for (var i = 0; i < shader.passCount; i++)
|
|
{
|
|
var tagPass = shader.FindPassTagValue(i, tagSearch);
|
|
|
|
if (tagPass == tagPipeline)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
} |