Mercurial > hg > Game > Games
diff Orchestland/Assets/OVR/Editor/OVRShimLoader.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/OVR/Editor/OVRShimLoader.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,135 @@ +/************************************************************************************ + +Copyright : Copyright 2014 Oculus VR, LLC. All Rights reserved. + +Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License"); +you may not use the Oculus VR Rift SDK except in compliance with the License, +which is provided at the time of installation or download, or which +otherwise accompanies this software in either electronic or hard copy form. + +You may obtain a copy of the License at + +http://www.oculusvr.com/licenses/LICENSE-3.2 + +Unless required by applicable law or agreed to in writing, the Oculus VR SDK +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +************************************************************************************/ + +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +using System; +using System.Linq; +using System.Text.RegularExpressions; +using System.IO; + +//------------------------------------------------------------------------------------- +// ***** OculusBuildDemo +// +// OculusBuild allows for command line building of the Oculus main demo (Tuscany). +// +[InitializeOnLoad] +class OVRShimLoader +{ + static OVRShimLoader() + { + if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.StandaloneWindows && + EditorUserBuildSettings.activeBuildTarget != BuildTarget.StandaloneWindows64) + return; + + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.HiddenByDefault; + +// forcibly enable exclusive mode only in 4.6.0b22+ and Unity 4.5.5p3+ +#if (UNITY_4_6 || (UNITY_4_5 && !(UNITY_4_5_0 || UNITY_4_5_1 || UNITY_4_5_2 || UNITY_4_5_3 || UNITY_4_5_4))) + bool unity_4_6 = false; + bool unity_4_5_5 = false; + +#if (UNITY_4_6) + unity_4_6 = true; +#elif (UNITY_4_5_5) + unity_4_5_5 = true; +#endif + + // Detect correct Unity releases which contain the fix for D3D11 exclusive mode. + string version = Application.unityVersion; + int releaseNumber; + bool releaseNumberFound = Int32.TryParse(Regex.Match(version, @"\d+$").Value, out releaseNumber); + + bool unsupportedUnityVersion = (unity_4_6 && version.Last(char.IsLetter) == 'b' && releaseNumberFound && releaseNumber < 22) + || (unity_4_5_5 && version.Last(char.IsLetter) == 'f') + || (unity_4_5_5 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber < 3); + + bool useExclusiveModeD3D11 = true; + if (unsupportedUnityVersion) + { + useExclusiveModeD3D11 = false; + } + + PlayerSettings.d3d11ForceExclusiveMode = useExclusiveModeD3D11; + PlayerSettings.d3d9FullscreenMode = D3D9FullscreenMode.ExclusiveMode; + PlayerSettings.visibleInBackground = true; +#endif + } + + [PreferenceItem("Oculus VR")] + static void PreferencesGUI() + { + // Load the preferences + if (!_prefsLoaded) { + _isEnabled = EditorPrefs.GetBool("OculusBuild", false); + _prefsLoaded = true; + } + + // Preferences GUI + + bool isEnabled = EditorGUILayout.Toggle("Optimize Builds for Rift", _isEnabled); + + if (isEnabled && !_isEnabled && + (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows || + EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64)) + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.HiddenByDefault; + + _isEnabled = isEnabled; + + // Save the preferences + if (GUI.changed) + EditorPrefs.SetBool("OculusBuild", _isEnabled); + } + + /// <summary> + /// Replaces the built standalone with an auto-patcher for the same architecture. + /// </summary> + [PostProcessBuild] + public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject) + { + // Figure out which architecture we're building for. + int arch; + if (target == BuildTarget.StandaloneWindows) + arch = 32; + else if (target == BuildTarget.StandaloneWindows64) + arch = 64; + else + return; + + // Rename the target to a .bin file for the auto-patcher to find later. + string autoPatcherPath = Application.dataPath + "/OVR/Editor/OculusUnityPatcher_" + arch.ToString() + ".exe"; + string targetPath = pathToBuiltProject.Replace(".exe", "_DirectToRift.exe"); + + if (File.Exists(targetPath)) + File.Delete(targetPath); + + File.Copy(autoPatcherPath, targetPath); + + string appInfoPath = pathToBuiltProject.Replace(".exe", "_Data/OVRAppInfo"); + var file = new System.IO.StreamWriter(appInfoPath); + file.Write(PlayerSettings.companyName + "\\" + PlayerSettings.productName); + file.Dispose(); + } + + static bool _isEnabled = true; + static bool _prefsLoaded = false; +}