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.
142 lines
5.8 KiB
142 lines
5.8 KiB
using System;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using UnityEditor;
|
|
using UnityEditor.Graphing;
|
|
using UnityEditor.Graphing.Util;
|
|
using UnityEditor.ShaderGraph;
|
|
using UnityEditor.ShaderGraph.Drawing;
|
|
using UnityEditor.ShaderGraph.Drawing.Inspector.PropertyDrawers;
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace UnityEditor.ShaderGraph.Drawing.Inspector.PropertyDrawers
|
|
{
|
|
[SGPropertyDrawer(typeof(SampleVirtualTextureNode))]
|
|
public class SampleVirtualTextureNodePropertyDrawer : IPropertyDrawer
|
|
{
|
|
VisualElement CreateGUI(SampleVirtualTextureNode node, InspectableAttribute attribute,
|
|
out VisualElement propertyVisualElement)
|
|
{
|
|
PropertySheet propertySheet = new PropertySheet();
|
|
|
|
var enumPropertyDrawer = new EnumPropertyDrawer();
|
|
propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) =>
|
|
{
|
|
if (node.addressMode == (SampleVirtualTextureNode.AddressMode)newValue)
|
|
return;
|
|
|
|
node.owner.owner.RegisterCompleteObjectUndo("Address Mode Change");
|
|
node.addressMode = (SampleVirtualTextureNode.AddressMode)newValue;
|
|
},
|
|
node.addressMode,
|
|
"Address Mode",
|
|
SampleVirtualTextureNode.AddressMode.VtAddressMode_Wrap,
|
|
out var addressModeVisualElement));
|
|
|
|
propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) =>
|
|
{
|
|
if (node.lodCalculation == (SampleVirtualTextureNode.LodCalculation)newValue)
|
|
return;
|
|
|
|
node.owner.owner.RegisterCompleteObjectUndo("Lod Mode Change");
|
|
node.lodCalculation = (SampleVirtualTextureNode.LodCalculation)newValue;
|
|
},
|
|
node.lodCalculation,
|
|
"Lod Mode",
|
|
SampleVirtualTextureNode.LodCalculation.VtLevel_Automatic,
|
|
out var lodCalculationVisualElement));
|
|
|
|
propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) =>
|
|
{
|
|
if (node.sampleQuality == (SampleVirtualTextureNode.QualityMode)newValue)
|
|
return;
|
|
|
|
node.owner.owner.RegisterCompleteObjectUndo("Quality Change");
|
|
node.sampleQuality = (SampleVirtualTextureNode.QualityMode)newValue;
|
|
},
|
|
node.sampleQuality,
|
|
"Quality",
|
|
SampleVirtualTextureNode.QualityMode.VtSampleQuality_High,
|
|
out var qualityVisualElement));
|
|
|
|
var boolPropertyDrawer = new BoolPropertyDrawer();
|
|
propertySheet.Add(boolPropertyDrawer.CreateGUI((newValue) =>
|
|
{
|
|
if (node.noFeedback == !newValue)
|
|
return;
|
|
|
|
node.owner.owner.RegisterCompleteObjectUndo("Feedback Settings Change");
|
|
node.noFeedback = !newValue;
|
|
},
|
|
!node.noFeedback,
|
|
"Automatic Streaming",
|
|
out var propertyToggle));
|
|
|
|
propertySheet.Add(boolPropertyDrawer.CreateGUI((newValue) =>
|
|
{
|
|
if (node.enableGlobalMipBias == newValue)
|
|
return;
|
|
|
|
node.owner.owner.RegisterCompleteObjectUndo("Enable Global Mip Bias VT Change");
|
|
node.enableGlobalMipBias = newValue;
|
|
},
|
|
node.enableGlobalMipBias,
|
|
"Use Global Mip Bias",
|
|
out var enableGlobalMipBias));
|
|
|
|
|
|
// display warning if the current master node doesn't support virtual texturing
|
|
// TODO: Add warning when no active subTarget supports VT
|
|
// if (!node.owner.isSubGraph)
|
|
// {
|
|
// bool supportedByMasterNode =
|
|
// node.owner.GetNodes<IMasterNode>().FirstOrDefault()?.supportsVirtualTexturing ?? false;
|
|
// if (!supportedByMasterNode)
|
|
// propertySheet.Add(new HelpBoxRow(MessageType.Warning),
|
|
// (row) => row.Add(new Label(
|
|
// "The current master node does not support Virtual Texturing, this node will do regular 2D sampling.")));
|
|
// }
|
|
|
|
// display warning if the current render pipeline doesn't support virtual texturing
|
|
string labelText;
|
|
IVirtualTexturingEnabledRenderPipeline vtRp =
|
|
GraphicsSettings.currentRenderPipeline as IVirtualTexturingEnabledRenderPipeline;
|
|
if (vtRp == null)
|
|
labelText = "The current render pipeline does not support Virtual Texturing, this node will do regular 2D sampling.";
|
|
else if (vtRp.virtualTexturingEnabled == false)
|
|
labelText = "The current render pipeline has disabled Virtual Texturing, this node will do regular 2D sampling.";
|
|
else
|
|
{
|
|
#if !ENABLE_VIRTUALTEXTURES
|
|
labelText = "Virtual Texturing is disabled globally (possibly by the render pipeline settings), this node will do regular 2D sampling.";
|
|
#else
|
|
labelText = "";
|
|
#endif
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(labelText))
|
|
{
|
|
propertySheet.Add(new HelpBoxRow(labelText, MessageType.Warning));
|
|
}
|
|
|
|
propertyVisualElement = propertySheet;
|
|
return propertySheet;
|
|
}
|
|
|
|
public Action inspectorUpdateDelegate { get; set; }
|
|
|
|
public VisualElement DrawProperty(PropertyInfo propertyInfo, object actualObject,
|
|
InspectableAttribute attribute)
|
|
{
|
|
return this.CreateGUI(
|
|
(SampleVirtualTextureNode)actualObject,
|
|
attribute,
|
|
out var propertyVisualElement);
|
|
}
|
|
|
|
void IPropertyDrawer.DisposePropertyDrawer() { }
|
|
}
|
|
}
|