問題タブ [openvr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 単一スレッドの作成時に SteamVR フレームがスパイクする
SteamVR/OpenVR を使用するネイティブ C++ アプリケーションがあります。一部のフレームでは、複数のスレッドを作成して作業を分散しています。これらのスレッドはすべて、続行する前に終了する必要があるため、すぐに join を呼び出します。
マルチスレッドの計算に 1 ミリ秒もかからないにもかかわらず、SteamVR で利用できるフレーム同期ウィンドウで示されるように、フレーム時間は依然として 16 ミリ秒をはるかに超えています (スケールは 16 で止まります)。
この問題は、OpenVR サンプル プロジェクトhellovr_openglで単一の空のスレッドを開始し、その後すぐに参加するだけで簡単に再現できます。私の場合、このコード スニペットを MainApplication の RenderFrame() 関数内に挿入しましたが、他の場所でも同様に機能します。
私自身のアプリケーションでは、フレームごとに高いフレーム時間が得られました。OpenVR サンプル プロジェクトで問題を再現すると、数フレームごとに発生するように見えますが、それでも非常に頻繁に発生します。
もちろん、フレームごとにスレッドを再利用する場合はスレッドをプールする必要があることは承知していますが、いずれにせよ、単一の (またはいくつかの) スレッドを作成 (および結合) するのにそれほど時間がかからないはずです。そして、時間測定が示すように、16ms にさえ近づきません。では、なぜ OpenVR がこれほど長い間停止するのでしょうか?
c# - Window Capture C# と VR オーバーレイの作成
openvr_apiを使用して仮想現実メガネに送信するオーバーレイを作成するために、1 つ以上の特定のウィンドウをキャプチャしようとしています。
問題は、C# でこれを行うための最善の方法を教えてくれるものを Google 全体で見つけられないことです。
私は javascript、php、python の専門家であり、一般的に Web に焦点を当てたすべてのことを扱います。C# での記述方法は知っていますが、このタイプのアプリケーションを作成するメカニズムはよくわかりません。
アイデアは、私が開発した特定のアプリケーションのウィンドウを探している実行可能ファイルを作成することです (ウィンドウは透明で、その内容は 10 fps の速度で更新されます)。それらのウィンドウの 1 つが存在する場合は、その内容をオーバーレイで表示します。 VRで。
これまでのところ、ウィンドウを検索して見つけるクラスがあり、それらから各ウィンドウに関連付けられたIntPtrを取得します。
したがって、openvr_apiを使用すると、次のことが可能になります。
- SetOverlayTexture : ID3D11Texture または Gluint (openGl)
- SetOverlayRaw : 非推奨
- SetOverlayFromFile : 画像
私の質問は、どうすればいいですか?
- 100 ミリ秒ごとに画像を作成して保存し、setOverlayFromFile 経由で送信します。
- OpenTK で 100ms ごとにテクスチャを作成し、setOverlayTexture 経由で送信します。
ウィンドウをキャプチャする最良の方法は何ですか? ウィンドウをキャプチャしているときに、その周りに黄色のフレームが表示される同様のアプリケーションを見たことがあります。これは、glew32.dllとopenvr_api.dllのみを使用する非常に小さなアプリケーションであり、おそらく C++ で記述されているため、ウィンドウをキャプチャする方法は、ここで公開した方法ではありません。
どこに行くべきかを知るためのガイダンスはありますか?