Browse Source

video: Add a hint to allow Vulkan surfaces on foreign windows

Ethan Lee 3 years ago
parent
commit
0bf8ccfb60
2 changed files with 21 additions and 0 deletions
  1. 11 0
      include/SDL_hints.h
  2. 10 0
      src/video/SDL_video.c

+ 11 - 0
include/SDL_hints.h

@@ -1453,6 +1453,17 @@ extern "C" {
 */
 #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT    "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT"
 
+/**
+ *  \brief  When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan.
+ *
+ * This variable can be set to the following values:
+ * "0" - Don't add any graphics flags to the SDL_WindowFlags
+ * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags
+ *
+ * By default SDL will not make the foreign window compatible with Vulkan.
+ */
+#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN"
+
 /**
 *  \brief  A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
 *

+ 10 - 0
src/video/SDL_video.c

@@ -1703,6 +1703,16 @@ SDL_CreateWindowFrom(const void *data)
     }
     _this->windows = window;
 
+#if SDL_VIDEO_VULKAN
+    if (SDL_GetHintBoolean(SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN, SDL_FALSE)) {
+        window->flags |= SDL_WINDOW_VULKAN;
+        if (SDL_Vulkan_LoadLibrary(NULL) < 0) {
+            SDL_DestroyWindow(window);
+            return NULL;
+        }
+    }
+#endif
+
     if (_this->CreateSDLWindowFrom(_this, window, data) < 0) {
         SDL_DestroyWindow(window);
         return NULL;