forked from enlightenment/efl
evas/engines/gl_generic: fix byte order after glReadPixels on BE
This fixes the screenshot tool in Enlightenment on big endian systems besides other things.
This commit is contained in:
parent
d068889df4
commit
6138e371df
|
@ -1906,6 +1906,18 @@ eng_gl_surface_read_pixels(void *engine EINA_UNUSED, void *surface,
|
|||
{
|
||||
glReadPixels(x, y, w, h, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
|
||||
done = (glGetError() == GL_NO_ERROR);
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (done)
|
||||
{
|
||||
DATA32 *ptr = pixels;
|
||||
int k;
|
||||
for (k = w * h; k; --k)
|
||||
{
|
||||
const DATA32 v = *ptr;
|
||||
*ptr++ = eina_swap32(v);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!done)
|
||||
|
@ -1917,9 +1929,13 @@ eng_gl_surface_read_pixels(void *engine EINA_UNUSED, void *surface,
|
|||
for (k = w * h; k; --k)
|
||||
{
|
||||
const DATA32 v = *ptr;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
*ptr++ = (v << 24) | (v >> 8);
|
||||
#else
|
||||
*ptr++ = (v & 0xFF00FF00)
|
||||
| ((v & 0x00FF0000) >> 16)
|
||||
| ((v & 0x000000FF) << 16);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue