//表示情報を更新
    private void updateTexture()
    {
#pragma warning disable 0219
        string Tag = "[" + this.GetType().Name + ":" + System.Reflection.MethodBase.GetCurrentMethod();         //クラス名とメソッド名を自動取得
#pragma warning restore 0219

        overlay.SetOverlayFlag(overlayHandle, VROverlayFlags.SideBySide_Parallel, SideBySide);

        //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;
        }
    }
Exemple #2
0
    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);
        }
    }
    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;
                }
            }
        }
    }