char const * const * SDL_Vulkan_GetInstanceExtensions(Uint32 *count);
| Uint32 * | count | 戻された拡張機能の数の代入先へのポインタ |
(char const * const *) 成功のとき拡張機能名の文字列配列を戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.
この関数は, SDL_Vulkan_LoadLibrary()を呼んだ場合も, SDL_WindowをSDL_WINDOW_VULKANフラグを付けて生成した場合も, 呼ぶ必要がある.
count変数に代入された要素数はVkInstanceCreateInfo::enabledExtensionCountに設定され, 戻された配列はVkInstanceCreateInfo::ppEnabledExtensionNamesに設定され, VulkanのvkCreateInstance APIで使用される.
戻された配列を解放してはならない. これはSDLが解放する.
SDL 3.2.0以降
extern void handle_error(void);
#ifndef VK_EXT_DEBUG_REPORT_EXTENSION_NAME
#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
#endif
Uint32 count_instance_extensions;
const char * const *instance_extensions = SDL_Vulkan_GetInstanceExtensions(&count_instance_extensions);
if (instance_extensions == NULL) { handle_error(); }
int count_extensions = count_instance_extensions + 1;
const char **extensions = SDL_malloc(count_extensions * sizeof(const char *));
extensions[0] = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
SDL_memcpy(&extensions[1], instance_extensions, count_instance_extensions * sizeof(const char*));
// ここでVulkanインスタンスを生成する
VkInstanceCreateInfo create_info = {};
create_info.enabledExtensionCount = count_extensions;
create_info.ppEnabledExtensionNames = extensions;
VkInstance instance;
VkResult result = vkCreateInstance(&create_info, NULL, &instance);
SDL_free(extensions);