Bläddra i källkod

SDL - add SDL_WINDOW_VULKAN and make Android_CreateWindow only create an EGLSurface when SDL_WINDOW_VULKAN is not present. This makes it so the ANativeWindow* can be used with vkCreateAndroidSurfaceKHR, otherwise it will fail because having both an EGLSurface and VkSurfaceKHR attached to a window is not allowed according to the Vulkan spec:

"In particular, only one VkSurfaceKHR can exist at a time for a given window. Similarly, a native window cannot be used by both a VkSurfaceKHR and EGLSurface simultaneously"

CR: SamL
Sam Lantinga 8 år sedan
förälder
incheckning
ccf0566ca4
3 ändrade filer med 13 tillägg och 8 borttagningar
  1. 2 1
      include/SDL_video.h
  2. 1 1
      src/video/SDL_video.c
  3. 10 6
      src/video/android/SDL_androidwindow.c

+ 2 - 1
include/SDL_video.h

@@ -116,7 +116,8 @@ typedef enum
     SDL_WINDOW_SKIP_TASKBAR  = 0x00010000,      /**< window should not be added to the taskbar */
     SDL_WINDOW_UTILITY       = 0x00020000,      /**< window should be treated as a utility window */
     SDL_WINDOW_TOOLTIP       = 0x00040000,      /**< window should be treated as a tooltip */
-    SDL_WINDOW_POPUP_MENU    = 0x00080000       /**< window should be treated as a popup menu */
+    SDL_WINDOW_POPUP_MENU    = 0x00080000,      /**< window should be treated as a popup menu */
+    SDL_WINDOW_VULKAN        = 0x00100000       /**< window usable for Vulkan surface */
 } SDL_WindowFlags;
 
 /**

+ 1 - 1
src/video/SDL_video.c

@@ -1321,7 +1321,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)
 }
 
 #define CREATE_FLAGS \
-    (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP)
+    (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN )
 
 static void
 SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)

+ 10 - 6
src/video/android/SDL_androidwindow.c

@@ -69,13 +69,17 @@ Android_CreateWindow(_THIS, SDL_Window * window)
         SDL_free(data);
         return SDL_SetError("Could not fetch native window");
     }
-    
-    data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window);
 
-    if (data->egl_surface == EGL_NO_SURFACE) {
-        ANativeWindow_release(data->native_window);
-        SDL_free(data);
-        return SDL_SetError("Could not create GLES window surface");
+    /* Do not create EGLSurface for Vulkan window since it will then make the window
+       incompatible with vkCreateAndroidSurfaceKHR */
+    if ((window->flags & SDL_WINDOW_VULKAN) == 0) {
+        data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window);
+
+        if (data->egl_surface == EGL_NO_SURFACE) {
+            ANativeWindow_release(data->native_window);
+            SDL_free(data);
+            return SDL_SetError("Could not create GLES window surface");
+        }
     }
 
     window->driverdata = data;