Forráskód Böngészése

Add SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY

Ethan Lee 3 éve
szülő
commit
524964f966
2 módosított fájl, 13 hozzáadás és 1 törlés
  1. 11 0
      include/SDL_hints.h
  2. 2 1
      src/video/SDL_egl.c

+ 11 - 0
include/SDL_hints.h

@@ -1218,6 +1218,17 @@ extern "C" {
  */
 #define SDL_HINT_VIDEO_DOUBLE_BUFFER      "SDL_VIDEO_DOUBLE_BUFFER"
 
+/**
+ * \brief A variable controlling whether the EGL window is allowed to be
+ * composited as transparent, rather than opaque.
+ *
+ * Most window systems will always render windows opaque, even if the surface
+ * format has an alpha channel. This is not always true, however, so by default
+ * SDL will try to enforce opaque composition. To override this behavior, you
+ * can set this hint to "1".
+ */
+#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY"
+
 /**
  * \brief A variable controlling whether the graphics context is externally managed.
  *

+ 2 - 1
src/video/SDL_egl.c

@@ -1223,8 +1223,9 @@ SDL_EGL_CreateSurface(_THIS, NativeWindowType nw)
 
 #ifdef EGL_EXT_present_opaque
     if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_EXT_present_opaque")) {
+        const SDL_bool allow_transparent = SDL_GetHintBoolean(SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY, SDL_FALSE);
         attribs[attr++] = EGL_PRESENT_OPAQUE_EXT;
-        attribs[attr++] = EGL_TRUE;
+        attribs[attr++] = allow_transparent ? EGL_FALSE : EGL_TRUE;
     }
 #endif