You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.9 KiB
103 lines
3.9 KiB
// Include material common properties names
|
|
|
|
using UnityEngine;
|
|
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition
|
|
{
|
|
/// <summary>
|
|
/// The UI block that represents layer options for materials.
|
|
/// </summary>
|
|
public class LayersUIBlock : MaterialUIBlock
|
|
{
|
|
internal class Styles
|
|
{
|
|
public static Vector2 layerIconSize = new Vector2(5, 5);
|
|
|
|
public static GUIContent[] layers { get; } =
|
|
{
|
|
EditorGUIUtility.TrTextContent(" Main layer", icon: Texture2D.whiteTexture),
|
|
EditorGUIUtility.TrTextContent(" Layer 1", icon: CoreEditorStyles.redTexture),
|
|
EditorGUIUtility.TrTextContent(" Layer 2", icon: CoreEditorStyles.greenTexture),
|
|
EditorGUIUtility.TrTextContent(" Layer 3", icon: CoreEditorStyles.blueTexture),
|
|
};
|
|
|
|
public static ExpandableBit[] layerExpandableBits { get; } =
|
|
{
|
|
ExpandableBit.MainLayer,
|
|
ExpandableBit.Layer1,
|
|
ExpandableBit.Layer2,
|
|
ExpandableBit.Layer3,
|
|
};
|
|
|
|
// We need this because LayeringOption values are not contiguous
|
|
public static ExpandableBit[] layeringOptionsExpandableBits { get; } =
|
|
{
|
|
ExpandableBit.LayeringOptionMain,
|
|
ExpandableBit.LayeringOption1,
|
|
ExpandableBit.LayeringOption2,
|
|
ExpandableBit.LayeringOption3,
|
|
};
|
|
}
|
|
|
|
MaterialProperty layerCount = null;
|
|
|
|
MaterialUIBlockList[] layerUIBlocks;
|
|
|
|
// Enable sub-headers for surface and detail inputs
|
|
LitSurfaceInputsUIBlock.Features litInputsFeatures = (LitSurfaceInputsUIBlock.Features.All ^ LitSurfaceInputsUIBlock.Features.LayerOptions) | LitSurfaceInputsUIBlock.Features.SubHeader;
|
|
DetailInputsUIBlock.Features detailInputsFeatures = DetailInputsUIBlock.Features.All | DetailInputsUIBlock.Features.SubHeader;
|
|
|
|
void CreateUIBlockLayers()
|
|
{
|
|
layerUIBlocks = new MaterialUIBlockList[4];
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
layerUIBlocks[i] = new MaterialUIBlockList(parent)
|
|
{
|
|
new LayeringOptionsUIBlock(Styles.layeringOptionsExpandableBits[i], i),
|
|
new LitSurfaceInputsUIBlock((ExpandableBit)((uint)ExpandableBit.MainInput + i), kMaxLayerCount, i, features: litInputsFeatures),
|
|
new DetailInputsUIBlock((ExpandableBit)((uint)ExpandableBit.MainDetail + i), kMaxLayerCount, i, features: detailInputsFeatures),
|
|
};
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads the material properties for the block.
|
|
/// </summary>
|
|
public override void LoadMaterialProperties()
|
|
{
|
|
layerCount = FindProperty(kLayerCount);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renders the properties in the block.
|
|
/// </summary>
|
|
public override void OnGUI()
|
|
{
|
|
if (layerUIBlocks == null)
|
|
CreateUIBlockLayers();
|
|
|
|
var iconSize = EditorGUIUtility.GetIconSize();
|
|
for (int layerIndex = 0; layerIndex < layerCount.floatValue; layerIndex++)
|
|
{
|
|
EditorGUIUtility.SetIconSize(Styles.layerIconSize);
|
|
using (var header = new MaterialHeaderScope(Styles.layers[layerIndex], (uint)Styles.layerExpandableBits[layerIndex], materialEditor))
|
|
{
|
|
if (header.expanded)
|
|
{
|
|
EditorGUIUtility.SetIconSize(iconSize);
|
|
DrawLayerGUI(layerIndex);
|
|
}
|
|
}
|
|
}
|
|
EditorGUIUtility.SetIconSize(iconSize);
|
|
}
|
|
|
|
void DrawLayerGUI(int layerIndex)
|
|
{
|
|
layerUIBlocks[layerIndex].OnGUI(materialEditor, properties);
|
|
}
|
|
}
|
|
}
|