static int LastFrameCounter = 0;
boolean changed = (FrameCounter != LastFrameCounter);
- printf("::: FrameCounter == %d [%s]\n", FrameCounter,
- (changed ? "-" : "SAME FRAME UPDATED"));
+ Debug("internal:frame", "FrameCounter == %d [%s]", FrameCounter,
+ (changed ? "-" : "SAME FRAME UPDATED"));
LastFrameCounter = FrameCounter;
if (filename == NULL)
{
- Error(ERR_WARN, "SDLSetWindowIcon(): cannot find file '%s'", basename);
+ Warn("SDLSetWindowIcon(): cannot find file '%s'", basename);
return;
}
if ((surface = IMG_Load(filename)) == NULL)
{
- Error(ERR_WARN, "IMG_Load('%s') failed: %s", basename, SDL_GetError());
+ Warn("IMG_Load('%s') failed: %s", basename, SDL_GetError());
return;
}
format1->Bmask == format2->Bmask);
}
-static Pixel SDLGetColorKey(SDL_Surface *surface)
+static void SDLCopyColorKey(SDL_Surface *src_surface, SDL_Surface *dst_surface)
{
Pixel color_key;
+ Uint8 r, g, b;
- if (SDL_GetColorKey(surface, &color_key) != 0)
- return -1;
+ // check if source surface has a color key
+ if (SDL_GetColorKey(src_surface, &color_key) == 0)
+ {
+ // get RGB values of color key of source surface
+ SDL_GetRGB(color_key, src_surface->format, &r, &g, &b);
+
+ // get color key from RGB values in destination surface format
+ color_key = SDL_MapRGB(dst_surface->format, r, g, b);
- return color_key;
+ // set color key in destination surface
+ SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL, color_key);
+ }
+ else
+ {
+ // unset color key in destination surface
+ SDL_SetColorKey(dst_surface, UNSET_TRANSPARENT_PIXEL, 0);
+ }
}
static boolean SDLHasColorKey(SDL_Surface *surface)
{
- return (SDLGetColorKey(surface) != -1);
+ Pixel color_key;
+
+ return (SDL_GetColorKey(surface, &color_key) == 0);
}
static boolean SDLHasAlpha(SDL_Surface *surface)
return (blend_mode == SDL_BLENDMODE_BLEND);
}
-static void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
+void SDLSetAlpha(SDL_Surface *surface, boolean set, int alpha)
{
SDL_BlendMode blend_mode = (set ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
new_surface = SDL_ConvertSurface(surface, &format, 0);
if (new_surface == NULL)
- Error(ERR_EXIT, "SDL_ConvertSurface() failed: %s", SDL_GetError());
+ Fail("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));
+ SDLCopyColorKey(surface, new_surface);
return new_surface;
}
SDL_Texture *texture = SDL_CreateTextureFromSurface(sdl_renderer, surface);
if (texture == NULL)
- Error(ERR_EXIT, "SDL_CreateTextureFromSurface() failed: %s",
- SDL_GetError());
+ Fail("SDL_CreateTextureFromSurface() failed: %s", SDL_GetError());
return texture;
}
// initialize SDL video
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
- Error(ERR_EXIT, "SDL_InitSubSystem() failed: %s", SDL_GetError());
+ Fail("SDL_InitSubSystem() failed: %s", SDL_GetError());
// set default SDL depth
video.default_depth = 32; // (how to determine video depth in SDL2?)
// open SDL video output device (window or fullscreen mode)
if (!SDLSetVideoMode(fullscreen))
- Error(ERR_EXIT, "setting video mode failed");
+ Fail("setting video mode failed");
// !!! SDL2 can only set the window icon if the window already exists !!!
// set window icon
new_surface = SDL_CreateRGBSurface(0, width, height, 32, 0,0,0, 0);
if (new_surface == NULL)
- Error(ERR_WARN, "SDL_CreateRGBSurface() failed: %s", SDL_GetError());
+ Warn("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
}
else
{
- Error(ERR_WARN, "SDL_CreateTexture() failed: %s", SDL_GetError());
+ Warn("SDL_CreateTexture() failed: %s", SDL_GetError());
}
}
else
{
- Error(ERR_WARN, "SDL_CreateRenderer() failed: %s", SDL_GetError());
+ Warn("SDL_CreateRenderer() failed: %s", SDL_GetError());
}
}
else
{
- Error(ERR_WARN, "SDL_CreateWindow() failed: %s", SDL_GetError());
+ Warn("SDL_CreateWindow() failed: %s", SDL_GetError());
}
SDLSetScreenProperties();
video.display_height = h;
#if 0
- Error(ERR_DEBUG, "SDL renderer size: %d x %d",
+ Debug("video", "SDL renderer size: %d x %d",
video.display_width, video.display_height);
#endif
}
video.display_height = display_bounds.h;
#if 0
- Error(ERR_DEBUG, "SDL display size: %d x %d",
+ Debug("video", "SDL display size: %d x %d",
video.display_width, video.display_height);
#endif
}
video.screen_yoffset = (video.screen_height - height) / 2;
#if 0
- Error(ERR_DEBUG, "Changing screen from %dx%d to %dx%d (%.2f to %.2f)",
+ Debug("video", "Changing screen from %dx%d to %dx%d (%.2f to %.2f)",
width, height,
video.screen_width, video.screen_height,
ratio_video, ratio_display);
SDLSetDisplaySize();
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
+
+ SetOverlayGridSizeAndButtons();
}
void SDLSetScreenRenderingMode(char *screen_rendering_mode)
void SDLSetScreenVsyncMode(char *vsync_mode)
{
- int interval =
- (strEqual(vsync_mode, STR_VSYNC_MODE_NORMAL) ? VSYNC_MODE_NORMAL :
- strEqual(vsync_mode, STR_VSYNC_MODE_ADAPTIVE) ? VSYNC_MODE_ADAPTIVE :
- VSYNC_MODE_OFF);
+ // changing vsync mode without re-creating renderer only supported by OpenGL
+ if (!strPrefixLower((char *)SDLGetRendererName(), "opengl"))
+ return;
+
+ int interval = VSYNC_MODE_STR_TO_INT(vsync_mode);
int result = SDL_GL_SetSwapInterval(interval);
// if adaptive vsync requested, but not supported, retry with normal vsync
SDL_CreateRGBSurface(SURFACE_FLAGS, width, height, depth, 0,0,0, 0);
if (surface == NULL)
- Error(ERR_EXIT, "SDL_CreateRGBSurface() failed: %s", SDL_GetError());
+ Fail("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
SDLSetNativeSurface(&surface);
return NULL;
if ((new_surface = SDLGetNativeSurface(surface)) == NULL)
- Error(ERR_EXIT, "SDLGetNativeSurface() failed");
+ Fail("SDLGetNativeSurface() failed");
// remove alpha channel from native non-transparent surface, if defined
SDLSetAlpha(new_surface, FALSE, 0);
// set color key for zoomed surface from source surface, if defined
if (SDLHasColorKey(src_surface))
- SDL_SetColorKey(dst_surface, SET_TRANSPARENT_PIXEL,
- SDLGetColorKey(src_surface));
+ SDLCopyColorKey(src_surface, dst_surface);
// create native non-transparent surface for opaque blitting
dst_bitmap->surface = SDLGetOpaqueSurface(dst_surface);
// load image to temporary surface
if ((sdl_image_tmp = IMG_Load(filename)) == NULL)
- Error(ERR_EXIT, "IMG_Load('%s') failed: %s", getBaseNamePtr(filename),
- SDL_GetError());
+ Fail("IMG_Load('%s') failed: %s", getBaseNamePtr(filename), SDL_GetError());
print_timestamp_time("IMG_Load");
// create native non-transparent surface for current image
if ((new_bitmap->surface = SDLGetOpaqueSurface(sdl_image_tmp)) == NULL)
- Error(ERR_EXIT, "SDLGetOpaqueSurface() failed");
+ Fail("SDLGetOpaqueSurface() failed");
print_timestamp_time("SDLGetNativeSurface (opaque)");
// create native transparent surface for current image
if ((new_bitmap->surface_masked = SDLGetNativeSurface(sdl_image_tmp)) == NULL)
- Error(ERR_EXIT, "SDLGetNativeSurface() failed");
+ Fail("SDLGetNativeSurface() failed");
print_timestamp_time("SDLGetNativeSurface (masked)");
if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0)
{
- Error(ERR_WARN, "SDL_InitSubSystem() failed: %s", SDL_GetError());
+ Warn("SDL_InitSubSystem() failed: %s", SDL_GetError());
+
return;
}
AUDIO_NUM_CHANNELS_STEREO,
setup.system.audio_fragment_size) < 0)
{
- Error(ERR_WARN, "Mix_OpenAudio() failed: %s", SDL_GetError());
+ Warn("Mix_OpenAudio() failed: %s", SDL_GetError());
+
return;
}
sdl_is_controller[nr] = SDL_IsGameController(nr);
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "opening joystick %d (%s)",
+ Debug("joystick", "opening joystick %d (%s)",
nr, (sdl_is_controller[nr] ? "game controller" : "joystick"));
#endif
return;
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "closing joystick %d", nr);
+ Debug("joystick", "closing joystick %d", nr);
#endif
if (sdl_is_controller[nr])
{
case SDL_CONTROLLERDEVICEADDED:
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEADDED: device %d added",
+ Debug("joystick", "SDL_CONTROLLERDEVICEADDED: device %d added",
event->cdevice.which);
#endif
InitJoysticks();
case SDL_CONTROLLERDEVICEREMOVED:
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEREMOVED: device %d removed",
+ Debug("joystick", "SDL_CONTROLLERDEVICEREMOVED: device %d removed",
event->cdevice.which);
#endif
InitJoysticks();
case SDL_CONTROLLERAXISMOTION:
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_CONTROLLERAXISMOTION: device %d, axis %d: %d",
+ Debug("joystick", "SDL_CONTROLLERAXISMOTION: device %d, axis %d: %d",
event->caxis.which, event->caxis.axis, event->caxis.value);
#endif
setJoystickAxis(event->caxis.which,
case SDL_CONTROLLERBUTTONDOWN:
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONDOWN: device %d, button %d",
+ Debug("joystick", "SDL_CONTROLLERBUTTONDOWN: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
setJoystickButton(event->cbutton.which,
case SDL_CONTROLLERBUTTONUP:
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONUP: device %d, button %d",
+ Debug("joystick", "SDL_CONTROLLERBUTTONUP: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
setJoystickButton(event->cbutton.which,
break;
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_JOYAXISMOTION: device %d, axis %d: %d",
+ Debug("joystick", "SDL_JOYAXISMOTION: device %d, axis %d: %d",
event->jaxis.which, event->jaxis.axis, event->jaxis.value);
#endif
if (event->jaxis.axis < 4)
break;
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_JOYBUTTONDOWN: device %d, button %d",
+ Debug("joystick", "SDL_JOYBUTTONDOWN: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
if (event->jbutton.button < 4)
break;
#if DEBUG_JOYSTICKS
- Error(ERR_DEBUG, "SDL_JOYBUTTONUP: device %d, button %d",
+ Debug("joystick", "SDL_JOYBUTTONUP: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
if (event->jbutton.button < 4)
boolean print_warning = !sdl_joystick_subsystem_initialized;
char *mappings_file_base = getPath2(options.conf_directory,
GAMECONTROLLER_BASENAME);
- char *mappings_file_user = getPath2(getUserGameDataDir(),
+ char *mappings_file_user = getPath2(getMainUserGameDataDir(),
GAMECONTROLLER_BASENAME);
int num_mappings;
int i;
SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) < 0)
- {
- Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
- return;
- }
+ Fail("SDL_Init() failed: %s", SDL_GetError());
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_base);
// the included game controller base mappings should always be found
if (num_mappings == -1)
- Error(ERR_WARN, "no game controller base mappings found");
+ Warn("no game controller base mappings found");
#if DEBUG_JOYSTICKS
else
- Error(ERR_INFO, "%d game controller base mapping(s) added", num_mappings);
+ Debug("joystick", "%d game controller base mapping(s) added",
+ num_mappings);
#endif
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_user);
#if DEBUG_JOYSTICKS
// the personal game controller user mappings may or may not be found
if (num_mappings == -1)
- Error(ERR_WARN, "no game controller user mappings found");
+ Warn("no game controller user mappings found");
else
- Error(ERR_INFO, "%d game controller user mapping(s) added", num_mappings);
+ Debug("joystick", , "%d game controller user mapping(s) added",
+ num_mappings);
- Error(ERR_INFO, "%d joystick(s) found:", SDL_NumJoysticks());
+ Debug("joystick", "%d joystick(s) found:", SDL_NumJoysticks());
#endif
checked_free(mappings_file_base);
type = "joystick";
}
- Error(ERR_INFO, "- joystick %d (%s): '%s'",
+ Debug("joystick", "- joystick %d (%s): '%s'",
i, type, (name ? name : "(Unknown)"));
}
#endif
if (joystick_nr >= SDL_NumJoysticks())
{
if (setup.input[i].use_joystick && print_warning)
- Error(ERR_WARN, "cannot find joystick %d", joystick_nr);
+ Warn("cannot find joystick %d", joystick_nr);
joystick_nr = -1;
}
if (SDLOpenJoystick(i))
joystick.status = JOYSTICK_ACTIVATED;
else if (print_warning)
- Error(ERR_WARN, "cannot open joystick %d", i);
+ Warn("cannot open joystick %d", i);
}
SDLClearJoystickState();