module-project-validator/Editor/Validators/Assets/AssetValidatorMaterialShader.cs
Anders Ejlersen dd55a87740 - Validator: Added asset validators with material texture and shader validation
- 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
2026-05-24 18:06:56 +02:00

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;
}
}
}