HD Packs: Optimized some bottlenecks when parsing definition file

This commit is contained in:
Sour 2018-03-07 21:56:10 -05:00
parent 8b31493fda
commit 64ae52322a
3 changed files with 17 additions and 11 deletions

View file

@ -349,12 +349,11 @@ void HdPackLoader::ProcessTileTag(vector<string> &tokens, vector<HdPackCondition
HdPackBitmapInfo &bitmapInfo = _hdNesBitmaps[tileInfo->BitmapIndex]; HdPackBitmapInfo &bitmapInfo = _hdNesBitmaps[tileInfo->BitmapIndex];
uint32_t bitmapOffset = tileInfo->Y * bitmapInfo.Width + tileInfo->X; uint32_t bitmapOffset = tileInfo->Y * bitmapInfo.Width + tileInfo->X;
uint32_t* pngData = (uint32_t*)bitmapInfo.PixelData.data(); uint32_t* pngData = (uint32_t*)bitmapInfo.PixelData.data();
tileInfo->HdTileData.resize(64 * _data->Scale * _data->Scale);
for(uint32_t y = 0; y < 8 * _data->Scale; y++) { for(uint32_t y = 0; y < 8 * _data->Scale; y++) {
for(uint32_t x = 0; x < 8 * _data->Scale; x++) { memcpy(tileInfo->HdTileData.data() + (y * 8 * _data->Scale), pngData + bitmapOffset, 8 * _data->Scale * sizeof(uint32_t));
tileInfo->HdTileData.push_back(pngData[bitmapOffset]); bitmapOffset += bitmapInfo.Width;
bitmapOffset++;
}
bitmapOffset += bitmapInfo.Width - 8 * _data->Scale;
} }
tileInfo->UpdateFlags(); tileInfo->UpdateFlags();

View file

@ -191,7 +191,12 @@ string FolderUtilities::GetFolderName(string filepath)
string FolderUtilities::CombinePath(string folder, string filename) string FolderUtilities::CombinePath(string folder, string filename)
{ {
return (fs::u8path(folder) / fs::u8path(filename)).u8string(); //Windows supports forward slashes for paths, too. And fs::u8path is abnormally slow.
if(folder[folder.length() - 1] != '/') {
return folder + "/" + filename;
} else {
return folder + filename;
}
} }
int64_t FolderUtilities::GetFileModificationTime(string filepath) int64_t FolderUtilities::GetFileModificationTime(string filepath)

View file

@ -7,12 +7,14 @@ public:
static vector<string> Split(string input, char delimiter) static vector<string> Split(string input, char delimiter)
{ {
vector<string> result; vector<string> result;
size_t index; size_t index = 0;
while((index = input.find(delimiter)) != string::npos) { size_t lastIndex = 0;
result.push_back(input.substr(0, index)); while((index = input.find(delimiter, index)) != string::npos) {
input = input.substr(index + 1, input.size() - index - 1); result.push_back(input.substr(lastIndex, index - lastIndex));
index++;
lastIndex = index;
} }
result.push_back(input); result.push_back(input.substr(lastIndex));
return result; return result;
} }
}; };