#if (UNITY_5_4_OR_NEWER)
|
|
namespace VRTK
|
|
{
|
|
using System;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
[CustomEditor(typeof(VRTK_AdaptiveQuality))]
|
|
public class VRTK_AdaptiveQualityEditor : Editor
|
|
{
|
|
private const string DontDisableHelpBoxText =
|
|
"This script supports command line arguments to configure the adaptive quality scaling."
|
|
+ " If this script is disabled it won't respond to the arguments.\n\n"
|
|
+ "Leave this script enabled and use the `scaleRenderViewport` property if you want to disable"
|
|
+ " the adaptive quality scaling for now, but want to leave it possible for your built"
|
|
+ " binary to respond to the arguments.";
|
|
private const string MaximumRenderScaleTooBigHelpBoxText =
|
|
"The maximum render scale is too big. It's constrained by the maximum render target dimension below.";
|
|
private const string ScaleRenderTargetResolutionCostlyHelpBoxText =
|
|
"Changing the render target resolution is very costly and should be reduced to a minimum, therefore"
|
|
+ " this setting is turned off by default. Make sure you understand the performance implication this"
|
|
+ " setting has when leaving it enabled.";
|
|
private const string NoRenderScaleLevelsYetHelpBoxText =
|
|
"Overriding render viewport scale levels is disabled because there are no render viewport scale levels calculated yet."
|
|
+ " They will be calculated at runtime.";
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
serializedObject.Update();
|
|
|
|
VRTK_AdaptiveQuality adaptiveQuality = (VRTK_AdaptiveQuality)target;
|
|
|
|
EditorGUILayout.HelpBox(DontDisableHelpBoxText, adaptiveQuality.enabled ? MessageType.Warning : MessageType.Error);
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("drawDebugVisualization"));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("allowKeyboardShortcuts"));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("allowCommandLineArguments"));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("msaaLevel"));
|
|
|
|
EditorGUILayout.Space();
|
|
serializedObject.FindProperty("scaleRenderViewport").boolValue =
|
|
EditorGUILayout.BeginToggleGroup(VRTK_EditorUtilities.BuildGUIContent<VRTK_AdaptiveQuality>("scaleRenderViewport"),
|
|
adaptiveQuality.scaleRenderViewport);
|
|
{
|
|
Limits2D renderScaleLimits = adaptiveQuality.renderScaleLimits;
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("renderScaleLimits"));
|
|
|
|
if (renderScaleLimits.maximum > adaptiveQuality.BiggestAllowedMaximumRenderScale())
|
|
{
|
|
EditorGUILayout.HelpBox(MaximumRenderScaleTooBigHelpBoxText, MessageType.Error);
|
|
}
|
|
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("maximumRenderTargetDimension"));
|
|
EditorGUILayout.PropertyField(serializedObject.FindProperty("renderScaleFillRateStepSizeInPercent"));
|
|
|
|
serializedObject.FindProperty("scaleRenderTargetResolution").boolValue =
|
|
EditorGUILayout.Toggle(VRTK_EditorUtilities.BuildGUIContent<VRTK_AdaptiveQuality>("scaleRenderTargetResolution"),
|
|
adaptiveQuality.scaleRenderTargetResolution);
|
|
if (adaptiveQuality.scaleRenderTargetResolution)
|
|
{
|
|
EditorGUILayout.HelpBox(ScaleRenderTargetResolutionCostlyHelpBoxText, MessageType.Warning);
|
|
}
|
|
|
|
int maxRenderScaleLevel = Mathf.Max(adaptiveQuality.renderScales.Count - 1, 0);
|
|
bool disabled = maxRenderScaleLevel == 0 || !Application.isPlaying;
|
|
|
|
EditorGUI.BeginDisabledGroup(disabled);
|
|
{
|
|
VRTK_EditorUtilities.AddHeader<VRTK_AdaptiveQuality>("overrideRenderViewportScale");
|
|
|
|
if (disabled)
|
|
{
|
|
EditorGUI.EndDisabledGroup();
|
|
{
|
|
EditorGUILayout.HelpBox(NoRenderScaleLevelsYetHelpBoxText, MessageType.Info);
|
|
}
|
|
EditorGUI.BeginDisabledGroup(true);
|
|
}
|
|
|
|
adaptiveQuality.overrideRenderViewportScale = EditorGUILayout.Toggle(
|
|
VRTK_EditorUtilities.BuildGUIContent<VRTK_AdaptiveQuality>("overrideRenderViewportScale"),
|
|
adaptiveQuality.overrideRenderViewportScale);
|
|
|
|
EditorGUI.BeginDisabledGroup(!adaptiveQuality.overrideRenderViewportScale);
|
|
{
|
|
adaptiveQuality.overrideRenderViewportScaleLevel =
|
|
EditorGUILayout.IntSlider(
|
|
VRTK_EditorUtilities.BuildGUIContent<VRTK_AdaptiveQuality>("overrideRenderViewportScaleLevel"),
|
|
adaptiveQuality.overrideRenderViewportScaleLevel,
|
|
0,
|
|
maxRenderScaleLevel);
|
|
}
|
|
EditorGUI.EndDisabledGroup();
|
|
}
|
|
EditorGUI.EndDisabledGroup();
|
|
}
|
|
EditorGUILayout.EndToggleGroup();
|
|
|
|
if (Application.isPlaying)
|
|
{
|
|
string summary = adaptiveQuality.ToString();
|
|
summary = summary.Substring(summary.IndexOf("\n", StringComparison.Ordinal) + 1);
|
|
|
|
VRTK_EditorUtilities.AddHeader("Current State");
|
|
EditorGUILayout.HelpBox(summary, MessageType.None);
|
|
|
|
if (GUILayout.RepeatButton("Refresh"))
|
|
{
|
|
Repaint();
|
|
}
|
|
}
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
}
|
|
#endif
|