add a pitch variable
authornotaz <notasas@gmail.com>
Sat, 5 Apr 2014 19:08:06 +0000 (22:08 +0300)
committernotaz <notasas@gmail.com>
Wed, 27 Dec 2017 17:54:07 +0000 (19:54 +0200)
32x is still broken

platform/common/emu.c
platform/common/emu.h
platform/common/menu_pico.c
platform/common/plat_sdl.c
platform/gp2x/plat.c
platform/libpicofe
platform/linux/emu.c
platform/linux/io.c
platform/pandora/menu.c
platform/pandora/plat.c
platform/win32/plat.c

index b4db4c6..0a9f089 100644 (file)
@@ -42,6 +42,7 @@ void *g_screen_ptr;
 \r
 int g_screen_width  = 320;\r
 int g_screen_height = 240;\r
+int g_screen_ppitch = 320; // pitch in pixels\r
 \r
 const char *PicoConfigFile = "config2.cfg";\r
 currentConfig_t currentConfig, defaultConfig;\r
@@ -730,12 +731,12 @@ void name(int x, int y, const char *text)                         \
        }                                                               \\r
 }\r
 \r
-mk_text_out(emu_text_out8,      unsigned char,    0xf0, g_screen_ptr, 1, g_screen_width)\r
-mk_text_out(emu_text_out16,     unsigned short, 0xffff, g_screen_ptr, 1, g_screen_width)\r
+mk_text_out(emu_text_out8,      unsigned char,    0xf0, g_screen_ptr, 1, g_screen_ppitch)\r
+mk_text_out(emu_text_out16,     unsigned short, 0xffff, g_screen_ptr, 1, g_screen_ppitch)\r
 mk_text_out(emu_text_out8_rot,  unsigned char,    0xf0,\r
-       (char *)g_screen_ptr  + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
+       (char *)g_screen_ptr  + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)\r
 mk_text_out(emu_text_out16_rot, unsigned short, 0xffff,\r
-       (short *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
+       (short *)g_screen_ptr + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)\r
 \r
 #undef mk_text_out\r
 \r
@@ -751,7 +752,7 @@ void emu_osd_text16(int x, int y, const char *text)
        for (h = 0; h < 8; h++) {\r
                unsigned short *p;\r
                p = (unsigned short *)g_screen_ptr\r
-                       + x + g_screen_width * (y + h);\r
+                       + x + g_screen_ppitch * (y + h);\r
                for (i = len; i > 0; i--, p++)\r
                        *p = (*p >> 2) & 0x39e7;\r
        }\r
@@ -1204,8 +1205,11 @@ static void mkdir_path(char *path_with_reserve, int pos, const char *name)
 void emu_cmn_forced_frame(int no_scale, int do_emu)\r
 {\r
        int po_old = PicoIn.opt;\r
+       int y;\r
 \r
-       memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);\r
+       for (y = 0; y < g_screen_height; y++)\r
+               memset32((short *)g_screen_ptr + g_screen_ppitch * y, 0,\r
+                        g_screen_width * 2 / 4);\r
 \r
        PicoIn.opt &= ~POPT_ALT_RENDERER;\r
        PicoIn.opt |= POPT_ACC_SPRITES;\r
index 9a5ae66..1e751f8 100644 (file)
@@ -16,6 +16,7 @@ extern void *g_screen_ptr;
 
 extern int g_screen_width;
 extern int g_screen_height;
+extern int g_screen_ppitch; // pitch in pixels
 
 #define EOPT_EN_SRAM      (1<<0)
 #define EOPT_SHOW_FPS     (1<<1)
index 969fc8e..ab91e1c 100644 (file)
@@ -107,7 +107,7 @@ static void make_bg(int no_scale)
                (g_menuscreen_w / 2 - w / 2);
 
        // darken the active framebuffer
-       for (; h > 0; dst += g_menuscreen_w, src += g_screen_width, h--)
+       for (; h > 0; dst += g_menuscreen_w, src += g_screen_ppitch, h--)
                menu_darken_bg(dst, src, w, 1);
 }
 
@@ -167,8 +167,8 @@ static void load_progress_cb(int percent)
                len = g_menuscreen_w;
 
        menu_draw_begin(0, 1);
-       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
-       for (ln = me_sfont_h - 2; ln > 0; ln--, dst += g_menuscreen_w)
+       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_pp * me_sfont_h * 2;
+       for (ln = me_sfont_h - 2; ln > 0; ln--, dst += g_menuscreen_pp)
                memset(dst, 0xff, len * 2);
        menu_draw_end();
 }
@@ -179,17 +179,18 @@ static void cdload_progress_cb(const char *fname, int percent)
        unsigned short *dst;
 
        menu_draw_begin(0, 1);
-       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
-       memset(dst, 0xff, g_menuscreen_w * (me_sfont_h - 2) * 2);
+       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_pp * me_sfont_h * 2;
+
+       menuscreen_memset_lines(dst, 0xff, me_sfont_h - 2);
 
        smalltext_out16(1, 3 * me_sfont_h, "Processing CD image / MP3s", 0xffff);
        smalltext_out16(1, 4 * me_sfont_h, fname, 0xffff);
-       dst += g_menuscreen_w * me_sfont_h * 3;
+       dst += g_menuscreen_pp * me_sfont_h * 3;
 
        if (len > g_menuscreen_w)
                len = g_menuscreen_w;
 
-       for (ln = (me_sfont_h - 2); ln > 0; ln--, dst += g_menuscreen_w)
+       for (ln = (me_sfont_h - 2); ln > 0; ln--, dst += g_menuscreen_pp)
                memset(dst, 0xff, len * 2);
        menu_draw_end();
 
@@ -848,13 +849,15 @@ static void debug_menu_loop(void)
                                break;
                        case 2: pemu_forced_frame(1, 0);
                                make_bg(1);
-                               PDebugShowSpriteStats((unsigned short *)g_menuscreen_ptr + (g_menuscreen_h/2 - 240/2)*g_menuscreen_w +
-                                       g_menuscreen_w/2 - 320/2, g_menuscreen_w);
+                               PDebugShowSpriteStats((unsigned short *)g_menuscreen_ptr
+                                       + (g_menuscreen_h/2 - 240/2) * g_menuscreen_pp
+                                       + g_menuscreen_w/2 - 320/2, g_menuscreen_pp);
                                break;
-                       case 3: memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
-                               PDebugShowPalette(g_menuscreen_ptr, g_menuscreen_w);
-                               PDebugShowSprite((unsigned short *)g_menuscreen_ptr + g_menuscreen_w*120 + g_menuscreen_w/2 + 16,
-                                       g_menuscreen_w, spr_offs);
+                       case 3: menuscreen_memset_lines(g_menuscreen_ptr, 0, g_menuscreen_h);
+                               PDebugShowPalette(g_menuscreen_ptr, g_menuscreen_pp);
+                               PDebugShowSprite((unsigned short *)g_menuscreen_ptr
+                                       + g_menuscreen_pp * 120 + g_menuscreen_w / 2 + 16,
+                                       g_menuscreen_pp, spr_offs);
                                draw_text_debug(PDebugSpriteList(), spr_offs, 6);
                                break;
                        case 4: tmp = PDebug32x();
@@ -974,23 +977,23 @@ static void menu_main_draw_status(void)
                return;
 
        /* battery info */
-       bp += (me_mfont_h * 2 + 2) * g_screen_width + g_screen_width - me_mfont_w * 3 - 3;
+       bp += (me_mfont_h * 2 + 2) * g_screen_ppitch + g_screen_width - me_mfont_w * 3 - 3;
        for (i = 0; i < me_mfont_w * 2; i++)
                bp[i] = menu_text_color;
        for (i = 0; i < me_mfont_w * 2; i++)
-               bp[i + g_screen_width * bat_h] = menu_text_color;
+               bp[i + g_screen_ppitch * bat_h] = menu_text_color;
        for (i = 0; i <= bat_h; i++)
-               bp[i * g_screen_width] =
-               bp[i * g_screen_width + me_mfont_w * 2] = menu_text_color;
+               bp[i * g_screen_ppitch] =
+               bp[i * g_screen_ppitch + me_mfont_w * 2] = menu_text_color;
        for (i = 2; i < bat_h - 1; i++)
-               bp[i * g_screen_width - 1] =
-               bp[i * g_screen_width - 2] = menu_text_color;
+               bp[i * g_screen_ppitch - 1] =
+               bp[i * g_screen_ppitch - 2] = menu_text_color;
 
        w = me_mfont_w * 2 - 1;
        wfill = batt_val * w / 100;
        for (u = 1; u < bat_h; u++)
                for (i = 0; i < wfill; i++)
-                       bp[(w - i) + g_screen_width * u] = menu_text_color;
+                       bp[(w - i) + g_screen_ppitch * u] = menu_text_color;
 }
 
 static int main_menu_handler(int id, int keys)
index 1b617d5..3948cc4 100644 (file)
@@ -158,19 +158,19 @@ void plat_video_flip(void)
 
                SDL_LockYUVOverlay(plat_sdl_overlay);
                rgb565_to_uyvy(plat_sdl_overlay->pixels[0], shadow_fb,
-                               g_screen_width * g_screen_height);
+                               g_screen_ppitch * g_screen_height);
                SDL_UnlockYUVOverlay(plat_sdl_overlay);
                SDL_DisplayYUVOverlay(plat_sdl_overlay, &dstrect);
        }
        else if (plat_sdl_gl_active) {
-               gl_flip(shadow_fb, g_screen_width, g_screen_height);
+               gl_flip(shadow_fb, g_screen_ppitch, g_screen_height);
        }
        else {
                if (SDL_MUSTLOCK(plat_sdl_screen))
                        SDL_UnlockSurface(plat_sdl_screen);
                SDL_Flip(plat_sdl_screen);
                g_screen_ptr = plat_sdl_screen->pixels;
-               PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);
+               PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);
        }
 }
 
@@ -204,13 +204,13 @@ void plat_video_menu_end(void)
 
                SDL_LockYUVOverlay(plat_sdl_overlay);
                rgb565_to_uyvy(plat_sdl_overlay->pixels[0], shadow_fb,
-                               g_menuscreen_w * g_menuscreen_h);
+                               g_menuscreen_pp * g_menuscreen_h);
                SDL_UnlockYUVOverlay(plat_sdl_overlay);
 
                SDL_DisplayYUVOverlay(plat_sdl_overlay, &dstrect);
        }
        else if (plat_sdl_gl_active) {
-               gl_flip(g_menuscreen_ptr, g_menuscreen_w, g_menuscreen_h);
+               gl_flip(g_menuscreen_ptr, g_menuscreen_pp, g_menuscreen_h);
        }
        else {
                if (SDL_MUSTLOCK(plat_sdl_screen))
@@ -237,7 +237,7 @@ void plat_video_loop_prepare(void)
                        SDL_LockSurface(plat_sdl_screen);
                g_screen_ptr = plat_sdl_screen->pixels;
        }
-       PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);
+       PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);
 }
 
 void plat_early_init(void)
@@ -265,6 +265,7 @@ void plat_init(void)
 
        g_menuscreen_w = plat_sdl_screen->w;
        g_menuscreen_h = plat_sdl_screen->h;
+       g_menuscreen_pp = g_menuscreen_w;
        g_menuscreen_ptr = NULL;
 
        shadow_size = g_menuscreen_w * g_menuscreen_h * 2;
@@ -280,6 +281,7 @@ void plat_init(void)
 
        g_screen_width = 320;
        g_screen_height = 240;
+       g_screen_ppitch = 320;
        g_screen_ptr = shadow_fb;
 
        in_sdl_init(&in_sdl_platform_data, plat_sdl_event_handler);
index 614ab7f..4fcf76f 100644 (file)
@@ -208,6 +208,7 @@ void plat_init(void)
 
        g_menuscreen_w = 320;
        g_menuscreen_h = 240;
+       g_menuscreen_pp = g_menuscreen_w;
        gp2x_memset_all_buffers(0, 0, 320*240*2);
 
        gp2x_make_fb_bufferable(1);
index 21082d0..2b27288 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 21082d0b2b9910727770674cef9b68b9e97a3155
+Subproject commit 2b27288eb44ef9247d2a948a207d3ac9b835421a
index c470a77..5d4432f 100644 (file)
@@ -67,7 +67,7 @@ static void draw_cd_leds(void)
 void pemu_finalize_frame(const char *fps, const char *notice)\r
 {\r
        if (currentConfig.renderer != RT_16BIT && !(PicoIn.AHW & PAHW_32X)) {\r
-               unsigned short *pd = (unsigned short *)g_screen_ptr + 8 * g_screen_width;\r
+               unsigned short *pd = (unsigned short *)g_screen_ptr + 8 * g_screen_ppitch;\r
                unsigned char *ps = Pico.est.Draw2FB + 328*8 + 8;\r
                unsigned short *pal = Pico.est.HighPal;\r
                int i, x;\r
@@ -94,7 +94,7 @@ static void apply_renderer(void)
        case RT_16BIT:\r
                PicoIn.opt &= ~POPT_ALT_RENDERER;\r
                PicoDrawSetOutFormat(PDF_RGB555, 0);\r
-               PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
+               PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);\r
                break;\r
        case RT_8BIT_ACC:\r
                PicoIn.opt &= ~POPT_ALT_RENDERER;\r
@@ -108,7 +108,7 @@ static void apply_renderer(void)
        }\r
 \r
        if (PicoIn.AHW & PAHW_32X)\r
-               PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
+               PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);\r
 }\r
 \r
 void plat_video_toggle_renderer(int change, int is_menu)\r
@@ -127,8 +127,8 @@ void plat_video_toggle_renderer(int change, int is_menu)
 \r
 void plat_status_msg_clear(void)\r
 {\r
-       unsigned short *d = (unsigned short *)g_screen_ptr + g_screen_width * g_screen_height;\r
-       int l = g_screen_width * 8;\r
+       unsigned short *d = (unsigned short *)g_screen_ptr + g_screen_ppitch * g_screen_height;\r
+       int l = g_screen_ppitch * 8;\r
        memset32((int *)(d - l), 0, l * 2 / 4);\r
 }\r
 \r
@@ -143,7 +143,7 @@ void plat_status_msg_busy_next(const char *msg)
 \r
 void plat_status_msg_busy_first(const char *msg)\r
 {\r
-//     memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);\r
+//     memset32(g_screen_ptr, 0, g_screen_ppitch * g_screen_height * 2 / 4);\r
        plat_status_msg_busy_next(msg);\r
 }\r
 \r
@@ -153,7 +153,7 @@ void plat_update_volume(int has_changed, int is_up)
 \r
 void pemu_forced_frame(int no_scale, int do_emu)\r
 {\r
-       PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
+       PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);\r
        PicoDrawSetCallbacks(NULL, NULL);\r
        Pico.m.dirtyPal = 1;\r
 \r
@@ -174,7 +174,7 @@ void plat_debug_cat(char *str)
 void emu_video_mode_change(int start_line, int line_count, int is_32cols)\r
 {\r
        // clear whole screen in all buffers\r
-       memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);\r
+       memset32(g_screen_ptr, 0, g_screen_ppitch * g_screen_height * 2 / 4);\r
 }\r
 \r
 void pemu_loop_prep(void)\r
index edc5f6e..57601cc 100644 (file)
@@ -134,7 +134,7 @@ static void xlib_update(void)
        XLockDisplay(xlib_display);
 
        xstatus = XPutImage(xlib_display, xlib_window, DefaultGC(xlib_display, 0), ximage,
-               0, 0, 0, 0, g_screen_width, g_screen_height);
+               0, 0, 0, 0, g_screen_ppitch, g_screen_height);
        if (xstatus != 0)
                fprintf(stderr, "XPutImage %d\n", xstatus);
 
@@ -260,6 +260,7 @@ static void realloc_screen(void)
        int size = scr_w * scr_h * 2;
        g_screen_width = g_menuscreen_w = scr_w;
        g_screen_height = g_menuscreen_h = scr_h;
+       g_screen_ppitch = g_menuscreen_pp = scr_w;
        g_screen_ptr = realloc(g_screen_ptr, size);
        g_menubg_ptr = realloc(g_menubg_ptr, size);
        memset(g_screen_ptr, 0, size);
@@ -275,7 +276,7 @@ void plat_video_flip(void)
        if (ximage == NULL)
                return;
 
-       pixel_count = g_screen_width * g_screen_height;
+       pixel_count = g_screen_ppitch * g_screen_height;
        image = (void *)ximage->data;
 
        if (current_bpp == 8)
@@ -332,6 +333,7 @@ void plat_init(void)
                exit(1);
        g_screen_width = g_menuscreen_w = w;
        g_screen_height = g_menuscreen_h = h;
+       g_screen_ppitch = g_menuscreen_pp = w;
        g_menubg_ptr = realloc(g_menubg_ptr, w * g_screen_height * 2);
 #else
        realloc_screen();
index 9f451fe..867b5c0 100644 (file)
@@ -18,7 +18,7 @@ static int menu_loop_cscaler(int id, int keys)
        for (;;)
        {
                menu_draw_begin(0, 1);
-               memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
+               menuscreen_memset_lines(g_menuscreen_ptr, 0, g_menuscreen_h);
                text_out16(2, 480 - 18, "%dx%d | d-pad to resize, R+d-pad to move", g_layer_cw, g_layer_ch);
                menu_draw_end();
 
index a2e70eb..5f10b17 100644 (file)
@@ -488,7 +488,7 @@ void plat_init(void)
                exit(1);\r
        }\r
 \r
-       g_menuscreen_w = w;\r
+       g_menuscreen_w = g_menuscreen_pp = w;\r
        g_menuscreen_h = h;\r
        g_menuscreen_ptr = vout_fbdev_flip(main_fb);\r
 \r
index 8abb062..54af829 100644 (file)
@@ -75,7 +75,7 @@ void pemu_validate_config(void)
 void pemu_loop_prep(void)
 {
        PicoDrawSetOutFormat(PDF_RGB555, 1);
-       PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);
+       PicoDrawSetOutBuf(g_screen_ptr, g_screen_ppitch * 2);
        pemu_sound_start();
 }