SteamVR 未接続では登録と解除を押せなくする - #43
Merged
Merged
Conversation
OpenVR の IVRApplications は vrserver が動いていないと使えない。 #12 で Background 初期化へ変えてから、SteamVR を起動していない手動起動が 想定された使い方になり、そのあいだ登録も解除もできなかった。 トレイのメニュー項目も押せないままだった。 SteamVR が動いていないときは、その設定ファイルへ直に書く。 - <config>/appconfig.json の manifest_paths - <config>/vrappconfig/<app_key>.vrappconfig の autolaunch どちらも AddApplicationManifest と SetApplicationAutoLaunch が書き込む先で、 SteamVR は起動時にここから読み直す。置き場所は openvrpaths.vrpath の config 配列から取り、読めなければ既定のインストール先を試す。 SteamVR が動いている間はこの経路を使わない。あちらは設定をメモリに持ち 終了時に書き戻すため、後ろから書いても消される。裏を返せば動いていない間は 安全に書けて、次の起動でそれが読まれる。 appconfig.json が読めない内容だったときは書き換えを諦める。空として 扱って書き直すと、入っている他のアプリの登録を巻き添えで消す。 書き込みは一時ファイルへ書いてからの改名で行う。 登録できる状態かはトレイへ steamvr_configurable として別に渡す。 steamvr_available をそのまま使うと、ツールチップの「接続していません」と メニューの押せなさが連動し、片方を直すともう片方が壊れる。 start_steamvr は open の成否ではなく configurable? で進むかを決める。 届く先がまったく無いときだけ何もしない。毎回試すと、SteamVR を入れて いない環境で 60 秒ごとに同じ失敗を書き続けることになる。
This reverts commit f347cbd. 方針を変える指示があったため戻す。SteamVR の設定ファイルを直に書くのは やめ、SteamVR が動いていない間は登録の操作そのものを行えないようにする。
登録も解除も OpenVR の IVRApplications を通るため、SteamVR に つながっていなければ必ず失敗する。トレイのメニューは以前から steamvr_available で無効にしていたが、設定ウィンドウのボタンは 押せたままだった。押すと黙って失敗し、エラー通知が出るだけで、 何が足りないのかが画面から読めない。 両方を同じ条件で無効にする。押せるかどうかは refresh_status が 一定間隔で映し直すので、SteamVR を起動すればその場で押せるようになる。 初期状態は押せない形で作る。開いた直後に一瞬押せて見えるのを避ける。 設定ファイルを直に書けば非起動時でも登録できるが、採らない理由を docs/architecture.md へ記録する。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
方針
SteamVR が動いていない間は、登録の操作そのものを行えないようにします。
当初は設定ファイルへ直に書いて非起動時でも登録できるようにしていましたが、指示により方針を変えました。その実装は
5b64f4cの 1 つ前で revert してあるので、この PR の差分は下の 3 ファイルだけです。何が問題だったか
登録も解除も OpenVR の
IVRApplicationsを通るため、SteamVR につながっていなければ必ず失敗します。トレイのメニューは以前から
steamvr_availableで無効にしていましたが、設定ウィンドウのボタンは押せたままでした。 押すと黙って失敗し、「SteamVR への登録」というエラー通知が出るだけで、何が足りないのかが画面から読めません。同じ操作が、置き場所によって押せたり押せなかったりする状態でもありました。
どう直したか
設定ウィンドウの登録・解除ボタンを、SteamVR につながっていない間は無効にします。トレイと同じ条件になります。
押せるかどうかは
refresh_statusが一定間隔(2 秒)で映し直すので、画面を開いたまま SteamVR を起動すれば、その場で押せるようになります。初期状態は押せない形で作ります。
build_steamvr_tabの時点では接続状態が分からず、refresh_statusが来るまで一瞬押せて見えてしまうためです(情報タブの更新ボタンと同じ扱いです)。設定ファイルを直に書く案を採らない理由
docs/architecture.mdへ記録しました。「検討して採らなかった」ことが残らないと、次に同じ課題へ当たった人が同じ調査からやり直します。appconfig.jsonには他のアプリの登録も入っており、形式を読み違えるとそれらを巻き添えにする確かめたこと
crystal spec242 examples, 0 failurescrystal tool format --check src specx86_64-pc-windows-msvcへのクロスコンパイルmasterとの差分が空であること(=残っているのは今回の 3 ファイルだけ)確かめられていないこと
描画は実機でしか見られません。
ブランチ名は
claude/steamvr-offline-registerのままです。 方針が変わって内容と合わなくなりましたが、付け替えると PR を立て直すことになるためそのままにしています。