diff options
Diffstat (limited to 'src')
28 files changed, 325 insertions, 263 deletions
diff --git a/src/osd/sdl/README_SDL13.txt b/src/osd/sdl/README_SDL20.txt index 060a6a89d6a..1dd0e1c1990 100644 --- a/src/osd/sdl/README_SDL13.txt +++ b/src/osd/sdl/README_SDL20.txt @@ -1,25 +1,12 @@ ====================================================================================== -SDLMAME only supports SDL hg revisions up to 4464 - -Every revision after 4464 has multi-mice/multi-keyboard ripped out. -Revisions >= 4465 will not work with SDLMAME. - -To build a version suitable for SDLMAME, use ... - -hg clone http://hg.libsdl.org/SDL -hg update 4464 -sh autogen.sh -./configure --prefix=/usr/local/sdl13 --enable-maintainer-mode --disable-video-directfb --disable-fusionsound - -Know caveats: DirectFB is broken (will not compile) - +SDLMAME now supports SDL from version 2.0 on upwards. ======================================================================================= Warning ======= -- SDL1.3 still is still under development, the following may or may not +- SDL2.0 still is still under development, the following may or may not work. - if you are using wine on unix be sure to disable wintab32.dll @@ -27,14 +14,14 @@ Known bugs: =========== * SDL1.3/X11: Some compound keys, e.g. "'" are not supported by SDL driver -* SDL1.3: sdlvideofps does not take -numscreens>1 into account. +* SDL2.0: sdlvideofps does not take -numscreens>1 into account. * SDL1.3/WIN32: crashes with -rd d3d * SDL1.3/WIN32: resizing does not work -Build SDL 1.3 from SVN +Build SDL 2.0 from HG ====================== -Pull 1.3 from svn. Than +Pull 2.0 from hg. Than sh autogen.sh ./configure --prefix=/usr/local/sdl13/ --disable-video-svga --enable-video-directfb --enable-fusionsound @@ -53,6 +40,7 @@ Replace /usr/local/sdl13 above with a safe location, this may as well be a direc Edit sdl.mak to have +SDL_LIBVER = sdl2 SDL_INSTALL_ROOT = /usr/local/sdl13 That's it. @@ -86,8 +74,7 @@ the same time performs any necessary rotation. Basic usage examples: X11/opengl: ./mamed -video sdl13 -rd opengl mario -DFB/DFB: ./mamed -video sdl13 -rd directfb mario -WIN32/opengl ./mamed -video sdl13 -rd opengl mario +DFB/DFB: ./mamed -video sdl13 -vd directfb -rd directfb mario The performance of the directfb driver depends on the combined support of the kernel framebuffer driver and the directfb driver. @@ -101,24 +88,20 @@ X11,DFB,WIN32 ./mamed -video sdl13 -rd software Soft: ===== -./mamed -mt -video soft -ym none -numscreens 2 mario +./mamed -mt -video soft -sm none -numscreens 2 mario OpenGL: ======= Plain opengl does work. Anything more advanced like pbo, fbo or glsl will -most probably not. +most probably not work with more than one screen. - ./mamed -mt -video opengl mario -ym none -nogl_pbo -numscreens 2 + ./mamed -mt -video opengl mario -nogl_pbo -nogl_vbo -nogl_glsl -numscreens 2 YUV - modes: ============ - ./mamed -mt -video soft -rd software -ym yuy2 -numscreens 2 mario - -The "-rd" overwrites the default which is built-in opengl. This renderer -does not support yuv modes. The software driver does support them non-accelarated. -This has been left in for the time Xv is once again implemented in SDL. + ./mamed -mt -video soft -sm yuy2 mario Using DirectFB, the following should get you going @@ -142,10 +125,8 @@ yv12, yv12x2, yuy2, yuy2x2: Rendering in software / scaling with hardware (if supported) Whether these are actually hardware accelerated depends on the SDL driver -and the hardware. The current SDL X11 driver needs opengl for rendering but -does not support yuv textures. The "to-be-submitted" SDL directfb driver -supports all above if the hardware supports it. However, only one YUV-texture -per display is supported. The second window consequently will get "software" -YUV blitting. +and the hardware. The SDL directfb driver supports all above if the hardware +supports it. However, only one YUV-texture per display is supported. +The second window consequently will get "software" YUV blitting. diff --git a/src/osd/sdl/debugwin.c b/src/osd/sdl/debugwin.c index 8c6300ba8bf..c4e4330c4b4 100644 --- a/src/osd/sdl/debugwin.c +++ b/src/osd/sdl/debugwin.c @@ -1276,8 +1276,7 @@ on_memoryview_key_press_event(GtkWidget *widget, #else -#include <SDL/SDL.h> -#include <SDL/SDL_version.h> +#include "sdlinc.h" #include "emu.h" #include "osdepend.h" diff --git a/src/osd/sdl/draw13.c b/src/osd/sdl/draw13.c index 61c143622f7..a684e60f994 100644 --- a/src/osd/sdl/draw13.c +++ b/src/osd/sdl/draw13.c @@ -18,7 +18,7 @@ #include "options.h" // standard SDL headers -#include <SDL/SDL.h> +#include "sdlinc.h" // OSD headers #include "osdsdl.h" @@ -379,11 +379,11 @@ INLINE void render_quad(sdl_info *sdl, texture_info *texture, render_primitive * #if 0 if ((PRIMFLAG_GET_SCREENTEX(prim->flags)) && video_config.filter) { - SDL_SetTextureScaleMode(texture->texture_id, SDL_SCALEMODE_BEST); + SDL_SetTextureScaleMode(texture->texture_id, DRAW2_SCALEMODE_BEST); } else { - SDL_SetTextureScaleMode(texture->texture_id, SDL_SCALEMODE_NONE); + SDL_SetTextureScaleMode(texture->texture_id, DRAW2_SCALEMODE_NEAREST); } #endif SDL_SetTextureBlendMode(texture_id, texture->sdl_blendmode); @@ -497,7 +497,7 @@ int draw13_init(running_machine &machine, sdl_draw_info *callbacks) callbacks->exit = draw13_exit; callbacks->attach = draw13_attach; - mame_printf_verbose("Using SDL native texturing driver (SDL 1.3+)\n"); + mame_printf_verbose("Using SDL native texturing driver (SDL 2.0+)\n"); expand_copy_info(blit_info_default); //FIXME: -opengl16 should be -opengl -prefer16bpp @@ -577,6 +577,9 @@ static int draw13_window_create(sdl_window_info *window, int width, int height) SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_RESIZABLE); // create the SDL window + window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED_DISPLAY(window->monitor->handle), SDL_WINDOWPOS_UNDEFINED, + width, height, sdl->extra_flags); + if (window->fullscreen && video_config.switchres) { SDL_DisplayMode mode; @@ -610,15 +613,12 @@ static int draw13_window_create(sdl_window_info *window, int width, int height) else SDL_SetWindowDisplayMode(window->sdl_window, NULL); // Use desktop - window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED_DISPLAY(window->monitor->handle), SDL_WINDOWPOS_UNDEFINED, - width, height, sdl->extra_flags); - // create renderer if (video_config.waitvsync) - sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD | */SDL_RENDERER_PRESENTVSYNC); + sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); else - sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD*/ 0); + sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, SDL_RENDERER_ACCELERATED); if (!sdl->sdl_renderer) { @@ -721,6 +721,7 @@ static int draw13_window_draw(sdl_window_info *window, UINT32 dc, int update) SDL_SetWindowSize(window->sdl_window, sdl->resize_width, sdl->resize_height); SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); sdl->resize_pending = 0; + SDL_RenderSetViewport(sdl->sdl_renderer, NULL); } //SDL_SelectRenderer(window->sdl_window); diff --git a/src/osd/sdl/drawogl.c b/src/osd/sdl/drawogl.c index 2ce2e4299cc..be744ea0003 100644 --- a/src/osd/sdl/drawogl.c +++ b/src/osd/sdl/drawogl.c @@ -24,7 +24,7 @@ #include "emuopts.h" // standard SDL headers -#include <SDL/SDL.h> +#include "sdlinc.h" // OpenGL headers #include "osd_opengl.h" @@ -219,7 +219,7 @@ struct _sdl_info INT32 blittimer; UINT32 extra_flags; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) SDL_GLContext gl_context_id; #else // SDL surface @@ -437,15 +437,14 @@ int drawogl_init(running_machine &machine, sdl_draw_info *callbacks) dll_loaded = 0; - if (SDL_VERSION_ATLEAST(1,3,0)) - mame_printf_verbose("Using SDL multi-window OpenGL driver (SDL 1.3+)\n"); + if (SDLMAME_SDL2) + { + mame_printf_verbose("Using SDL multi-window OpenGL driver (SDL 2.0+)\n"); + load_gl_lib(machine); + } else mame_printf_verbose("Using SDL single-window OpenGL driver (SDL 1.2)\n"); -#if (SDL_VERSION_ATLEAST(1,3,0)) - load_gl_lib(machine); -#endif - return 0; } @@ -546,7 +545,7 @@ static int drawogl_window_create(sdl_window_info *window, int width, int height) window->dxdata = sdl; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) sdl->extra_flags = (window->fullscreen ? SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_RESIZABLE); sdl->extra_flags |= SDL_WINDOW_OPENGL; @@ -556,6 +555,14 @@ static int drawogl_window_create(sdl_window_info *window, int width, int height) //load_gl_lib(window->machine()); // create the SDL window + window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED_DISPLAY(window->monitor->handle), SDL_WINDOWPOS_UNDEFINED, + width, height, sdl->extra_flags); + + if (!window->sdl_window ) + { + mame_printf_error("OpenGL not supported on this driver: %s\n", SDL_GetError()); + return 1; + } if (window->fullscreen && video_config.switchres) { @@ -570,15 +577,6 @@ static int drawogl_window_create(sdl_window_info *window, int width, int height) else SDL_SetWindowDisplayMode(window->sdl_window, NULL); // Use desktop - window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED_DISPLAY(window->monitor->handle), SDL_WINDOWPOS_UNDEFINED, - width, height, sdl->extra_flags); - - if (!window->sdl_window ) - { - mame_printf_error("OpenGL not supported on this driver: %s\n", SDL_GetError()); - return 1; - } - SDL_ShowWindow(window->sdl_window); //SDL_SetWindowFullscreen(window->sdl_window, window->fullscreen); SDL_RaiseWindow(window->sdl_window); @@ -798,7 +796,7 @@ static void drawogl_window_resize(sdl_window_info *window, int width, int height { sdl_info *sdl = (sdl_info *) window->dxdata; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) //SDL_GL_MakeCurrent(window->sdl_window, sdl->gl_context_id); SDL_SetWindowSize(window->sdl_window, width, height); SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); @@ -1190,7 +1188,7 @@ static int drawogl_window_draw(sdl_window_info *window, UINT32 dc, int update) return 0; } -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) SDL_GL_MakeCurrent(window->sdl_window, sdl->gl_context_id); #endif if (sdl->init_context) @@ -1546,7 +1544,7 @@ static int drawogl_window_draw(sdl_window_info *window, UINT32 dc, int update) window->primlist->release_lock(); sdl->init_context = 0; -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) SDL_GL_SwapBuffers(); #else SDL_GL_SwapWindow(window->sdl_window); @@ -1721,7 +1719,7 @@ static void drawogl_window_destroy(sdl_window_info *window) drawogl_destroy_all_textures(window); -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) SDL_GL_DeleteContext(sdl->gl_context_id); SDL_DestroyWindow(window->sdl_window); #else @@ -3135,7 +3133,7 @@ static void drawogl_destroy_all_textures(sdl_window_info *window) if ( !sdl->initialized ) return; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) SDL_GL_MakeCurrent(window->sdl_window, sdl->gl_context_id); #endif diff --git a/src/osd/sdl/drawsdl.c b/src/osd/sdl/drawsdl.c index e4d8b517392..9118f411848 100644 --- a/src/osd/sdl/drawsdl.c +++ b/src/osd/sdl/drawsdl.c @@ -18,7 +18,7 @@ #include "ui.h" // standard SDL headers -#include <SDL/SDL.h> +#include "sdlinc.h" // OSD headers #include "osdsdl.h" @@ -38,11 +38,10 @@ typedef struct _sdl_scale_mode sdl_scale_mode; -// FIXME: Only until there is a final decision from SAM on scalemodes -#if (SDL_VERSION_ATLEAST(1,3,0)) -#define SDL_SCALEMODE_NONE (0) -#define SDL_SCALEMODE_FAST (0) -#define SDL_SCALEMODE_BEST (0) +#if (SDLMAME_SDL2) +#define DRAW2_SCALEMODE_NEAREST "0" +#define DRAW2_SCALEMODE_LINEAR "1" +#define DRAW2_SCALEMODE_BEST "2" #endif /* sdl_info is the information about SDL for the current screen */ @@ -52,7 +51,8 @@ struct _sdl_info INT32 blittimer; UINT32 extra_flags; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) + SDL_Renderer *sdl_renderer; SDL_Texture *texture_id; #else // SDL surface @@ -73,10 +73,6 @@ struct _sdl_info int last_vofs; int old_blitwidth; int old_blitheight; - - // shortcut to scale mode info - - const sdl_scale_mode *scale_mode; }; struct _sdl_scale_mode @@ -86,11 +82,10 @@ struct _sdl_scale_mode int is_yuv; /* Yuv mode? */ int mult_w; /* Width multiplier */ int mult_h; /* Height multiplier */ -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) int extra_flags; /* Texture/surface flags */ #else - //SDL_ScaleMode sdl_scale_mode; /* sdl 1.3 scale mode */ - int sdl_scale_mode; /* got removed recently - trying to get it in again */ + const char *sdl_scale_mode; /* what to use as a hint ? */ #endif int pixel_format; /* Pixel/Overlay format */ void (*yuv_blit)(UINT16 *bitmap, sdl_info *sdl, UINT8 *ptr, int pitch); @@ -116,7 +111,7 @@ static void drawsdl_destroy_all_textures(sdl_window_info *window); static void drawsdl_window_clear(sdl_window_info *window); static int drawsdl_xy_to_render_target(sdl_window_info *window, int x, int y, int *xt, int *yt); -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight); #endif @@ -137,7 +132,7 @@ static void yuv_RGB_to_YUY2X2(UINT16 *bitmap, sdl_info *sdl, UINT8 *ptr, int pit // Static declarations -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) static int shown_video_info = 0; static const sdl_scale_mode scale_modes[] = @@ -153,13 +148,13 @@ static const sdl_scale_mode scale_modes[] = #else static const sdl_scale_mode scale_modes[] = { - { "none", 0, 0, 0, 0, SDL_SCALEMODE_NONE, 0, 0 }, - { "hwblit", 1, 0, 1, 1, SDL_SCALEMODE_FAST, 0, 0 }, - { "hwbest", 1, 0, 1, 1, SDL_SCALEMODE_BEST, 0, 0 }, - { "yv12", 1, 1, 1, 1, SDL_SCALEMODE_NONE, SDL_PIXELFORMAT_YV12, yuv_RGB_to_YV12 }, - { "yv12x2", 1, 1, 2, 2, SDL_SCALEMODE_NONE, SDL_PIXELFORMAT_YV12, yuv_RGB_to_YV12X2 }, - { "yuy2", 1, 1, 1, 1, SDL_SCALEMODE_NONE, SDL_PIXELFORMAT_YUY2, yuv_RGB_to_YUY2 }, - { "yuy2x2", 1, 1, 2, 1, SDL_SCALEMODE_NONE, SDL_PIXELFORMAT_YUY2, yuv_RGB_to_YUY2X2 }, + { "none", 0, 0, 0, 0, DRAW2_SCALEMODE_NEAREST, 0, 0 }, + { "hwblit", 1, 0, 1, 1, DRAW2_SCALEMODE_LINEAR, 0, 0 }, + { "hwbest", 1, 0, 1, 1, DRAW2_SCALEMODE_BEST, 0, 0 }, + { "yv12", 1, 1, 1, 1, DRAW2_SCALEMODE_NEAREST, SDL_PIXELFORMAT_YV12, yuv_RGB_to_YV12 }, + { "yv12x2", 1, 1, 2, 2, DRAW2_SCALEMODE_NEAREST, SDL_PIXELFORMAT_YV12, yuv_RGB_to_YV12X2 }, + { "yuy2", 1, 1, 1, 1, DRAW2_SCALEMODE_NEAREST, SDL_PIXELFORMAT_YUY2, yuv_RGB_to_YUY2 }, + { "yuy2x2", 1, 1, 2, 1, DRAW2_SCALEMODE_NEAREST, SDL_PIXELFORMAT_YUY2, yuv_RGB_to_YUY2X2 }, { NULL } }; #endif @@ -208,8 +203,8 @@ int drawsdl_init(sdl_draw_info *callbacks) callbacks->exit = drawsdl_exit; callbacks->attach = drawsdl_attach; - if (SDL_VERSION_ATLEAST(1,3,0)) - mame_printf_verbose("Using SDL multi-window soft driver (SDL 1.3+)\n"); + if (SDLMAME_SDL2) + mame_printf_verbose("Using SDL multi-window soft driver (SDL 2.0+)\n"); else mame_printf_verbose("Using SDL single-window soft driver (SDL 1.2)\n"); @@ -254,11 +249,11 @@ static void drawsdl_destroy_all_textures(sdl_window_info *window) // setup_texture for window //============================================================ -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight) { sdl_info *sdl = (sdl_info *) window->dxdata; - const sdl_scale_mode *sdl_sm = sdl->scale_mode; + const sdl_scale_mode *sdl_sm = &scale_modes[video_config.scale_mode]; SDL_DisplayMode mode; UINT32 fmt; @@ -278,6 +273,9 @@ static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight { sdl->hw_scale_width *= video_config.prescale; sdl->hw_scale_height *= video_config.prescale; + + /* This must be a multiple of 2 */ + sdl->hw_scale_width = (sdl->hw_scale_width + 1) & ~1; } } @@ -291,17 +289,14 @@ static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight int w = sdl->hw_scale_width * sdl_sm->mult_w; int h = sdl->hw_scale_height * sdl_sm->mult_h; - sdl->texture_id = SDL_CreateTexture(window->sdl_renderer, fmt, SDL_TEXTUREACCESS_STREAMING, w, h); + sdl->texture_id = SDL_CreateTexture(sdl->sdl_renderer, fmt, SDL_TEXTUREACCESS_STREAMING, w, h); } else { - sdl->texture_id = SDL_CreateTexture(window->sdl_renderer,fmt, SDL_TEXTUREACCESS_STREAMING, + sdl->texture_id = SDL_CreateTexture(sdl->sdl_renderer,fmt, SDL_TEXTUREACCESS_STREAMING, tempwidth, tempheight); } - - //SDL_SetTextureScaleMode(window->sdl_renderer,sdl->texture_id, sdl_sm->sdl_scale_mode); - } #endif @@ -309,11 +304,11 @@ static void setup_texture(sdl_window_info *window, int tempwidth, int tempheight // yuv_overlay_init //============================================================ -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) static void yuv_overlay_init(sdl_window_info *window) { sdl_info *sdl = (sdl_info *) window->dxdata; - const sdl_scale_mode *sdl_sm = sdl->scale_mode; + const sdl_scale_mode *sdl_sm = &scale_modes[video_config.scale_mode]; int minimum_width, minimum_height; window->target->compute_minimum_size(minimum_width, minimum_height); @@ -364,7 +359,7 @@ static void yuv_overlay_init(sdl_window_info *window) // drawsdl_show_info //============================================================ -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) static void drawsdl_show_info(sdl_window_info *window, struct SDL_RendererInfo *render_info) { #define RF_ENTRY(x) {x, #x } @@ -400,6 +395,7 @@ static void drawsdl_show_info(sdl_window_info *window, struct SDL_RendererInfo * static int drawsdl_window_create(sdl_window_info *window, int width, int height) { sdl_info *sdl; + const sdl_scale_mode *sm = &scale_modes[video_config.scale_mode]; // allocate memory for our structures sdl = (sdl_info *) osd_malloc(sizeof(sdl_info)); @@ -407,13 +403,19 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) window->dxdata = sdl; - sdl->scale_mode = &scale_modes[window->scale_mode]; +#if (SDLMAME_SDL2) + + /* set hints ... */ + + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, sm->sdl_scale_mode); -#if (SDL_VERSION_ATLEAST(1,3,0)) sdl->extra_flags = (window->fullscreen ? SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_INPUT_GRABBED : SDL_WINDOW_RESIZABLE); + window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + width, height, sdl->extra_flags); + if (window->fullscreen && video_config.switchres) { SDL_DisplayMode mode; @@ -427,8 +429,6 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) else SDL_SetWindowDisplayMode(window->sdl_window, NULL); // Use desktop - window->sdl_window = SDL_CreateWindow(window->title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - width, height, sdl->extra_flags); SDL_ShowWindow(window->sdl_window); SDL_SetWindowFullscreen(window->sdl_window, (SDL_bool) window->fullscreen); @@ -442,34 +442,33 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) // create a texture if (video_config.waitvsync) - window->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD |*/ SDL_RENDERER_PRESENTVSYNC); + sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD |*/ SDL_RENDERER_PRESENTVSYNC); else - window->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD*/ 0); + sdl->sdl_renderer = SDL_CreateRenderer(window->sdl_window, -1, /*SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTDISCARD*/ 0); //SDL_SelectRenderer(window->sdl_window); { struct SDL_RendererInfo render_info; - SDL_GetRendererInfo(window->sdl_renderer, &render_info); + SDL_GetRendererInfo(sdl->sdl_renderer, &render_info); drawsdl_show_info(window, &render_info); // Check scale mode - if (sdl->scale_mode->pixel_format) + if (sm->pixel_format) { int i; int found = 0; for (i=0; i < render_info.num_texture_formats; i++) - if (sdl->scale_mode->pixel_format == render_info.texture_formats[i]) + if (sm->pixel_format == render_info.texture_formats[i]) found = 1; if (!found) { - mame_printf_verbose("window: Scale mode %s not supported! Using default.\n", sdl->scale_mode->name); - ui_popup_time(3, "Scale mode %s not supported! Using default.", sdl->scale_mode->name); - sdl->scale_mode = &scale_modes[0]; + mame_printf_verbose("window: Scale mode %s not supported!\n", sm->name); + ui_popup_time(3, "Scale mode %s not supported!", sm->name); } } } @@ -478,7 +477,7 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) #else sdl->extra_flags = (window->fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE); - sdl->extra_flags |= sdl->scale_mode->extra_flags; + sdl->extra_flags |= sm->extra_flags; sdl->sdlsurf = SDL_SetVideoMode(width, height, 0, SDL_SWSURFACE | SDL_ANYFORMAT | sdl->extra_flags); @@ -489,7 +488,7 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) window->width = sdl->sdlsurf->w; window->height = sdl->sdlsurf->h; - if (sdl->scale_mode->is_yuv) + if (sm->is_yuv) yuv_overlay_init(window); // set the window title @@ -508,8 +507,10 @@ static int drawsdl_window_create(sdl_window_info *window, int width, int height) static void drawsdl_window_resize(sdl_window_info *window, int width, int height) { - -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) + const sdl_scale_mode *sdl_sm = &scale_modes[video_config.scale_mode]; +#endif +#if (SDLMAME_SDL2) SDL_SetWindowSize(window->sdl_window, width, height); SDL_GetWindowSize(window->sdl_window, &window->width, &window->height); @@ -529,7 +530,7 @@ static void drawsdl_window_resize(sdl_window_info *window, int width, int height window->width = sdl->sdlsurf->w; window->height = sdl->sdlsurf->h; - if (sdl->scale_mode->is_yuv) + if (sdl_sm->is_yuv) { yuv_overlay_init(window); } @@ -550,7 +551,7 @@ static void drawsdl_window_destroy(sdl_window_info *window) if (sdl == NULL) return; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) //SDL_SelectRenderer(window->sdl_window); SDL_DestroyTexture(sdl->texture_id); //SDL_DestroyRenderer(window->sdl_window); @@ -602,6 +603,7 @@ static void drawsdl_window_clear(sdl_window_info *window) static int drawsdl_xy_to_render_target(sdl_window_info *window, int x, int y, int *xt, int *yt) { sdl_info *sdl = (sdl_info *) window->dxdata; + const sdl_scale_mode *sm = &scale_modes[video_config.scale_mode]; *xt = x - sdl->last_hofs; *yt = y - sdl->last_vofs; @@ -609,7 +611,7 @@ static int drawsdl_xy_to_render_target(sdl_window_info *window, int x, int y, in return 0; if (*yt<0 || *xt >= window->blitheight) return 0; - if (!sdl->scale_mode->is_scale) + if (!sm->is_scale) { return 1; } @@ -626,6 +628,7 @@ static int drawsdl_xy_to_render_target(sdl_window_info *window, int x, int y, in static render_primitive_list &drawsdl_window_get_primitives(sdl_window_info *window) { sdl_info *sdl = (sdl_info *) window->dxdata; + const sdl_scale_mode *sm = &scale_modes[video_config.scale_mode]; if ((!window->fullscreen) || (video_config.switchres)) { @@ -636,7 +639,7 @@ static render_primitive_list &drawsdl_window_get_primitives(sdl_window_info *win sdlwindow_blit_surface_size(window, window->monitor->center_width, window->monitor->center_height); } - if (!sdl->scale_mode->is_scale) + if (!sm->is_scale) window->target->set_bounds(window->blitwidth, window->blitheight, sdlvideo_monitor_get_aspect(window->monitor)); else window->target->set_bounds(sdl->hw_scale_width, sdl->hw_scale_height); @@ -651,11 +654,12 @@ static render_primitive_list &drawsdl_window_get_primitives(sdl_window_info *win static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) { sdl_info *sdl = (sdl_info *) window->dxdata; + const sdl_scale_mode *sm = &scale_modes[video_config.scale_mode]; UINT8 *surfptr; INT32 pitch; int bpp; Uint32 rmask, gmask, bmask; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) Uint32 amask; #endif INT32 vofs, hofs, blitwidth, blitheight, ch, cw; @@ -670,7 +674,7 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) return 1; // lock it if we need it -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) pitch = sdl->sdlsurf->pitch; bpp = sdl->sdlsurf->format->BytesPerPixel; @@ -681,7 +685,7 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) if (window->blitwidth != sdl->old_blitwidth || window->blitheight != sdl->old_blitheight) { - if (sdl->scale_mode->is_yuv) + if (sm->is_yuv) yuv_overlay_init(window); sdl->old_blitwidth = window->blitwidth; sdl->old_blitheight = window->blitheight; @@ -698,7 +702,7 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) } - if (sdl->scale_mode->is_yuv) + if (sm->is_yuv) { SDL_LockYUVOverlay(sdl->yuvsurf); surfptr = sdl->yuvsurf->pixels[0]; // (UINT8 *) sdl->yuv_bitmap; @@ -711,6 +715,8 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) if (window->blitwidth != sdl->old_blitwidth || window->blitheight != sdl->old_blitheight) { + SDL_RenderSetViewport(sdl->sdl_renderer, NULL); + SDL_DestroyTexture(sdl->texture_id); setup_texture(window, window->blitwidth, window->blitheight); sdl->old_blitwidth = window->blitwidth; @@ -731,8 +737,8 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) if (sdl->blittimer > 0) { /* SDL Underlays need alpha = 0 ! */ - SDL_SetRenderDrawColor(window->sdl_renderer,0,0,0,0); - SDL_RenderFillRect(window->sdl_renderer,NULL); + SDL_SetRenderDrawColor(sdl->sdl_renderer,0,0,0,0); + SDL_RenderFillRect(sdl->sdl_renderer,NULL); //SDL_RenderFill(0,0,0,0 /*255*/,NULL); sdl->blittimer--; } @@ -784,15 +790,15 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) window->primlist->acquire_lock(); // render to it - if (!sdl->scale_mode->is_yuv) + if (!sm->is_yuv) { int mamewidth, mameheight; - if (!sdl->scale_mode->is_scale) + if (!sm->is_scale) { mamewidth = blitwidth; mameheight = blitheight; -#if !SDL_VERSION_ATLEAST(1,3,0) +#if !SDLMAME_SDL2 surfptr += ((vofs * pitch) + (hofs * bpp)); #endif } @@ -833,15 +839,15 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) assert (sdl->yuv_bitmap != NULL); assert (surfptr != NULL); drawsdl_rgb555_draw_primitives(*window->primlist, sdl->yuv_bitmap, sdl->hw_scale_width, sdl->hw_scale_height, sdl->hw_scale_width); - sdl->scale_mode->yuv_blit((UINT16 *)sdl->yuv_bitmap, sdl, surfptr, pitch); + sm->yuv_blit((UINT16 *)sdl->yuv_bitmap, sdl, surfptr, pitch); } window->primlist->release_lock(); // unlock and flip -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) if (SDL_MUSTLOCK(sdl->sdlsurf)) SDL_UnlockSurface(sdl->sdlsurf); - if (!sdl->scale_mode->is_yuv) + if (!sm->is_yuv) { SDL_Flip(sdl->sdlsurf); } @@ -867,8 +873,8 @@ static int drawsdl_window_draw(sdl_window_info *window, UINT32 dc, int update) r.h=blitheight; //printf("blitwidth %d %d - %d %d\n", blitwidth, blitheight, window->width, window->height); //SDL_UpdateTexture(sdl->sdltex, NULL, sdl->sdlsurf->pixels, pitch); - SDL_RenderCopy(window->sdl_renderer,sdl->texture_id, NULL, &r); - SDL_RenderPresent(window->sdl_renderer); + SDL_RenderCopy(sdl->sdl_renderer,sdl->texture_id, NULL, &r); + SDL_RenderPresent(sdl->sdl_renderer); } #endif return 0; diff --git a/src/osd/sdl/gl_shader_mgr.c b/src/osd/sdl/gl_shader_mgr.c index d12715ab614..b8a97519894 100644 --- a/src/osd/sdl/gl_shader_mgr.c +++ b/src/osd/sdl/gl_shader_mgr.c @@ -1,5 +1,5 @@ -#include <SDL/SDL.h> +#include "sdlinc.h" #include "osd_opengl.h" diff --git a/src/osd/sdl/input.c b/src/osd/sdl/input.c index 0e7cca86222..417e0d13b3f 100644 --- a/src/osd/sdl/input.c +++ b/src/osd/sdl/input.c @@ -13,7 +13,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #include <ctype.h> #include <stddef.h> @@ -206,7 +206,7 @@ struct _kt_table { char * ui_name; }; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) #define OSD_SDL_INDEX(x) (x) #define OSD_SDL_INDEX_KEYSYM(keysym) ((keysym)->scancode) @@ -470,7 +470,7 @@ struct _key_lookup_table const char *name; }; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) #define KE(x) { SDL_SCANCODE_ ## x, "SDL_SCANCODE_" #x }, #define KE8(A, B, C, D, E, F, G, H) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) KE(H) #define KE7(A, B, C, D, E, F, G) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) @@ -790,7 +790,7 @@ static void sdlinput_deregister_joysticks(running_machine &machine) // sdlinput_register_mice //============================================================ -#if (!SDL13_POST_HG4464 && SDL_VERSION_ATLEAST(1,3,0)) +#if defined(SDL2_MULTIAPI) && 0 static void sdlinput_register_mice(running_machine &machine) { int index, physical_mouse; @@ -1002,7 +1002,7 @@ static kt_table * sdlinput_read_keymap(running_machine &machine) // sdlinput_register_keyboards //============================================================ -#if ((1 ||!SDL13_POST_HG4464) && SDL_VERSION_ATLEAST(1,3,0)) +#ifdef SDL2_MULTIAPI static void sdlinput_register_keyboards(running_machine &machine) { int physical_keyboard; @@ -1193,7 +1193,7 @@ sdl_window_info *sdlinput_get_focus_window(running_machine &machine) // sdlinput_poll //============================================================ -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) INLINE sdl_window_info * window_from_id(Uint32 windowID) { sdl_window_info *w; @@ -1238,7 +1238,7 @@ void sdlinput_process_events_buf(running_machine &machine) if (SDLMAME_EVENTS_IN_WORKER_THREAD) { osd_lock_acquire(input_lock); - #if (SDL_VERSION_ATLEAST(1,3,0)) + #if (SDLMAME_SDL2) /* Make sure we get all pending events */ SDL_PumpEvents(); #endif @@ -1306,15 +1306,24 @@ void sdlinput_poll(running_machine &machine) } switch(event.type) { case SDL_KEYDOWN: +#ifdef SDL2_MULTIAPI devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[event.key.which]); //printf("Key down %d %d %s => %d %s (scrlock keycode is %d)\n", event.key.which, event.key.keysym.scancode, devinfo->name, OSD_SDL_INDEX_KEYSYM(&event.key.keysym), sdl_key_trans_table[event.key.keysym.scancode].mame_key_name, KEYCODE_SCRLOCK); +#else + devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[0]); +#endif devinfo->keyboard.state[OSD_SDL_INDEX_KEYSYM(&event.key.keysym)] = 0x80; -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) ui_input_push_char_event(machine, sdl_window_list->target, (unicode_char) event.key.keysym.unicode); #endif break; case SDL_KEYUP: +#ifdef SDL2_MULTIAPI devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[event.key.which]); + //printf("Key up: %d %d\n", OSD_SDL_INDEX_KEYSYM(&event.key.keysym), event.key.which); +#else + devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[0]); +#endif devinfo->keyboard.state[OSD_SDL_INDEX_KEYSYM(&event.key.keysym)] = 0x00; break; case SDL_JOYAXISMOTION: @@ -1389,7 +1398,11 @@ void sdlinput_poll(running_machine &machine) } break; case SDL_MOUSEBUTTONDOWN: +#ifdef SDL2_MULTIAPI devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.button.which]); +#else + devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]); +#endif devinfo->mouse.buttons[event.button.button-1] = 0x80; //printf("But down %d %d %d %d %s\n", event.button.which, event.button.button, event.button.x, event.button.y, devinfo->name); if (event.button.button == 1) @@ -1422,7 +1435,11 @@ void sdlinput_poll(running_machine &machine) } break; case SDL_MOUSEBUTTONUP: +#ifdef SDL2_MULTIAPI devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.button.which]); +#else + devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]); +#endif devinfo->mouse.buttons[event.button.button-1] = 0; //printf("But up %d %d %d %d\n", event.button.which, event.button.button, event.button.x, event.button.y); @@ -1438,8 +1455,12 @@ void sdlinput_poll(running_machine &machine) } break; case SDL_MOUSEMOTION: +#ifdef SDL2_MULTIAPI devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.motion.which]); -#if (SDL_VERSION_ATLEAST(1,3,0)) +#else + devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]); +#endif +#if (SDLMAME_SDL2) // FIXME: may apply to 1.2 as well ... //printf("Motion %d %d %d %s\n", event.motion.which, event.motion.x, event.motion.y, devinfo->name); devinfo->mouse.lX += event.motion.xrel * INPUT_RELATIVE_PER_PIXEL; @@ -1456,7 +1477,7 @@ void sdlinput_poll(running_machine &machine) ui_input_push_mouse_move_event(machine, window->target, cx, cy); } break; -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) case SDL_APPMOUSEFOCUS: app_has_mouse_focus = event.active.gain; if (!event.active.gain) @@ -1533,7 +1554,7 @@ void sdlinput_poll(running_machine &machine) #endif } } -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) resize_all_windows(); #endif } @@ -1549,7 +1570,7 @@ void sdlinput_release_keys(running_machine &machine) // FIXME: SDL >= 1.3 will nuke the window event buffer when // a window is closed. This will leave keys in a pressed // state when a window is destroyed and recreated. -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) device_info *devinfo; int index; diff --git a/src/osd/sdl/osd_opengl.h b/src/osd/sdl/osd_opengl.h index 60e646bb60c..c84d0a94139 100644 --- a/src/osd/sdl/osd_opengl.h +++ b/src/osd/sdl/osd_opengl.h @@ -15,14 +15,22 @@ /* equivalent to #include <GL/gl.h> * #include <GL/glext.h> */ + #if (SDLMAME_SDL2) + #include <SDL2/SDL_version.h> + #else #include <SDL/SDL_version.h> + #endif #if (SDL_VERSION_ATLEAST(1,2,10)) #if defined(SDLMAME_WIN32) // Avoid that winnt.h (included via sdl_opengl.h, windows.h, windef.h includes intrin.h #define __INTRIN_H_ #endif + #if (SDLMAME_SDL2) + #include <SDL2/SDL_opengl.h> + #else #include <SDL/SDL_opengl.h> + #endif #else /* * SDL 1.2.9 does not provide everything we need diff --git a/src/osd/sdl/osdsdl.h b/src/osd/sdl/osdsdl.h index c942b0d0c6d..66a6bfb9921 100644 --- a/src/osd/sdl/osdsdl.h +++ b/src/osd/sdl/osdsdl.h @@ -1,33 +1,24 @@ #ifndef _osdsdl_h_ #define _osdsdl_h_ -#include <SDL/SDL.h> +#include "sdlinc.h" #include "watchdog.h" #include "clifront.h" //============================================================ -// Temporary SDL 1.3 defines -//============================================================ - -// set this to 0 if compiling against a "hg update 4464" -// checkout of SDL 1.3 - -#define SDL13_POST_HG4464 (1) - -//============================================================ // System dependent defines //============================================================ // Process events in worker thread -#if defined(SDLMAME_WIN32) || (SDL_VERSION_ATLEAST(1,3,0)) +#if defined(SDLMAME_WIN32) || (SDLMAME_SDL2) #define SDLMAME_EVENTS_IN_WORKER_THREAD (1) #else #define SDLMAME_EVENTS_IN_WORKER_THREAD (0) #endif #if defined(SDLMAME_WIN32) - #if (SDL_VERSION_ATLEAST(1,3,0)) + #if (SDLMAME_SDL2) #define SDLMAME_INIT_IN_WORKER_THREAD (0) //FIXME: breaks mt #define SDL13_COMBINE_RESIZE (1) #else @@ -215,7 +206,7 @@ public: const char *joy_index(int index) const { astring temp; return value(temp.format("%s%d", SDLOPTION_JOYINDEX, index)); } bool sixaxis() const { return bool_value(SDLOPTION_SIXAXIS); } -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) const char *mouse_index(int index) const { astring temp; return value(temp.format("%s%d", SDLOPTION_MOUSEINDEX, index)); } const char *keyboard_index(int index) const { astring temp; return value(temp.format("%s%d", SDLOPTION_KEYBINDEX, index)); } #endif diff --git a/src/osd/sdl/sdl.mak b/src/osd/sdl/sdl.mak index ff3e12ba590..d9766db40fb 100644 --- a/src/osd/sdl/sdl.mak +++ b/src/osd/sdl/sdl.mak @@ -21,7 +21,6 @@ # for details #------------------------------------------------- - # uncomment and edit next line to specify a distribution # supported debian-stable, ubuntu-intrepid @@ -48,17 +47,20 @@ USE_DISPATCH_GL = 1 -# uncomment and change the next line to compile and link to specific -# SDL library. This is currently supported for unix and win32. +# The following settings are currently supported for unix only. # There is no need to play with this option unless you are doing # active development on sdlmame or SDL. -ifeq ($(TARGETOS),win32) -#SDL_INSTALL_ROOT = /usr/local/sdl13w32 -else -#SDL_INSTALL_ROOT = /usr/local/sdl13 -#SDL_INSTALL_ROOT = /usr/local/test -endif +# uncomment the next line to compile and link against SDL2.0 + +# SDL_LIBVER = sdl2 + +# uncomment the next line to use couriersud's multi-keyboard patch for sdl2.0 +# SDL2_MULTIAPI = 1 + +# uncomment the next line to specify where you have installed +# SDL. Equivalent to the ./configure --prefix=<path> +# SDL_INSTALL_ROOT = /usr/local/sdl13 # uncomment and change the next line to build the gtk debugger for win32 # Get what you need here: http://www.gtk.org/download-windows.html @@ -70,6 +72,25 @@ endif ################## END USER-CONFIGURABLE OPTIONS ###################### ########################################################################### +ifndef SDL_LIBVER +SDL_LIBVER = sdl +endif + +ifdef SDL_INSTALL_ROOT +SDL_CONFIG = $(SDL_INSTALL_ROOT)/bin/$(SDL_LIBVER)-config +else +SDL_CONFIG = $(SDL_LIBVER)-config +endif + +ifeq ($(SDL_LIBVER),sdl2) +DEFS += -DSDLMAME_SDL2=1 + ifeq ($(SDL2_MULTIAPI),1) + DEFS += -DSDL2_MULTIAPI + endif +else +DEFS += -DSDLMAME_SDL2=0 +endif + ifdef NOASM DEFS += -DSDLMAME_NOASM endif @@ -288,8 +309,9 @@ OSDOBJS = \ $(SDLOBJ)/output.o \ $(SDLOBJ)/watchdog.o -# Add SDL1.3 support -ifdef SDL_INSTALL_ROOT +# Add SDL2.0 support + +ifeq ($(SDL_LIBVER),sdl2) OSDOBJS += $(SDLOBJ)/draw13.o endif @@ -350,31 +372,27 @@ LDFLAGS += -m32 endif endif -ifndef SDL_INSTALL_ROOT -INCPATH += `sdl-config --cflags | sed -e 's:/SDL::' -e 's:\(-D[^ ]*\)::g'` -CCOMFLAGS += `sdl-config --cflags | sed -e 's:/SDL::' -e 's:\(-I[^ ]*\)::g'` -LIBS += -lm `sdl-config --libs` - -else -# The commented out statements document what sdl-config returns when build from svn. -# sdl-config --libs on ubuntu returns "-L/usr/lib -lSDL" which is not what we really -# want in a multi-version SDL environment. Should the svn sdl-config at some point -# return the same output, we need the commented out section again. -#INCPATH += -I$(SDL_INSTALL_ROOT)/include -#CCOMFLAGS += -D_GNU_SOURCE=1 -#LIBS += -lm -L$(SDL_INSTALL_ROOT)/lib -Wl,-rpath,$(SDL_INSTALL_ROOT)/lib -lSDL +INCPATH += `$(SDL_CONFIG) --cflags | sed -e 's:/SDL[2]*::' -e 's:\(-D[^ ]*\)::g'` +CCOMFLAGS += `$(SDL_CONFIG) --cflags | sed -e 's:/SDL[2]*::' -e 's:\(-I[^ ]*\)::g'` +LIBS += -lm `$(SDL_CONFIG) --libs` -# FIXME: remove the directfb ref. later. This is just there for now to work around an issue with SDL1.3. +ifeq ($(SDL_LIBVER),sdl2) +ifdef SDL_INSTALL_ROOT +# FIXME: remove the directfb ref. later. This is just there for now to work around an issue with SDL1.3 and SDL2.0 INCPATH += -I$(SDL_INSTALL_ROOT)/include/directfb -INCPATH += `$(SDL_INSTALL_ROOT)/bin/sdl-config --cflags | sed -e 's:/SDL::' -e 's:\(-D[^ ]*\)::g'` -CCOMFLAGS += `$(SDL_INSTALL_ROOT)/bin/sdl-config --cflags | sed -e 's:/SDL::' -e 's:\(-I[^ ]*\)::g'` -LIBS += -lm `$(SDL_INSTALL_ROOT)/bin/sdl-config --libs` endif +endif INCPATH += `pkg-config --cflags fontconfig` LIBS += `pkg-config --libs fontconfig` + +ifeq ($(SDL_LIBVER),sdl2) +LIBS += -lSDL2_ttf -lutil +else LIBS += -lSDL_ttf -lutil +endif + endif # Unix @@ -591,9 +609,10 @@ $(OSDCLEAN): #------------------------------------------------- testlib: - -echo LIBS: $(LIBS) - -echo DEFS: $(DEFS) - -echo CORE: $(OSDCOREOBJS) + @echo LIBS: $(LIBS) + @echo INCPATH: $(INCPATH) + @echo DEFS: $(DEFS) + @echo CORE: $(OSDCOREOBJS) ifneq ($(TARGETOS),win32) BUILD_VERSION = $(shell grep 'build_version\[\] =' src/version.c | sed -e "s/.*= \"//g" -e "s/ .*//g") diff --git a/src/osd/sdl/sdlinc.h b/src/osd/sdl/sdlinc.h new file mode 100644 index 00000000000..69cc396b71a --- /dev/null +++ b/src/osd/sdl/sdlinc.h @@ -0,0 +1,20 @@ +#ifndef _sdlinc_h_ +#define _sdlinc_h_ + +#if (SDLMAME_SDL2) +#include <SDL2/SDL.h> +#include <SDL2/SDL_version.h> +// on win32 this includes windows.h by itself and breaks us! +#ifndef SDLMAME_WIN32 +#include <SDL2/SDL_syswm.h> +#endif +#else +#include <SDL/SDL.h> +#include <SDL/SDL_version.h> +// on win32 this includes windows.h by itself and breaks us! +#ifndef SDLMAME_WIN32 +#include <SDL/SDL_syswm.h> +#endif +#endif + +#endif diff --git a/src/osd/sdl/sdlmain.c b/src/osd/sdl/sdlmain.c index 315e1ffdc76..2030bb13848 100644 --- a/src/osd/sdl/sdlmain.c +++ b/src/osd/sdl/sdlmain.c @@ -10,12 +10,15 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> -#include <SDL/SDL_version.h> +#include "sdlinc.h" #ifdef SDLMAME_UNIX #ifndef SDLMAME_MACOSX +#if (SDLMAME_SDL2) +#include <SDL2/SDL_ttf.h> +#else #include <SDL/SDL_ttf.h> +#endif #include <fontconfig/fontconfig.h> #endif #ifdef SDLMAME_MACOSX @@ -112,7 +115,7 @@ const options_entry sdl_options::s_option_entries[] = { SDLOPTION_WAITVSYNC ";vs", "0", OPTION_BOOLEAN, "enable waiting for the start of VBLANK before flipping screens; reduces tearing effects" }, { SDLOPTION_SYNCREFRESH ";sr", "0", OPTION_BOOLEAN, "enable using the start of VBLANK for throttling instead of the game time" }, #endif -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) { SDLOPTION_SCALEMODE ";sm", SDLOPTVAL_NONE, OPTION_STRING, "Scale mode: none, hwblit, hwbest, yv12, yuy2, yv12x2, yuy2x2 (-video soft only)" }, #else { SDLOPTION_SCALEMODE ";sm", SDLOPTVAL_NONE, OPTION_STRING, "Scale mode: none, async, yv12, yuy2, yv12x2, yuy2x2 (-video soft only)" }, @@ -211,7 +214,7 @@ const options_entry sdl_options::s_option_entries[] = { SDLOPTION_JOYINDEX "8", SDLOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #8" }, { SDLOPTION_SIXAXIS, "0", OPTION_BOOLEAN, "Use special handling for PS3 Sixaxis controllers" }, -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) { NULL, NULL, OPTION_HEADER, "SDL MOUSE MAPPING" }, { SDLOPTION_MOUSEINDEX "1", SDLOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #1" }, { SDLOPTION_MOUSEINDEX "2", SDLOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #2" }, @@ -235,7 +238,7 @@ const options_entry sdl_options::s_option_entries[] = // SDL low level driver options { NULL, NULL, OPTION_HEADER, "SDL LOWLEVEL DRIVER OPTIONS" }, { SDLOPTION_VIDEODRIVER ";vd", SDLOPTVAL_AUTO, OPTION_STRING, "sdl video driver to use ('x11', 'directfb', ... or 'auto' for SDL default" }, -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) { SDLOPTION_RENDERDRIVER ";rd", SDLOPTVAL_AUTO, OPTION_STRING, "sdl render driver to use ('software', 'opengl', 'directfb' ... or 'auto' for SDL default" }, #endif { SDLOPTION_AUDIODRIVER ";ad", SDLOPTVAL_AUTO, OPTION_STRING, "sdl audio driver to use ('alsa', 'arts', ... or 'auto' for SDL default" }, @@ -298,7 +301,7 @@ int main(int argc, char *argv[]) { int res = 0; -#if !(SDL_VERSION_ATLEAST(1,3,0)) +#if !(SDLMAME_SDL2) /* Load SDL dynamic link library */ if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) { fprintf(stderr, "WinMain() error: %s", SDL_GetError()); @@ -416,7 +419,14 @@ void sdl_osd_interface::osd_exit(running_machine &machine) #endif if (!SDLMAME_INIT_IN_WORKER_THREAD) + { + /* FixMe: Bug in SDL2.0, Quitting joystick will cause SIGSEGV */ +#if SDLMAME_SDL2 + SDL_QuitSubSystem(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO /*| SDL_INIT_JOYSTICK */); +#else SDL_Quit(); +#endif + } } //============================================================ @@ -492,7 +502,7 @@ static void defines_verbose(void) static void osd_sdl_info(void) { -#if SDL_VERSION_ATLEAST(1,3,0) +#if SDLMAME_SDL2 int i, num = SDL_GetNumVideoDrivers(); mame_printf_verbose("Available videodrivers: "); @@ -572,15 +582,15 @@ void sdl_osd_interface::init(running_machine &machine) osd_setenv(SDLENV_VIDEODRIVER, stemp, 1); } - if (SDL_VERSION_ATLEAST(1,3,0)) - { +#if (SDLMAME_SDL2) stemp = options.render_driver(); if (stemp != NULL && strcmp(stemp, SDLOPTVAL_AUTO) != 0) { mame_printf_verbose("Setting SDL renderdriver '%s' ...\n", stemp); - osd_setenv(SDLENV_RENDERDRIVER, stemp, 1); + //osd_setenv(SDLENV_RENDERDRIVER, stemp, 1); + SDL_SetHint(SDL_HINT_RENDER_DRIVER, stemp); } - } +#endif /* Set the SDL environment variable for drivers wanting to load the * lib at startup. @@ -615,7 +625,7 @@ void sdl_osd_interface::init(running_machine &machine) if (!SDLMAME_INIT_IN_WORKER_THREAD) { -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) if (SDL_InitSubSystem(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) { #else if (SDL_Init(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) { @@ -670,7 +680,7 @@ void sdl_osd_interface::init(running_machine &machine) m_watchdog->setTimeout(watchdog_timeout); } -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) SDL_EventState(SDL_TEXTINPUT, SDL_TRUE); #else SDL_EnableUNICODE(SDL_TRUE); diff --git a/src/osd/sdl/sdlmisc_macosx.c b/src/osd/sdl/sdlmisc_macosx.c index 7cbd3b86cfd..9596db11389 100644 --- a/src/osd/sdl/sdlmisc_macosx.c +++ b/src/osd/sdl/sdlmisc_macosx.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #include <sys/types.h> #include <sys/mman.h> #include <signal.h> diff --git a/src/osd/sdl/sdlmisc_os2.c b/src/osd/sdl/sdlmisc_os2.c index 06c2f5b1185..f1b862e4c2a 100644 --- a/src/osd/sdl/sdlmisc_os2.c +++ b/src/osd/sdl/sdlmisc_os2.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #include <unistd.h> #include <stdio.h> #include <string.h> diff --git a/src/osd/sdl/sdlmisc_win32.c b/src/osd/sdl/sdlmisc_win32.c index 96404de6843..e71da9e4f9e 100644 --- a/src/osd/sdl/sdlmisc_win32.c +++ b/src/osd/sdl/sdlmisc_win32.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #define WIN32_LEAN_AND_MEAN diff --git a/src/osd/sdl/sdlos_macosx.c b/src/osd/sdl/sdlos_macosx.c index 201f662abba..67faee54be9 100644 --- a/src/osd/sdl/sdlos_macosx.c +++ b/src/osd/sdl/sdlos_macosx.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #include <sys/stat.h> #include <unistd.h> diff --git a/src/osd/sdl/sdlos_os2.c b/src/osd/sdl/sdlos_os2.c index 7c9029da8be..fd294b7ac6f 100644 --- a/src/osd/sdl/sdlos_os2.c +++ b/src/osd/sdl/sdlos_os2.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #include <unistd.h> #include <stdio.h> #include <string.h> diff --git a/src/osd/sdl/sdlos_unix.c b/src/osd/sdl/sdlos_unix.c index 5dedd94453c..b325302a9bb 100644 --- a/src/osd/sdl/sdlos_unix.c +++ b/src/osd/sdl/sdlos_unix.c @@ -16,8 +16,7 @@ #include <sys/time.h> #include <sys/stat.h> -#include <SDL/SDL.h> -#include <SDL/SDL_syswm.h> +#include "sdlinc.h" // MAME headers #include "osdcore.h" @@ -138,7 +137,27 @@ int osd_setenv(const char *name, const char *value, int overwrite) return setenv(name, value, overwrite); } -#if defined(SDL_VIDEO_DRIVER_X11) && defined(SDLMAME_X11) +#if (SDLMAME_SDL2) + +//============================================================ +// osd_get_clipboard_text +//============================================================ + +char *osd_get_clipboard_text(void) +{ + char *result = NULL; + + if (SDL_HasClipboardText()) + { + char *temp = SDL_GetClipboardText(); + result = (char *) osd_malloc_array(strlen(temp) + 1); + strcpy(result, temp); + SDL_free(temp); + } + return result; +} + +#elif defined(SDL_VIDEO_DRIVER_X11) && defined(SDLMAME_X11) //============================================================ // osd_get_clipboard_text @@ -167,17 +186,11 @@ char *osd_get_clipboard_text(void) return NULL; if ( info.subsystem != SDL_SYSWM_X11 ) return NULL; -#if (SDL_VERSION_ATLEAST(1,3,0)) - if ( (display = info.info.x11.display) == NULL ) - return NULL; - if ( (our_win = info.info.x11.window) == None ) - return NULL; -#else if ( (display = info.info.x11.display) == NULL ) return NULL; if ( (our_win = info.info.x11.window) == None ) return NULL; -#endif + /* request data to owner */ selection_win = XGetSelectionOwner( display, XA_PRIMARY ); if ( selection_win == None ) diff --git a/src/osd/sdl/sdlos_win32.c b/src/osd/sdl/sdlos_win32.c index 92e9422fa1d..3d2c66d2d61 100644 --- a/src/osd/sdl/sdlos_win32.c +++ b/src/osd/sdl/sdlos_win32.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" #define WIN32_LEAN_AND_MEAN diff --git a/src/osd/sdl/sdlsync_ntc.c b/src/osd/sdl/sdlsync_ntc.c index 1bcae1cd21b..2126b8f0d18 100644 --- a/src/osd/sdl/sdlsync_ntc.c +++ b/src/osd/sdl/sdlsync_ntc.c @@ -13,7 +13,7 @@ #define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included #endif -#include "SDL/SDL.h" +#include "sdlinc.h" #ifdef SDLMAME_MACOSX #include <mach/mach.h> diff --git a/src/osd/sdl/sdlsync_os2.c b/src/osd/sdl/sdlsync_os2.c index 8ea3dcc56c4..96ce1656a68 100644 --- a/src/osd/sdl/sdlsync_os2.c +++ b/src/osd/sdl/sdlsync_os2.c @@ -13,7 +13,7 @@ #define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included #endif -#include "SDL/SDL.h" +#include "sdlinc.h" // standard C headers #include <math.h> diff --git a/src/osd/sdl/sdlsync_sdl.c b/src/osd/sdl/sdlsync_sdl.c index 382e2c8139d..09107dbd401 100644 --- a/src/osd/sdl/sdlsync_sdl.c +++ b/src/osd/sdl/sdlsync_sdl.c @@ -9,7 +9,7 @@ // //============================================================ -#include "SDL/SDL.h" +#include "sdlinc.h" // standard C headers #include <unistd.h> diff --git a/src/osd/sdl/sdlsync_tc.c b/src/osd/sdl/sdlsync_tc.c index 425b0347f29..fc7b7c32cce 100644 --- a/src/osd/sdl/sdlsync_tc.c +++ b/src/osd/sdl/sdlsync_tc.c @@ -13,7 +13,7 @@ #define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included #endif -#include "SDL/SDL.h" +#include "sdlinc.h" #ifdef SDLMAME_MACOSX #include <mach/mach.h> diff --git a/src/osd/sdl/sound.c b/src/osd/sdl/sound.c index f468bb68997..fdc67df1b13 100644 --- a/src/osd/sdl/sound.c +++ b/src/osd/sdl/sound.c @@ -10,7 +10,7 @@ //============================================================ // standard sdl header -#include <SDL/SDL.h> +#include "sdlinc.h" // MAME headers #include "emu.h" @@ -432,7 +432,7 @@ static int sdl_init(running_machine &machine) } mame_printf_verbose("Audio: Start initialization\n"); -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) strncpy(audio_driver, SDL_GetCurrentAudioDriver(), sizeof(audio_driver)); #else SDL_AudioDriverName(audio_driver, sizeof(audio_driver)); diff --git a/src/osd/sdl/testkeys.c b/src/osd/sdl/testkeys.c index 7bfb453b3e2..ce40c612add 100644 --- a/src/osd/sdl/testkeys.c +++ b/src/osd/sdl/testkeys.c @@ -15,12 +15,12 @@ #include <string.h> #include <wchar.h> -#include <SDL/SDL.h> +#include "sdlinc.h" #include "unicode.h" // Check whether SDL has compat interface -#if defined(SDL_AllocSurface) || (!SDL_VERSION_ATLEAST(1,3,0)) +#if defined(SDL_AllocSurface) || (!SDLMAME_SDL2) #define SDL_HAS_COMPAT 1 #else #define SDL_HAS_COMPAT 0 @@ -35,7 +35,7 @@ struct _key_lookup_table }; #if SDL_HAS_COMPAT -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) #define KE(x) { SDL_SCANCODE_ ## x, "SDL_SCANCODE_" #x }, #define KE8(A, B, C, D, E, F, G, H) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) KE(H) #define KE7(A, B, C, D, E, F, G) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) memset(buf, 0, ARRAY_LENGTH(buf)); utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); printf("ITEM_ID_XY %s 0x%x 0x%x %s \n", -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) lookup_key_name(sdl_lookup, event.key.keysym.scancode), #else lookup_key_name(sdl_lookup, event.key.keysym.sym), @@ -163,7 +163,7 @@ int main(int argc, char *argv[]) memset(buf, 0, 19); utf8_from_uchar(buf, sizeof(buf), event.key.keysym.unicode); printf("ITEM_ID_XY %s 0x%x 0x%x %s \n", -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) lookup_key_name(sdl_lookup, event.key.keysym.scancode), #else lookup_key_name(sdl_lookup, event.key.keysym.sym), diff --git a/src/osd/sdl/video.c b/src/osd/sdl/video.c index af23f0ee868..cb7f574a1b8 100644 --- a/src/osd/sdl/video.c +++ b/src/osd/sdl/video.c @@ -9,11 +9,7 @@ // //============================================================ -#include <SDL/SDL.h> -// on win32 this includes windows.h by itself and breaks us! -#ifndef SDLMAME_WIN32 -#include <SDL/SDL_syswm.h> -#endif +#include "sdlinc.h" #ifdef SDLMAME_X11 #include <X11/extensions/Xinerama.h> @@ -163,7 +159,7 @@ static void video_exit(running_machine &machine) void sdlvideo_monitor_refresh(sdl_monitor_info *monitor) { - #if (SDL_VERSION_ATLEAST(1,3,0)) + #if (SDLMAME_SDL2) SDL_DisplayMode dmode; SDL_GetDesktopDisplayMode(monitor->handle, &dmode); @@ -283,7 +279,7 @@ void sdlvideo_monitor_refresh(sdl_monitor_info *monitor) info_shown = 1; } } - #endif // (SDL_VERSION_ATLEAST(1,3,0)) + #endif // (SDLMAME_SDL2) } @@ -354,7 +350,7 @@ void sdl_osd_interface::update(bool skip_redraw) // add_primary_monitor //============================================================ -#if !defined(SDLMAME_WIN32) && !(SDL_VERSION_ATLEAST(1,3,0)) +#if !defined(SDLMAME_WIN32) && !(SDLMAME_SDL2) static void add_primary_monitor(void *data) { sdl_monitor_info ***tailptr = (sdl_monitor_info ***)data; @@ -385,7 +381,7 @@ static void add_primary_monitor(void *data) // monitor_enum_callback //============================================================ -#if defined(SDLMAME_WIN32) && !(SDL_VERSION_ATLEAST(1,3,0)) +#if defined(SDLMAME_WIN32) && !(SDLMAME_SDL2) static BOOL CALLBACK monitor_enum_callback(HMONITOR handle, HDC dc, LPRECT rect, LPARAM data) { sdl_monitor_info ***tailptr = (sdl_monitor_info ***)data; @@ -446,7 +442,7 @@ static void init_monitors(void) sdl_monitor_list = NULL; tailptr = &sdl_monitor_list; - #if (SDL_VERSION_ATLEAST(1,3,0)) + #if (SDLMAME_SDL2) { int i; @@ -494,7 +490,7 @@ static void init_monitors(void) // pick_monitor //============================================================ -#if (SDL_VERSION_ATLEAST(1,3,0)) || defined(SDLMAME_WIN32) +#if (SDLMAME_SDL2) || defined(SDLMAME_WIN32) static sdl_monitor_info *pick_monitor(sdl_options &options, int index) { sdl_monitor_info *monitor; @@ -580,7 +576,7 @@ static void check_osd_inputs(running_machine &machine) ui_popup_time(1, "Keepaspect %s", video_config.keepaspect? "enabled":"disabled"); } - if (USE_OPENGL || SDL_VERSION_ATLEAST(1,3,0)) + if (USE_OPENGL || SDLMAME_SDL2) { //FIXME: on a per window basis if (ui_input_pressed(machine, IPT_OSD_5)) @@ -654,7 +650,7 @@ static void extract_video_config(running_machine &machine) video_config.mode = VIDEO_MODE_OPENGL; video_config.prefer16bpp_tex = 1; } - else if (SDL_VERSION_ATLEAST(1,3,0) && (strcmp(stemp, SDLOPTVAL_SDL13) == 0)) + else if (SDLMAME_SDL2 && (strcmp(stemp, SDLOPTVAL_SDL13) == 0)) { video_config.mode = VIDEO_MODE_SDL13; video_config.prefer16bpp_tex = 1; @@ -676,7 +672,7 @@ static void extract_video_config(running_machine &machine) video_config.syncrefresh = 0; } - if (USE_OPENGL || SDL_VERSION_ATLEAST(1,3,0)) + if (USE_OPENGL || SDLMAME_SDL2) { video_config.filter = options.filter(); } @@ -765,7 +761,7 @@ static void extract_video_config(running_machine &machine) // misc options: sanity check values // global options: sanity check values -#if (!SDL_VERSION_ATLEAST(1,3,0)) +#if (!SDLMAME_SDL2) if (video_config.numscreens < 1 || video_config.numscreens > 1) //MAX_VIDEO_WINDOWS) { mame_printf_warning("Invalid numscreens value %d; reverting to 1\n", video_config.numscreens); diff --git a/src/osd/sdl/window.c b/src/osd/sdl/window.c index 85428699668..037f5bec2d3 100644 --- a/src/osd/sdl/window.c +++ b/src/osd/sdl/window.c @@ -10,9 +10,13 @@ //============================================================ // standard SDL headers -#include <SDL/SDL.h> -#include <SDL/SDL_syswm.h> +#include "sdlinc.h" + +#if (SDLMAME_SDL2) +#include <SDL2/SDL_thread.h> +#else #include <SDL/SDL_thread.h> +#endif // standard C headers #include <math.h> @@ -84,7 +88,7 @@ static sdl_window_info **last_window_ptr; static int multithreading_enabled; static osd_work_queue *work_queue; -#if !(SDL_VERSION_ATLEAST(1,3,0)) +#if !(SDLMAME_SDL2) typedef int SDL_threadID; #endif @@ -184,7 +188,7 @@ static OSDWORK_CALLBACK(sdlwindow_thread_id) if (SDLMAME_INIT_IN_WORKER_THREAD) { -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) if (SDL_InitSubSystem(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) #else if (SDL_Init(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) @@ -239,7 +243,7 @@ int sdlwindow_init(running_machine &machine) video_config.mode = VIDEO_MODE_SOFT; } #endif -#if SDL_VERSION_ATLEAST(1,3,0) +#if SDLMAME_SDL2 if (video_config.mode == VIDEO_MODE_SDL13) { if (draw13_init(machine, &draw)) @@ -408,7 +412,7 @@ void sdlwindow_blit_surface_size(sdl_window_info *window, int window_width, int //FIXME: really necessary to distinguish for yuv_modes ? if (window->target->zoom_to_screen() - && (window->scale_mode == VIDEO_SCALE_MODE_NONE )) + && (video_config.scale_mode == VIDEO_SCALE_MODE_NONE )) newwidth = window_width; if ((window->blitwidth != newwidth) || (window->blitheight != newheight)) @@ -595,7 +599,7 @@ void sdlwindow_modify_prescale(running_machine &machine, sdl_window_info *window static void sdlwindow_update_cursor_state(running_machine &machine, sdl_window_info *window) { -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) // do not do mouse capture if the debugger's enabled to avoid // the possibility of losing control if (!(machine.debug_flags & DEBUG_FLAG_OSD_ENABLED)) @@ -672,7 +676,6 @@ int sdlwindow_video_window_create(running_machine &machine, int index, sdl_monit //FIXME: these should be per_window in config-> or even better a bit set window->fullscreen = !video_config.windowed; window->prescale = video_config.prescale; - window->scale_mode = video_config.scale_mode; // set the initial maximized state // FIXME: Does not belong here @@ -798,7 +801,7 @@ static void sdlwindow_video_window_destroy(running_machine &machine, sdl_window_ // pick_best_mode //============================================================ -#if SDL_VERSION_ATLEAST(1,3,0) +#if SDLMAME_SDL2 static void pick_best_mode(sdl_window_info *window, int *fswidth, int *fsheight) { int minimum_width, minimum_height, target_width, target_height; diff --git a/src/osd/sdl/window.h b/src/osd/sdl/window.h index 1a0a6b0a310..b5d98aaa891 100644 --- a/src/osd/sdl/window.h +++ b/src/osd/sdl/window.h @@ -12,7 +12,7 @@ #ifndef __SDLWINDOW__ #define __SDLWINDOW__ -#include <SDL/SDL.h> +#include "sdlinc.h" #include "video.h" #include "render.h" #include "sdlsync.h" @@ -88,16 +88,12 @@ struct _sdl_window_info int totalColors; // total colors from machine/sdl_window_config int start_viewscreen; - // per window modes ... - int scale_mode; - // GL specific int prescale; -#if (SDL_VERSION_ATLEAST(1,3,0)) +#if (SDLMAME_SDL2) // Needs to be here as well so we can identify window SDL_Window *sdl_window; - SDL_Renderer *sdl_renderer; // These are used in combine resizing events ... #if SDL13_COMBINE_RESIZE int resize_width; int resize_height; |