Fix little-endian hosts

Remove additional data copy

svn path=/trunk/netsurf/; revision=13046
This commit is contained in:
Chris Young 2011-10-14 17:20:33 +00:00
parent 9bf80e3788
commit 806911dff0
1 changed files with 8 additions and 8 deletions

View File

@ -119,26 +119,26 @@ static bool nssprite_convert(struct content *c)
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
unsigned char* imagebuf = bitmap_get_buffer(nssprite->bitmap);
uint32_t* imagebuf = (uint32_t *)bitmap_get_buffer(nssprite->bitmap);
if (!imagebuf) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
unsigned int row_width = bitmap_get_rowstride(nssprite->bitmap);
memcpy(imagebuf, sprite->image, row_width * sprite->height); // TODO: avoid copying entire image buffer
unsigned char *spritebuf = (unsigned char *)sprite->image;
/* reverse byte order of each word */
for (uint32_t y = 0; y < sprite->height; y++) {
for (uint32_t x = 0; x < sprite->width; x++) {
int offset = 4 * (y * sprite->width + x);
uint32_t rgba = 0;
rgba |= imagebuf[offset] << 24;
rgba |= imagebuf[offset + 1] << 16;
rgba |= imagebuf[offset + 2] << 8;
rgba |= imagebuf[offset + 3];
*imagebuf = (spritebuf[offset] << 24) |
(spritebuf[offset + 1] << 16) |
(spritebuf[offset + 2] << 8) |
(spritebuf[offset + 3]);
imagebuf++;
}
}