void SDL_Vulkan_GetDrawableSize(SDL_Window* window, int* w, int* h)
window | サイズを調べるSDL_Window |
w | 幅を代入する変数へのポインタまたはNULL |
h | 高さを代入する変数へのポインタまたはNULL |
// C++17ならばこれの代わりにstd::clamp()を使うこと
#define CLAMP(x, lo, hi) ((x) < (lo) ? (lo) : (x) > (hi) ? (hi) : (x))
SDL_Window *window;
VkSurfaceKHR surface;
VkPhysicalDevice physicalDevice;
// window = SDL_CreateWindow(...);
if (!SDL_Vulkan_CreateSurface(window, instance, &surface)) {
// handle error
}
// physicalDevice = ...;
// ...
// Swapchain生成
VkSurfaceCapabilitiesKHR capabilities;
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, &capabilities);
int width;
int height;
SDL_Vulkan_GetDrawableSize(window, &width, &height);
width = CLAMP(width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
height = CLAMP(height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
// ...
// vkCreateSwapchainKHR(...);
高DPIへのレンダリング, 例えば高DPI(Appleでは"Retina"と呼ばれる)に対応した環境でSDL_WINDOW_ALLOW_HIGHDPIを指定して生成したウィンドウの場合は, この関数が戻す値はSDL_GetWindowSize()とはおそらく異なる. そして, SDL_HINT_VIDEO_HIGHDPI_DISABLEDヒントで無効にすることはできない.