From 9d1bcdf7b8c2992e9671f7fb9dcf78f2a0ae3d66 Mon Sep 17 00:00:00 2001 From: Michael Ward Date: Wed, 22 Jun 2011 14:30:34 -0700 Subject: Graphics can handle stride != xres, and BGRA support. Change-Id: Ifee94ac08028e62a40241a089ac7c36346fea3a3 --- minui/graphics.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'minui/graphics.c') diff --git a/minui/graphics.c b/minui/graphics.c index 42c85e777..741d69f46 100644 --- a/minui/graphics.c +++ b/minui/graphics.c @@ -32,7 +32,10 @@ #include "font_10x18.h" #include "minui.h" -#ifdef RECOVERY_24_BIT +#if defined(RECOVERY_BGRA) +#define PIXEL_FORMAT GGL_PIXEL_FORMAT_BGRA_8888 +#define PIXEL_SIZE 4 +#elif defined(RECOVERY_RGBX) #define PIXEL_FORMAT GGL_PIXEL_FORMAT_RGBX_8888 #define PIXEL_SIZE 4 #else @@ -58,11 +61,11 @@ static int gr_fb_fd = -1; static int gr_vt_fd = -1; static struct fb_var_screeninfo vi; +static struct fb_fix_screeninfo fi; static int get_framebuffer(GGLSurface *fb) { int fd; - struct fb_fix_screeninfo fi; void *bits; fd = open("/dev/graphics/fb0", O_RDWR); @@ -93,20 +96,20 @@ static int get_framebuffer(GGLSurface *fb) fb->version = sizeof(*fb); fb->width = vi.xres; fb->height = vi.yres; - fb->stride = vi.xres; + fb->stride = fi.line_length/PIXEL_SIZE; fb->data = bits; fb->format = PIXEL_FORMAT; - memset(fb->data, 0, vi.yres * vi.xres * PIXEL_SIZE); + memset(fb->data, 0, vi.yres * fi.line_length); fb++; fb->version = sizeof(*fb); fb->width = vi.xres; fb->height = vi.yres; - fb->stride = vi.xres; - fb->data = (void*) (((unsigned) bits) + vi.yres * vi.xres * PIXEL_SIZE); + fb->stride = fi.line_length/PIXEL_SIZE; + fb->data = (void*) (((unsigned) bits) + vi.yres * fi.line_length); fb->format = PIXEL_FORMAT; - memset(fb->data, 0, vi.yres * vi.xres * PIXEL_SIZE); + memset(fb->data, 0, vi.yres * fi.line_length); return fd; } @@ -115,8 +118,8 @@ static void get_memory_surface(GGLSurface* ms) { ms->version = sizeof(*ms); ms->width = vi.xres; ms->height = vi.yres; - ms->stride = vi.xres; - ms->data = malloc(vi.xres * vi.yres * PIXEL_SIZE); + ms->stride = fi.line_length/PIXEL_SIZE; + ms->data = malloc(fi.line_length * vi.yres); ms->format = PIXEL_FORMAT; } @@ -141,7 +144,7 @@ void gr_flip(void) /* copy data from the in-memory surface to the buffer we're about * to make active. */ memcpy(gr_framebuffer[gr_active_fb].data, gr_mem_surface.data, - vi.xres * vi.yres * PIXEL_SIZE); + fi.line_length * vi.yres); /* inform the display driver */ set_active_framebuffer(gr_active_fb); -- cgit v1.2.3