Always convert window to Vulkan window on SDL_Vulkan_CreateSurface (#14143)

This commit is contained in:
Adrian
2025-10-05 18:59:24 +02:00
committed by GitHub
parent 3723913969
commit 6d47d8dff1

View File

@@ -2674,7 +2674,7 @@ static bool SDL_ReconfigureWindowInternal(SDL_Window *window, SDL_WindowFlags fl
return false; return false;
} }
} else if (graphics_flags & SDL_WINDOW_VULKAN) { } else if (graphics_flags & SDL_WINDOW_VULKAN) {
loaded_vulkan = SDL_GL_LoadLibrary(NULL); loaded_vulkan = SDL_Vulkan_LoadLibrary(NULL);
if (!loaded_vulkan) { if (!loaded_vulkan) {
return false; return false;
} }
@@ -6176,8 +6176,9 @@ bool SDL_Vulkan_CreateSurface(SDL_Window *window,
{ {
CHECK_WINDOW_MAGIC(window, false); CHECK_WINDOW_MAGIC(window, false);
if (!(window->flags & SDL_WINDOW_VULKAN)) { if (!_this->Vulkan_CreateSurface) {
return SDL_SetError(NOT_A_VULKAN_WINDOW); SDL_Unsupported();
return false;
} }
CHECK_PARAM(!instance) { CHECK_PARAM(!instance) {
@@ -6188,6 +6189,23 @@ bool SDL_Vulkan_CreateSurface(SDL_Window *window,
return SDL_InvalidParamError("surface"); return SDL_InvalidParamError("surface");
} }
if (!(window->flags & SDL_WINDOW_VULKAN)) {
// No problem, we can convert to Vulkan
if (window->flags & SDL_WINDOW_OPENGL) {
window->flags &= ~SDL_WINDOW_OPENGL;
SDL_GL_UnloadLibrary();
}
if (window->flags & SDL_WINDOW_METAL) {
window->flags &= ~SDL_WINDOW_METAL;
// Nothing more to do for Metal.
}
if (SDL_Vulkan_LoadLibrary(NULL)) {
window->flags |= SDL_WINDOW_VULKAN;
} else {
return SDL_SetError("failed to load Vulkan library");
}
}
return _this->Vulkan_CreateSurface(_this, window, instance, allocator, surface); return _this->Vulkan_CreateSurface(_this, window, instance, allocator, surface);
} }