SDL_bool SDL_Vulkan_GetInstanceExtensions(SDL_Window* window, unsigned int* pCount, const char** pNames)
window | Vulkanインスタンスイクステンションを必要とするウィンドウ (将来廃止される) |
pCount | イクステンションの数を代入するunsigned intポインタ |
names | NULLまたはVulkanインスタンスイクステンションの配列を書き込むポインタ |
unsigned int count;
if (!SDL_Vulkan_GetInstanceExtensions(window, &count, nullptr)) handle_error();
std::vector<const char*> extensions = {
VK_EXT_DEBUG_REPORT_EXTENSION_NAME // サンプルとして追加するイクステンション
};
size_t additional_extension_count = extensions.size();
extensions.resize(additional_extension_count + count);
if (!SDL_Vulkan_GetInstanceExtensions(window, &count, extensions.data() + additional_extension_count)) handle_error();
// Now we can make the Vulkan instance
VkInstanceCreateInfo create_info = {};
create_info.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
create_info.ppEnabledExtensionNames = extensions.data();
VkInstance instance;
VkResult result = vkCreateInstance(&create_info, nullptr, &instance);
pNameがNULLならば, 必要なVulkanインスタンスイクステンションの数がpCountに代入される. NULLでなければ, pCountにはpNames配列の要素数へのポインタである必要がある. そして, 関数の呼び出し後は実際に書き込んだpNameの数が上書きされる. pCountが必要なイクステンションの数より少なければ, pCount個まで書き込まれる. pCountが必要なイクステンションの数より小さければ, SDL_FALSEを戻すので全てのイクステンションが得られなかったことがわかる.
メモ: windowはSDL 2.0.8では必要だが, この引数は将来廃止される予定である.