Changed: Use new methods in panoply_maker

This commit is contained in:
kervala 2016-01-01 16:07:27 +01:00
parent 1ed5ff1097
commit ab13e00d54

View file

@ -669,69 +669,50 @@ static void BuildColoredVersionForOneBitmap(const CBuildInfo &bi, const std::str
// we can save it as RGB to optimize it // we can save it as RGB to optimize it
if (bi.OptimizeTextures > 0 && depth == 32) if (bi.OptimizeTextures > 0 && depth == 32)
{ {
uint32 size = srcBitmap.getPixels().size(); uint8 value = 0;
if (size > 0) // texture can be converted if all alphas are 0 or 255
if (srcBitmap.isAlphaUniform(&value) && (value == 255 || value == 0))
{ {
// get a pointer on original data if (bi.OptimizeTextures > 1)
uint8 *data = srcBitmap.getPixels().getPtr();
// pointer on first alpha value
uint8 *tmp = data + 3;
uint8 *endData = data + size;
uint8 value = *tmp;
// check if all alphas have the same value
while(tmp < endData && *tmp == value) tmp += 4;
// texture can be converted if all alphas are 0 or 255
if (tmp >= endData && (value == 255 || value == 0))
{ {
if (bi.OptimizeTextures > 1) // make bitmap opaque
srcBitmap.makeOpaque();
// original depth is now 24 bits, since we discarded alpha channel
depth = 24;
NLMISC::COFile os;
if (os.open(fullInputBitmapPath))
{ {
// original depth is now 24 bits, since we discarded alpha channel nlwarning("Optimizing texture %s...", fullInputBitmapPath.c_str());
depth = 24;
// if texture is fully transparent, make it fully opaque std::string ext = CFile::getExtension(fullInputBitmapPath);
if (value == 0)
// resave the texture in optimized same format
if (ext == "png")
{ {
tmp = data + 3; srcBitmap.writePNG(os, 24);
while(tmp < endData)
{
*tmp = 255;
tmp += 4;
}
} }
else if (ext == "tga")
NLMISC::COFile os;
if (os.open(fullInputBitmapPath))
{ {
nlwarning("Optimizing texture %s...", fullInputBitmapPath.c_str()); srcBitmap.writeTGA(os, 24);
}
std::string ext = CFile::getExtension(fullInputBitmapPath); else
{
// resave the texture in optimized same format nlwarning("Don't support %s format for texture, unable to save it", ext.c_str());
if (ext == "png")
{
srcBitmap.writePNG(os, 24);
}
else if (ext == "tga")
{
srcBitmap.writeTGA(os, 24);
}
else
{
nlwarning("Don't support %s format for texture, unable to save it", ext.c_str());
}
} }
} }
else else
{ {
nlwarning("Texture %s can be optimized", fullInputBitmapPath.c_str()); nlwarning("Unable to save texture %s", fullInputBitmapPath.c_str());
} }
} }
else
{
nlwarning("Texture %s can be optimized", fullInputBitmapPath.c_str());
}
} }
} }