Commit 01c9bd4c authored by hybrid's avatar hybrid

Fix 8bit grey image TGAs, which were not working due to missing palette. Also...

Fix 8bit grey image TGAs, which were not working due to missing palette. Also switched to RGB8 format, as otherwise a loss in precision would occur. Thanks to Klunk for the error report and a test image.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4160 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 9548b470
......@@ -166,15 +166,29 @@ IImage* CImageLoaderTGA::loadImage(io::IReadFile* file) const
switch(header.PixelDepth)
{
case 8:
image = new CImage(ECF_A1R5G5B5,
core::dimension2d<u32>(header.ImageWidth, header.ImageHeight));
if (image)
CColorConverter::convert8BitTo16Bit((u8*)data,
(s16*)image->lock(),
header.ImageWidth,header.ImageHeight,
header.ImageType == 3 ? 0 : (s32*) palette,
0,
(header.ImageDescriptor&0x20)==0);
{
if (header.ImageType==3) // grey image
{
image = new CImage(ECF_R8G8B8,
core::dimension2d<u32>(header.ImageWidth, header.ImageHeight));
if (image)
CColorConverter::convert8BitTo24Bit((u8*)data,
(u8*)image->lock(),
header.ImageWidth,header.ImageHeight,
0, 0, (header.ImageDescriptor&0x20)==0);
}
else
{
image = new CImage(ECF_A1R5G5B5,
core::dimension2d<u32>(header.ImageWidth, header.ImageHeight));
if (image)
CColorConverter::convert8BitTo16Bit((u8*)data,
(s16*)image->lock(),
header.ImageWidth,header.ImageHeight,
(s32*) palette, 0,
(header.ImageDescriptor&0x20)==0);
}
}
break;
case 16:
image = new CImage(ECF_A1R5G5B5,
......
......@@ -2,7 +2,9 @@
using namespace irr;
static bool testImageCreation()
namespace
{
bool testImageCreation()
{
// create device
......@@ -39,8 +41,35 @@ static bool testImageCreation()
return result;
}
bool testImageFormats()
{
IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO, core::dimension2d<u32>(256,128));
if (device == 0)
return true; // could not create selected driver.
video::IVideoDriver* driver = device->getVideoDriver();
video::ITexture* tex=driver->getTexture("../media/water.jpg");
video::ITexture* tex1=driver->getTexture("media/grey.tga");
driver->beginScene(true, true);
driver->draw2DImage(tex, core::position2d<s32>(0,0), core::recti(0,0,64,64));
driver->draw2DImage(tex1, core::position2d<s32>(0,64), core::recti(0,0,64,64));
driver->endScene();
bool result = takeScreenshotAndCompareAgainstReference(driver, "-testImageFormats.png", 99.5f);
device->closeDevice();
device->run();
device->drop();
return result;
}
}
bool createImage()
{
bool result = testImageCreation();
result &= testImageFormats();
return result;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment