void Start() { var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Debug.LogError(Tag + "OpenVRの初期化に失敗." + openVRError.ToString()); ApplicationQuit(); return; } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(OverlayKey, OverlayFriendlyName, ref overlayHandle); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString()); ApplicationQuit(); return; } //オーバーレイの大きさ設定(幅のみ。高さはテクスチャの比から自動計算される) var width = 2.0f; overlay.SetOverlayWidthInMeters(overlayHandle, width); //オーバーレイの透明度を設定 var alpha = 0.5f; overlay.SetOverlayAlpha(overlayHandle, alpha); //オーバーレイに渡すテクスチャ種類の設定 var isOpenGL = SystemInfo.graphicsDeviceVersion.Contains("OpenGL"); if (isOpenGL) { //pGLuintTexture overlayTexture.eType = ETextureType.OpenGL; //上下反転しない textureYflip = 1; } else { //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する textureYflip = -1; } Debug.Log(Tag + "初期化完了しました"); }
// Token: 0x06005F2D RID: 24365 RVA: 0x00215594 File Offset: 0x00213994 private ulong GetOverlayHandle(string overlayName, Transform transform, float widthInMeters = 1f) { ulong num = 0UL; CVROverlay overlay = OpenVR.Overlay; if (overlay == null) { return(num); } string pchOverlayKey = SteamVR_Overlay.key + "." + overlayName; EVROverlayError evroverlayError = overlay.FindOverlay(pchOverlayKey, ref num); if (evroverlayError != EVROverlayError.None) { evroverlayError = overlay.CreateOverlay(pchOverlayKey, overlayName, ref num); } if (evroverlayError == EVROverlayError.None) { overlay.ShowOverlay(num); overlay.SetOverlayAlpha(num, this.alpha); overlay.SetOverlayWidthInMeters(num, widthInMeters); if (SteamVR.instance.textureType == ETextureType.DirectX) { VRTextureBounds_t vrtextureBounds_t = default(VRTextureBounds_t); vrtextureBounds_t.uMin = 0f; vrtextureBounds_t.vMin = 1f; vrtextureBounds_t.uMax = 1f; vrtextureBounds_t.vMax = 0f; overlay.SetOverlayTextureBounds(num, ref vrtextureBounds_t); } SteamVR_Camera steamVR_Camera = (this.loadingScreenDistance != 0f) ? null : SteamVR_Render.Top(); if (steamVR_Camera != null && steamVR_Camera.origin != null) { SteamVR_Utils.RigidTransform rigidTransform = new SteamVR_Utils.RigidTransform(steamVR_Camera.origin, transform); rigidTransform.pos.x = rigidTransform.pos.x / steamVR_Camera.origin.localScale.x; rigidTransform.pos.y = rigidTransform.pos.y / steamVR_Camera.origin.localScale.y; rigidTransform.pos.z = rigidTransform.pos.z / steamVR_Camera.origin.localScale.z; HmdMatrix34_t hmdMatrix34_t = rigidTransform.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(num, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t); } else { SteamVR_Utils.RigidTransform rigidTransform2 = new SteamVR_Utils.RigidTransform(transform); HmdMatrix34_t hmdMatrix34_t2 = rigidTransform2.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(num, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t2); } } return(num); }
//-------------------------------------------------------------------------- //初期化処理 private void Start() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 Debug.Log(Tag + "Begin"); var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; error = false; //フレームレートを90fpsにする。(しないと無限に早くなることがある) Application.targetFrameRate = 120; Debug.Log(Tag + "Set Frame Rate 90"); //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Debug.LogError(Tag + "OpenVRの初期化に失敗." + openVRError.ToString()); ProcessError(); return; } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(OverlayKeyName, OverlayFriendlyName, ref overlayHandle); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString()); ProcessError(); return; } Debug.Log(overlayError); var OverlayTextureBounds = new VRTextureBounds_t(); //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する OverlayTextureBounds.uMin = 0; OverlayTextureBounds.vMin = 1; OverlayTextureBounds.uMax = 1; OverlayTextureBounds.vMax = 0; overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds); Debug.Log(Tag + "初期化完了しました"); }
public EVROverlayError Create(string key, string friendlyName) { if (!Created) { Key = key; FriendlyName = friendlyName; var error = FOverlay.CreateOverlay(key, friendlyName, ref FHandle); Created = error == EVROverlayError.None; FOverlay.SetOverlayWidthInMeters(FHandle, 1.5f); return(error); } else { return(EVROverlayError.None); } }
private void OnEnable() { CVROverlay overlay = OpenVR.Overlay; if (overlay != null) { EVROverlayError evroverlayError = overlay.CreateOverlay(SteamVR_Overlay.key, base.gameObject.name, ref this.handle); if (evroverlayError != EVROverlayError.None) { Debug.Log(overlay.GetOverlayErrorNameFromEnum(evroverlayError)); base.enabled = false; return; } } SteamVR_Overlay.instance = this; }
public void Initialize(string name, string key, TextureFormat format) { var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Dispose(); throw new IOException(openVRError.ToString()); } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(name, key, ref overlayHandle); if (overlayError != EVROverlayError.None) { Dispose(); throw new IOException(overlayError.ToString()); } //オーバーレイに渡すテクスチャ種類の設定 if (format == TextureFormat.OpenGL) { //pGLuintTexture overlayTexture.eType = ETextureType.OpenGL; //上下反転しない SetTextureBounds(0, 0, 1, 1); } else { //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する SetTextureBounds(0, 1, 1, 0); } return; }
public static ulong CreateOverlay(string key) { Debug.Assert(m_cvrOverlay != null); ulong handle = OpenVR.k_ulOverlayHandleInvalid; var oError = m_cvrOverlay.FindOverlay(key, ref handle); if (oError == EVROverlayError.None) { CloseOverlay(handle); } //create: oError = m_cvrOverlay.CreateOverlay(key, key, ref handle); if (oError != EVROverlayError.None) { Log.WriteLine("Error " + oError); return(OpenVR.k_ulOverlayHandleInvalid); } return(handle); }
private static EVROverlayError ProcessOverlay2(CVROverlay overlay, ref ulong overlayHandle, ref bool overlayVisible, bool dashboardVisible) { var err = EVROverlayError.None; if (overlayHandle == 0) { err = overlay.FindOverlay("VRCX2", ref overlayHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } overlayVisible = false; err = overlay.CreateOverlay("VRCX2", "VRCX2", ref overlayHandle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayAlpha(overlayHandle, 0.9f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(overlayHandle, 1f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.None); if (err != EVROverlayError.None) { return(err); } var m = Matrix.Scaling(1f); m *= Matrix.Translation(0, -0.3f, -1.5f); var hm34 = new HmdMatrix34_t { m0 = m.M11, m1 = m.M21, m2 = m.M31, m3 = m.M41, m4 = m.M12, m5 = m.M22, m6 = m.M32, m7 = m.M42, m8 = m.M13, m9 = m.M23, m10 = m.M33, m11 = m.M43, }; err = overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref hm34); if (err != EVROverlayError.None) { return(err); } } } if (!dashboardVisible) { var texture = new Texture_t { handle = m_Texture2.NativePointer }; err = overlay.SetOverlayTexture(overlayHandle, ref texture); if (err != EVROverlayError.None) { return(err); } if (!overlayVisible) { err = overlay.ShowOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = true; } } else if (overlayVisible) { err = overlay.HideOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = false; } return(err); }
private static EVROverlayError ProcessOverlay1(CVROverlay overlay, ref ulong overlayHandle, ref bool overlayVisible, bool dashboardVisible, uint overlayIndex, DateTime nextOverlay) { var err = EVROverlayError.None; if (overlayHandle == 0) { err = overlay.FindOverlay("VRCX1", ref overlayHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } overlayVisible = false; err = overlay.CreateOverlay("VRCX1", "VRCX1", ref overlayHandle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayAlpha(overlayHandle, 0.9f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(overlayHandle, 1f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.None); if (err != EVROverlayError.None) { return(err); } } } if (overlayIndex != OpenVR.k_unTrackedDeviceIndexInvalid) { // http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices // Scaling-Rotation-Translation var m = Matrix.Scaling(0.25f); m *= Matrix.RotationX(m_Rotation[0]); m *= Matrix.RotationY(m_Rotation[1]); m *= Matrix.RotationZ(m_Rotation[2]); m *= Matrix.Translation(m_Translation[0], m_Translation[1], m_Translation[2]); var hm34 = new HmdMatrix34_t { m0 = m.M11, m1 = m.M21, m2 = m.M31, m3 = m.M41, m4 = m.M12, m5 = m.M22, m6 = m.M32, m7 = m.M42, m8 = m.M13, m9 = m.M23, m10 = m.M33, m11 = m.M43, }; err = overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, overlayIndex, ref hm34); if (err != EVROverlayError.None) { return(err); } } if (!dashboardVisible && DateTime.UtcNow.CompareTo(nextOverlay) <= 0) { var texture = new Texture_t { handle = m_Texture1.NativePointer }; err = overlay.SetOverlayTexture(overlayHandle, ref texture); if (err != EVROverlayError.None) { return(err); } if (!overlayVisible) { err = overlay.ShowOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = true; } } else if (overlayVisible) { err = overlay.HideOverlay(overlayHandle); if (err != EVROverlayError.None) { return(err); } overlayVisible = false; } return(err); }
//-------------------------------------------------------------------------- //初期化処理 private void Start() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 Debug.Log(Tag + "Begin"); var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; error = false; if (!OpenVR.IsHmdPresent()) { this.enabled = false; } //フレームレートを90fpsにする。(しないと無限に早くなることがある) Application.targetFrameRate = 90; Debug.Log(Tag + "Set Frame Rate 90"); //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Debug.LogError(Tag + "OpenVRの初期化に失敗." + openVRError.ToString()); ProcessError(); return; } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(OverlayKeyName, OverlayFriendlyName, ref overlayHandle); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString()); ProcessError(); return; } //オーバーレイに渡すテクスチャ種類の設定 var OverlayTextureBounds = new VRTextureBounds_t(); var isOpenGL = SystemInfo.graphicsDeviceVersion.Contains("OpenGL"); if (isOpenGL) { //pGLuintTexture overlayTexture.eType = ETextureType.OpenGL; //上下反転しない OverlayTextureBounds.uMin = 1; OverlayTextureBounds.vMin = 0; OverlayTextureBounds.uMax = 1; OverlayTextureBounds.vMax = 0; overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds); } else { //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する OverlayTextureBounds.uMin = 0; OverlayTextureBounds.vMin = 1; OverlayTextureBounds.uMax = 1; OverlayTextureBounds.vMax = 0; overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds); } //-------- showDevices(); Debug.Log(Tag + "初期化完了しました"); }
private bool StartupOVR() { EVRInitError error = EVRInitError.Driver_Failed; vr = OpenVR.Init(ref error, EVRApplicationType.VRApplication_Overlay); if (error != EVRInitError.None) { Debug.WriteLine("OpenVR Init Error: " + error.ToString()); return(false); } overlay = OpenVR.Overlay; EVROverlayError overlayError = overlay.CreateOverlay("Jstf_ovr_cards", "OpenVR Cards System Overlay", ref overlayHandle); if (overlayError != EVROverlayError.None) { OpenVR.Shutdown(); Debug.WriteLine("OpenVR Overlay Error: " + overlayError.ToString()); return(false); } /*overlayError = overlay.SetOverlayFromFile(overlayHandle, AssetsPath + "overlay.png"); * if (overlayError != EVROverlayError.None) * { * CleanupOVR(); * Debug.WriteLine("OpenVR Overlay Error: " + overlayError.ToString()); * return false; * }*/ overlayError = overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.Mouse); if (overlayError != EVROverlayError.None) { CleanupOVR(); Debug.WriteLine("OpenVR Overlay Error: " + overlayError.ToString()); return(false); } overlayTexture = new Texture_t { eType = ETextureType.OpenGL, eColorSpace = EColorSpace.Auto, handle = (IntPtr)textureId }; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { CleanupOVR(); Debug.WriteLine("OpenVR Overlay Error: " + overlayError.ToString()); return(false); } HmdId = OpenVR.k_unTrackedDeviceIndex_Hmd; for (uint i = HmdId + 1; i < OpenVR.k_unMaxTrackedDeviceCount; i++) { if (vr.IsTrackedDeviceConnected(i)) { ETrackedDeviceClass cls = vr.GetTrackedDeviceClass(i); if (cls == ETrackedDeviceClass.Controller) { ETrackedControllerRole rl = vr.GetControllerRoleForTrackedDeviceIndex(i); if (rl == ETrackedControllerRole.LeftHand) { LeftControllerId = i; Debug.WriteLine("Found Left Controller"); } else if (rl == ETrackedControllerRole.RightHand) { RightControllerId = i; Debug.WriteLine("Found Right Controller"); } } } } mat = new HmdMatrix34_t { m0 = 1, m1 = 0, m2 = 0, m3 = 0f, m4 = 0, m5 = 1, m6 = 0, m7 = 0.1f, m8 = 0, m9 = 0, m10 = 1, m11 = 0f }; overlayError = overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, RightControllerId, ref mat); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot bind overlay to Tracked device."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); return(false); } overlayError = overlay.SetOverlayWidthInMeters(overlayHandle, 0.2f); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot set overlay size."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); return(false); } overlayError = overlay.SetOverlayAlpha(overlayHandle, 1); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot set overlay alpha."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); return(false); } overlayError = overlay.SetOverlayColor(overlayHandle, 1, 1, 1); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot set overlay color."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); return(false); } #if DEBUG Debug.WriteLine("OpenVR Startup Complete"); #endif return(true); }
//-------------------------------------------------------------------------- //初期化処理 private void Start() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 Debug.Log(Tag + "Begin"); var openVRError = EVRInitError.None; var overlayError = EVROverlayError.None; error = false; oldshow = !show; //フレームレートを90fpsにする。(しないと無限に早くなることがある) Application.targetFrameRate = 90; Debug.Log(Tag + "Set Frame Rate 90"); //JSON読み込み Debug.Log(Tag + "Load JSON"); loadJSON(); InstanceKeyText.text = ""; //複数起動用キー if (Environment.GetCommandLineArgs().Length >= 3) { Debug.Log(Environment.GetCommandLineArgs()[1]); Debug.Log(Environment.GetCommandLineArgs()[2]); //引数に合わせて一時的にKeyを変更する if (Environment.GetCommandLineArgs()[1] == "overlaykey") { config.OverlayKeyName = Environment.GetCommandLineArgs()[2]; config.OverlayFriendlyName = Environment.GetCommandLineArgs()[2]; //サブインスタンス表示 InstanceKeyText.text = config.OverlayKeyName; } } //表示用 OverlayKeyName = config.OverlayKeyName; OverlayFriendlyName = config.OverlayFriendlyName; //OpenVRの初期化 openvr = OpenVR.Init(ref openVRError, EVRApplicationType.VRApplication_Overlay); if (openVRError != EVRInitError.None) { Debug.LogError(Tag + "OpenVRの初期化に失敗." + openVRError.ToString()); //エラーを告知し5秒後に終了 DOVirtual.DelayedCall(5f, () => { ApplicationQuit(); }); ProcessError(); return; } //オーバーレイ機能の初期化 overlay = OpenVR.Overlay; overlayError = overlay.CreateOverlay(config.OverlayKeyName, config.OverlayFriendlyName, ref overlayHandle); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString()); //エラーを告知し5秒後に終了 DOVirtual.DelayedCall(5f, () => { ApplicationQuit(); }); ProcessError(); return; } //オーバーレイに渡すテクスチャ種類の設定 var OverlayTextureBounds = new VRTextureBounds_t(); var isOpenGL = SystemInfo.graphicsDeviceVersion.Contains("OpenGL"); if (isOpenGL) { //pGLuintTexture overlayTexture.eType = ETextureType.OpenGL; //上下反転しない OverlayTextureBounds.uMin = 1; OverlayTextureBounds.vMin = 0; OverlayTextureBounds.uMax = 1; OverlayTextureBounds.vMax = 0; overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds); } else { //pTexture overlayTexture.eType = ETextureType.DirectX; //上下反転する OverlayTextureBounds.uMin = 0; OverlayTextureBounds.vMin = 1; OverlayTextureBounds.uMax = 1; OverlayTextureBounds.vMax = 0; overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds); } //-------- showDevices(); Debug.Log(Tag + "初期化完了しました"); }