using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
// Include material common properties names
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
namespace UnityEditor.Rendering.HighDefinition
{
///
/// Common GUI for Lit ShaderGraphs.
///
public class LightingShaderGraphGUI : HDShaderGUI
{
// For surface option shader graph we only want all unlit features but alpha clip and back then front rendering
const SurfaceOptionUIBlock.Features surfaceOptionFeatures = SurfaceOptionUIBlock.Features.Lit
| SurfaceOptionUIBlock.Features.ShowDepthOffsetOnly;
MaterialUIBlockList m_UIBlocks = new MaterialUIBlockList
{
new SurfaceOptionUIBlock(MaterialUIBlock.ExpandableBit.Base, features: surfaceOptionFeatures),
new TessellationOptionsUIBlock(MaterialUIBlock.ExpandableBit.Tessellation),
new ShaderGraphUIBlock(MaterialUIBlock.ExpandableBit.ShaderGraph),
new AdvancedOptionsUIBlock(MaterialUIBlock.ExpandableBit.Advance, ~AdvancedOptionsUIBlock.Features.SpecularOcclusion)
};
/// List of UI Blocks used to render the material inspector.
protected MaterialUIBlockList uiBlocks => m_UIBlocks;
///
/// Implement your custom GUI in this function. To display a UI similar to HDRP shaders, use a MaterialUIBlockList.
///
/// The current material editor.
/// The list of properties the material has.
protected override void OnMaterialGUI(MaterialEditor materialEditor, MaterialProperty[] props)
{
m_UIBlocks.OnGUI(materialEditor, props);
}
///
/// Sets up the keywords and passes for the current selected material.
///
/// The selected material.
public override void ValidateMaterial(Material material) => ShaderGraphAPI.ValidateLightingMaterial(material);
}
}