Exemple #1
0
        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);
        }
Exemple #2
0
    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());
            error = true;
            return;
        }

        //オーバーレイ機能の初期化
        overlay      = OpenVR.Overlay;
        overlayError = overlay.CreateDashboardOverlay(OverlayKeyName, OverlayFriendlyName, ref overlayHandle, ref thumbnailHandle);
        if (overlayError != EVROverlayError.None)
        {
            Debug.LogError(Tag + "Overlayの初期化に失敗. " + overlayError.ToString());
            error = true;
            return;
        }

        //マウス(Dashboardのときのみ有効)
        overlay.SetOverlayInputMethod(overlayHandle, VROverlayInputMethod.Mouse);

        //オーバーレイに渡すテクスチャ種類の設定
        OverlayTextureBounds = new VRTextureBounds_t();
        var isOpenGL = SystemInfo.graphicsDeviceVersion.Contains("OpenGL");

        if (isOpenGL)
        {
            //pGLuintTexture
            overlayTexture.eType   = ETextureType.OpenGL;
            thumbnailTexture.eType = ETextureType.OpenGL;
            //上下反転しない
            OverlayTextureBounds.uMin = 1;
            OverlayTextureBounds.vMin = 0;
            OverlayTextureBounds.uMax = 1;
            OverlayTextureBounds.vMax = 0;
            overlay.SetOverlayTextureBounds(thumbnailHandle, ref OverlayTextureBounds);
        }
        else
        {
            //pTexture
            overlayTexture.eType   = ETextureType.DirectX;
            thumbnailTexture.eType = ETextureType.DirectX;
            //上下反転する
            OverlayTextureBounds.uMin = 0;
            OverlayTextureBounds.vMin = 1;
            OverlayTextureBounds.uMax = 1;
            OverlayTextureBounds.vMax = 0;
            overlay.SetOverlayTextureBounds(overlayHandle, ref OverlayTextureBounds);
        }

        //サムネイルテクスチャが存在するなら
        if (thumbnailTextureInput != null)
        {
            //サムネイルテクスチャの情報を取得
            var thumWidth  = thumbnailTextureInput.width;
            var thumHeight = thumbnailTextureInput.height;
            //作業用テクスチャの領域を確保
            thumbnailTexture2D = new Texture2D(thumWidth, thumHeight, TextureFormat.RGBA32, false);

            //力技でコピーして圧縮を解除
            if (isOpenGL)
            {
                for (int y = 0; y < thumHeight; y++)
                {
                    for (int x = 0; x < thumWidth; x++)
                    {
                        thumbnailTexture2D.SetPixel(x, y, thumbnailTextureInput.GetPixel(x, y));
                    }
                }
            }
            else
            {
                //DirectXは上下反転
                for (int y = 0; y < thumHeight; y++)
                {
                    for (int x = 0; x < thumWidth; x++)
                    {
                        thumbnailTexture2D.SetPixel(x, thumHeight - y - 1, thumbnailTextureInput.GetPixel(x, y));
                    }
                }
            }

            //操作を反映
            thumbnailTexture2D.Apply();
            //ネイティブテクスチャを取得して設定
            thumbnailTexture.handle = thumbnailTexture2D.GetNativeTexturePtr();
            //サムネイル利用可能フラグを立てる
            thumbnailAvailable = true;
        }

        Debug.Log(Tag + "初期化完了しました");
    }