Assignment for RMIT Mixed Reality in 2020
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.
 
 
 

118 lines
5.9 KiB

#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