Qualcomm OpenXR SDK ユーザー ガイド (1)

1 OpenXR の概要

OpenXR は、AR、VR、および MR プラットフォームとデバイスへのアクセスを提供するロイヤリティ フリーのフレームワークです。OpenXR が登場する前は、さまざまなベンダーが独自の SDK を構築して XR デバイスをサポートしていました。現在のマルチベンダー SDK エコシステムには、次の制限があります。

  • 1 つの SDK 用に開発されたアプリは、すべての HMD で実行できるわけではありません (SDK ごとに API が異なるため)
  • アプリケーション開発者は、同じアプリケーションを異なる SDK に移植して各 HMD で実行する必要があります
  • 異なる SDK で API の変更がある場合は、報告する必要があります
  • 現在、AR、VR、および MR には共通の SDK がありません (一部の SDK は AR のみ、VR のみなど)。
  • アプリケーション エコシステムは、さまざまな SDK と HMD によって制限されます
  • 利用可能なほとんどの SDK と HMD は WebXR をサポートしていません

以下の図は、OpenXR と比較した断片化された SDK エコシステムを示しています。

ここに画像の説明を挿入

図の左側は、さまざまな SDK と、サポートされている HMD で実行するためのアプリケーションのクロスポーティングを備えた断片化されたエコシステムです。

図の右側は、アプリケーション レイヤーとデバイス プラグイン レイヤーの共通フレームワーク インターフェイスであり、アプリケーションが OpenXR をサポートするさまざまな XR HMD でクロス機能を持つことを可能にします。

OpenXR はこのギャップを埋め、次の利点を提供します。

  • アプリケーションの相互移植は不要 (一度開発すると、どの HMD でも動作します) - 統一された API を使用
  • 統一されたデバイス プラグイン インターフェイスを提供し、OpenXR アプリケーション プラットフォームを独立させる
  • AR、VR、MRの統合体験SDKを提供
  • WebXR のサポート

OpenXR は、多くのレイヤーとコンポーネントに分割されています。主なコンポーネントは次のとおりです。

  • 応用
  • ローダ
  • API层(API layer)
  • ランタイム (ランタイム)
  • シンセサイザー

次の図は、OpenXR コンポーネントの配布を示しています。
![ここに写真の説明を挿入](https://img-blog.csdnimg.cn/34f9b8af66314e268694d4eeaa0ecaf0.png

1.1 ローダー

ローダーは、アプリケーション、ランタイム、およびその他の OpenXR レイヤーの間の中間レイヤーです。ローダーは、システムで利用可能な OpenXR ランタイムまたは API レイヤーを検出し、公開し、場合によっては読み込むために不可欠です。セットアップが完了すると、ローダーは、これらの各コンポーネントへの OpenXR コマンドの適切なディスパッチを管理する役割も果たします。

ローダ:

  • アプリケーションのリクエストに使用されるランタイムを決定するため、システムで 1 つ以上の OpenXR ランタイムをサポートする必要があります。ランタイムをロードし、インスタンスをアプリケーションに返します。
  • API をアプリケーション レイヤーに公開してランタイム インスタンスを作成し、API サポート レイヤーを確認して、OpenXR コマンドをランタイムの下位レイヤーにルート化します。
  • OpenXR API レイヤーをサポートする必要があります (アプリケーション、開発者、または標準のシステム設定で有効にできるオプションのモジュール)
  • API ルーティングとランタイム操作をオフロードすることで、OpenXR アプリケーションの全体的なメモリとパフォーマンスへの影響を軽減するための努力が必要です。

次の図は、OpenXR ローダーの相互作用を示しています。
ここに画像の説明を挿入

以下は、ローダーによってアプリケーション層に向けて公開される API (重要な機能) です。

  • xrCreateInstance
  • xrDestroyInstance
  • xrEnumerateApiLayerProperties
  • xrEnumerateInstanceExtensionProperties
  • xrGetInstanceProcAddr
  • xrGetInstanceProperties
  • xrPollEvent
  • xrGetSystem
  • xrGetSystemProperties
  • xrCreateSession
  • xrDestroySession
  • xrEnumerateReferenceSpaces
  • xrCreateReferenceSpace
  • xrCreateActionSpace
  • xrLocateSpace
  • xrDestroySpace
  • xrEnumerateSwapchainFormats
  • xrCreateSwapchain
  • xrDestroySwapchain
  • xrEnumerateSwapchainImages
  • xrAcquireSwapchainImage
  • xrWaitSwapchainImage
  • xrReleaseSwapchainImage
  • xrBeginSession
  • xrEndSession
  • xrRequestExitSession
  • xrWaitFrame
  • xrBeginFrame
  • xrEndFrame
  • xrLocateViews
  • xrCreateActionSet
  • xrDestroyActionSet
  • xrCreateAction
  • xrDestroyAction
  • xrGetActionStatePose
  • xrSyncActions
  • xrApply触覚フィードバック
  • xrStop触覚フィードバック

SXR と OpenXR SDK および API 関数の API の違いに関する詳細はまだ説明されていません。

1.2 ランタイム

OpenXR ランタイムは、OpenXR API を実装するソフトウェアです。システムには複数の OpenXR ランタイムがインストールされている場合がありますが、一度にアクティブにできるランタイムは 1 つだけです。各 OpenXR ランタイムは、完全な VR/AR/MR システムを制御します。

ここで、ランタイムには、ランタイム クライアント、ランタイム サーバー、およびコンポジターが含まれます。ランタイム クライアントはアプリケーション プロセスと連携します。アプリケーションは、ランタイム クライアントのローダーを介してランタイム関数を呼び出すことができます。ランタイムが他の操作を実行する前に、ランタイム クライアントは ipc_instance_create 呼び出しを通じてランタイム サーバーとの接続を確立する必要があります。

その後、レンダリング レイヤーのデータなどの情報を継続的にランタイム サーバーに送信できます。

ランタイム サーバーは、アプリケーションとは別のプロセスで実行されます。ランタイム サーバーは継続的に IPC コマンドをリッスンし、接続されたランタイム クライアントからレンダリング データを受信します。ランタイム サーバーでコンポジター ループが作成され、データが処理されます。これには、すべてのレイヤーの取得、再投影、ワープ、最終的なデバイスへの表示が含まれます。

1.3 API层

API レイヤーは、OpenXR システムを強化するオプションのコンポーネントです。アプリケーションからランタイムへの途中で、既存の OpenXR コマンドをインターセプト、評価、変更、および挿入できます。

API レイヤーは、アプリケーション リクエストなど、さまざまな方法で有効化されるライブラリとして実装されます。xrCreateInstance の呼び出し中に、OpenXR システムですべての API レイヤーが有効になります。各 API レイヤーは、任意の OpenXR コマンドをフック (インターセプト) することを選択できます。これにより、無視または拡張することができます。API レイヤーは、すべての OpenXR コマンドをインターセプトする必要はありませんが、必要なものだけをインターセプトする必要があります。

1.4 シンセサイザー

シンセサイザは共有ライブラリとして使用され、同じプロセス内でランタイム サーバーによって呼び出されます。すべてのレイヤーを取得し、それらを再投影してワープし、デバイスに表示します。スレッド qxr_multi_main_loop スレッドは、レイヤーをスレッド render_thread_loop に送信できます。スレッド render_thread_loop がワープしてシーンを表示します。

コンポジターは次の機能を公開します:
コンポジターのライフサイクルの制御:

  • 初期化/シャットダウン
  • 一時停止/再開コンポジション
  • 待機/開始/終了フレーム

セッション登録

  • 始める
  • セッション終了

層資源共有

  • レイヤーイメージの登録/登録解除
  • IsLayerImageRegistered

内層

  • 内部レイヤーを有効にする

歪んだメッシュ

  • SetDistortionGridData

バージョンの詳細

  • GetVersion

おすすめ

転載: blog.csdn.net/weixin_38498942/article/details/128407884