diff options
author | Octavian Purdila <octavian.purdila@intel.com> | 2011-07-01 17:57:45 +0300 |
---|---|---|
committer | Andrew Boie <andrew.p.boie@intel.com> | 2012-07-11 15:32:11 -0700 |
commit | 0e34880ca2147073b6daf3fd4b251f0be3fca635 (patch) | |
tree | 6ad60b01a557da81d85e587b31137fabd5fa2477 /minui/graphics.c | |
parent | ea17e320b0bc4437e8a881026f296b71fa02ad3e (diff) | |
download | bootable_recovery-0e34880ca2147073b6daf3fd4b251f0be3fca635.tar.gz bootable_recovery-0e34880ca2147073b6daf3fd4b251f0be3fca635.tar.bz2 bootable_recovery-0e34880ca2147073b6daf3fd4b251f0be3fca635.zip |
graphics: add support for "single buffering"
When we don't have enough video memory for double buffering we
fallback to "single buffering".
Change-Id: I8bfab6d8cd6b54f0cc6c67edc41a4c37d8fbd4ba
Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Diffstat (limited to 'minui/graphics.c')
-rw-r--r-- | minui/graphics.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/minui/graphics.c b/minui/graphics.c index de1cfdf..296e2e0 100644 --- a/minui/graphics.c +++ b/minui/graphics.c @@ -57,6 +57,7 @@ static GGLSurface gr_font_texture; static GGLSurface gr_framebuffer[2]; static GGLSurface gr_mem_surface; static unsigned gr_active_fb = 0; +static unsigned double_buffering = 0; static int gr_fb_fd = -1; static int gr_vt_fd = -1; @@ -139,6 +140,12 @@ static int get_framebuffer(GGLSurface *fb) fb++; + /* check if we can use double buffering */ + if (vi.yres * fi.line_length * 2 > fi.smem_len) + return fd; + + double_buffering = 1; + fb->version = sizeof(*fb); fb->width = vi.xres; fb->height = vi.yres; @@ -161,7 +168,7 @@ static void get_memory_surface(GGLSurface* ms) { static void set_active_framebuffer(unsigned n) { - if (n > 1) return; + if (n > 1 || !double_buffering) return; vi.yres_virtual = vi.yres * PIXEL_SIZE; vi.yoffset = n * vi.yres; vi.bits_per_pixel = PIXEL_SIZE * 8; @@ -175,7 +182,8 @@ void gr_flip(void) GGLContext *gl = gr_context; /* swap front and back buffers */ - gr_active_fb = (gr_active_fb + 1) & 1; + if (double_buffering) + gr_active_fb = (gr_active_fb + 1) & 1; /* copy data from the in-memory surface to the buffer we're about * to make active. */ |