add a pitch variable

32x is still broken
This commit is contained in:
notaz 2014-04-05 22:08:06 +03:00
parent 88f6038d05
commit 9cdfc191b6
11 changed files with 59 additions and 46 deletions

View file

@ -42,6 +42,7 @@ void *g_screen_ptr;
int g_screen_width = 320;
int g_screen_height = 240;
int g_screen_ppitch = 320; // pitch in pixels
const char *PicoConfigFile = "config2.cfg";
currentConfig_t currentConfig, defaultConfig;
@ -730,12 +731,12 @@ void name(int x, int y, const char *text) \
} \
}
mk_text_out(emu_text_out8, unsigned char, 0xf0, g_screen_ptr, 1, g_screen_width)
mk_text_out(emu_text_out16, unsigned short, 0xffff, g_screen_ptr, 1, g_screen_width)
mk_text_out(emu_text_out8, unsigned char, 0xf0, g_screen_ptr, 1, g_screen_ppitch)
mk_text_out(emu_text_out16, unsigned short, 0xffff, g_screen_ptr, 1, g_screen_ppitch)
mk_text_out(emu_text_out8_rot, unsigned char, 0xf0,
(char *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)
(char *)g_screen_ptr + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)
mk_text_out(emu_text_out16_rot, unsigned short, 0xffff,
(short *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)
(short *)g_screen_ptr + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)
#undef mk_text_out
@ -751,7 +752,7 @@ void emu_osd_text16(int x, int y, const char *text)
for (h = 0; h < 8; h++) {
unsigned short *p;
p = (unsigned short *)g_screen_ptr
+ x + g_screen_width * (y + h);
+ x + g_screen_ppitch * (y + h);
for (i = len; i > 0; i--, p++)
*p = (*p >> 2) & 0x39e7;
}
@ -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)
{
int po_old = PicoIn.opt;
int y;
memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);
for (y = 0; y < g_screen_height; y++)
memset32((short *)g_screen_ptr + g_screen_ppitch * y, 0,
g_screen_width * 2 / 4);
PicoIn.opt &= ~POPT_ALT_RENDERER;
PicoIn.opt |= POPT_ACC_SPRITES;

View 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)

View 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)

View 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);