123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701 |
- #define AVPROVIDEO_SUPPORT_LIVEEDITMODE
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo.Editor
- {
- /// <summary>
- /// Editor for the MediaPlayer component
- /// </summary>
- [CanEditMultipleObjects]
- [CustomEditor(typeof(MediaPlayer))]
- public partial class MediaPlayerEditor : UnityEditor.Editor
- {
- internal const string SettingsPrefix = "AVProVideo-MediaPlayerEditor-";
- private SerializedProperty _propAutoOpen;
- private SerializedProperty _propAutoStart;
- private SerializedProperty _propLoop;
- private SerializedProperty _propRate;
- private SerializedProperty _propPersistent;
- private SerializedProperty _propFilter;
- private SerializedProperty _propWrap;
- private SerializedProperty _propAniso;
- #if AVPRO_FEATURE_VIDEORESOLVE
- private SerializedProperty _propUseVideoResolve;
- private SerializedProperty _propVideoResolve;
- private SerializedProperty _propVideoResolveOptions;
- #endif
- private SerializedProperty _propResample;
- private SerializedProperty _propResampleMode;
- private SerializedProperty _propResampleBufferSize;
- private SerializedProperty _propVideoMapping;
- private SerializedProperty _propForceFileFormat;
- private SerializedProperty _propFallbackMediaHints;
- private static Texture2D _icon;
- private static bool _isTrialVersion = false;
- private static GUIStyle _styleSectionBox = null;
- private AnimCollapseSection _sectionMediaInfo;
- private AnimCollapseSection _sectionDebug;
- private AnimCollapseSection _sectionSettings;
- private AnimCollapseSection _sectionAboutHelp;
- private List<AnimCollapseSection> _settingSections = new List<AnimCollapseSection>(16);
- private List<AnimCollapseSection> _platformSections = new List<AnimCollapseSection>(8);
- [MenuItem("GameObject/Video/AVPro Video - Media Player", false, 100)]
- public static void CreateMediaPlayerEditor()
- {
- GameObject go = new GameObject("MediaPlayer");
- go.AddComponent<MediaPlayer>();
- Selection.activeGameObject = go;
- }
- [MenuItem("GameObject/Video/AVPro Video - Media Player with Unity Audio", false, 101)]
- public static void CreateMediaPlayerWithUnityAudioEditor()
- {
- GameObject go = new GameObject("MediaPlayer");
- go.AddComponent<MediaPlayer>();
- go.AddComponent<AudioSource>();
- AudioOutput ao = go.AddComponent<AudioOutput>();
- // Move the AudioOutput component above the AudioSource so that it acts as the audio generator
- UnityEditorInternal.ComponentUtility.MoveComponentUp(ao);
- Selection.activeGameObject = go;
- }
- private static void LoadSettings()
- {
- _platformIndex = EditorPrefs.GetInt(SettingsPrefix + "PlatformIndex", -1);
- _showAlpha = EditorPrefs.GetBool(SettingsPrefix + "ShowAlphaChannel", false);
- _showPreview = EditorPrefs.GetBool(SettingsPrefix + "ShowPreview", true);
- _allowDeveloperMode = EditorPrefs.GetBool(SettingsPrefix + "AllowDeveloperMode", false);
- _HTTPHeadersToggle = EditorPrefs.GetBool(SettingsPrefix + "HTTPHeadersToggle", false);
- RecentItems.Load();
- }
- private void SaveSettings()
- {
- _sectionMediaInfo.Save();
- _sectionDebug.Save();
- _sectionSettings.Save();
- _sectionAboutHelp.Save();
- foreach (AnimCollapseSection section in _settingSections)
- {
- section.Save();
- }
- foreach (AnimCollapseSection section in _platformSections)
- {
- section.Save();
- }
- _sectionDevModeState.Save();
- _sectionDevModeTexture.Save();
- _sectionDevModePlaybackQuality.Save();
- _sectionDevModeHapNotchLCDecoder.Save();
- _sectionDevModeBufferedFrames.Save();
- EditorPrefs.SetInt(SettingsPrefix + "PlatformIndex", _platformIndex);
- EditorPrefs.SetBool(SettingsPrefix + "ShowAlphaChannel", _showAlpha);
- EditorPrefs.SetBool(SettingsPrefix + "ShowPreview", _showPreview);
- EditorPrefs.SetBool(SettingsPrefix + "AllowDeveloperMode", _allowDeveloperMode);
- EditorPrefs.SetBool(SettingsPrefix + "HTTPHeadersToggle", _HTTPHeadersToggle);
- RecentItems.Save();
- }
- //[MenuItem("RenderHeads/AVPro Video/Reset Settings", false, 101)]
- internal static void DeleteSettings()
- {
- EditorPrefs.DeleteKey(SettingsPrefix + "PlatformIndex");
- EditorPrefs.DeleteKey(SettingsPrefix + "ShowAlphaChannel");
- EditorPrefs.DeleteKey(SettingsPrefix + "AllowDeveloperMode");
- EditorPrefs.DeleteKey(SettingsPrefix + "HTTPHeadersToggle");
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Media"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Debug"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Settings"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("About / Help"));
-
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Source"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Main"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Audio"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Visual"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Network"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Media"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Subtitles"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Events"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Platform Specific"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName("Global"));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.Windows).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.MacOSX).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.Android).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.iOS).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.tvOS).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.WindowsUWP).text));
- EditorPrefs.DeleteKey(AnimCollapseSection.GetPrefName(GetPlatformButtonContent(Platform.WebGL).text));
- }
- private void CreateSections()
- {
- const float colorSaturation = 0.66f;
- Color mediaInfoColor = Color.HSVToRGB(0.55f, colorSaturation, 1f);
- Color sourceColor = Color.HSVToRGB(0.4f, colorSaturation, 1f);
- Color platformSpecificColor = Color.HSVToRGB(0.85f, colorSaturation, 1f);
- Color platformColor = platformSpecificColor;
- if (EditorGUIUtility.isProSkin)
- {
- platformColor *= 0.66f;
- }
- _sectionMediaInfo = new AnimCollapseSection("Media Info", false, false, OnInspectorGUI_MediaInfo, this, mediaInfoColor);
- _sectionDebug = new AnimCollapseSection("Debug", false, true, OnInspectorGUI_Debug, this, Color.white);
- _sectionSettings = new AnimCollapseSection("Settings", false, true, OnInspectorGUI_Settings, this, Color.white);
- _sectionAboutHelp = new AnimCollapseSection("About / Help", false, false, OnInspectorGUI_About, this, Color.white);
- _settingSections.Clear();
- _settingSections.Add(new AnimCollapseSection("Source", false, true, OnInspectorGUI_Source, this, sourceColor));
- _settingSections.Add(new AnimCollapseSection("Main", false, false, OnInspectorGUI_Main, this, Color.white));
- _settingSections.Add(new AnimCollapseSection("Audio", false, false, OnInspectorGUI_Audio, this, Color.white));
- _settingSections.Add(new AnimCollapseSection("Visual", true, false, OnInspectorGUI_Visual, this, Color.white));
- //_settingSections.Add(new AnimCollapseSection("Network", true, false, OnInspectorGUI_Network, this, Color.white));
- _settingSections.Add(new AnimCollapseSection("Subtitles", true, false, OnInspectorGUI_Subtitles, this, Color.white));
- _settingSections.Add(new AnimCollapseSection("Events", true, false, OnInspectorGUI_Events, this, Color.white));
- _settingSections.Add(new AnimCollapseSection("Platform Specific", true, false, OnInspectorGUI_PlatformOverrides, this, platformSpecificColor));
- _settingSections.Add(new AnimCollapseSection("Global", true, false, OnInspectorGUI_GlobalSettings, this, Color.white));
- _platformSections.Clear();
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.Windows), true, false, OnInspectorGUI_Override_Windows, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.MacOSX), true, false, OnInspectorGUI_Override_MacOSX, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.Android), true, false, OnInspectorGUI_Override_Android, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.iOS), true, false, OnInspectorGUI_Override_iOS, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.tvOS), true, false, OnInspectorGUI_Override_tvOS, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.WindowsUWP), true, false, OnInspectorGUI_Override_WindowsUWP, this, platformColor, _platformSections));
- _platformSections.Add(new AnimCollapseSection(GetPlatformButtonContent(Platform.WebGL), true, false, OnInspectorGUI_Override_WebGL, this, platformColor, _platformSections));
- _sectionDevModeState = new AnimCollapseSection("State", false, false, OnInspectorGUI_DevMode_State, this, Color.white);
- _sectionDevModeTexture = new AnimCollapseSection("Texture", false, false, OnInspectorGUI_DevMode_Texture, this, Color.white);
- _sectionDevModePlaybackQuality = new AnimCollapseSection("Presentation Quality", false, false, OnInspectorGUI_DevMode_PresentationQuality, this, Color.white);
- _sectionDevModeHapNotchLCDecoder = new AnimCollapseSection("Hap/NotchLC Decoder", false, false, OnInspectorGUI_DevMode_HapNotchLCDecoder, this, Color.white);
- _sectionDevModeBufferedFrames = new AnimCollapseSection("Buffers", false, false, OnInspectorGUI_DevMode_BufferedFrames, this, Color.white);
- }
- private void ResolveProperties()
- {
- _propMediaSource = this.CheckFindProperty("_mediaSource");
- _propMediaReference = this.CheckFindProperty("_mediaReference");
- _propMediaPath = this.CheckFindProperty("_mediaPath");
- _propAutoOpen = this.CheckFindProperty("_autoOpen");
- _propAutoStart = this.CheckFindProperty("_autoPlayOnStart");
- _propLoop = this.CheckFindProperty("_loop");
- _propRate = this.CheckFindProperty("_playbackRate");
- _propVolume = this.CheckFindProperty("_audioVolume");
- _propBalance = this.CheckFindProperty("_audioBalance");
- _propMuted = this.CheckFindProperty("_audioMuted");
- _propPersistent = this.CheckFindProperty("_persistent");
- _propEvents = this.CheckFindProperty("_events");
- _propEventMask = this.CheckFindProperty("_eventMask");
- _propPauseMediaOnAppPause = this.CheckFindProperty("_pauseMediaOnAppPause");
- _propPlayMediaOnAppUnpause = this.CheckFindProperty("_playMediaOnAppUnpause");
- _propFilter = this.CheckFindProperty("_textureFilterMode");
- _propWrap = this.CheckFindProperty("_textureWrapMode");
- _propAniso = this.CheckFindProperty("_textureAnisoLevel");
- #if AVPRO_FEATURE_VIDEORESOLVE
- _propUseVideoResolve = this.CheckFindProperty("_useVideoResolve");
- _propVideoResolve = this.CheckFindProperty("_videoResolve");
- _propVideoResolveOptions = this.CheckFindProperty("_videoResolveOptions");
- #endif
- _propVideoMapping = this.CheckFindProperty("_videoMapping");
- _propForceFileFormat = this.CheckFindProperty("_forceFileFormat");
- _propFallbackMediaHints = this.CheckFindProperty("_fallbackMediaHints");
- _propSubtitles = this.CheckFindProperty("_sideloadSubtitles");
- _propSubtitlePath = this.CheckFindProperty("_subtitlePath");
- _propResample = this.CheckFindProperty("_useResampler");
- _propResampleMode = this.CheckFindProperty("_resampleMode");
- _propResampleBufferSize = this.CheckFindProperty("_resampleBufferSize");
- _propAudioHeadTransform = this.CheckFindProperty("_audioHeadTransform");
- _propAudioEnableFocus = this.CheckFindProperty("_audioFocusEnabled");
- _propAudioFocusOffLevelDB = this.CheckFindProperty("_audioFocusOffLevelDB");
- _propAudioFocusWidthDegrees = this.CheckFindProperty("_audioFocusWidthDegrees");
- _propAudioFocusTransform = this.CheckFindProperty("_audioFocusTransform");
- }
- private static Texture GetPlatformIcon(Platform platform)
- {
- string iconName = string.Empty;
- switch (platform)
- {
- case Platform.Windows:
- case Platform.MacOSX:
- iconName = "BuildSettings.Standalone.Small";
- break;
- case Platform.Android:
- iconName = "BuildSettings.Android.Small";
- break;
- case Platform.iOS:
- iconName = "BuildSettings.iPhone.Small";
- break;
- case Platform.tvOS:
- iconName = "BuildSettings.tvOS.Small";
- break;
- case Platform.WindowsUWP:
- iconName = "BuildSettings.Metro.Small";
- break;
- case Platform.WebGL:
- iconName = "BuildSettings.WebGL.Small";
- break;
- }
- Texture iconTexture = null;
- if (!string.IsNullOrEmpty(iconName))
- {
- iconTexture = EditorGUIUtility.IconContent(iconName).image;
- }
- return iconTexture;
- }
- private static GUIContent GetPlatformButtonContent(Platform platform)
- {
- return new GUIContent(Helper.GetPlatformName(platform), GetPlatformIcon(platform));
- }
- private void FixRogueEditorBug()
- {
- // NOTE: There seems to be a bug in Unity where the editor script will call OnEnable and OnDisable twice.
- // This is resolved by setting the Window Layout mode to Default.
- // It causes a problem (at least in Unity 2020.1.11) where the System.Action invocations (usd by AnimCollapseSection)
- // seem to be in a different 'this' context and so their pointers to serializedObject is not the same, resulting in
- // properties modified not marking the serialisedObject as dirty. To get around this issue we use this static bool
- // so that OnEnable can only be called once.
- // https://answers.unity.com/questions/1216599/custom-editor-gets-created-multiple-times-and-rece.html
- var remainingBuggedEditors = FindObjectsOfType<MediaPlayerEditor>();
- foreach(var editor in remainingBuggedEditors)
- {
- if (editor == this)
- {
- continue;
- }
- DestroyImmediate(editor);
- }
- }
- private void OnEnable()
- {
- FixRogueEditorBug();
- CreateSections();
- LoadSettings();
- _isTrialVersion = IsTrialVersion();
- if (_platformNames == null)
- {
- _platformNames = new GUIContent[]
- {
- GetPlatformButtonContent(Platform.Windows),
- GetPlatformButtonContent(Platform.MacOSX),
- GetPlatformButtonContent(Platform.iOS),
- GetPlatformButtonContent(Platform.tvOS),
- GetPlatformButtonContent(Platform.Android),
- GetPlatformButtonContent(Platform.WindowsUWP),
- GetPlatformButtonContent(Platform.WebGL)
- };
- }
- ResolveProperties();
- }
- private void OnDisable()
- {
- ClosePreview();
- SaveSettings();
- if (!Application.isPlaying)
- {
- // NOTE: For some reason when transitioning into Play mode, Dispose() is not called in the MediaPlayer if
- // it was playing before the transition because all members are reset to null. So we must force this
- // dispose of all resources to handle this case.
- // Sadly it means we can't keep persistent playback in the inspector when it loses focus, but
- // hopefully we can find a way to achieve this in the future
- /*if (EditorApplication.isPlayingOrWillChangePlaymode)
- {
- // NOTE: This seems to work for the above issue, but
- // we'd need to move it to the global event for when the play state changes
- MediaPlayer.EditorAllPlayersDispose();
- }*/
- foreach (MediaPlayer player in this.targets)
- {
- player.ForceDispose();
- }
- }
- }
- private void CreateStyles()
- {
- if (_styleSectionBox == null)
- {
- _styleSectionBox = new GUIStyle(GUI.skin.box);
- if (!EditorGUIUtility.isProSkin)
- {
- _styleSectionBox = new GUIStyle(GUI.skin.box);
- //_styleSectionBox.normal.background = Texture2D.redTexture;
- }
- }
- _iconPlayButton = EditorGUIUtility.IconContent("d_PlayButton");
- _iconPauseButton = EditorGUIUtility.IconContent("d_PauseButton");
- _iconSceneViewAudio = EditorGUIUtility.IconContent("d_SceneViewAudio");
- _iconProject = EditorGUIUtility.IconContent("d_Project");
- _iconRotateTool = EditorGUIUtility.IconContent("d_RotateTool");
- AnimCollapseSection.CreateStyles();
- }
- public override void OnInspectorGUI()
- {
- MediaPlayer media = (this.target) as MediaPlayer;
- // NOTE: It is important that serializedObject.Update() is called before media.EditorUpdate()
- // as otherwise the serializedPropertys are not correctly detected as modified
- serializedObject.Update();
- #if AVPROVIDEO_SUPPORT_LIVEEDITMODE
- bool isPlayingInEditor = false;
- // Update only during the layout event so that nothing updates for the render event
- if (!Application.isPlaying && Event.current.type == EventType.Layout)
- {
- isPlayingInEditor = media.EditorUpdate();
- }
- #endif
- if (media == null || _propMediaPath == null)
- {
- return;
- }
- CreateStyles();
- _icon = GetIcon(_icon);
- ShowImportantMessages();
- if (media != null)
- {
- OnInspectorGUI_Player(media, media.TextureProducer);
- }
- AnimCollapseSection.Show(_sectionMediaInfo);
- if (_allowDeveloperMode)
- {
- AnimCollapseSection.Show(_sectionDebug);
- }
- AnimCollapseSection.Show(_sectionSettings);
- if (serializedObject.ApplyModifiedProperties())
- {
- EditorUtility.SetDirty(target);
- }
- AnimCollapseSection.Show(_sectionAboutHelp);
- #if AVPROVIDEO_SUPPORT_LIVEEDITMODE
- if (isPlayingInEditor)
- {
- GL.InvalidateState();
- // NOTE: there seems to be a bug in Unity (2019.3.13) where if you don't have
- // GL.sRGBWrite = true and then call RepaintAllViews() it makes the current Inspector
- // background turn black. This only happens when using D3D12
- // UPDATE: this is happening in Unity 2019.4.15 as well, and in D3D11 mode. It only
- // happens when loading a video via the Recent Menu.
- bool originalSRGBWrite = GL.sRGBWrite;
- GL.sRGBWrite = true;
- //this.Repaint();
- UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
- GL.sRGBWrite = originalSRGBWrite;
- }
- // TODO: OnDisable - stop the video if it's playing (and unload it?)
- #endif
- }
- private void OnInspectorGUI_Settings()
- {
- foreach (AnimCollapseSection section in _settingSections)
- {
- AnimCollapseSection.Show(section, indentLevel:1);
- }
- }
- private void ShowSupportWindowButton()
- {
- //GUI.backgroundColor = new Color(0.96f, 0.25f, 0.47f);
- //if (GUILayout.Button("◄ AVPro Video ►\nHelp & Support"))
- if (GUILayout.Button("Click here for \nHelp & Support"))
- {
- SupportWindow.Init();
- }
- //GUI.backgroundColor = Color.white;
- }
- private void ShowImportantMessages()
- {
- // Describe the watermark for trial version
- if (_isTrialVersion)
- {
- string message = string.Empty;
- if (Application.isPlaying)
- {
- #if UNITY_EDITOR_WIN
- MediaPlayer media = (this.target) as MediaPlayer;
- message = "The watermark is the horizontal bar that moves vertically and the small 'AVPRO TRIAL' text.";
- if (media.Info != null && media.Info.GetPlayerDescription().Contains("MF-MediaEngine-Hardware"))
- {
- message = "The watermark is the RenderHeads logo that moves around the image.";
- }
- #elif UNITY_EDITOR_OSX
- message = "The RenderHeads logo is the watermark.";
- #endif
- }
- EditorHelper.IMGUI.BeginWarningTextBox("AVPRO VIDEO - TRIAL WATERMARK", message, Color.yellow, Color.yellow, Color.white);
- if (GUILayout.Button("Purchase"))
- {
- Application.OpenURL(LinkPurchase);
- }
- EditorHelper.IMGUI.EndWarningTextBox();
- }
- // Warning about not using multi-threaded rendering
- {
- bool showWarningMT = false;
- if (/*EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.iOS ||
- EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.tvOS ||*/
- EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.Android)
- {
- #if UNITY_2017_2_OR_NEWER
- showWarningMT = !UnityEditor.PlayerSettings.GetMobileMTRendering(BuildTargetGroup.Android);
- #else
- showWarningMT = !UnityEditor.PlayerSettings.mobileMTRendering;
- #endif
- }
- /*if (EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.WSA)
- {
- }*/
- if (showWarningMT)
- {
- EditorHelper.IMGUI.WarningTextBox("Performance Warning", "Deploying to Android with multi-threaded rendering disabled is not recommended. Enable multi-threaded rendering in the Player Settings > Other Settings panel.", Color.yellow, Color.yellow, Color.white);
- }
- }
- #if !UNITY_2019_3_OR_NEWER
- if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12)
- {
- EditorHelper.IMGUI.WarningTextBox("Compatibility Warning", "Direct3D 12 is not supported until Unity 2019.3", Color.yellow, Color.yellow, Color.white);
- }
- #endif
- // Warn about using Vulkan graphics API
- #if UNITY_2018_1_OR_NEWER
- {
- if (EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.Android)
- {
- bool showWarningVulkan = false;
- if (!UnityEditor.PlayerSettings.GetUseDefaultGraphicsAPIs(BuildTarget.Android))
- {
- UnityEngine.Rendering.GraphicsDeviceType[] devices = UnityEditor.PlayerSettings.GetGraphicsAPIs(BuildTarget.Android);
- foreach (UnityEngine.Rendering.GraphicsDeviceType device in devices)
- {
- if (device == UnityEngine.Rendering.GraphicsDeviceType.Vulkan)
- {
- showWarningVulkan = true;
- break;
- }
- }
- }
- if (showWarningVulkan)
- {
- EditorHelper.IMGUI.WarningTextBox("Compatibility Warning", "Vulkan graphics API is not supported. Please go to Player Settings > Android > Auto Graphics API and remove Vulkan from the list. Only OpenGL 2.0 and 3.0 are supported on Android.", Color.yellow, Color.yellow, Color.white);
- }
- }
- }
- #endif
- }
- private void OnInspectorGUI_Main()
- {
- /////////////////// STARTUP FIELDS
- EditorGUILayout.BeginVertical(_styleSectionBox);
- GUILayout.Label("Startup", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(_propAutoOpen);
- EditorGUILayout.PropertyField(_propAutoStart, new GUIContent("Auto Play"));
- EditorGUILayout.EndVertical();
- /////////////////// PLAYBACK FIELDS
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Playback", EditorStyles.boldLabel);
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propLoop);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "Loop");
- foreach (MediaPlayer player in this.targets)
- {
- player.Loop = _propLoop.boolValue;
- }
- }
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propRate);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "PlaybackRate");
- foreach (MediaPlayer player in this.targets)
- {
- player.PlaybackRate = _propRate.floatValue;
- }
- }
- EditorGUILayout.EndVertical();
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Other", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(_propPersistent, new GUIContent("Persistent", "Use DontDestroyOnLoad so this object isn't destroyed between level loads"));
- if (_propForceFileFormat != null)
- {
- GUIContent label = new GUIContent("Force File Format", "Override automatic format detection when using non-standard file extensions");
- _propForceFileFormat.enumValueIndex = EditorGUILayout.Popup(label, _propForceFileFormat.enumValueIndex, _fileFormatGuiNames);
- }
- EditorGUILayout.EndVertical();
- }
- private void OnInspectorGUI_Visual()
- {
- #if AVPRO_FEATURE_VIDEORESOLVE
-
- {
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Resolve", EditorStyles.boldLabel);
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propUseVideoResolve);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "UseVideoResolve");
- foreach (MediaPlayer player in this.targets)
- {
- player.UseVideoResolve = _propUseVideoResolve.boolValue;
- }
- }
- if (_propUseVideoResolve.boolValue)
- {
- EditorGUILayout.PropertyField(_propVideoResolve);
- /*EditorGUI.indentLevel++;
- EditorGUILayout.PropertyField(_propVideoResolveOptions, true);
- EditorGUI.indentLevel--;*/
- }
- GUILayout.EndVertical();
- }
- #endif
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Texture", EditorStyles.boldLabel);
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propFilter, new GUIContent("Filter"));
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "TextureFilterMode");
- foreach (MediaPlayer player in this.targets)
- {
- player.TextureFilterMode = (FilterMode)_propFilter.enumValueIndex;
- }
- }
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propWrap, new GUIContent("Wrap"));
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "TextureWrapMode");
- foreach (MediaPlayer player in this.targets)
- {
- player.TextureWrapMode = (TextureWrapMode)_propWrap.enumValueIndex;
- }
- }
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(_propAniso, new GUIContent("Aniso"));
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "TextureAnisoLevel");
- foreach (MediaPlayer player in this.targets)
- {
- player.TextureAnisoLevel = _propAniso.intValue;
- }
- }
- EditorGUILayout.EndVertical();
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Layout Mapping", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(_propVideoMapping);
- EditorGUILayout.EndVertical();
- {
- EditorGUILayout.BeginVertical(GUI.skin.box);
- GUILayout.Label("Resampler (BETA)", EditorStyles.boldLabel);
- EditorGUILayout.PropertyField(_propResample);
- EditorGUI.BeginDisabledGroup(!_propResample.boolValue);
- EditorGUILayout.PropertyField(_propResampleMode);
- EditorGUILayout.PropertyField(_propResampleBufferSize);
- EditorGUI.EndDisabledGroup();
- EditorGUILayout.EndVertical();
- }
- }
- private static bool IsTrialVersion()
- {
- string version = GetPluginVersion();
- return version.Contains("-trial");
- }
- //private int _updateFrameCount = -1;
- public override bool RequiresConstantRepaint()
- {
- MediaPlayer media = (this.target) as MediaPlayer;
- if (media != null && media.Control != null && media.isActiveAndEnabled && media.Info.GetDuration() > 0.0)
- {
- if (!media.Info.HasVideo())
- {
- if (media.Info.HasAudio())
- {
- return true;
- }
- }
- else if (media.TextureProducer.GetTexture() != null)
- {
- //int frameCount = media.TextureProducer.GetTextureFrameCount();
- //if (_updateFrameCount != frameCount)
- {
- //_updateFrameCount = frameCount;
- return true;
- }
- }
- }
- return false;
- }
- }
- }
|