| #ifndef QEMU_FRAMEBUFFER_H |
| #define QEMU_FRAMEBUFFER_H |
| |
| #include "exec/memory.h" |
| |
| /* Framebuffer device helper routines. */ |
| |
| typedef void (*drawfn)(void *, uint8_t *, const uint8_t *, int, int); |
| |
| /* framebuffer_update_memory_section: Update framebuffer |
| * #MemoryRegionSection, for example if the framebuffer is switched to |
| * a different memory area. |
| * |
| * @mem_section: Output #MemoryRegionSection, to be passed to |
| * framebuffer_update_display(). |
| * @root: #MemoryRegion within which the framebuffer lies |
| * @base: Base address of the framebuffer within @root. |
| * @rows: Height of the screen. |
| * @src_width: Number of bytes in framebuffer memory between two rows. |
| */ |
| void framebuffer_update_memory_section( |
| MemoryRegionSection *mem_section, |
| MemoryRegion *root, |
| hwaddr base, |
| unsigned rows, |
| unsigned src_width); |
| |
| /* framebuffer_update_display: Draw the framebuffer on a surface. |
| * |
| * @ds: #DisplaySurface to draw to. |
| * @mem_section: #MemoryRegionSection provided by |
| * framebuffer_update_memory_section(). |
| * @cols: Width the screen. |
| * @rows: Height of the screen. |
| * @src_width: Number of bytes in framebuffer memory between two rows. |
| * @dest_row_pitch: Number of bytes in the surface data between two rows. |
| * Negative if the framebuffer is stored in the opposite order (e.g. |
| * bottom-to-top) compared to the framebuffer. |
| * @dest_col_pitch: Number of bytes in the surface data between two pixels. |
| * Negative if the framebuffer is stored in the opposite order (e.g. |
| * right-to-left) compared to the framebuffer. |
| * @invalidate: True if the function should redraw the whole screen |
| * without checking the DIRTY_MEMORY_VGA dirty bitmap. |
| * @fn: Drawing function to be called for each row that has to be drawn. |
| * @opaque: Opaque pointer passed to @fn. |
| * @first_row: Pointer to an integer, receives the number of the first row |
| * that was drawn (either the first dirty row, or 0 if @invalidate is true). |
| * @last_row: Pointer to an integer, receives the number of the last row that |
| * was drawn (either the last dirty row, or @rows-1 if @invalidate is true). |
| */ |
| void framebuffer_update_display( |
| DisplaySurface *ds, |
| MemoryRegionSection *mem_section, |
| int cols, |
| int rows, |
| int src_width, |
| int dest_row_pitch, |
| int dest_col_pitch, |
| int invalidate, |
| drawfn fn, |
| void *opaque, |
| int *first_row, |
| int *last_row); |
| |
| #endif |