diff options
| author | Ray Strode <rstrode@redhat.com> | 2007-12-13 17:12:53 -0500 |
|---|---|---|
| committer | Ray Strode <rstrode@redhat.com> | 2007-12-13 17:12:53 -0500 |
| commit | c12164c1622a2209fe07555e682cc479c6854e7e (patch) | |
| tree | 5567931528d34c0b1df4fef0f9b888fa1bc27ac7 /src | |
| parent | c392c5d539021068d22f1632c0f9d3589d368400 (diff) | |
| download | plymouth-c12164c1622a2209fe07555e682cc479c6854e7e.tar.gz plymouth-c12164c1622a2209fe07555e682cc479c6854e7e.tar.xz plymouth-c12164c1622a2209fe07555e682cc479c6854e7e.zip | |
Copy a row at a time to the card instead of a pixel at a time
Diffstat (limited to 'src')
| -rw-r--r-- | src/libply/ply-frame-buffer.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/libply/ply-frame-buffer.c b/src/libply/ply-frame-buffer.c index 389bbb1..daa275c 100644 --- a/src/libply/ply-frame-buffer.c +++ b/src/libply/ply-frame-buffer.c @@ -350,32 +350,40 @@ ply_frame_buffer_copy_to_device (ply_frame_buffer_t *buffer, unsigned long height) { unsigned long row, column; - + char *row_buffer; + size_t bytes_per_row; + + bytes_per_row = width * buffer->bytes_per_pixel; + row_buffer = malloc (buffer->row_stride * buffer->bytes_per_pixel); for (row = y; row < y + height; row++) { + unsigned long offset; + for (column = x; column < x + width; column++) - { + { uint32_t pixel_value; uint_fast32_t device_pixel_value; - unsigned long offset; pixel_value = buffer->shadow_buffer[row * buffer->row_stride + column]; - device_pixel_value = + device_pixel_value = ply_frame_buffer_pixel_value_to_device_pixel_value (buffer, pixel_value); - offset = row * buffer->row_stride * buffer->bytes_per_pixel + column * buffer->bytes_per_pixel; - - memcpy (buffer->map_address + offset, &device_pixel_value, - buffer->bytes_per_pixel); + memcpy (row_buffer + column * buffer->bytes_per_pixel, + &device_pixel_value, buffer->bytes_per_pixel); } + + offset = row * buffer->row_stride * buffer->bytes_per_pixel; + memcpy (buffer->map_address + offset, row_buffer, + width * buffer->bytes_per_pixel); } + free (row_buffer); return true; } -static bool +static bool ply_frame_buffer_flush (ply_frame_buffer_t *buffer) { assert (buffer != NULL); |
