#if DEBUG
#if defined(TARGET_SDL)
+#if !defined(TARGET_SDL2)
else if (strEqual(command, "SDL_ListModes"))
{
SDL_Rect **modes;
exit(0);
}
#endif
+#endif
#endif
else
font_height = getFontHeight(FC_RED);
+
+
+
+
+
+
+
+
+#if 0
+ Delay(1000);
+
+#if 0
+ Bitmap new_bitmap;
+ printf("::: MARK 1.1\n");
+ new_bitmap.surface = SDL_LoadBMP("TEST.bmp");
+ printf("::: MARK 1.2\n");
+#endif
+
+ char *filename = getCustomImageFilename("RocksFontSmall.pcx");
+
+ printf("::: FILENAME == '%s'\n", filename);
+
+#if 1
+ Bitmap *new_bitmap = LoadImage(filename);
+#else
+#if 1
+ Bitmap *new_bitmap = CreateBitmapStruct();
+ SDL_Surface *sdl_image_tmp;
+ sdl_image_tmp = IMG_Load(filename);
+ new_bitmap->surface = SDL_DisplayFormat(sdl_image_tmp);
+
+#else
+ SDL_Surface *sdl_image_tmp = IMG_Load(filename);
+ SDL_Surface *sdl_image = SDL_DisplayFormat(sdl_image_tmp);
+#endif
+#endif
+
+ // SDL_Surface *image = SDL_LoadBMP("TEST.bmp");
+ // SDL_LoadBMP("TEST.bmp");
+
+ // bitmap_font_initial->surface = SDL_LoadBMP("TEST.bmp");
+
+#if 0
+ printf("::: MARK 1 [%08x, %08xd]\n",
+ (unsigned int)bitmap_font_initial->surface,
+ (unsigned int)backbuffer->surface);
+#endif
+
+ // SDL_BlitSurface(image, NULL, backbuffer->surface, NULL);
+ // SDL_BlitSurface(new_bitmap.surface, NULL,backbuffer->surface, NULL);
+ SDL_BlitSurface(new_bitmap->surface, NULL,backbuffer->surface, NULL);
+ // SDL_BlitSurface(sdl_image, NULL,backbuffer->surface, NULL);
+ // SDL_BlitSurface(bitmap_font_initial->surface, NULL,backbuffer->surface, NULL);
+
+#if 0
+ printf("::: MARK 1 [%08x, %08xd, %08xd]\n",
+ (unsigned int)bitmap_font_initial->surface,
+ (unsigned int)backbuffer->surface,
+ (unsigned int)image);
+#endif
+
+ extern SDL_Window *sdl_window;
+ SDL_UpdateWindowSurface(sdl_window);
+
+#if 1
+#if 0
+ SDL_BlitSurface(bitmap_font_initial->surface, NULL,backbuffer->surface, NULL);
+#endif
+ // SDL_UpdateWindowSurface(sdl_window);
+
+ Delay(1000);
+ exit(0);
+#endif
+#endif
+
+
+
+
+
+
+
+
+
+
+
#if 1
DrawInitText(getWindowTitleString(), 20, FC_YELLOW);
#else
FreeAllImages();
#if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+ // !!! TODO !!!
+ // set a flag to tell the network server thread to quit and wait for it
+ // using SDL_WaitThread()
+#else
if (network_server) /* terminate network server */
SDL_KillThread(server_thread);
+#endif
#endif
CloseVideoDisplay();
/* video functions */
/* ========================================================================= */
-/* functions from SGE library */
-void sge_Line(SDL_Surface *, Sint16, Sint16, Sint16, Sint16, Uint32);
+/* SDL internal variables */
+#if defined(TARGET_SDL2)
+// static SDL_Window *sdl_window = NULL;
+SDL_Window *sdl_window = NULL;
+// static SDL_Renderer *sdl_renderer = NULL;
+#endif
/* stuff needed to work around SDL/Windows fullscreen drawing bug */
static int fullscreen_width;
static int video_xoffset;
static int video_yoffset;
+/* functions from SGE library */
+void sge_Line(SDL_Surface *, Sint16, Sint16, Sint16, Sint16, Uint32);
+
static void setFullscreenParameters(char *fullscreen_mode_string)
{
struct ScreenModeInfo *fullscreen_mode;
SDL_SetColorKey(surface, SET_TRANSPARENT_PIXEL,
SDL_MapRGB(surface->format, 0x00, 0x00, 0x00));
+#if defined(TARGET_SDL2)
+ SDL_SetWindowIcon(sdl_window, surface);
+#else
SDL_WM_SetIcon(surface, NULL);
#endif
+#endif
}
+#if defined(TARGET_SDL2)
+SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface)
+{
+ if (backbuffer == NULL ||
+ backbuffer->surface == NULL)
+ return NULL;
+
+ return SDL_ConvertSurface(surface, backbuffer->surface->format, 0);
+}
+#endif
+
void SDLInitVideoDisplay(void)
{
+#if !defined(TARGET_SDL2)
if (!strEqual(setup.system.sdl_videodriver, ARG_DEFAULT))
SDL_putenv(getStringCat2("SDL_VIDEODRIVER=", setup.system.sdl_videodriver));
SDL_putenv("SDL_VIDEO_CENTERED=1");
+#endif
/* initialize SDL video */
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
Error(ERR_EXIT, "SDL_InitSubSystem() failed: %s", SDL_GetError());
/* set default SDL depth */
+#if !defined(TARGET_SDL2)
video.default_depth = SDL_GetVideoInfo()->vfmt->BitsPerPixel;
+#else
+ video.default_depth = 32; // (how to determine video depth in SDL2?)
+#endif
}
void SDLInitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window,
video.fullscreen_mode_current = NULL;
#endif
+#if !defined(TARGET_SDL2)
/* get available hardware supported fullscreen modes */
modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
+#else
+ // (for now, no display modes in SDL2 -- change this later)
+ modes = NULL;
+#endif
if (modes == NULL)
{
Error(ERR_EXIT, "setting video mode failed");
/* set window and icon title */
+#if defined(TARGET_SDL2)
+ SDL_SetWindowTitle(sdl_window, program.window_title);
+#else
SDL_WM_SetCaption(program.window_title, program.window_title);
+#endif
/* SDL cannot directly draw to the visible video framebuffer like X11,
but always uses a backbuffer, which is then blitted to the visible
boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen)
{
boolean success = TRUE;
+#if defined(TARGET_SDL2)
+ int surface_flags_fullscreen = SURFACE_FLAGS | SDL_WINDOW_FULLSCREEN;
+ int surface_flags_window = SURFACE_FLAGS;
+#else
int surface_flags_fullscreen = SURFACE_FLAGS | SDL_FULLSCREEN;
int surface_flags_window = SURFACE_FLAGS;
+#endif
SDL_Surface *new_surface = NULL;
if (*backbuffer == NULL)
video_yoffset = fullscreen_yoffset;
/* switch display to fullscreen mode, if available */
- if ((new_surface = SDL_SetVideoMode(fullscreen_width, fullscreen_height,
- video.depth, surface_flags_fullscreen))
- == NULL)
+#if defined(TARGET_SDL2)
+ sdl_window = SDL_CreateWindow(program.window_title,
+ SDL_WINDOWPOS_CENTERED,
+ SDL_WINDOWPOS_CENTERED,
+ fullscreen_width, fullscreen_height,
+ surface_flags_fullscreen);
+ if (sdl_window != NULL)
+ {
+ new_surface = SDL_GetWindowSurface(sdl_window);
+
+ SDL_UpdateWindowSurface(sdl_window); // immediately map window
+ }
+#else
+ new_surface = SDL_SetVideoMode(fullscreen_width, fullscreen_height,
+ video.depth, surface_flags_fullscreen);
+#endif
+
+ if (new_surface == NULL)
{
/* switching display to fullscreen mode failed */
Error(ERR_WARN, "SDL_SetVideoMode() failed: %s", SDL_GetError());
video_yoffset = 0;
/* switch display to window mode */
- if ((new_surface = SDL_SetVideoMode(video.width, video.height,
- video.depth, surface_flags_window))
- == NULL)
+#if defined(TARGET_SDL2)
+ sdl_window = SDL_CreateWindow(program.window_title,
+ SDL_WINDOWPOS_CENTERED,
+ SDL_WINDOWPOS_CENTERED,
+ video.width, video.height,
+ surface_flags_window);
+ if (sdl_window != NULL)
+ {
+ new_surface = SDL_GetWindowSurface(sdl_window);
+
+ SDL_UpdateWindowSurface(sdl_window); // immediately map window
+ }
+#else
+ new_surface = SDL_SetVideoMode(video.width, video.height,
+ video.depth, surface_flags_window);
+#endif
+
+ if (new_surface == NULL)
{
/* switching display to window mode failed -- should not happen */
Error(ERR_WARN, "SDL_SetVideoMode() failed: %s", SDL_GetError());
src_bitmap->surface_masked : src_bitmap->surface),
&src_rect, real_dst_bitmap->surface, &dst_rect);
+#if defined(TARGET_SDL2)
+ if (dst_bitmap == window)
+ SDL_UpdateWindowSurface(sdl_window);
+#else
if (dst_bitmap == window)
SDL_UpdateRect(backbuffer->surface, dst_x, dst_y, width, height);
+#endif
}
void SDLFillRectangle(Bitmap *dst_bitmap, int x, int y, int width, int height,
SDL_FillRect(real_dst_bitmap->surface, &rect, color);
+#if defined(TARGET_SDL2)
+ if (dst_bitmap == window)
+ SDL_UpdateWindowSurface(sdl_window);
+#else
if (dst_bitmap == window)
SDL_UpdateRect(backbuffer->surface, x, y, width, height);
+#endif
}
void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
if (initialization_needed)
{
+#if defined(TARGET_SDL2)
+ unsigned int flags = 0;
+#else
unsigned int flags = SDL_SRCALPHA;
/* use same surface type as screen surface */
flags |= SDL_HWSURFACE;
else
flags |= SDL_SWSURFACE;
+#endif
/* create surface for temporary copy of screen buffer (source) */
if ((surface_source =
int i;
SDL_BlitSurface(surface_source, &src_rect, surface_screen, &dst_rect);
+#if defined(TARGET_SDL2)
+ SDL_SetSurfaceBlendMode(surface_target, SDL_BLENDMODE_NONE);
+#else
SDL_SetAlpha(surface_target, 0, 0); /* disable alpha blending */
+#endif
ypos[0] = -GetSimpleRandom(16);
if (draw_border_function != NULL)
draw_border_function();
+#if defined(TARGET_SDL2)
+ SDL_UpdateWindowSurface(sdl_window);
+#else
SDL_UpdateRect(surface_screen, dst_x, dst_y, width, height);
+#endif
}
}
}
SDL_BlitSurface(surface_source, &src_rect, surface_screen, &dst_rect);
/* draw new (target) image to screen buffer using alpha blending */
+#if defined(TARGET_SDL2)
+ SDL_SetSurfaceAlphaMod(surface_target, alpha_final);
+ SDL_SetSurfaceBlendMode(surface_target, SDL_BLENDMODE_BLEND);
+#else
SDL_SetAlpha(surface_target, SDL_SRCALPHA, alpha_final);
+#endif
SDL_BlitSurface(surface_target, &src_rect, surface_screen, &dst_rect);
if (draw_border_function != NULL)
#if 1
/* only update the region of the screen that is affected from fading */
+#if defined(TARGET_SDL2)
+ SDL_UpdateWindowSurface(sdl_window);
+#else
SDL_UpdateRect(surface_screen, dst_x, dst_y, width, height);
+#endif
#else
SDL_Flip(surface_screen);
#endif
void SDLOpenAudio(void)
{
+#if !defined(TARGET_SDL2)
if (!strEqual(setup.system.sdl_audiodriver, ARG_DEFAULT))
SDL_putenv(getStringCat2("SDL_AUDIODRIVER=", setup.system.sdl_audiodriver));
+#endif
if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0)
{
return;
SDL_JoystickClose(sdl_joystick[nr]);
+
+ sdl_joystick[nr] = NULL;
}
static boolean SDLCheckJoystickOpened(int nr)
if (nr < 0 || nr > MAX_PLAYERS)
return FALSE;
+#if defined(TARGET_SDL2)
+ return (sdl_joystick[nr] != NULL ? TRUE : FALSE);
+#else
return (SDL_JoystickOpened(nr) ? TRUE : FALSE);
+#endif
}
void HandleJoystickEvent(Event *event)
{
sdl_joystick_subsystem_initialized = TRUE;
- if (SDL_Init(SDL_INIT_JOYSTICK) < 0)
+ if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) < 0)
{
Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
return;
#if defined(TARGET_SDL)
int xstart3 = mSX + 29 * xstep;
SDL_version sdl_version_compiled;
+#if defined(TARGET_SDL2)
+ SDL_version sdl_version_linked_ext;
+#endif
const SDL_version *sdl_version_linked;
+#if defined(TARGET_SDL2)
+ const char *driver_name = NULL;
+#else
int driver_name_len = 8;
char driver_name[driver_name_len];
+#endif
#endif
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION);
DrawTextF(xstart3, ystart2, font_header, "linked");
SDL_VERSION(&sdl_version_compiled);
+#if defined(TARGET_SDL2)
+ SDL_GetVersion(&sdl_version_linked_ext);
+ sdl_version_linked = &sdl_version_linked_ext;
+#else
sdl_version_linked = SDL_Linked_Version();
+#endif
ystart2 += 2 * ystep;
DrawTextF(xstart1, ystart2, font_text, "SDL");
DrawTextF(xstart2, ystart2, font_header, "Requested");
DrawTextF(xstart3, ystart2, font_header, "Used");
+#if defined(TARGET_SDL2)
+ driver_name = SDL_GetVideoDriver(0);
+#else
SDL_VideoDriverName(driver_name, driver_name_len);
+#endif
ystart2 += 2 * ystep;
DrawTextF(xstart1, ystart2, font_text, "SDL_VideoDriver");
DrawTextF(xstart2, ystart2, font_text, "%s", setup.system.sdl_videodriver);
DrawTextF(xstart3, ystart2, font_text, "%s", driver_name);
+#if defined(TARGET_SDL2)
+ driver_name = SDL_GetAudioDriver(0);
+#else
SDL_AudioDriverName(driver_name, driver_name_len);
+#endif
ystart2 += ystep;
DrawTextF(xstart1, ystart2, font_text, "SDL_AudioDriver");