rnd-20131203-1-src
authorHolger Schemel <info@artsoft.org>
Tue, 3 Dec 2013 13:20:52 +0000 (14:20 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 09:00:12 +0000 (11:00 +0200)
Makefile
src/conftime.h
src/events.c
src/events.h
src/init.c
src/libgame/sdl.c
src/libgame/sdl.h
src/netserv.c
src/network.c
src/screens.c

index 173f5cd510e71c5928357790de047b50d3132bb8..df2f766215d9e5081a31350e94552e57091882be 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -176,10 +176,10 @@ dist-build-win32:
        @BUILD_DIST=TRUE $(MAKE) cross-win32
 
 dist-build-macosx:
-       # (this is done by "dist-package-macosx" target)
+#      (this is done by "dist-package-macosx" target)
 
 dist-build-macosx-ppc:
-       # (this is done by "dist-package-macosx-ppc" target)
+#      (this is done by "dist-package-macosx-ppc" target)
 
 dist-package-unix:
        ./Scripts/make_dist.sh unix .
@@ -239,4 +239,4 @@ tags:
        $(MAKE_CMD) tags
 
 depend dep:
-       $(MAKE_CMD) depend
+       $(MAKE_CMD) TARGET=$(DEFAULT_TARGET) depend
index c416a512c80096e4c4988a87b2c8c949cff2c6ab..ff48912e2d18082d78603a75d0878de068628f36 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2013-12-01 16:17"
+#define COMPILE_DATE_STRING "2013-12-03 14:17"
index 122311d1a527345b924ce8bca12673dca7d216e8..75e32c717c3a82ff48c8797f4b59bad65db6b868 100644 (file)
@@ -39,7 +39,7 @@ static unsigned int playfield_cursor_delay = 0;
 /* event filter addition for SDL2: as SDL2 does not have a function to enable
    or disable keyboard auto-repeat, filter repeated keyboard events instead */
 
-int FilterEvents(const Event *event)
+static int FilterEventsExt(const Event *event)
 {
   MotionEvent *motion;
 
@@ -74,6 +74,18 @@ int FilterEvents(const Event *event)
   return 1;
 }
 
+#if defined(TARGET_SDL2)
+int FilterEvents(void *userdata, Event *event)
+{
+  return FilterEventsExt(event);
+}
+#else
+int FilterEvents(const Event *event)
+{
+  return FilterEventsExt(event);
+}
+#endif
+
 /* to prevent delay problems, skip mouse motion events if the very next
    event is also a mouse motion event (and therefore effectively only
    handling the last of a row of mouse motion events in the event queue) */
@@ -115,7 +127,7 @@ static boolean NextValidEvent(Event *event)
 
     NextEvent(event);
 
-    if (FilterMouseMotionEvents(event))
+    if (FilterEventsExt(event))
       handle_this_event = TRUE;
 
     if (SkipPressedMouseMotionEvent(event))
index c66145c6c632137b50e93da099b0853f1db86b3e..5cff318374ae1d894946624431e9197ce0da17ae 100644 (file)
 
 #include "main.h"
 
+#if defined(TARGET_SDL2)
+int FilterEvents(void *, Event *);
+#else
 int FilterEvents(const Event *);
+#endif
+
 void EventLoop(void);
 void HandleOtherEvents(Event *);
 void ClearEventQueue(void);
index 423ad314cacd7b259459f2bc08a3ebedf8817a33..307350325c759bfecd14640cc8027f120e3ca1f6 100644 (file)
@@ -5313,6 +5313,7 @@ void Execute_Command(char *command)
 
 #if DEBUG
 #if defined(TARGET_SDL)
+#if !defined(TARGET_SDL2)
   else if (strEqual(command, "SDL_ListModes"))
   {
     SDL_Rect **modes;
@@ -5347,6 +5348,7 @@ void Execute_Command(char *command)
     exit(0);
   }
 #endif
+#endif
 #endif
 
   else
@@ -5642,6 +5644,91 @@ void InitGfx()
 
   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
@@ -6485,8 +6572,14 @@ void CloseAllAndExit(int exit_value)
   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();
index b9309408a4d1966ea687f6fa0db5b7d04fb64aa4..26cc7a7b103076df0c2d228ad8041f54744c506d 100644 (file)
 /* 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;
@@ -35,6 +39,9 @@ static int fullscreen_yoffset;
 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;
@@ -88,23 +95,44 @@ static void SDLSetWindowIcon(char *basename)
   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,
@@ -147,8 +175,13 @@ 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)
   {
@@ -219,7 +252,11 @@ void SDLInitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window,
     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
@@ -245,8 +282,13 @@ void SDLInitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window,
 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)
@@ -264,9 +306,24 @@ boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen)
     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());
@@ -293,9 +350,24 @@ boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen)
     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());
@@ -396,8 +468,13 @@ void SDLCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap,
                     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,
@@ -419,8 +496,13 @@ 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,
@@ -464,6 +546,9 @@ 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 */
@@ -471,6 +556,7 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
       flags |= SDL_HWSURFACE;
     else
       flags |= SDL_SWSURFACE;
+#endif
 
     /* create surface for temporary copy of screen buffer (source) */
     if ((surface_source =
@@ -546,7 +632,11 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
     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);
 
@@ -648,7 +738,11 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
        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
       }
     }
   }
@@ -668,7 +762,12 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
       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)
@@ -676,7 +775,11 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
 
 #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
@@ -1770,8 +1873,10 @@ void SDLSetMouseCursor(struct MouseCursorInfo *cursor_info)
 
 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)
   {
@@ -1896,6 +2001,8 @@ static void SDLCloseJoystick(int nr)
     return;
 
   SDL_JoystickClose(sdl_joystick[nr]);
+
+  sdl_joystick[nr] = NULL;
 }
 
 static boolean SDLCheckJoystickOpened(int nr)
@@ -1903,7 +2010,11 @@ 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)
@@ -1940,7 +2051,7 @@ void SDLInitJoysticks()
   {
     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;
index c99539b6c3bdcc6615f0195f3c6d0f4137967c3d..71e68331411ba8749ae8b9ee2f5d32558930bd2f 100644 (file)
 
 /* definitions needed for "system.c" */
 
+#if defined(TARGET_SDL2)
+#define SURFACE_FLAGS          (0)
+#else
 #define SURFACE_FLAGS          (SDL_SWSURFACE)
+#endif
 
 #if defined(TARGET_SDL2)
 #define SET_TRANSPARENT_PIXEL  (SDL_TRUE)
 #define UNSET_TRANSPARENT_PIXEL        (0)
 #endif
 
-#if defined(TARGET_SDL2)
-#define SDL_DisplayFormat(s)   (s)
-#endif
-
 /* system dependent definitions */
 
+#if defined(TARGET_SDL2)
+#define TARGET_STRING          "SDL2"
+#else
 #define TARGET_STRING          "SDL"
+#endif
+
 #define FULLSCREEN_STATUS      FULLSCREEN_AVAILABLE
 
 #define CURSOR_MAX_WIDTH       32
@@ -393,6 +398,10 @@ struct MouseCursorInfo
 
 /* SDL function definitions */
 
+#if defined(TARGET_SDL2)
+SDL_Surface *SDL_DisplayFormat(SDL_Surface *);
+#endif
+
 void SDLInitVideoDisplay(void);
 void SDLInitVideoBuffer(DrawBuffer **, DrawWindow **, boolean);
 boolean SDLSetVideoMode(DrawBuffer **, boolean);
index b895a30318a93172e3d0284e7d27a4bf492e7702..121377e29c7f359c3508775f0efb2f3d90035712 100644 (file)
@@ -614,7 +614,8 @@ void NetworkServer(int port, int serveronly)
 #if defined(TARGET_SDL)
     if ((sl = SDLNet_CheckSockets(fds, 500000)) < 1)
     {
-      Error(ERR_NETWORK_SERVER, SDLNet_GetError());
+      Error(ERR_NETWORK_SERVER, "SDLNet_CheckSockets failed: %s",
+           SDLNet_GetError());
       perror("SDLNet_CheckSockets");
     }
 
index b13e4c9a17f78943a7391c0fb5a73b39d016bc33..823d1b50875f7694c6644e432643991f2d39794b 100644 (file)
@@ -130,7 +130,12 @@ static void StartNetworkServer(int port)
   static int p;
 
   p = port;
+#if defined(TARGET_SDL2)
+  server_thread = SDL_CreateThread(NetworkServerThread,
+                                  "NetworkServerThread", &p);
+#else
   server_thread = SDL_CreateThread(NetworkServerThread, &p);
+#endif
   network_server = TRUE;
 
 #else
index 8c38785210b777bfdcb744723d2b1faf4a1d25a4..4a4dffdd3acc227eb46b97553add39ffa7d6e143 100644 (file)
@@ -2969,9 +2969,16 @@ void DrawInfoScreen_Version()
 #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);
@@ -3011,7 +3018,12 @@ void DrawInfoScreen_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");
@@ -3071,14 +3083,22 @@ void DrawInfoScreen_Version()
   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");