diff --git a/src/Plugins/TgaImageConverter/Test/TgaImageConverterTest.cpp b/src/Plugins/TgaImageConverter/Test/TgaImageConverterTest.cpp index 94810167e..f1dd896f4 100644 --- a/src/Plugins/TgaImageConverter/Test/TgaImageConverterTest.cpp +++ b/src/Plugins/TgaImageConverter/Test/TgaImageConverterTest.cpp @@ -48,7 +48,12 @@ class TgaImageConverterTest: public TestSuite::Tester { }; namespace { - const Image2D original({2, 3}, ImageFormat::BGR, ImageType::UnsignedByte, new char[18] { + #ifndef MAGNUM_TARGET_GLES + const Image2D original({2, 3}, ImageFormat::BGR, ImageType::UnsignedByte, new char[18] + #else + const Image2D original({2, 3}, ImageFormat::RGB, ImageType::UnsignedByte, new char[18] + #endif + { 1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8 @@ -98,7 +103,11 @@ void TgaImageConverterTest::data() { CORRADE_VERIFY(converted); CORRADE_COMPARE(converted->size(), Vector2i(2, 3)); + #ifndef MAGNUM_TARGET_GLES CORRADE_COMPARE(converted->format(), ImageFormat::BGR); + #else + CORRADE_COMPARE(converted->format(), ImageFormat::RGB); + #endif CORRADE_COMPARE(converted->type(), ImageType::UnsignedByte); CORRADE_COMPARE(std::string(reinterpret_cast(converted->data()), 2*3*3), std::string(reinterpret_cast(original.data()), 2*3*3)); @@ -115,7 +124,11 @@ void TgaImageConverterTest::file() { CORRADE_VERIFY(converted); CORRADE_COMPARE(converted->size(), Vector2i(2, 3)); + #ifndef MAGNUM_TARGET_GLES CORRADE_COMPARE(converted->format(), ImageFormat::BGR); + #else + CORRADE_COMPARE(converted->format(), ImageFormat::RGB); + #endif CORRADE_COMPARE(converted->type(), ImageType::UnsignedByte); CORRADE_COMPARE(std::string(reinterpret_cast(converted->data()), 2*3*3), std::string(reinterpret_cast(original.data()), 2*3*3)); diff --git a/src/Plugins/TgaImageConverter/TgaImageConverter.cpp b/src/Plugins/TgaImageConverter/TgaImageConverter.cpp index 71434f290..ed2bd87ad 100644 --- a/src/Plugins/TgaImageConverter/TgaImageConverter.cpp +++ b/src/Plugins/TgaImageConverter/TgaImageConverter.cpp @@ -29,6 +29,11 @@ #include #include +#ifdef MAGNUM_TARGET_GLES +#include +#include +#endif + #include "TgaImporter/TgaHeader.h" namespace Magnum { namespace Trade { namespace TgaImageConverter { @@ -42,9 +47,16 @@ TgaImageConverter::Features TgaImageConverter::features() const { } std::pair TgaImageConverter::convertToData(const Image2D* const image) const { + #ifndef MAGNUM_TARGET_GLES if(image->format() != ImageFormat::BGR && image->format() != ImageFormat::BGRA && - image->format() != ImageFormat::Red) { + image->format() != ImageFormat::Red) + #else + if(image->format() != ImageFormat::RGB && + image->format() != ImageFormat::RGBA && + image->format() != ImageFormat::Red) + #endif + { Error() << "Trade::TgaImageConverter::TgaImageConverter::convertToData(): unsupported image format" << image->format(); return {nullptr, 0}; } @@ -69,6 +81,18 @@ std::pair TgaImageConverter::convertToData(co /* Fill data */ std::copy(image->data(), image->data()+pixelSize*image->size().product(), data+sizeof(TgaImporter::TgaHeader)); + #ifdef MAGNUM_TARGET_GLES + if(image->format() == ImageFormat::RGB) { + auto pixels = reinterpret_cast*>(data+sizeof(TgaImporter::TgaHeader)); + std::transform(pixels, pixels + image->size().product(), pixels, + [](Math::Vector3 pixel) { return swizzle<'b', 'g', 'r'>(pixel); }); + } else if(image->format() == ImageFormat::RGBA) { + auto pixels = reinterpret_cast*>(data+sizeof(TgaImporter::TgaHeader)); + std::transform(pixels, pixels + image->size().product(), pixels, + [](Math::Vector4 pixel) { return swizzle<'b', 'g', 'r', 'a'>(pixel); }); + } + #endif + return {data, size}; }