| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | #if UNITY_2018_1_OR_NEWER	#define UNITY_SUPPORTS_BUILD_REPORT#endifusing System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using UnityEngine.Rendering;using UnityEditor.Build;#if UNITY_SUPPORTS_BUILD_REPORTusing UnityEditor.Build.Reporting;#endifnamespace RenderHeads.Media.AVProVideo.Editor{	public class PreProcessBuild : 		#if UNITY_SUPPORTS_BUILD_REPORT		IPreprocessBuildWithReport		#else		IPreprocessBuild		#endif	{		public int callbackOrder { get { return 0; } }	#if UNITY_SUPPORTS_BUILD_REPORT		public void OnPreprocessBuild(BuildReport report)		{			OnPreprocessBuild(report.summary.platform, report.summary.outputPath);		}	#endif		public void OnPreprocessBuild(BuildTarget target, string path)		{			if (IsTargetMacOS(target) || target == BuildTarget.iOS || target == BuildTarget.tvOS)			{				int indexMetal = GetGraphicsApiIndex(target, GraphicsDeviceType.Metal);				int indexOpenGLCore = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLCore);				int indexOpenGLES2 = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLES2);				int indexOpenGLES3 = GetGraphicsApiIndex(target, GraphicsDeviceType.OpenGLES3);				if (indexMetal < 0)				{					string message = "Metal graphics API is required by AVPro Video.";					message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";					ShowAbortDialog(message);				}				if (indexOpenGLCore >= 0 && indexMetal >=0 && indexOpenGLCore < indexMetal)				{					string message = "OpenGL graphics API is not supported by AVPro Video.";					message += "\n\nVideo will play but no video frames will be displayed.";					message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";					ShowAbortDialog(message);				}				if (indexOpenGLES2 >= 0 && indexMetal >=0 && indexOpenGLES2 < indexMetal)				{					string message = "OpenGLES2 graphics API is not supported by AVPro Video.";					message += "\n\nVideo will play but no video frames will be displayed.";					message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";					ShowAbortDialog(message);				}				if (indexOpenGLES3 >= 0 && indexMetal >=0 && indexOpenGLES3 < indexMetal)				{					string message = "OpenGLES3 graphics API is not supported by AVPro Video.";					message += "\n\nVideo will play but no video frames will be displayed.";					message += "\n\nPlease go to Player Settings > Auto Graphics API and add Metal to the top of the list.";					ShowAbortDialog(message);				}			}			int indexVulkan = GetGraphicsApiIndex(target, GraphicsDeviceType.Vulkan);			if (indexVulkan >= 0)			{				if (target != BuildTarget.Android)				{					string message = "Vulkan graphics API is not supported by AVPro Video.";					message += "\n\nPlease go to Player Settings > Auto Graphics API and remove Vulkan from the list.";					ShowAbortDialog(message);				}			}		}		static void ShowAbortDialog(string message)		{			if (!EditorUtility.DisplayDialog("Continue Build?", message, "Continue", "Cancel"))			{				throw new BuildFailedException(message);			}		}		static bool IsTargetMacOS(BuildTarget target)		{			#if UNITY_2017_3_OR_NEWER			return (target == BuildTarget.StandaloneOSX);			#else			return (target == BuildTarget.StandaloneOSXUniversal || target == BuildTarget.StandaloneOSXIntel);			#endif		}		static int GetGraphicsApiIndex(BuildTarget target, GraphicsDeviceType api)		{			int result = -1;			GraphicsDeviceType[] devices = UnityEditor.PlayerSettings.GetGraphicsAPIs(target);			for (int i = 0; i < devices.Length; i++)			{				if (devices[i] == api)				{					result = i;					break;				}			}			return result;		}	}}
 |