X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Fplugin_lib.c;h=1cbfdb0e0b0939bf467bc04d60eb678ed55a6de0;hb=42dde520a83b9c391b41b0eceecb1ce3eaed7e72;hp=2339028e7e39b8b6892e37cf50455d80ebbec8f9;hpb=abf094858889145af1fde9840429dfb8a0e70a39;p=pcsx_rearmed.git diff --git a/frontend/plugin_lib.c b/frontend/plugin_lib.c index 2339028e..1cbfdb0e 100644 --- a/frontend/plugin_lib.c +++ b/frontend/plugin_lib.c @@ -134,7 +134,7 @@ static __attribute__((noinline)) void draw_active_chans(int vout_w, int vout_h) static const unsigned short colors[2] = { 0x1fe3, 0x0700 }; unsigned short *dest = (unsigned short *)pl_vout_buf + - vout_w * (vout_h - HUD_HEIGHT) + vout_w / 2 - 192/2; + pl_vout_w * (vout_h - HUD_HEIGHT) + pl_vout_w / 2 - 192/2; unsigned short *d, p; int c, x, y; @@ -149,7 +149,7 @@ static __attribute__((noinline)) void draw_active_chans(int vout_w, int vout_h) (fmod_chans & (1< g_menuscreen_w) g_layer_w = g_menuscreen_w; - if (g_layer_h > g_menuscreen_h) g_layer_h = g_menuscreen_h; + if (g_scaler != SCALE_CUSTOM) { + g_layer_x = g_menuscreen_w / 2 - g_layer_w / 2; + g_layer_y = g_menuscreen_h / 2 - g_layer_h / 2; + } + if (g_layer_w > g_menuscreen_w * 2) g_layer_w = g_menuscreen_w * 2; + if (g_layer_h > g_menuscreen_h * 2) g_layer_h = g_menuscreen_h * 2; } // XXX: this is platform specific really @@ -302,10 +302,16 @@ static void pl_vout_set_mode(int w, int h, int raw_w, int raw_h, int bpp) menu_notify_mode_change(pl_vout_w, pl_vout_h, pl_vout_bpp); } +static int flip_clear_counter; + +void pl_force_clear(void) +{ + flip_clear_counter = 2; +} + static void pl_vout_flip(const void *vram, int stride, int bgr24, int x, int y, int w, int h, int dims_changed) { - static int clear_counter; unsigned char *dest = pl_vout_buf; const unsigned short *src = vram; int dstride = pl_vout_w, h1 = h; @@ -332,15 +338,15 @@ static void pl_vout_flip(const void *vram, int stride, int bgr24, doffs = xoffs + y * dstride; if (dims_changed) - clear_counter = 2; + flip_clear_counter = 3; - if (clear_counter > 0) { + if (flip_clear_counter > 0) { if (pl_plat_clear) pl_plat_clear(); else memset(pl_vout_buf, 0, dstride * h_full * pl_vout_bpp / 8); - clear_counter--; + flip_clear_counter--; } if (pl_plat_blit) @@ -385,17 +391,21 @@ static void pl_vout_flip(const void *vram, int stride, int bgr24, } else if (scanlines != 0 && scanline_level != 100) { - int l = scanline_level * 2048 / 100; + int h2, l = scanline_level * 2048 / 100; int stride_0 = pl_vout_scale_h >= 2 ? 0 : stride; h1 *= pl_vout_scale_h; - for (; h1 >= 2; h1 -= 2) + while (h1 > 0) { - bgr555_to_rgb565(dest, src, w * 2); - dest += dstride * 2, src += stride_0; + for (h2 = scanlines; h2 > 0 && h1 > 0; h2--, h1--) { + bgr555_to_rgb565(dest, src, w * 2); + dest += dstride * 2, src += stride_0; + } - bgr555_to_rgb565_b(dest, src, w * 2, l); - dest += dstride * 2, src += stride; + for (h2 = scanlines; h2 > 0 && h1 > 0; h2--, h1--) { + bgr555_to_rgb565_b(dest, src, w * 2, l); + dest += dstride * 2, src += stride; + } } } #endif