2
#define grub_video_render_target grub_video_fbrender_target
4
#include <grub/video.h>
5
#include <grub/video_fb.h>
10
struct grub_video_mode_info mode_info;
11
struct grub_video_render_target *render_target;
15
void (*grub_video_capture_refresh_cb) (void);
18
grub_video_capture_swap_buffers (void)
20
if (grub_video_capture_refresh_cb)
21
grub_video_capture_refresh_cb ();
26
grub_video_capture_set_active_render_target (struct grub_video_render_target *target)
28
if (target == GRUB_VIDEO_RENDER_TARGET_DISPLAY)
29
target = framebuffer.render_target;
31
return grub_video_fb_set_active_render_target (target);
35
grub_video_capture_fini (void)
40
static struct grub_video_adapter grub_video_capture_adapter =
42
.name = "Render capture",
45
.id = GRUB_VIDEO_ADAPTER_CAPTURE,
47
.fini = grub_video_capture_fini,
48
.get_info = grub_video_fb_get_info,
49
.get_info_and_fini = 0,
50
.set_palette = grub_video_fb_set_palette,
51
.get_palette = grub_video_fb_get_palette,
52
.set_viewport = grub_video_fb_set_viewport,
53
.get_viewport = grub_video_fb_get_viewport,
54
.set_region = grub_video_fb_set_region,
55
.get_region = grub_video_fb_get_region,
56
.set_area_status = grub_video_fb_set_area_status,
57
.get_area_status = grub_video_fb_get_area_status,
58
.map_color = grub_video_fb_map_color,
59
.map_rgb = grub_video_fb_map_rgb,
60
.map_rgba = grub_video_fb_map_rgba,
61
.unmap_color = grub_video_fb_unmap_color,
62
.fill_rect = grub_video_fb_fill_rect,
63
.blit_bitmap = grub_video_fb_blit_bitmap,
64
.blit_render_target = grub_video_fb_blit_render_target,
65
.scroll = grub_video_fb_scroll,
66
.swap_buffers = grub_video_capture_swap_buffers,
67
.create_render_target = grub_video_fb_create_render_target,
68
.delete_render_target = grub_video_fb_delete_render_target,
69
.set_active_render_target = grub_video_capture_set_active_render_target,
70
.get_active_render_target = grub_video_fb_get_active_render_target,
75
static struct grub_video_adapter *saved;
76
static struct grub_video_mode_info saved_mode_info;
79
grub_video_capture_start (const struct grub_video_mode_info *mode_info,
80
struct grub_video_palette_data *palette,
81
unsigned int palette_size)
84
grub_memset (&framebuffer, 0, sizeof (framebuffer));
86
grub_video_fb_init ();
88
framebuffer.mode_info = *mode_info;
89
framebuffer.mode_info.blit_format = grub_video_get_blit_format (&framebuffer.mode_info);
91
framebuffer.ptr = grub_malloc (framebuffer.mode_info.height * framebuffer.mode_info.pitch);
95
err = grub_video_fb_create_render_target_from_pointer (&framebuffer.render_target,
96
&framebuffer.mode_info,
100
err = grub_video_fb_set_active_render_target (framebuffer.render_target);
103
err = grub_video_fb_set_palette (0, palette_size, palette);
107
saved = grub_video_adapter_active;
110
grub_video_get_info (&saved_mode_info);
114
grub_video_adapter_active = &grub_video_capture_adapter;
116
return GRUB_ERR_NONE;
120
grub_video_capture_get_framebuffer (void)
122
return framebuffer.ptr;
126
grub_video_capture_end (void)
128
grub_video_fb_delete_render_target (framebuffer.render_target);
129
grub_free (framebuffer.ptr);
130
grub_video_fb_fini ();
131
grub_video_adapter_active = saved;
137
saved->setup (saved_mode_info.width, saved_mode_info.height, 0, 0);