Bool CDDSFile::LoadInternal( CIODevice& ioDevice, Bool decompress ) { ioDevice.Read( &m_Header, sizeof( EDDSFileHeader ) ); Char* fourCC = (Char*)&m_Header.PixelFormat.FourCC; fourCC[5] = 0; m_TextureInfo.MipMapCount = GetMipMapCount( ); m_TextureInfo.Format = GetPixelFormat( ); m_TextureInfo.Width = m_Header.Width; m_TextureInfo.Height = m_Header.Height; m_TextureInfo.SliceCount = m_Header.Depth; m_TextureInfo.Type = GetTextureType( ); // Setup data buffer m_Data.SetItemCount( GetTextureSize() ); UInt32 r = ioDevice.Read( m_Data.GetBuffer(), m_Data.GetByteCount() ); if( decompress ) { UInt32 byteCount = 0; CArray<Byte> byteArray; byteArray.SetItemCount( m_TextureInfo.Width*m_TextureInfo.Height*4 ); const Byte* blocks = GetSurfaceData( 0,0, byteCount ); int format = 0; if( m_TextureInfo.Format == nTextureFormat_DXT5 ) format = squish::kDxt5; else if( m_TextureInfo.Format == nTextureFormat_DXT3 ) format = squish::kDxt3; else if( m_TextureInfo.Format == nTextureFormat_DXT1 ) format = squish::kDxt1; if( format ) { squish::DecompressImage( byteArray.GetBuffer(), m_TextureInfo.Width, m_TextureInfo.Height, blocks, format ); m_TextureInfo.MipMapCount = 1; m_TextureInfo.Format = nTextureFormat_R8G8B8A8; m_Data = byteArray; } } return TRUE; }