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 IVirtualTexturingEnabledRenderPipeline vtRp = GraphicsSettings.currentRenderPipeline as IVirtualTexturingEnabledRenderPipeline; if (vtRp == null) { propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "The current render pipeline does not support Virtual Texturing, this node will do regular 2D sampling."))); } else if (vtRp.virtualTexturingEnabled == false) { propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "The current render pipeline has disabled Virtual Texturing, this node will do regular 2D sampling."))); } else { #if !ENABLE_VIRTUALTEXTURES propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "Virtual Texturing is disabled globally (possibly by the render pipeline settings), this node will do regular 2D sampling."))); #endif } propertyVisualElement = propertySheet; return(propertySheet); }
public SampleVirtualTextureNodeSettingsView(SampleVirtualTextureNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Lod Mode")), (row) => { row.Add(new UIElements.EnumField(m_Node.lodCalculation), (field) => { field.value = m_Node.lodCalculation; field.RegisterValueChangedCallback(evt => { if (m_Node.lodCalculation == (LodCalculation)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Lod Mode Change"); m_Node.lodCalculation = (LodCalculation)evt.newValue; }); }); }); ps.Add(new PropertyRow(new Label("Quality")), (row) => { row.Add(new UIElements.EnumField(m_Node.sampleQuality), (field) => { field.value = m_Node.sampleQuality; field.RegisterValueChangedCallback(evt => { if (m_Node.sampleQuality == (QualityMode)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Quality Change"); m_Node.sampleQuality = (QualityMode)evt.newValue; }); }); }); ps.Add(new PropertyRow(new Label("No Feedback")), (row) => { row.Add(new UnityEngine.UIElements.Toggle(), (field) => { field.value = m_Node.noFeedback; field.RegisterValueChangedCallback(evt => { if (m_Node.noFeedback == evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Feedback Settings Change"); m_Node.noFeedback = evt.newValue; }); }); }); var vtProperty = m_Node.GetSlotProperty(VirtualTextureInputId) as VirtualTextureShaderProperty; if (vtProperty == null) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("Please connect a VirtualTexture property to configure texture sampling type."))); } else { int numLayers = vtProperty.value.layers.Count; for (int i = 0; i < numLayers; i++) { int currentIndex = i; // to make lambda by-ref capturing happy ps.Add(new PropertyRow(new Label("Layer " + (i + 1) + " Type")), (row) => { row.Add(new UIElements.EnumField(m_Node.m_TextureTypes[i]), (field) => { field.value = m_Node.m_TextureTypes[i]; field.RegisterValueChangedCallback(evt => { if (m_Node.m_TextureTypes[currentIndex] == (TextureType)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Texture Type Change"); m_Node.m_TextureTypes[currentIndex] = (TextureType)evt.newValue; m_Node.Dirty(ModificationScope.Graph); }); }); }); } } ps.Add(new PropertyRow(new Label("Normal Space")), (row) => { row.Add(new UIElements.EnumField(m_Node.normalMapSpace), (field) => { field.value = m_Node.normalMapSpace; field.RegisterValueChangedCallback(evt => { if (m_Node.normalMapSpace == (NormalMapSpace)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Normal Map space Change"); m_Node.normalMapSpace = (NormalMapSpace)evt.newValue; }); }); }); // display warning if the current master node doesn't support virtual texturing if (!m_Node.owner.isSubGraph) { bool supportedByMasterNode = m_Node.owner.GetNodes <IMasterNode>().FirstOrDefault()?.supportsVirtualTexturing ?? false; if (!supportedByMasterNode) { ps.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 IVirtualTexturingEnabledRenderPipeline vtRp = GraphicsSettings.currentRenderPipeline as IVirtualTexturingEnabledRenderPipeline; if (vtRp == null) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("The current render pipeline does not support Virtual Texturing, this node will do regular 2D sampling."))); } else if (vtRp.virtualTexturingEnabled == false) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("The current render pipeline has disabled Virtual Texturing, this node will do regular 2D sampling."))); } else { #if !ENABLE_VIRTUALTEXTURES ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("Virtual Texturing is disabled globally (possibly by the render pipeline settings), this node will do regular 2D sampling."))); #endif } Add(ps); }