2

Vulkan のドキュメントには、WSI プラットフォームに関する次の記述があります。

Vulkan API は、どのタイプのプラットフォーム オブジェクトも定義しません。プラットフォーム固有の WSI 拡張機能が定義されています。これには、WSI を使用するためのプラットフォーム固有の機能が含まれています。これらの拡張機能の使用は、プリプロセッサ シンボルによって保護されています。

• VK_USE_PLATFORM_ANDROID_KHR - Android

• VK_USE_PLATFORM_MIR_KHR - ミール

• VK_USE_PLATFORM_WAYLAND_KHR - ウェイランド

• VK_USE_PLATFORM_WIN32_KHR - Microsoft Windows

• VK_USE_PLATFORM_XCB_KHR - XCB ライブラリを使用した X Window System

• VK_USE_PLATFORM_XLIB_KHR - Xlib ライブラリを使用した X ウィンドウ システム

プラットフォームまたはウィンドウ システムを選択し、コンパイル前に正しいシンボルを定義する必要があることを理解しています。Android または Windows に対してコンパイルする場合、次のように記述できます。

#if defined(ANDROID) || defined (__ANDROID__)
  #define VK_USE_PLATFORM_ANDROID_KHR 1
#elif defined(_WIN32)
  #define VK_USE_PLATFORM_WIN32_KHR 1
#endif

これまでのところ、OK。Android と Windows には独自のウィンドウ システムがあり、これで十分です。しかし、Linuxにはいくつかのウィンドウシステムがあります-Xlib、XCB、Wayland、およびMIRです。

どのウィンドウ システムがその環境で使用されているかを知るのに役立つ可能性がある C/C++プリプロセッサ シンボルがあるかどうかを知りたいので、混乱することなく各 API を処理できる汎用コードを記述できます。

4

2 に答える 2

2

あなたがウィンドウ システムとのインターフェイスをとっているのであれば、必要なプリプロセッサ シンボルはすでにわかっています。

アプリケーション コードとして (ネイティブ ウィンドウの周りにラッパーを使用して) そうでない場合は、ラッパーに vkSurface を要求します。それが利用できない場合は、ラッパーのメンテナーに問題を提起します。

vulkan ライブラリの場合は、すべての Linux ウィンドウ オプションを処理できるはずです。すべてのプリプロセッサ シンボルを有効にし、アプリケーションが呼び出す関数に応じて必要な関数を手動でロードする場合。

于 2016-05-09T12:19:58.403 に答える