Using the previous code with newer SDL versions on Android, setting
the drawable screen size using the physical display size does not work
correctly anymore (as the display is usually larger than the drawable
screen area). This is corrected by using the effective size of the
renderer as soon as it is created.
int renderer_flags = SDL_RENDERER_SOFTWARE;
#endif
int renderer_flags = SDL_RENDERER_SOFTWARE;
#endif
- SDLSetScreenSizeAndOffsets(video.width, video.height);
-
int width = video.width;
int height = video.height;
int screen_width = video.screen_width;
int width = video.width;
int height = video.height;
int screen_width = video.screen_width;
if (sdl_renderer != NULL)
{
if (sdl_renderer != NULL)
{
- SDL_RenderSetLogicalSize(sdl_renderer, screen_width, screen_height);
// SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, setup.window_scaling_quality);
// SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, setup.window_scaling_quality);
Error(ERR_WARN, "SDL_CreateWindow() failed: %s", SDL_GetError());
}
Error(ERR_WARN, "SDL_CreateWindow() failed: %s", SDL_GetError());
}
+ SDLSetScreenProperties();
+
// store fullscreen state ("video.fullscreen_enabled" may not reflect this!)
if (new_surface != NULL)
fullscreen_enabled = fullscreen;
// store fullscreen state ("video.fullscreen_enabled" may not reflect this!)
if (new_surface != NULL)
fullscreen_enabled = fullscreen;
void SDLSetDisplaySize(void)
{
void SDLSetDisplaySize(void)
{
- SDL_Rect display_bounds;
+ if (sdl_renderer != NULL)
+ {
+ int w, h;
- SDL_GetDisplayBounds(0, &display_bounds);
+ SDL_GetRendererOutputSize(sdl_renderer, &w, &h);
- video.display_width = display_bounds.w;
- video.display_height = display_bounds.h;
+ video.display_width = w;
+ video.display_height = h;
- Error(ERR_DEBUG, "SDL real screen size: %d x %d",
- video.display_width, video.display_height);
+ Error(ERR_DEBUG, "SDL renderer size: %d x %d",
+ video.display_width, video.display_height);
+ }
+ else
+ {
+ SDL_Rect display_bounds;
+
+ SDL_GetDisplayBounds(0, &display_bounds);
+
+ video.display_width = display_bounds.w;
+ video.display_height = display_bounds.h;
+
+#if 0
+ Error(ERR_DEBUG, "SDL display size: %d x %d",
+ video.display_width, video.display_height);
+#endif
+ }
}
void SDLSetScreenSizeAndOffsets(int width, int height)
}
void SDLSetScreenSizeAndOffsets(int width, int height)
void SDLSetScreenProperties(void)
{
void SDLSetScreenProperties(void)
{
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
}
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
}