Vulkan の設定

このドキュメントでは、いくつかのサンプルアプリをダウンロード、コンパイル、実行して、Vulkan グラフィック ライブラリを使い始める方法について説明します。

開始する前に、適切なバージョンのハードウェアとプラットフォームが揃っていることを確認してください。Vulkan をサポートし、Android API レベル 24 以降を実行しているデバイスを使用する必要があります。

Android のバージョンを確認するには、[Settings] メニューに移動し、[About <デバイス名>] > [Android Version] を選択します。ハードウェアとプラットフォームのバージョンが適切であることを確認したら、必要なソフトウェアをダウンロードできます。

ダウンロード

まず、いくつかのツールとその他のソフトウェアをダウンロードする必要があります。Windows ホストでは、ツールとソースコードを深い階層のファイルパスに保存しないようおすすめします。これは、一部のバージョンの Windows OS に存在するファイルパスの制約を回避するためです。

  1. Android Studio をダウンロードしていない場合は、こちらからダウンロードします。これには最新の Android SDK が含まれています。
  2. NDK を Android Studio 内からインストールするか、手動でダウンロードします。
  3. <ndk-root>/sources/third_party/shaderc/ に移動して以下のコマンドを実行し、Shaderc をビルドします。
  4. Mac または Linux の場合:

        $ ../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk \
         APP_ABI=all APP_PLATFORM=android-24 APP_STL:=c++_static \
         -j8 clean libshaderc_combined
        

    Windows の場合:

        ..\..\..\ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk ^
         APP_ABI=all APP_PLATFORM=android-24 APP_STL=c++_static ^
         -j8 clean libshaderc_combined
        

    Shaderc のドキュメントについては、シェーダー コンパイラをご覧ください。

インポート

次のいずれかの方法で Vulkan© API サンプルを Android Studio にインポートできます。

  1. Android Studio を使って自動的にインポートする: これを行うには、[File] > [New] > [Import Sample] を選択してから、[NDK] > [Vulkan API Samples] を選択します。

    コンポーネントや SDK バージョンが不足しているというエラーが表示される場合がありますが、そのようなメッセージが表示されても、Android Studio のインストール プロンプトに沿って処理を進めてください。インポートを進めるうちに、自動的にエラーの修正が行われます。

    数分後、[Project] ペインに図 1 のようなウィンドウが表示されます。

    サンプルを Android Studio にインポートした後の [Project] ペイン

    図 1. インポート後のサンプルを表示する [Project] ペイン

  2. デバイスから手動でインポートする:
    • 次のコマンドでソースコードをダウンロードします。
      git clone https://github.com/googlesamples/vulkan-basic-samples.git
    • Android Studio でサンプルを開きます。これを行うには、[File] > [Open] を選択し、作成したソースのクローンがあるディレクトリに移動して [OK] をクリックします。

コンパイル

プロジェクトをコンパイルするには、次のステップに従います。

  1. Android Studio の [Project] パネルで対象のプロジェクトを選択します。
  2. [Build] メニューで [Make Module <モジュール名>] を選択するか、[Build APK] を選択して APK を生成します。
  3. 依存関係の問題をすべて解決してコンパイルします。図 2 のように、コンパイルするプロジェクトを、構成のプルダウンから 1 つずつ選択できます。
  4. 構成のプルダウンから drawcube プロジェクトを選択する

    図 2. コンパイルするプロジェクトを 1 つずつ選択する

注: 追加のチュートリアル サンプルでは、Android Studio に統合されているオフライン コンパイルによってコンパイルされたシェーダーの使い方を示しています。わかりやすさを考慮し、各チュートリアルは独立しており、Android Studio の標準のビルド手順に沿ってビルドするようになっています。

実行

プロジェクトを実行するには、[Run] > [Run <プロジェクト名>] を選択して、実行する APK を指定します。

APK をデバッグするには、[Run] > [Debug <プロジェクト名>] を選択します。たとえば、drawcube の場合は 15-draw_cube を実行します。

サンプルの多くは単純に 1 つの API の使い方を示すものであり、ほとんどのサンプルは実行後に自動的に停止します。drawcube のサンプルは視覚的に面白いものの 1 つで、実行すると図 3 の画像が表示されます

適切に実行されるとカラフルなキューブが表示される

図 3. 適切にコンパイルされたプログラムを実行してイメージを表示する

ダイナミック ローダの使用

サンプルでは、dlopen()dlsym() を使用して Vulkan API ポインタを取得するために、vulkan_wrapper.h/cpp で定義されているダイナミック ローダのヘルパー関数を使用しています。ポインタを vulkan.so に静的にリンクすることはしていません。

このローダを使用すると、コードは API レベル 23 以前のバージョンのプラットフォームにリンクすることが可能になります。API レベル 23 以前のバージョンは vulkan.so 共有ライブラリを含んでいませんが、Vulkan API をサポートするデバイスで実行できます。

次のスニペットに、ダイナミック ローダの使い方を示します。

    #include "vulkan_wrapper.h" // Include Vulkan_wrapper and dynamically load symbols.
    ...
    // Before any Vulkan API usage,
    InitVulkan();
    

参考情報