[OTR] Initial support for PNG textures (#1634)

This commit is contained in:
Garrett Cox 2022-10-01 15:33:29 -05:00 committed by GitHub
commit ec88b90ed8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 59 additions and 327 deletions

View file

@ -119,6 +119,26 @@ void Globals::AddExternalFile(ZFile* file, int workerID)
workerData[workerID]->externalFiles.push_back(file);
}
void Globals::BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const fs::path& outPath)
{
std::string name = outPath.stem().string();
ZTexture tex(nullptr);
if (name.find("u32") != std::string::npos)
tex.dWordAligned = false;
tex.FromPNG(pngFilePath.string(), texType);
std::string cfgPath = StringHelper::Split(pngFilePath.string(), ".")[0] + ".cfg";
if (File::Exists(cfgPath))
name = File::ReadAllText(cfgPath);
std::string src = tex.GetBodySourceCode();
File::WriteAllText(outPath.string(), src);
}
std::map<std::string, ExporterSet*>& Globals::GetExporterMap()
{
static std::map<std::string, ExporterSet*> exporters;

View file

@ -64,6 +64,7 @@ public:
bool forceStatic = false;
bool forceUnaccountedStatic = false;
bool otrMode = true;
bool buildRawTexture = false;
ZRom* rom;
std::vector<ZFile*> files;
@ -85,6 +86,7 @@ public:
std::map<int32_t, std::vector<ZFile*>> GetSegmentRefFiles(int workerID);
void AddFile(ZFile* file, int workerID);
void AddExternalFile(ZFile* file, int workerID);
void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const fs::path& outPath);
ZResourceExporter* GetExporter(ZResourceType resType);
ExporterSet* GetExporterSet();

View file

@ -147,7 +147,7 @@ void ImageBackend::ReadPng(const char* filename)
void ImageBackend::ReadPng(const fs::path& filename)
{
ReadPng(filename.c_str());
ReadPng(filename.string().c_str());
}
void ImageBackend::WritePng(const char* filename)

View file

@ -256,6 +256,10 @@ int main(int argc, char* argv[])
{
Globals::Instance->forceUnaccountedStatic = true;
}
else if (arg == "-brt" || arg == "--build-raw-texture")
{
Globals::Instance->buildRawTexture = true;
}
}
// Parse File Mode
@ -590,22 +594,7 @@ bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path
void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const fs::path& outPath)
{
std::string name = outPath.stem().string();
ZTexture tex(nullptr);
if (name.find("u32") != std::string::npos)
tex.dWordAligned = false;
tex.FromPNG(pngFilePath.string(), texType);
std::string cfgPath = StringHelper::Split(pngFilePath.string(), ".")[0] + ".cfg";
if (File::Exists(cfgPath))
name = File::ReadAllText(cfgPath);
std::string src = tex.GetBodySourceCode();
File::WriteAllText(outPath.string(), src);
return Globals::Instance->BuildAssetTexture(pngFilePath, texType, outPath);
}
void BuildAssetBackground(const fs::path& imageFilePath, const fs::path& outPath)

View file

@ -830,6 +830,8 @@ std::string ZTexture::GetBodySourceCode() const
// Please don't remove this line, unless you somehow made a way to prevent
// that warning when building the OoT repo.
sourceOutput += "\n";
} else if (Globals::Instance->buildRawTexture) {
sourceOutput += std::string(textureDataRaw.begin(), textureDataRaw.end());
}
return sourceOutput;