#step1 インスタンスとデバイスの列挙
Vulkan application は、Instanceの初期化から始めます。アプリケーションごとの状態は、VKInstanceオブジェクトに格納されます。インスタンスが作成されるとvulkanライブラリーが初期化されアプリケーションの情報を実装することができます。vulkanライブラリーを初期化した後、どのデバイスを使用するか探して選択する必要があります。vulkanでは、複数のデバイスを使用することができます。
#step2 キューとデバイス
使用するデバイスをより具体的に記述した論理デバイスを作成する必要があります。
キューファミリーには、いくつかの種類に分かれており、各キューは、制限されたコマンドを使用することができます。例えば計算コマンドのみを行うキューや、メモリーの操作するコマンドキューなどがあります。キューのcommandは、そのグラフィクスデバイスによって異なる場合があります。
#step3 ウィンドウサーフェスとスワップチェーン
Vulkanは、プラットフォームに依存しないAPIなのでそれ単体でウィンドウシステムとして機能させることができません。vulkanと、ウィンドウシステムの間を接続させるには、WSI(Windows system Integration)拡張させる必要があります。そのためにウィンドウサーフェスとスワップチェーンが必要です。
サーフェスは、プラットフォーム上のウィンドウを抽象化したものです。Vulkanでは、この機能は、オプションなので、ウィンドウが必要ない場合には、非表示にすることができます。
スワップチェーンは、レンダリング結果をサーフェスに提示する機能を提供します
#step4 Image viewとバッファ
スワップチェーンが作成されたので、その中のImageハンドラーを取得し、その後のレンダリング処理に渡します。
レンダリング処理に渡すものは、2つあり、vkImageViewとVkFrameBufferです。
vkImageViewは、Imageオブジェクトをパイプラインに含むには、必要です
VkFrameBufferは、レンダーパスインスタンスが使用する特定のメモリを表します。
#step5 レンダーパス
Vulkanのレンダリングパスでは、レンダリング操作中に、使用される画像のタイプ使用方法、その内容の処理方法などを指定しています。
#step6 グラフィクスパイプライン
3dを2dに変換するといったいわゆるシェーダモジュールに関する処理を記述します。
グラフィクスパイプライン Wikipedia
#step7 コマンドバッファーとコマンドプール
Vulkanにおける描写などの操作は、あらかじめキューに登録しておく必要があります。これらの命令は、コマンドプールに記録されます。そしてコマンドプールは、コマンドバッファを通してGPUに処理を渡します。
#step8 メインループ
描写ループは、まずスワップチェーンからイメージを取得します。次にイメージに適切なコマンドバッファを選択しvkQueueSubmit()を行い実行します。最後に画像をスワップチェーンに戻して画像を描写します。
#最後に
つたない文章を最後まで見ていただきありがとうございます。次回からは、上のステップを順にプログラムを書いていきます。拡散してもらえると嬉しいです。
連絡先
tweeter: tositada_nakada
mail: nakadasanda@outlook.com
寄付
paypal: tositada_nakada
Amazon: 欲しいものリスト