Initial reimport of double buffering
This commit is contained in:
parent
df48e9e18d
commit
1f56d83788
10 changed files with 318 additions and 23 deletions
|
@ -66,6 +66,8 @@ grub_video_fb_init (void)
|
|||
grub_err_t
|
||||
grub_video_fb_fini (void)
|
||||
{
|
||||
/* TODO: destroy render targets. */
|
||||
|
||||
grub_free (palette);
|
||||
render_target = 0;
|
||||
palette = 0;
|
||||
|
@ -1182,3 +1184,53 @@ grub_video_fb_get_active_render_target (struct grub_video_fbrender_target **targ
|
|||
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
doublebuf_blit_update_screen (struct grub_video_fbrender_target *front,
|
||||
struct grub_video_fbrender_target *back)
|
||||
{
|
||||
grub_memcpy (front->data, back->data,
|
||||
front->mode_info.pitch * front->mode_info.height);
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
grub_video_fb_doublebuf_blit_init (struct grub_video_fbrender_target **front,
|
||||
struct grub_video_fbrender_target **back,
|
||||
grub_video_fb_doublebuf_update_screen_t *update_screen,
|
||||
struct grub_video_mode_info mode_info,
|
||||
void *framebuf)
|
||||
{
|
||||
grub_err_t err;
|
||||
int page_size = mode_info.pitch * mode_info.height;
|
||||
void *offscreen_buffer;
|
||||
|
||||
err = grub_video_fb_create_render_target_from_pointer (front, &mode_info,
|
||||
framebuf);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
offscreen_buffer = grub_malloc (page_size);
|
||||
if (! offscreen_buffer)
|
||||
{
|
||||
grub_video_fb_delete_render_target (*front);
|
||||
*front = 0;
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
err = grub_video_fb_create_render_target_from_pointer (back, &mode_info,
|
||||
offscreen_buffer);
|
||||
|
||||
if (err)
|
||||
{
|
||||
grub_video_fb_delete_render_target (*front);
|
||||
grub_free (offscreen_buffer);
|
||||
*front = 0;
|
||||
return grub_errno;
|
||||
}
|
||||
(*back)->is_allocated = 1;
|
||||
|
||||
*update_screen = doublebuf_blit_update_screen;
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue