From 101fa1ef58f40eccdbe247a355c91318da035724 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 12 Sep 2020 20:04:19 +0200 Subject: [PATCH] =?UTF-8?q?Posix:=20Replace=20SDL=C2=A01.2=20with=20SDL2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is required for DeSmuME to start without X11, for instance on a pure Wayland system. --- desmume/src/frontend/posix/cli/main.cpp | 53 ++++++------------- desmume/src/frontend/posix/gtk/main.cpp | 4 +- desmume/src/frontend/posix/meson.build | 2 +- .../src/frontend/posix/shared/ctrlssdl.cpp | 36 +++++++------ desmume/src/frontend/posix/shared/ctrlssdl.h | 2 +- .../frontend/posix/shared/desmume_config.cpp | 2 +- .../frontend/posix/shared/desmume_config.h | 2 +- desmume/src/frontend/posix/shared/sndsdl.cpp | 1 + 8 files changed, 44 insertions(+), 58 deletions(-) diff --git a/desmume/src/frontend/posix/cli/main.cpp b/desmume/src/frontend/posix/cli/main.cpp index c8c12578b..194245fe9 100644 --- a/desmume/src/frontend/posix/cli/main.cpp +++ b/desmume/src/frontend/posix/cli/main.cpp @@ -77,7 +77,8 @@ static float nds_screen_size_ratio = 1.0f; #define FPS_LIMITER_FPS 60 -static SDL_Surface * surface; +static SDL_Window * window; +static SDL_Renderer * renderer; /* Flags to pass to SDL_SetVideoMode */ static int sdl_videoFlags; @@ -109,7 +110,7 @@ const char * save_type_names[] = { /* Our keyboard config is different because of the directional keys */ /* Please note that m is used for fake microphone */ -const u16 cli_kb_cfg[NB_KEYS] = +const u32 cli_kb_cfg[NB_KEYS] = { SDLK_x, // A SDLK_z, // B @@ -330,7 +331,6 @@ resizeWindow( u16 width, u16 height, GLuint *screen_texture) { int comp_height = 2 * height; GLenum errCode; - surface = SDL_SetVideoMode(width, height, 32, sdl_videoFlags); initGL(screen_texture); #ifdef HAVE_LIBAGG @@ -438,9 +438,10 @@ Draw( void) { SDL_Surface *rawImage = SDL_CreateRGBSurfaceFrom(displayInfo.masterNativeBuffer, GPU_FRAMEBUFFER_NATIVE_WIDTH, GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2, 16, GPU_FRAMEBUFFER_NATIVE_WIDTH * sizeof(u16), 0x001F, 0x03E0, 0x7C00, 0); if(rawImage == NULL) return; - SDL_BlitSurface(rawImage, 0, surface, 0); - SDL_UpdateRect(surface, 0, 0, 0, 0); + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, rawImage); SDL_FreeSurface(rawImage); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); return; } @@ -497,8 +498,6 @@ int main(int argc, char ** argv) { #ifdef INCLUDE_OPENGL_2D GLuint screen_texture[2]; #endif - /* this holds some info about our display */ - const SDL_VideoInfo *videoInfo; NDS_Init(); @@ -641,43 +640,23 @@ int main(int argc, char ** argv) { SDL_GetError()); return 1; } - SDL_WM_SetCaption("Desmume SDL", NULL); - - /* Fetch the video info */ - videoInfo = SDL_GetVideoInfo( ); - if ( !videoInfo ) { - fprintf( stderr, "Video query failed: %s\n", SDL_GetError( ) ); - exit( -1); - } - - /* This checks if hardware blits can be done */ - if ( videoInfo->blit_hw ) - sdl_videoFlags |= SDL_HWACCEL; #ifdef INCLUDE_OPENGL_2D if ( my_config.opengl_2d) { /* the flags to pass to SDL_SetVideoMode */ sdl_videoFlags = SDL_OPENGL; /* Enable OpenGL in SDL */ - sdl_videoFlags |= SDL_HWPALETTE; /* Store the palette in hardware */ sdl_videoFlags |= SDL_RESIZABLE; /* Enable window resizing */ - /* This checks to see if surfaces can be stored in memory */ - if ( videoInfo->hw_available ) - sdl_videoFlags |= SDL_HWSURFACE; - else - sdl_videoFlags |= SDL_SWSURFACE; - - /* Sets up OpenGL double buffering */ SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); - surface = SDL_SetVideoMode( 256, 192 * 2, 32, - sdl_videoFlags ); + window = SDL_CreateWindow( "Desmume SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 256, 192 * 2, + sdl_videoFlags ); - /* Verify there is a surface */ - if ( !surface ) { - fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError( ) ); + /* Verify there is a window */ + if ( !window ) { + fprintf( stderr, "Window creation failed: %s\n", SDL_GetError( ) ); exit( -1); } @@ -693,12 +672,14 @@ int main(int argc, char ** argv) { if ( !my_config.opengl_2d) { #endif sdl_videoFlags |= SDL_SWSURFACE; - surface = SDL_SetVideoMode(256, 384, 32, sdl_videoFlags); + window = SDL_CreateWindow( "Desmume SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 256, 384, sdl_videoFlags ); - if ( !surface ) { - fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError( ) ); + if ( !window ) { + fprintf( stderr, "Window creation failed: %s\n", SDL_GetError( ) ); exit( -1); } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); #ifdef INCLUDE_OPENGL_2D } @@ -804,7 +785,7 @@ int main(int argc, char ** argv) { snprintf( win_title, sizeof(win_title), "Desmume %f", fps); - SDL_WM_SetCaption( win_title, NULL); + SDL_SetWindowTitle( window, win_title ); } #endif } diff --git a/desmume/src/frontend/posix/gtk/main.cpp b/desmume/src/frontend/posix/gtk/main.cpp index d7b9eb9c9..cf026ec4e 100644 --- a/desmume/src/frontend/posix/gtk/main.cpp +++ b/desmume/src/frontend/posix/gtk/main.cpp @@ -1325,7 +1325,7 @@ GPU3DInterface *core3DList[] = { int multisampleSizes[] = {0, 2, 4, 8, 16, 32}; -static const u16 gtk_kb_cfg[NB_KEYS] = { +static const u32 gtk_kb_cfg[NB_KEYS] = { GDK_KEY_x, // A GDK_KEY_z, // B GDK_KEY_Shift_R, // select @@ -3898,7 +3898,7 @@ common_gtk_main(GApplication *app, gpointer user_data) driver = new GtkDriver(); - SDL_TimerID limiter_timer = NULL; + SDL_TimerID limiter_timer = 0; GtkWidget *pBox; diff --git a/desmume/src/frontend/posix/meson.build b/desmume/src/frontend/posix/meson.build index ec29e6d68..f218fed42 100644 --- a/desmume/src/frontend/posix/meson.build +++ b/desmume/src/frontend/posix/meson.build @@ -11,7 +11,7 @@ project('desmume', ) dep_glib2 = dependency('glib-2.0') -dep_sdl = dependency('sdl') +dep_sdl = dependency('sdl2') dep_pcap = dependency('pcap') dep_zlib = dependency('zlib') dep_threads = dependency('threads') diff --git a/desmume/src/frontend/posix/shared/ctrlssdl.cpp b/desmume/src/frontend/posix/shared/ctrlssdl.cpp index 9abff2bbe..9d58f70f9 100644 --- a/desmume/src/frontend/posix/shared/ctrlssdl.cpp +++ b/desmume/src/frontend/posix/shared/ctrlssdl.cpp @@ -80,7 +80,7 @@ const u16 default_joypad_cfg[NB_KEYS] = }; /* Load default joystick and keyboard configurations */ -void load_default_config(const u16 kbCfg[]) +void load_default_config(const u32 kbCfg[]) { memcpy(keyboard_cfg, kbCfg, sizeof(keyboard_cfg)); memcpy(joypad_cfg, default_joypad_cfg, sizeof(joypad_cfg)); @@ -123,7 +123,7 @@ BOOL init_joy( void) { for (i = 0; i < nbr_joy; i++) { SDL_Joystick * joy = SDL_JoystickOpen(i); - printf("Joystick %d %s\n", i, SDL_JoystickName(i)); + printf("Joystick %d %s\n", i, SDL_JoystickNameForIndex(i)); printf("Axes: %d\n", SDL_JoystickNumAxes(joy)); printf("Buttons: %d\n", SDL_JoystickNumButtons(joy)); printf("Trackballs: %d\n", SDL_JoystickNumBalls(joy)); @@ -476,20 +476,24 @@ process_ctrls_event( SDL_Event& event, if ( !do_process_joystick_events( &cfg->keypad, &event)) { switch (event.type) { - case SDL_VIDEORESIZE: - cfg->resize_cb( event.resize.w, event.resize.h, cfg->screen_texture); - break; - - case SDL_ACTIVEEVENT: - if (cfg->auto_pause && (event.active.state & SDL_APPINPUTFOCUS )) { - if (event.active.gain) { - cfg->focused = 1; - SPU_Pause(0); - driver->AddLine("Auto pause disabled"); - } else { - cfg->focused = 0; - SPU_Pause(1); - } + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + cfg->resize_cb(event.window.data1, event.window.data2, cfg->screen_texture); + break; + case SDL_WINDOWEVENT_FOCUS_GAINED: + if (cfg->auto_pause) { + cfg->focused = 1; + SPU_Pause(0); + driver->AddLine("Auto pause disabled"); + } + break; + case SDL_WINDOWEVENT_FOCUS_LOST: + if (cfg->auto_pause) { + cfg->focused = 0; + SPU_Pause(1); + } + break; } break; diff --git a/desmume/src/frontend/posix/shared/ctrlssdl.h b/desmume/src/frontend/posix/shared/ctrlssdl.h index 38e129db7..c4b1e32f3 100644 --- a/desmume/src/frontend/posix/shared/ctrlssdl.h +++ b/desmume/src/frontend/posix/shared/ctrlssdl.h @@ -100,7 +100,7 @@ struct ctrls_event_config { #endif }; -void load_default_config(const u16 kbCfg[]); +void load_default_config(const u32 kbCfg[]); BOOL init_joy( void); void uninit_joy( void); u16 get_joy_key(int index); diff --git a/desmume/src/frontend/posix/shared/desmume_config.cpp b/desmume/src/frontend/posix/shared/desmume_config.cpp index 8032e3d43..c1e14b8ed 100644 --- a/desmume/src/frontend/posix/shared/desmume_config.cpp +++ b/desmume/src/frontend/posix/shared/desmume_config.cpp @@ -25,7 +25,7 @@ static const gchar *desmume_old_config_file = ".desmume.ini"; static const gchar *desmume_config_dir = "desmume"; static const gchar *desmume_config_file = "config"; -GKeyFile *desmume_config_read_file(const u16 *kb_cfg) +GKeyFile *desmume_config_read_file(const u32 *kb_cfg) { gchar *config_file, *config_dir, *old_config_file; GKeyFile *keyfile; diff --git a/desmume/src/frontend/posix/shared/desmume_config.h b/desmume/src/frontend/posix/shared/desmume_config.h index c11b5e110..314b5be5d 100644 --- a/desmume/src/frontend/posix/shared/desmume_config.h +++ b/desmume/src/frontend/posix/shared/desmume_config.h @@ -18,7 +18,7 @@ #ifndef _DESMUME_GTK_CONFIG #define _DESMUME_GTK_CONFIG -GKeyFile *desmume_config_read_file(const u16 *); +GKeyFile *desmume_config_read_file(const u32 *); void desmume_config_dispose(GKeyFile *); gboolean desmume_config_update_keys(GKeyFile*); diff --git a/desmume/src/frontend/posix/shared/sndsdl.cpp b/desmume/src/frontend/posix/shared/sndsdl.cpp index 2012dc120..892c65819 100644 --- a/desmume/src/frontend/posix/shared/sndsdl.cpp +++ b/desmume/src/frontend/posix/shared/sndsdl.cpp @@ -92,6 +92,7 @@ static void MixAudio(void *userdata, Uint8 *stream, int len) { stream_tmp[i] = soundbuf[soundpos]; soundpos++; } + memset(stream, 0, len); SDL_MixAudio(stream, stream_tmp, len, audio_volume); free(stream_tmp); }