Create the video texture based on the available texture formats, not the backbuffer format.
authorSam Lantinga <slouken@libsdl.org>
Thu, 03 Feb 2011 01:13:48 -0800
changeset 5159 df758fce08e9
parent 5158 b3ccd1947786
child 5160 53eaa01ab100
Create the video texture based on the available texture formats, not the backbuffer format.
src/SDL_compat.c
--- a/src/SDL_compat.c	Thu Feb 03 00:54:29 2011 -0800
+++ b/src/SDL_compat.c	Thu Feb 03 01:13:48 2011 -0800
@@ -470,9 +470,10 @@
     int window_x = SDL_WINDOWPOS_UNDEFINED;
     int window_y = SDL_WINDOWPOS_UNDEFINED;
     Uint32 window_flags;
-    Uint32 desktop_format;
+    Uint32 surface_flags;
+    Uint32 i;
+    SDL_RendererInfo info;
     Uint32 desired_format;
-    Uint32 surface_flags;
 
     if (!SDL_GetVideoDevice()) {
         if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0) {
@@ -490,6 +491,9 @@
     if (height == 0) {
         height = desktop_mode.h;
     }
+    if (bpp == 0) {
+        bpp = SDL_BITSPERPIXEL(desktop_mode.format);
+    }
 
     /* See if we can simply resize the existing window and surface */
     if (SDL_ResizeVideoMode(width, height, bpp, flags) == 0) {
@@ -559,53 +563,6 @@
         surface_flags |= SDL_NOFRAME;
     }
 
-    /* Set up the desired display mode */
-    desktop_format = desktop_mode.format;
-    if (desktop_format && ((flags & SDL_ANYFORMAT)
-                           || (bpp == SDL_BITSPERPIXEL(desktop_format)))) {
-        desired_format = desktop_format;
-    } else {
-        switch (bpp) {
-        case 0:
-            if (desktop_format) {
-                desired_format = desktop_format;
-            } else {
-                desired_format = SDL_PIXELFORMAT_RGB888;
-            }
-            bpp = SDL_BITSPERPIXEL(desired_format);
-            break;
-        case 8:
-            desired_format = SDL_PIXELFORMAT_INDEX8;
-            break;
-        case 15:
-            desired_format = SDL_PIXELFORMAT_RGB555;
-            break;
-        case 16:
-            desired_format = SDL_PIXELFORMAT_RGB565;
-            break;
-        case 24:
-            desired_format = SDL_PIXELFORMAT_RGB24;
-            break;
-        case 32:
-            desired_format = SDL_PIXELFORMAT_RGB888;
-            break;
-        default:
-            SDL_SetError("Unsupported bpp in SDL_SetVideoMode()");
-            return NULL;
-        }
-    }
-
-    /* Set up the desired display mode */
-    if (flags & SDL_FULLSCREEN) {
-        SDL_DisplayMode mode;
-
-        SDL_zero(mode);
-        mode.format = desired_format;
-        if (SDL_SetWindowDisplayMode(SDL_VideoWindow, &mode) < 0) {
-            return NULL;
-        }
-    }
-
     /* If we're in OpenGL mode, just create a stub surface and we're done! */
     if (flags & SDL_OPENGL) {
         SDL_VideoContext = SDL_GL_CreateContext(SDL_VideoWindow);
@@ -632,15 +589,17 @@
     }
 
     /* Create a texture for the screen surface */
+    SDL_GetRendererInfo(SDL_VideoRenderer, &info);
+    desired_format = info.texture_formats[0];
+    for (i = 0; i < info.num_texture_formats; ++i) {
+        if (!SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) {
+            desired_format = info.texture_formats[i];
+            break;
+        }
+    }
     SDL_VideoTexture = SDL_CreateTexture(SDL_VideoRenderer, desired_format,
                                          SDL_TEXTUREACCESS_STREAMING,
                                          width, height);
-
-    if (!SDL_VideoTexture) {
-        SDL_VideoTexture = SDL_CreateTexture(SDL_VideoRenderer, desktop_format,
-                                             SDL_TEXTUREACCESS_STREAMING,
-                                             width, height);
-    }
     if (!SDL_VideoTexture) {
         return NULL;
     }