Vulkan のセットアップ

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

開始する前に、適切なバージョンのハードウェアとプラットフォームが揃っていることを確認してください。次のいずれかの端末で Android N Developer Preview 2 以上を実行している必要があります。

  • Nexus 6P
  • Nexus 5X
  • Nexus Player

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

ダウンロード

まず、複数のツールとその他のソフトウェアをダウンロードする必要があります。

  1. Android Studio をダウンロードしていない場合は、こちらからダウンロードします
  2. NDK r12 ベータ版をダウンロードします。
  3. Android N Preview SDK をダウンロードしてインストールします。
  4. (任意)&lt;ndk-root&gt;/sources/third_party/shaderc/ に移動して次のコマンドを実行することで、NDK r12 ベータ版で Shaderc をビルドします。
    ../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk \
     APP_STL:=c++_shared APP_ABI=all libshaderc_combined
    
    APP_STLgnustl_staticgnustl_sharedc++_static、または c++_shared として指定できます。
  5. ターミナル ウィンドウを開き、git を使用して、Android Vulkan サンプルが含まれるレポジトリからサンプルのクローンを作成します。
    $ git clone https://github.com/googlesamples/vulkan-basic-samples.git
    
  6. LunarGSamples/ ディレクトリに移動します。このディレクトリは、前のステップでチェックアウトしたローカル レポジトリにあります。
  7. 次のコマンドを入力して、gslang ソースを更新します。
    $ ./update_external_sources.sh -s -g
    

インストールのテスト

Vulkan が適切に設定されていることを確認するには、Vulkan API サンプルのセットを使用してテストします(サンプルが提供されているのはテスト目的でもあります)。 これらのサンプルをビルドして実行するには、次のステップに従います。

  1. (任意)次のコマンドを入力してソースをビルドします。
    $ cd API-samples
    $ cmake -DANDROID=ON -DANDROID_ABI=[armeabi-v7a|arm64-v8a| x86|x86_64|all(default)]
    
  2. サンプルを Android Studio にインポートします。インポートするには、[File] > [Import project (Eclipse, ADT, Gradle)] を選択し、LunarGSamples/API-Samples/android ディレクトリを選択します。

    コンポーネントや SDK バージョンが不足しているというエラーが表示される場合がありますが、このエラー メッセージは無視して、インストール指示に従います。

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

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

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

プロジェクトのコンパイル

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

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

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

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

プロジェクトの実行

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

APK をデバッグするには、[Run] > [Debug <プロジェクト名>] を選択します。 プロジェクトにはそれぞれ Java バージョンとネイティブ(C または C++)バージョンがありますが、 アプリのネイティブ バージョンを実行してください。 たとえば、drawcube の場合は drawcube-native を実行します。

ほとんどのサンプルは機能が単純で、実行後に多くのサンプルが自動的に停止します。 drawcube のサンプルは見た目に楽しいものの 1 つで、 実行時には図 3 のようなイメージが表示されます

適切に実行されると多色のキューブが表示される

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

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

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

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

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

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