ソースコードは以下の場所に置いておきます。各自のバージョンに合わせたプロパティ設定をしてから自由にご利用ください。
github: VulknAppAdocal2018
最初に行うことは、インスタンスを作成してVulkanライブラリーを初期化することです。アプリケーションごとの状態は、VKInstanceオブジェクトに格納されます。インスタンスが作成されるとvulkanライブラリーが初期化されアプリケーションの情報を実装することができます。
こちらがソースコードになります。
VkInstance _instance = nullptr;
void Renderer::_InitInstance()
{
VkApplicationInfo application_info{};
application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
application_info.apiVersion = VK_API_VERSION_1_0;
application_info.pApplicationName = "VulkanAppAdcal2018";
VkInstanceCreateInfo instance_create_info{};
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
instance_create_info.pApplicationInfo = &application_info;
auto err = vkCreateInstance(&instance_create_info, nullptr, &_instance);
if (VK_SUCCESS != err) {
assert(0 && "Vulkan ERROR: Create instance failed!!");
std::exit(-1);
}
}
void Renderer::_DeInitInstance()
{
vkDestroyInstance(_instance, nullptr);
_instance = nullptr;
}
instanceの生成だけですごく重たい。ここで重要な関数は、vkCreateInstance()の部分です。この部分がインスタンスを作成する部分です。と、いきなり言われてもわからないので順を追って説明します。
インスタンスを生成するには、最初に構造体アプリケーションの情報を入力する必要があります。このデータは任意ですが、特定の特殊な動作をするグラフィクスエンジンを使用しているなど、特定のアプリケーションに最適化するためにドライバーに有用な情報を提供します。つまりこの部分ですね。このアプリケーションで使われているvulkanのバージョンやアプリケーションのタイトルといった情報が渡されます。
VkApplicationInfo application_info{};
application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
application_info.apiVersion = VK_API_VERSION_1_0;
application_info.pApplicationName = "VulkanAppAdcal2018";
vulkanの多くの構造体では、メンバー変数sTypeので構造体のタイプを明示的に指定する必要があります。今後拡張情報pNextなどに別のメンバーを多く持つためです。今回は、とりあえずインスタンスの作成をするということなので、拡張は使用せずにpNextには、宣言時にデフォルトでnullptrが入ります。Vulkanの多くの情報は、関数のパラメータの代わりに構造体に渡されます。インスタンスを作成するのに十分な情報を提供するためにもう1つの構造体を埋めなければなりません。
VkInstanceCreateInfo instance_create_info{};
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
instance_create_info.pApplicationInfo = &application_info;
ここまでVulkanがインスタンスを作成するために必要なものをすべて準備できたので、vkCreateInstanceを呼び出します。
auto err = vkCreateInstance(&instance_create_info, nullptr, &_instance);
これでインスタンスの作成は、終了です。
##最後に
Vulkanは、下準備がたくさんあるため、しばらくは、見ている人がグラフィクスを動かしているという実感がないかもしれませんが最後には、「自分でGPUに触れてグラフィクス描写している」といった実感ができると思いますので気長に待ってください。
連絡先
tweeter: tositada_nakada
mail: nakadasanda@outlook.com
寄付
paypal: tositada_nakada
Amazon: 欲しいものリスト