diff options
| author | Markus Wick <degasus@users.noreply.github.com> | 2015-12-15 18:48:49 +0100 |
|---|---|---|
| committer | Markus Wick <degasus@users.noreply.github.com> | 2015-12-15 18:48:49 +0100 |
| commit | c310b3f0e6881d6933d9514ec03b53a9c89e3c54 (patch) | |
| tree | 2bd0b05d5f0276a029dbba1960580de27be76630 /Source/Core/DolphinWX/ISOFile.cpp | |
| parent | 2990df3f593c973addec1293e3a692d27a6e5d23 (diff) | |
| parent | a0cd753060fb8b2701c4e1733cc56da4523f852c (diff) | |
Merge pull request #3309 from JosJuice/reload-banner-without-volume
Don't read from volume when reloading Wii banners
Diffstat (limited to 'Source/Core/DolphinWX/ISOFile.cpp')
| -rw-r--r-- | Source/Core/DolphinWX/ISOFile.cpp | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp index 3bdb41afec..dc53e55756 100644 --- a/Source/Core/DolphinWX/ISOFile.cpp +++ b/Source/Core/DolphinWX/ISOFile.cpp @@ -34,7 +34,7 @@ #include "DolphinWX/ISOFile.h" #include "DolphinWX/WxUtils.h" -static const u32 CACHE_REVISION = 0x126; // Last changed in PR 3097 +static const u32 CACHE_REVISION = 0x127; // Last changed in PR 3309 #define DVD_BANNER_WIDTH 96 #define DVD_BANNER_HEIGHT 32 @@ -63,6 +63,7 @@ static std::string GetLanguageString(DiscIO::IVolume::ELanguage language, std::m GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_map<std::string, std::string>& custom_titles) : m_FileName(_rFileName) + , m_title_id(0) , m_emu_state(0) , m_FileSize(0) , m_Country(DiscIO::IVolume::COUNTRY_UNKNOWN) @@ -82,13 +83,10 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m // if a banner has become available after the cache was made. if (m_pImage.empty()) { - std::unique_ptr<DiscIO::IVolume> volume(DiscIO::CreateVolumeFromFilename(_rFileName)); - if (volume != nullptr) - { - ReadVolumeBanner(*volume); - if (!m_pImage.empty()) - SaveToCache(); - } + std::vector<u32> buffer = DiscIO::IVolume::GetWiiBanner(&m_ImageWidth, &m_ImageHeight, m_title_id); + ReadVolumeBanner(buffer, m_ImageWidth, m_ImageHeight); + if (!m_pImage.empty()) + SaveToCache(); } } else @@ -109,10 +107,12 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m m_VolumeSize = volume->GetSize(); m_UniqueID = volume->GetUniqueID(); + volume->GetTitleID(&m_title_id); m_disc_number = volume->GetDiscNumber(); m_Revision = volume->GetRevision(); - ReadVolumeBanner(*volume); + std::vector<u32> buffer = volume->GetBanner(&m_ImageWidth, &m_ImageHeight); + ReadVolumeBanner(buffer, m_ImageWidth, m_ImageHeight); m_Valid = true; SaveToCache(); @@ -202,6 +202,7 @@ void GameListItem::DoState(PointerWrap &p) p.Do(m_descriptions); p.Do(m_company); p.Do(m_UniqueID); + p.Do(m_title_id); p.Do(m_FileSize); p.Do(m_VolumeSize); p.Do(m_Country); @@ -243,17 +244,14 @@ std::string GameListItem::CreateCacheFilename() const } // Outputs to m_pImage -void GameListItem::ReadVolumeBanner(const DiscIO::IVolume& volume) +void GameListItem::ReadVolumeBanner(const std::vector<u32>& buffer, int width, int height) { - std::vector<u32> Buffer = volume.GetBanner(&m_ImageWidth, &m_ImageHeight); - u32* pData = Buffer.data(); - m_pImage.resize(m_ImageWidth * m_ImageHeight * 3); - - for (int i = 0; i < m_ImageWidth * m_ImageHeight; i++) + m_pImage.resize(width * height * 3); + for (int i = 0; i < width * height; i++) { - m_pImage[i * 3 + 0] = (pData[i] & 0xFF0000) >> 16; - m_pImage[i * 3 + 1] = (pData[i] & 0x00FF00) >> 8; - m_pImage[i * 3 + 2] = (pData[i] & 0x0000FF) >> 0; + m_pImage[i * 3 + 0] = (buffer[i] & 0xFF0000) >> 16; + m_pImage[i * 3 + 1] = (buffer[i] & 0x00FF00) >> 8; + m_pImage[i * 3 + 2] = (buffer[i] & 0x0000FF) >> 0; } } |
