Merge pull request #11370 from unknownbrackets/tex-replace

Replacement: Cut down on parsing for large inis
This commit is contained in:
Henrik Rydgård 2018-09-09 10:50:05 +02:00 committed by GitHub
commit 47cccc0ff0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -112,29 +112,24 @@ bool TextureReplacer::LoadIni() {
ERROR_LOG(G3D, "Unsupported texture replacement version %d, trying anyway", version);
}
std::vector<std::string> hashNames;
if (ini.GetKeys("hashes", hashNames)) {
auto hashes = ini.GetOrCreateSection("hashes");
if (ini.HasSection("hashes")) {
auto hashes = ini.GetOrCreateSection("hashes")->ToMap();
// Format: hashname = filename.png
for (std::string hashName : hashNames) {
for (const auto &item : hashes) {
ReplacementAliasKey key(0, 0, 0);
if (sscanf(hashName.c_str(), "%16llx%8x_%d", &key.cachekey, &key.hash, &key.level) >= 1) {
hashes->Get(hashName.c_str(), &aliases_[key], "");
if (sscanf(item.first.c_str(), "%16llx%8x_%d", &key.cachekey, &key.hash, &key.level) >= 1) {
aliases_[key] = item.second;
} else {
ERROR_LOG(G3D, "Unsupported syntax under [hashes]: %s", hashName.c_str());
ERROR_LOG(G3D, "Unsupported syntax under [hashes]: %s", item.first.c_str());
}
}
}
std::vector<std::string> hashrangeKeys;
if (ini.GetKeys("hashranges", hashrangeKeys)) {
auto hashranges = ini.GetOrCreateSection("hashranges");
if (ini.HasSection("hashranges")) {
auto hashranges = ini.GetOrCreateSection("hashranges")->ToMap();
// Format: addr,w,h = newW,newH
for (const std::string &key : hashrangeKeys) {
std::string value;
if (hashranges->Get(key.c_str(), &value, "")) {
ParseHashRange(key, value);
}
for (const auto &item : hashranges) {
ParseHashRange(item.first, item.second);
}
}
}