summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2007-12-13 17:12:53 -0500
committerRay Strode <rstrode@redhat.com>2007-12-13 17:12:53 -0500
commitc12164c1622a2209fe07555e682cc479c6854e7e (patch)
tree5567931528d34c0b1df4fef0f9b888fa1bc27ac7 /src
parentc392c5d539021068d22f1632c0f9d3589d368400 (diff)
downloadplymouth-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.c26
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);