|
@@ -389,6 +389,7 @@ bool TextureCube::Load(CubeMapFace face, SharedPtr<Image> image, bool useAlpha)
|
|
|
int height = image->GetHeight();
|
|
int height = image->GetHeight();
|
|
|
unsigned levels = image->GetNumCompressedLevels();
|
|
unsigned levels = image->GetNumCompressedLevels();
|
|
|
unsigned format = GetDXTFormat(image->GetCompressedFormat());
|
|
unsigned format = GetDXTFormat(image->GetCompressedFormat());
|
|
|
|
|
+ bool needDecompress = false;
|
|
|
|
|
|
|
|
if (width != height)
|
|
if (width != height)
|
|
|
{
|
|
{
|
|
@@ -396,6 +397,12 @@ bool TextureCube::Load(CubeMapFace face, SharedPtr<Image> image, bool useAlpha)
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (!graphics_->GetCompressedTextureSupport())
|
|
|
|
|
+ {
|
|
|
|
|
+ format = Graphics::GetRGBAFormat();
|
|
|
|
|
+ needDecompress = true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
unsigned mipsToSkip = mipsToSkip_[quality];
|
|
unsigned mipsToSkip = mipsToSkip_[quality];
|
|
|
if (mipsToSkip >= levels)
|
|
if (mipsToSkip >= levels)
|
|
|
mipsToSkip = levels - 1;
|
|
mipsToSkip = levels - 1;
|
|
@@ -427,8 +434,19 @@ bool TextureCube::Load(CubeMapFace face, SharedPtr<Image> image, bool useAlpha)
|
|
|
for (unsigned i = 0; i < levels_ && i < levels - mipsToSkip; ++i)
|
|
for (unsigned i = 0; i < levels_ && i < levels - mipsToSkip; ++i)
|
|
|
{
|
|
{
|
|
|
CompressedLevel level = image->GetCompressedLevel(i + mipsToSkip);
|
|
CompressedLevel level = image->GetCompressedLevel(i + mipsToSkip);
|
|
|
- SetData(face, i, 0, 0, level.width_, level.height_, level.data_);
|
|
|
|
|
- memoryUse += level.rows_ * level.rowSize_;
|
|
|
|
|
|
|
+ if (!needDecompress)
|
|
|
|
|
+ {
|
|
|
|
|
+ SetData(face, i, 0, 0, level.width_, level.height_, level.data_);
|
|
|
|
|
+ memoryUse += level.rows_ * level.rowSize_;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ unsigned char* rgbaData = new unsigned char[level.width_ * level.height_ * 4];
|
|
|
|
|
+ level.Decompress(rgbaData);
|
|
|
|
|
+ SetData(face, i, 0, 0, level.width_, level.height_, rgbaData);
|
|
|
|
|
+ memoryUse += level.width_ * level.height_ * 4;
|
|
|
|
|
+ delete[] rgbaData;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|