diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-08-15 01:20:27 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-08-18 19:36:33 +0300 |
commit | 1d9a6b861ceb672ca62ba0bb5c14df65b7fa7c0b (patch) | |
tree | 3f8fa195f394356e5a59b22f9574ef2fe2810f6f /src/resources/dye.cpp | |
parent | f97a167c445790fb380c2f730c377271e80e0d97 (diff) | |
download | mv-1d9a6b861ceb672ca62ba0bb5c14df65b7fa7c0b.tar.gz mv-1d9a6b861ceb672ca62ba0bb5c14df65b7fa7c0b.tar.bz2 mv-1d9a6b861ceb672ca62ba0bb5c14df65b7fa7c0b.tar.xz mv-1d9a6b861ceb672ca62ba0bb5c14df65b7fa7c0b.zip |
fix A and S dye for big endian systems.
Diffstat (limited to 'src/resources/dye.cpp')
-rw-r--r-- | src/resources/dye.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/resources/dye.cpp b/src/resources/dye.cpp index 905f3bcab..c21a20305 100644 --- a/src/resources/dye.cpp +++ b/src/resources/dye.cpp @@ -29,6 +29,8 @@ #include <math.h> #include <sstream> +#include <SDL/SDL_endian.h> + #include "debug.h" DyePalette::DyePalette(const std::string &description, @@ -217,10 +219,16 @@ void DyePalette::replaceSColor(uint32_t *pixels, const int bufSize) const const DyeColor &col = *it; ++ it; const DyeColor &col2 = *it; + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const unsigned int data = (*pixels) & 0x00ffffff; + const unsigned int coldata = (col.value[2] << 16) + | (col.value[1] << 8) | (col.value[0]); +#else const unsigned int data = (*pixels) & 0xffffff00; const unsigned int coldata = (col.value[2] << 8) | (col.value[1] << 16) | (col.value[0] << 24); - +#endif if (data == coldata) { p[3] = col2.value[0]; @@ -254,9 +262,15 @@ void DyePalette::replaceAColor(uint32_t *pixels, const int bufSize) const ++ it; const DyeColor &col2 = *it; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const unsigned int data = *pixels; + const unsigned int coldata = (col.value[3] << 24) + | (col.value[2] << 16) | (col.value[1] << 8) | (col.value[0]); +#else const unsigned int data = *pixels; const unsigned int coldata = (col.value[3]) | (col.value[2] << 8) | (col.value[1] << 16) | (col.value[0] << 24); +#endif if (data == coldata) { @@ -294,10 +308,15 @@ void DyePalette::replaceSOGLColor(uint32_t *pixels, const int bufSize) const ++ it; const DyeColor &col2 = *it; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const unsigned int data = (*pixels) & 0xffffff00; + const unsigned int coldata = (col.value[0] << 24) + | (col.value[1] << 16) | (col.value[2] << 8); +#else const unsigned int data = (*pixels) & 0x00ffffff; const unsigned int coldata = (col.value[0]) | (col.value[1] << 8) | (col.value[2] << 16); - +#endif if (data == coldata) { p[0] = col2.value[0]; @@ -331,10 +350,15 @@ void DyePalette::replaceAOGLColor(uint32_t *pixels, const int bufSize) const ++ it; const DyeColor &col2 = *it; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const unsigned int data = *pixels; + const unsigned int coldata = (col.value[0] << 24) + | (col.value[1] << 16) | (col.value[2] << 8) | col.value[3]; +#else const unsigned int data = *pixels; const unsigned int coldata = (col.value[0]) | (col.value[1] << 8) | (col.value[2] << 16) | (col.value[3] << 24); - +#endif if (data == coldata) { p[0] = col2.value[0]; |