//表示情報を更新 private void updateTexture() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString()); ProcessError(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); //致命的なエラーとしない return; } }
static public void SetOverlayTexture(ulong handle, IntPtr texture) { Texture_t tex; tex.eType = EGraphicsAPIConvention.API_DirectX; tex.eColorSpace = EColorSpace.Auto; tex.handle = texture;//MyRender11.Backbuffer.m_resource.NativePointer; m_cvrOverlay.SetOverlayTexture(handle, ref tex); }
/** * Set an overlay's texture to a unity Texture */ public void SetTexture(Texture texture) { var tex = new Texture_t(); tex.handle = texture.GetNativeTexturePtr(); tex.eType = OpenVR_Utils.textureType; tex.eColorSpace = EColorSpace.Auto; ReportError(overlay.SetOverlayTexture(handle, ref tex)); }
public EVROverlayError SetTexture(int textureHandle) { FTexture = new Texture_t() { handle = new IntPtr(textureHandle), eType = EGraphicsAPIConvention.API_DirectX, eColorSpace = EColorSpace.Linear }; return(FOverlay.SetOverlayTexture(FHandle, ref FTexture)); }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { //HMD視点位置変換行列に書き込む。 //ここでは回転なし、平行移動ありのHUD的な状態にしている。 //回転行列を元に、HMDからの相対的な位置にオーバーレイを表示する。 //代わりにSetOverlayTransformAbsoluteを使用すると、ルーム空間に固定することができる uint indexunTrackedDevice = 0; //0=HMD(他にControllerやTrackerにすることもできる) //overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, indexunTrackedDevice, ref pose); overlay.SetOverlayTransformAbsolute(overlayHandle, ETrackingUniverseOrigin.TrackingUniverseSeated, ref pose); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }
// Token: 0x06005F2A RID: 24362 RVA: 0x00215304 File Offset: 0x00213704 private void OnGUI() { if (SteamVR_LoadLevel._active != this) { return; } if (this.progressBarEmpty != null && this.progressBarFull != null) { if (this.progressBarOverlayHandle == 0UL) { this.progressBarOverlayHandle = this.GetOverlayHandle("progressBar", (!(this.progressBarTransform != null)) ? base.transform : this.progressBarTransform, this.progressBarWidthInMeters); } if (this.progressBarOverlayHandle != 0UL) { float num = (this.async == null) ? 0f : this.async.progress; int width = this.progressBarFull.width; int height = this.progressBarFull.height; if (this.renderTexture == null) { this.renderTexture = new RenderTexture(width, height, 0); this.renderTexture.Create(); } RenderTexture active = RenderTexture.active; RenderTexture.active = this.renderTexture; if (Event.current.type == EventType.Repaint) { GL.Clear(false, true, Color.clear); } GUILayout.BeginArea(new Rect(0f, 0f, (float)width, (float)height)); GUI.DrawTexture(new Rect(0f, 0f, (float)width, (float)height), this.progressBarEmpty); GUI.DrawTextureWithTexCoords(new Rect(0f, 0f, num * (float)width, (float)height), this.progressBarFull, new Rect(0f, 0f, num, 1f)); GUILayout.EndArea(); RenderTexture.active = active; CVROverlay overlay = OpenVR.Overlay; if (overlay != null) { Texture_t texture_t = default(Texture_t); texture_t.handle = this.renderTexture.GetNativeTexturePtr(); texture_t.eType = SteamVR.instance.textureType; texture_t.eColorSpace = EColorSpace.Auto; overlay.SetOverlayTexture(this.progressBarOverlayHandle, ref texture_t); } } } }
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 static EVROverlayError ProcessDashboard(CVROverlay overlay, ref ulong dashboardHandle, bool dashboardVisible) { var err = EVROverlayError.None; if (dashboardHandle == 0) { err = overlay.FindOverlay("VRCX", ref dashboardHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } ulong handle = 0; err = overlay.CreateDashboardOverlay("VRCX", "VRCX", ref dashboardHandle, ref handle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(dashboardHandle, 1.5f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(dashboardHandle, VROverlayInputMethod.Mouse); if (err != EVROverlayError.None) { return(err); } } } var e = new VREvent_t(); while (overlay.PollNextOverlayEvent(dashboardHandle, ref e, (uint)Marshal.SizeOf(e))) { var type = (EVREventType)e.eventType; if (type == EVREventType.VREvent_MouseMove) { var m = e.data.mouse; var s = m_Browser1.Size; m_Browser1.GetBrowserHost().SendMouseMoveEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), false, CefEventFlags.None); } else if (type == EVREventType.VREvent_MouseButtonDown) { var m = e.data.mouse; var s = m_Browser1.Size; m_Browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, false, 1, CefEventFlags.LeftMouseButton); } else if (type == EVREventType.VREvent_MouseButtonUp) { var m = e.data.mouse; var s = m_Browser1.Size; m_Browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, true, 1, CefEventFlags.None); } } if (dashboardVisible) { var texture = new Texture_t { handle = m_Texture1.NativePointer }; err = overlay.SetOverlayTexture(dashboardHandle, ref texture); if (err != EVROverlayError.None) { return(err); } } return(err); }
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 RenderRoutine() { StartupGL(); if (!StartupOVR()) { CleanupGL(); return; } EVROverlayError overlayError = overlay.ShowOverlay(overlayHandle); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot show overlay."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); CleanupGL(); return; } while (RenderAlive) { DateTime begin = DateTime.Now; GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); if (CurrentCard == null) { if (CardQueue.TryDequeue(out Card c)) { if (c != null) { CurrentCard = c; continue; } } Thread.Sleep(500); } else { DrawCard(CurrentCard); GL.Clear(ClearBufferMask.DepthBufferBit); if (CurrentCard.Status == CardStatus.Hidden) { CurrentCard = null; Debug.WriteLine("Dropping card."); } overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.WriteLine("Cannot set texture."); Debug.WriteLine("Error: " + overlayError.ToString()); CleanupOVR(); CleanupGL(); return; } } if (EchoWindow) { GL.ClearColor(1, 1, 1, 0); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.DrawBuffer(DrawBufferMode.Back); GL.Viewport(0, 0, render_window.Width, render_window.Height); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Disable(EnableCap.Blend); EchoScene.Instance.Draw(); render_window.SwapBuffers(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, frameBufferId); GL.Enable(EnableCap.Blend); GL.DrawBuffer(DrawBufferMode.ColorAttachment0); GL.Viewport(0, 0, textureSizeX, textureSizeY); GL.ClearColor(0, 0, 0, 0); } VREvent_t ev = new VREvent_t(); if (overlay.PollNextOverlayEvent(overlayHandle, ref ev, (uint)Marshal.SizeOf(ev.GetType()))) { switch ((EVREventType)ev.eventType) { case EVREventType.VREvent_OverlayShown: Debug.WriteLine("Overlay shown."); break; case EVREventType.VREvent_OverlayHidden: Debug.WriteLine("Overlay Hidden."); break; } } if (vr.PollNextEvent(ref ev, (uint)Marshal.SizeOf(ev.GetType()))) { switch ((EVREventType)ev.eventType) { case EVREventType.VREvent_Quit: StopRender(); break; case EVREventType.VREvent_DriverRequestedQuit: StopRender(); break; } } DateTime end = DateTime.Now; double ms = (end - begin).TotalMilliseconds; Thread.Sleep((int)(Math.Max(12.0 - ms, 0))); } CleanupOVR(); CleanupGL(); }
// Token: 0x06005F2C RID: 24364 RVA: 0x00215578 File Offset: 0x00213978 private IEnumerator LoadLevel() { if (this.loadingScreen != null && this.loadingScreenDistance > 0f) { SteamVR_Controller.Device hmd = SteamVR_Controller.Input(0); while (!hmd.hasTracking) { yield return(null); } SteamVR_Utils.RigidTransform tloading = hmd.transform; tloading.rot = Quaternion.Euler(0f, tloading.rot.eulerAngles.y, 0f); tloading.pos += tloading.rot * new Vector3(0f, 0f, this.loadingScreenDistance); Transform t = (!(this.loadingScreenTransform != null)) ? base.transform : this.loadingScreenTransform; t.position = tloading.pos; t.rotation = tloading.rot; } SteamVR_LoadLevel._active = this; SteamVR_Events.Loading.Send(true); if (this.loadingScreenFadeInTime > 0f) { this.fadeRate = 1f / this.loadingScreenFadeInTime; } else { this.alpha = 1f; } CVROverlay overlay = OpenVR.Overlay; if (this.loadingScreen != null && overlay != null) { this.loadingScreenOverlayHandle = this.GetOverlayHandle("loadingScreen", (!(this.loadingScreenTransform != null)) ? base.transform : this.loadingScreenTransform, this.loadingScreenWidthInMeters); if (this.loadingScreenOverlayHandle != 0UL) { Texture_t texture_t = default(Texture_t); texture_t.handle = this.loadingScreen.GetNativeTexturePtr(); texture_t.eType = SteamVR.instance.textureType; texture_t.eColorSpace = EColorSpace.Auto; overlay.SetOverlayTexture(this.loadingScreenOverlayHandle, ref texture_t); } } bool fadedForeground = false; SteamVR_Events.LoadingFadeOut.Send(this.fadeOutTime); CVRCompositor compositor = OpenVR.Compositor; if (compositor != null) { if (this.front != null) { SteamVR_Skybox.SetOverride(this.front, this.back, this.left, this.right, this.top, this.bottom); compositor.FadeGrid(this.fadeOutTime, true); yield return(new WaitForSeconds(this.fadeOutTime)); } else if (this.backgroundColor != Color.clear) { if (this.showGrid) { compositor.FadeToColor(0f, this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a, true); compositor.FadeGrid(this.fadeOutTime, true); yield return(new WaitForSeconds(this.fadeOutTime)); } else { compositor.FadeToColor(this.fadeOutTime, this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a, false); yield return(new WaitForSeconds(this.fadeOutTime + 0.1f)); compositor.FadeGrid(0f, true); fadedForeground = true; } } } SteamVR_Render.pauseRendering = true; while (this.alpha < 1f) { yield return(null); } base.transform.parent = null; UnityEngine.Object.DontDestroyOnLoad(base.gameObject); if (!string.IsNullOrEmpty(this.internalProcessPath)) { UnityEngine.Debug.Log("Launching external application..."); CVRApplications applications = OpenVR.Applications; if (applications == null) { UnityEngine.Debug.Log("Failed to get OpenVR.Applications interface!"); } else { string currentDirectory = Directory.GetCurrentDirectory(); string text = Path.Combine(currentDirectory, this.internalProcessPath); UnityEngine.Debug.Log("LaunchingInternalProcess"); UnityEngine.Debug.Log("ExternalAppPath = " + this.internalProcessPath); UnityEngine.Debug.Log("FullPath = " + text); UnityEngine.Debug.Log("ExternalAppArgs = " + this.internalProcessArgs); UnityEngine.Debug.Log("WorkingDirectory = " + currentDirectory); EVRApplicationError evrapplicationError = applications.LaunchInternalProcess(text, this.internalProcessArgs, currentDirectory); UnityEngine.Debug.Log("LaunchInternalProcessError: " + evrapplicationError); Process.GetCurrentProcess().Kill(); } } else { LoadSceneMode mode = (!this.loadAdditive) ? LoadSceneMode.Single : LoadSceneMode.Additive; if (this.loadAsync) { Application.backgroundLoadingPriority = ThreadPriority.Low; this.async = SceneManager.LoadSceneAsync(this.levelName, mode); while (!this.async.isDone) { yield return(null); } } else { SceneManager.LoadScene(this.levelName, mode); } } yield return(null); GC.Collect(); yield return(null); Shader.WarmupAllShaders(); yield return(new WaitForSeconds(this.postLoadSettleTime)); SteamVR_Render.pauseRendering = false; if (this.loadingScreenFadeOutTime > 0f) { this.fadeRate = -1f / this.loadingScreenFadeOutTime; } else { this.alpha = 0f; } SteamVR_Events.LoadingFadeIn.Send(this.fadeInTime); if (compositor != null) { if (fadedForeground) { compositor.FadeGrid(0f, false); compositor.FadeToColor(this.fadeInTime, 0f, 0f, 0f, 0f, false); yield return(new WaitForSeconds(this.fadeInTime)); } else { compositor.FadeGrid(this.fadeInTime, false); yield return(new WaitForSeconds(this.fadeInTime)); if (this.front != null) { SteamVR_Skybox.ClearOverride(); } } } while (this.alpha > 0f) { yield return(null); } if (overlay != null) { if (this.progressBarOverlayHandle != 0UL) { overlay.HideOverlay(this.progressBarOverlayHandle); } if (this.loadingScreenOverlayHandle != 0UL) { overlay.HideOverlay(this.loadingScreenOverlayHandle); } } UnityEngine.Object.Destroy(base.gameObject); SteamVR_LoadLevel._active = null; SteamVR_Events.Loading.Send(false); yield break; }
public void UpdateOverlay() { CVROverlay overlay = OpenVR.Overlay; if (overlay == null) { return; } if (this.texture != null) { EVROverlayError evroverlayError = overlay.ShowOverlay(this.handle); if ((evroverlayError == EVROverlayError.InvalidHandle || evroverlayError == EVROverlayError.UnknownOverlay) && overlay.FindOverlay(SteamVR_Overlay.key, ref this.handle) != EVROverlayError.None) { return; } Texture_t texture_t = default(Texture_t); texture_t.handle = this.texture.GetNativeTexturePtr(); texture_t.eType = SteamVR.instance.textureType; texture_t.eColorSpace = EColorSpace.Auto; overlay.SetOverlayTexture(this.handle, ref texture_t); overlay.SetOverlayAlpha(this.handle, this.alpha); overlay.SetOverlayWidthInMeters(this.handle, this.scale); overlay.SetOverlayAutoCurveDistanceRangeInMeters(this.handle, this.curvedRange.x, this.curvedRange.y); VRTextureBounds_t vrtextureBounds_t = default(VRTextureBounds_t); vrtextureBounds_t.uMin = this.uvOffset.x * this.uvOffset.z; vrtextureBounds_t.vMin = (1f + this.uvOffset.y) * this.uvOffset.w; vrtextureBounds_t.uMax = (1f + this.uvOffset.x) * this.uvOffset.z; vrtextureBounds_t.vMax = this.uvOffset.y * this.uvOffset.w; overlay.SetOverlayTextureBounds(this.handle, ref vrtextureBounds_t); HmdVector2_t hmdVector2_t = default(HmdVector2_t); hmdVector2_t.v0 = this.mouseScale.x; hmdVector2_t.v1 = this.mouseScale.y; overlay.SetOverlayMouseScale(this.handle, ref hmdVector2_t); SteamVR_Camera steamVR_Camera = SteamVR_Render.Top(); if (steamVR_Camera != null && steamVR_Camera.origin != null) { SteamVR_Utils.RigidTransform rigidTransform = new SteamVR_Utils.RigidTransform(steamVR_Camera.origin, base.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; rigidTransform.pos.z = rigidTransform.pos.z + this.distance; HmdMatrix34_t hmdMatrix34_t = rigidTransform.ToHmdMatrix34(); overlay.SetOverlayTransformAbsolute(this.handle, SteamVR_Render.instance.trackingSpace, ref hmdMatrix34_t); } overlay.SetOverlayInputMethod(this.handle, this.inputMethod); if (this.curved || this.antialias) { this.highquality = true; } if (this.highquality) { overlay.SetHighQualityOverlay(this.handle); overlay.SetOverlayFlag(this.handle, VROverlayFlags.Curved, this.curved); overlay.SetOverlayFlag(this.handle, VROverlayFlags.RGSS4X, this.antialias); } else if (overlay.GetHighQualityOverlay() == this.handle) { overlay.SetHighQualityOverlay(0UL); } } else { overlay.HideOverlay(this.handle); } }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null || error) { return; } if (show) { //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); } else { //オーバーレイを非表示にする overlay.HideOverlay(overlayHandle); } //イベントを処理する uint uncbVREvent = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t)); while (overlay.PollNextOverlayEvent(overlayHandle, ref Event, uncbVREvent)) { if (eventlog) { Debug.Log(Tag + "Event:" + ((EVREventType)Event.eventType).ToString()); } //Debug.Log(Tag +"Event:"+ (Event.eventType).ToString()); switch ((EVREventType)Event.eventType) { case EVREventType.VREvent_MouseMove: MouseX = Event.data.mouse.x; MouseY = Event.data.mouse.y; break; case EVREventType.VREvent_MouseButtonDown: MouseClick = true; break; case EVREventType.VREvent_MouseButtonUp: MouseClick = false; break; case EVREventType.VREvent_DashboardActivated: break; case EVREventType.VREvent_DashboardDeactivated: break; case EVREventType.VREvent_DashboardRequested: break; case EVREventType.VREvent_DashboardThumbSelected: break; case EVREventType.VREvent_EnterStandbyMode: break; case EVREventType.VREvent_LeaveStandbyMode: break; case EVREventType.VREvent_KeyboardCharInput: break; case EVREventType.VREvent_KeyboardClosed: break; case EVREventType.VREvent_KeyboardDone: break; case EVREventType.VREvent_ResetDashboard: break; case EVREventType.VREvent_ScreenshotTriggered: break; case EVREventType.VREvent_WirelessDisconnect: break; case EVREventType.VREvent_WirelessReconnect: break; case EVREventType.VREvent_Quit: Debug.Log(Tag + "Quit"); ApplicationQuit(); break; default: break; } } if (overlay.IsDashboardVisible()) { //サムネイルにテクスチャを設定 if (thumbnailAvailable) { var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(thumbnailHandle, ref thumbnailTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにサムネイルをセットできませんでした. " + overlayError.ToString()); error = true; return; } } } //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle) && overlay.IsActiveDashboardOverlay(overlayHandle)) { //オーバーレイの大きさ設定(幅のみ。高さはSetOverlayMouseScaleの比から自動計算される) overlay.SetOverlayWidthInMeters(overlayHandle, width); //オーバーレイの透明度を設定 overlay.SetOverlayAlpha(overlayHandle, alpha); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } try { //マウスカーソルスケールを設定する(これにより表示領域のサイズも決定される) vecMouseScale.v0 = renderTexture.width; vecMouseScale.v1 = renderTexture.height; overlay.SetOverlayMouseScale(overlayHandle, ref vecMouseScale); //RenderTextureからネイティブテクスチャのハンドルを取得 overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString()); error = true; return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); error = true; return; } } }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); //オーバーレイを非表示にする //overlay.HideOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { var offset = new SteamVR_Utils.RigidTransform(); if (RenderTarget != null) { offset.pos = new Vector3(RenderTarget.position.x, RenderTarget.position.y, RenderTarget.position.z); offset.rot = RenderTarget.rotation; } else { offset.pos = new Vector3(0, 0, 0); offset.rot = Quaternion.Euler(0, 0, 0); } var t = offset.ToHmdMatrix34(); t.m5 = -1; overlay.SetOverlayTransformAbsolute(overlayHandle, SteamVR_Render.instance.trackingSpace, ref t); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }
private void Update() { #pragma warning disable 0219 string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod(); //クラス名とメソッド名を自動取得 #pragma warning restore 0219 //エラーが発生した場合や、ハンドルが無効な場合は実行しない if (IsError()) { return; } //イベントを処理する(終了された時true) if (ProcessEvent()) { Debug.Log(Tag + "VRシステムが終了されました"); ApplicationQuit(); } //サイドバイサイド3D overlay.SetOverlayFlag(overlayHandle, VROverlayFlags.SideBySide_Parallel, true); overlay.ShowOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { if (overlay.IsOverlayVisible(overlayHandle)) { //widthをセット インスペクタからいじれる overlay.SetOverlayWidthInMeters(overlayHandle, width); //HMD視点位置変換行列に書き込む。 //ここでは回転なし、平行移動ありのHUD的な状態にしている。 var wx = -0f; var wy = -0f; var wz = -overlayScreenDepth; p.m0 = 1; p.m1 = 0; p.m2 = 0; p.m3 = wx; p.m4 = 0; p.m5 = 1; p.m6 = 0; p.m7 = wy; p.m8 = 0; p.m9 = 0; p.m10 = 1; p.m11 = wz; //回転行列を元に、HMDからの相対的な位置にオーバーレイを表示する。 //代わりにSetOverlayTransformAbsoluteを使用すると、ルーム空間に固定することができる uint indexunTrackedDevice = 0;//0=HMD(他にControllerやTrackerにすることもできる) overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, indexunTrackedDevice, ref p); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } } }