projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added displaying render driver on info screen page
[rocksndiamonds.git]
/
src
/
libgame
/
sdl.c
diff --git
a/src/libgame/sdl.c
b/src/libgame/sdl.c
index 7fb650f1b17e9d6070db72855db59cf9c5e34c61..7d0a9b5f0de497da2d4b27c91800152f248de8b8 100644
(file)
--- a/
src/libgame/sdl.c
+++ b/
src/libgame/sdl.c
@@
-330,6
+330,15
@@
static void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
SDL_SetSurfaceAlphaMod(surface, alpha);
}
SDL_SetSurfaceAlphaMod(surface, alpha);
}
+const char *SDLGetRendererName(void)
+{
+ static SDL_RendererInfo renderer_info;
+
+ SDL_GetRendererInfo(sdl_renderer, &renderer_info);
+
+ return renderer_info.name;
+}
+
SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
{
SDL_PixelFormat format;
SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
{
SDL_PixelFormat format;
@@
-353,6
+362,11
@@
SDL_Surface *SDLGetNativeSurface(SDL_Surface *surface)
if (new_surface == NULL)
Error(ERR_EXIT, "SDL_ConvertSurface() failed: %s", SDL_GetError());
if (new_surface == NULL)
Error(ERR_EXIT, "SDL_ConvertSurface() failed: %s", SDL_GetError());
+ // workaround for a bug in SDL 2.0.12 (which does not convert the color key)
+ if (SDLHasColorKey(surface) && !SDLHasColorKey(new_surface))
+ SDL_SetColorKey(new_surface, SET_TRANSPARENT_PIXEL,
+ SDLGetColorKey(surface));
+
return new_surface;
}
return new_surface;
}
@@
-492,7
+506,7
@@
static boolean SDLCreateScreen(boolean fullscreen)
{
SDL_Surface *new_surface = NULL;
{
SDL_Surface *new_surface = NULL;
- int surface_flags_window = SURFACE_FLAGS
| SDL_WINDOW_RESIZABLE
;
+ int surface_flags_window = SURFACE_FLAGS;
int surface_flags_fullscreen = SURFACE_FLAGS | SDL_WINDOW_FULLSCREEN_DESKTOP;
#if 1
int surface_flags_fullscreen = SURFACE_FLAGS | SDL_WINDOW_FULLSCREEN_DESKTOP;
#if 1
@@
-505,8
+519,6
@@
static boolean SDLCreateScreen(boolean fullscreen)
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;
@@
-568,7
+580,6
@@
static boolean SDLCreateScreen(boolean fullscreen)
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);
@@
-608,6
+619,8
@@
static boolean SDLCreateScreen(boolean fullscreen)
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;
@@
-762,17
+775,34
@@
void SDLSetWindowFullscreen(boolean fullscreen)
void SDLSetDisplaySize(void)
{
void SDLSetDisplaySize(void)
{
- SDL_Rect display_bounds;
+ if (sdl_renderer != NULL)
+ {
+ int w, h;
+
+ SDL_GetRendererOutputSize(sdl_renderer, &w, &h);
+
+ video.display_width = w;
+ video.display_height = h;
- SDL_GetDisplayBounds(0, &display_bounds);
+#if 0
+ Error(ERR_DEBUG, "SDL renderer size: %d x %d",
+ video.display_width, video.display_height);
+#endif
+ }
+ else
+ {
+ SDL_Rect display_bounds;
+
+ SDL_GetDisplayBounds(0, &display_bounds);
- video.display_width = display_bounds.w;
- video.display_height = display_bounds.h;
+
video.display_width = display_bounds.w;
+
video.display_height = display_bounds.h;
#if 0
#if 0
-
Error(ERR_DEBUG, "SDL real screen
size: %d x %d",
- video.display_width, video.display_height);
+
Error(ERR_DEBUG, "SDL display
size: %d x %d",
+
video.display_width, video.display_height);
#endif
#endif
+ }
}
void SDLSetScreenSizeAndOffsets(int width, int height)
}
void SDLSetScreenSizeAndOffsets(int width, int height)
@@
-816,6
+846,7
@@
void SDLSetScreenSizeForRenderer(int width, int height)
void SDLSetScreenProperties(void)
{
void SDLSetScreenProperties(void)
{
+ SDLSetDisplaySize();
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
}
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
}
@@
-1028,6
+1059,17
@@
void SDLFadeRectangle(int x, int y, int width, int height,
time_current = SDL_GetTicks();
time_current = SDL_GetTicks();
+ if (fade_delay <= 0)
+ {
+ // immediately draw final target frame without delay
+ fade_mode &= (FADE_MODE_FADE | FADE_MODE_TRANSFORM);
+ fade_delay = 1;
+ time_current -= 1;
+
+ // when fading without delay, also skip post delay
+ post_delay = 0;
+ }
+
if (fade_mode == FADE_MODE_MELT)
{
boolean done = FALSE;
if (fade_mode == FADE_MODE_MELT)
{
boolean done = FALSE;
@@
-2524,7
+2566,10
@@
static void setJoystickButton(int nr, int button_id_raw, int button_state)
void HandleJoystickEvent(Event *event)
{
void HandleJoystickEvent(Event *event)
{
- switch(event->type)
+ // when using joystick, disable overlay touch buttons
+ runtime.uses_touch_device = FALSE;
+
+ switch (event->type)
{
case SDL_CONTROLLERDEVICEADDED:
#if DEBUG_JOYSTICKS
{
case SDL_CONTROLLERDEVICEADDED:
#if DEBUG_JOYSTICKS