summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/sdl
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2010-12-27 00:07:35 +0000
committer Couriersud <couriersud@users.noreply.github.com>2010-12-27 00:07:35 +0000
commitfe632b74c2f4266816ab00e4d8207685d957baae (patch)
tree2f1c182340b2f8eb67b16ed482c74679208baa7f /src/osd/sdl
parente2686259a006249423b4b5b714b5f8f76006bd15 (diff)
Some fixes to keep sdlmame aligned to SDL1.3 development. No whatsnew.
Diffstat (limited to 'src/osd/sdl')
-rw-r--r--src/osd/sdl/blit13.h8
-rw-r--r--src/osd/sdl/draw13.c63
-rw-r--r--src/osd/sdl/input.c4
-rw-r--r--src/osd/sdl/osdsdl.h9
-rw-r--r--src/osd/sdl/sdlos_unix.c8
5 files changed, 65 insertions, 27 deletions
diff --git a/src/osd/sdl/blit13.h b/src/osd/sdl/blit13.h
index 12b45d2269d..389c53e9812 100644
--- a/src/osd/sdl/blit13.h
+++ b/src/osd/sdl/blit13.h
@@ -119,9 +119,11 @@ INLINE void texcopy_##_name (texture_info *texture, const render_texinfo *texsou
for (y = 0; y < texsource->height; y++) { \
_src_type *src = (_src_type *)texsource->base + y * texsource->rowpixels / (_len_div); \
_dest_type *dst = (_dest_type *)((UINT8 *)texture->pixels + y * texture->pitch); \
- for (x = 0; x < texsource->width / (_len_div); x++) { \
+ x = texsource->width / (_len_div); \
+ while (x > 0) { \
*dst++ = _op(*src); \
src++; \
+ x--; \
} \
} \
}
@@ -140,11 +142,13 @@ INLINE void texcopy_rot_##_name (texture_info *texture, const render_texinfo *te
INT32 curu = setup->startu + y * setup->dudy; \
INT32 curv = setup->startv + y * setup->dvdy; \
_dest_type *dst = (_dest_type *)((UINT8 *)texture->pixels + y * texture->pitch); \
- for (x = 0; x < setup->rotwidth; x++) { \
+ x = setup->rotwidth; \
+ while (x>0) { \
_src_type *src = (_src_type *) texsource->base + (curv >> 16) * texsource->rowpixels + (curu >> 16); \
*dst++ = _op(*src); \
curu += dudx; \
curv += dvdx; \
+ x--; \
} \
} \
}
diff --git a/src/osd/sdl/draw13.c b/src/osd/sdl/draw13.c
index 6e424578814..f1a3516a106 100644
--- a/src/osd/sdl/draw13.c
+++ b/src/osd/sdl/draw13.c
@@ -7,10 +7,6 @@
//
// SDLMAME by Olivier Galibert and R. Belmont
//
-// Note: D3D9 goes to a lot of trouble to fiddle with MODULATE
-// mode on textures. That is the default in OpenGL so we
-// don't have to touch it.
-//
//============================================================
// standard C headers
@@ -134,6 +130,12 @@ struct _sdl_info
float last_hofs;
float last_vofs;
+ // resize information
+
+ UINT8 resize_pending;
+ UINT32 resize_width;
+ UINT32 resize_height;
+
// Stats
INT64 last_blit_time;
INT64 last_blit_pixels;
@@ -151,7 +153,7 @@ static int draw13_window_create(sdl_window_info *window, int width, int height);
static void draw13_window_resize(sdl_window_info *window, int width, int height);
static void draw13_window_destroy(sdl_window_info *window);
static int draw13_window_draw(sdl_window_info *window, UINT32 dc, int update);
-static const render_primitive_list *draw13_window_get_primitives(sdl_window_info *window);
+static render_primitive_list &draw13_window_get_primitives(sdl_window_info *window);
static void draw13_destroy_all_textures(sdl_window_info *window);
static void draw13_window_clear(sdl_window_info *window);
static int draw13_xy_to_render_target(sdl_window_info *window, int x, int y, int *xt, int *yt);
@@ -379,7 +381,7 @@ INLINE void render_quad(sdl_info *sdl, texture_info *texture, render_primitive *
}
else
{
- SDL_SetTextureScaleMode(texture->texture_id, SDL_TEXTURESCALEMODE_FAST);
+ SDL_SetTextureScaleMode(texture->texture_id, SDL_TEXTURESCALEMODE_NONE);
}
SDL_SetTextureBlendMode(texture_id, texture->sdl_blendmode);
set_coloralphamode(texture_id, &prim->color);
@@ -611,11 +613,6 @@ static int draw13_window_create(sdl_window_info *window, int width, int height)
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->window_id, window->fullscreen);
- SDL_RaiseWindow(window->sdl_window);
- SDL_GetWindowSize(window->sdl_window, &window->width, &window->height);
-
// create renderer
if (video_config.waitvsync)
@@ -630,6 +627,12 @@ static int draw13_window_create(sdl_window_info *window, int width, int height)
SDL_SelectRenderer(window->sdl_window);
+ SDL_ShowWindow(window->sdl_window);
+ //SDL_SetWindowFullscreen(window->window_id, window->fullscreen);
+ SDL_RaiseWindow(window->sdl_window);
+ SDL_GetWindowSize(window->sdl_window, &window->width, &window->height);
+
+
sdl->blittimer = 3;
// in case any textures try to come up before these are validated,
@@ -637,6 +640,7 @@ static int draw13_window_create(sdl_window_info *window, int width, int height)
sdl->texture_max_width = 64;
sdl->texture_max_height = 64;
+ SDL_RenderPresent();
mame_printf_verbose("Leave draw13_window_create\n");
return 0;
}
@@ -649,8 +653,13 @@ static void draw13_window_resize(sdl_window_info *window, int width, int height)
{
sdl_info *sdl = (sdl_info *) window->dxdata;
- SDL_SetWindowSize(window->sdl_window, width, height);
- SDL_GetWindowSize(window->sdl_window, &window->width, &window->height);
+ sdl->resize_pending = 1;
+ sdl->resize_height = height;
+ sdl->resize_width = width;
+
+ window->width = width;
+ window->height = height;
+
sdl->blittimer = 3;
}
@@ -676,7 +685,7 @@ static int draw13_xy_to_render_target(sdl_window_info *window, int x, int y, int
// draw13_window_get_primitives
//============================================================
-static const render_primitive_list *draw13_window_get_primitives(sdl_window_info *window)
+static render_primitive_list &draw13_window_get_primitives(sdl_window_info *window)
{
if ((!window->fullscreen) || (video_config.switchres))
{
@@ -707,13 +716,21 @@ static int draw13_window_draw(sdl_window_info *window, UINT32 dc, int update)
return 0;
}
- SDL_SelectRenderer(window->sdl_window);
+ if (sdl->resize_pending)
+ {
+ 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_SelectRenderer(window->sdl_window);
if (sdl->blittimer > 0)
{
/* SDL Underlays need alpha = 0 ! */
SDL_SetRenderDrawBlendMode(SDL_BLENDMODE_NONE);
- SDL_SetRenderDrawColor(0,0,0,0 /*255*/);
+ //SDL_SetRenderDrawColor(0,0,0,255);
+ SDL_SetRenderDrawColor(0,0,0,0);
SDL_RenderFillRect(NULL);
sdl->blittimer--;
}
@@ -749,10 +766,10 @@ static int draw13_window_draw(sdl_window_info *window, UINT32 dc, int update)
sdl->last_hofs = hofs;
sdl->last_vofs = vofs;
- osd_lock_acquire(window->primlist->lock);
+ window->primlist->acquire_lock();
// now draw
- for (prim = window->primlist->head; prim != NULL; prim = prim->next)
+ for (prim = window->primlist->first(); prim != NULL; prim = prim->next())
{
Uint8 sr, sg, sb, sa;
@@ -777,10 +794,12 @@ static int draw13_window_draw(sdl_window_info *window, UINT32 dc, int update)
round_nearest(hofs + prim->bounds.x0),
round_nearest(vofs + prim->bounds.y0));
break;
+ default:
+ throw emu_fatalerror("Unexpected render_primitive type");
}
}
- osd_lock_release(window->primlist->lock);
+ window->primlist->release_lock();
sdl->last_blit_pixels = blit_pixels;
sdl->last_blit_time = -osd_ticks();
@@ -1164,10 +1183,10 @@ static void draw13_destroy_all_textures(sdl_window_info *window)
if (sdl == NULL)
return;
- if(window->primlist && window->primlist->lock)
+ if(window->primlist)
{
lock=TRUE;
- osd_lock_acquire(window->primlist->lock);
+ window->primlist->acquire_lock();
}
texture = sdl->texlist;
@@ -1180,5 +1199,5 @@ static void draw13_destroy_all_textures(sdl_window_info *window)
}
if (lock)
- osd_lock_release(window->primlist->lock);
+ window->primlist->release_lock();
}
diff --git a/src/osd/sdl/input.c b/src/osd/sdl/input.c
index caecdb7c172..8bc17326a16 100644
--- a/src/osd/sdl/input.c
+++ b/src/osd/sdl/input.c
@@ -790,7 +790,7 @@ static void sdlinput_deregister_joysticks(running_machine *machine)
// sdlinput_register_mice
//============================================================
-#if (SDL_VERSION_ATLEAST(1,3,0))
+#if (!SDL13_POST_HG4464 && SDL_VERSION_ATLEAST(1,3,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 (SDL_VERSION_ATLEAST(1,3,0))
+#if (!SDL13_POST_HG4464 && SDL_VERSION_ATLEAST(1,3,0))
static void sdlinput_register_keyboards(running_machine *machine)
{
int physical_keyboard;
diff --git a/src/osd/sdl/osdsdl.h b/src/osd/sdl/osdsdl.h
index afd731e556a..8dcc3743008 100644
--- a/src/osd/sdl/osdsdl.h
+++ b/src/osd/sdl/osdsdl.h
@@ -4,6 +4,15 @@
#include <SDL/SDL.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
//============================================================
diff --git a/src/osd/sdl/sdlos_unix.c b/src/osd/sdl/sdlos_unix.c
index 8d487c0c33a..c5a30e3a260 100644
--- a/src/osd/sdl/sdlos_unix.c
+++ b/src/osd/sdl/sdlos_unix.c
@@ -153,11 +153,17 @@ 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.x11.display) == NULL )
+ return NULL;
+ if ( (our_win = 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 )