X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=video.c;h=a33accfe70a7fece61be7273ba984d1128580651;hb=eb3668fc5dab138073cd4844208ac05b94086a4a;hp=d3dd3991edbded9a0bb65b0c0f4d12e68e70ab21;hpb=ee0a3871f9982215361cd6bb4758eb9a7c7d8413;p=gpsp.git diff --git a/video.c b/video.c index d3dd399..a33accf 100644 --- a/video.c +++ b/video.c @@ -102,6 +102,16 @@ const u32 screen_pitch = 320; #define get_screen_pitch() \ screen_pitch \ +#elif defined(PND_BUILD) + +static u16 *screen_pixels = NULL; + +#define get_screen_pixels() \ + screen_pixels \ + +#define get_screen_pitch() \ + resolution_width \ + #else #ifdef GP2X_BUILD @@ -3392,6 +3402,13 @@ no_clean: screen_pixels = (u16 *)gpsp_gp2x_screen + screen_offset; } +#elif defined(PND_BUILD) + +void flip_screen() +{ + screen_pixels = fb_flip_screen(); +} + #else #define integer_scale_copy_2() \ @@ -3601,7 +3618,7 @@ void init_video() GE_CMD(NOP, 0); } -#elif defined(WIZ_BUILD) +#elif defined(WIZ_BUILD) || defined(PND_BUILD) void init_video() { @@ -3796,6 +3813,42 @@ void clear_screen(u16 color) *p++ = col; } +#elif defined(PND_BUILD) + +void video_resolution_large() +{ + resolution_width = 400; + resolution_height = 272; + + fb_set_mode(400, 272, 1, 15, screen_filter); + flip_screen(); + clear_screen(0); +} + +void video_resolution_small() +{ + resolution_width = 240; + resolution_height = 160; + + fb_set_mode(240, 160, 4, screen_scale, screen_filter); + flip_screen(); + clear_screen(0); +} + +void set_gba_resolution(video_scale_type scale) +{ + screen_scale = scale; +} + +void clear_screen(u16 color) +{ + u32 col = ((u32)color << 16) | color; + u32 *p = (u32 *)get_screen_pixels(); + int c = resolution_width * resolution_height / 2; + while (c-- > 0) + *p++ = col; +} + #else void video_resolution_large() @@ -3903,17 +3956,18 @@ void blit_to_screen(u16 *src, u32 w, u32 h, u32 dest_x, u32 dest_y) u32 pitch = get_screen_pitch(); u16 *dest_ptr = get_screen_pixels() + dest_x + (dest_y * pitch); + s32 w1 = dest_x + w > pitch ? pitch - dest_x : w; u16 *src_ptr = src; - u32 line_skip = pitch - w; - u32 x, y; + s32 x, y; for(y = 0; y < h; y++) { - for(x = 0; x < w; x++, src_ptr++, dest_ptr++) + for(x = 0; x < w1; x++) { - *dest_ptr = *src_ptr; + dest_ptr[x] = src_ptr[x]; } - dest_ptr += line_skip; + src_ptr += w; + dest_ptr += pitch; } }