123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Copyright 2023 Dolphin Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #include "VideoCommon/TextureUtils.h"
- #include <fmt/format.h>
- #include "Common/FileSearch.h"
- #include "Common/FileUtil.h"
- #include "Common/Logging/Log.h"
- #include "Core/Config/GraphicsSettings.h"
- #include "Core/ConfigManager.h"
- #include "VideoCommon/AbstractTexture.h"
- namespace
- {
- std::string BuildDumpTextureFilename(std::string basename, u32 level, bool is_arbitrary)
- {
- if (is_arbitrary)
- basename += "_arb";
- if (level > 0)
- basename += fmt::format("_mip{}", level);
- return basename;
- }
- } // namespace
- namespace VideoCommon::TextureUtils
- {
- void DumpTexture(const ::AbstractTexture& texture, std::string basename, u32 level,
- bool is_arbitrary)
- {
- const std::string dump_dir =
- File::GetUserPath(D_DUMPTEXTURES_IDX) + SConfig::GetInstance().GetGameID();
- if (!File::IsDirectory(dump_dir))
- File::CreateDir(dump_dir);
- const std::string name = BuildDumpTextureFilename(std::move(basename), level, is_arbitrary);
- const std::string filename = fmt::format("{}/{}.png", dump_dir, name);
- if (File::Exists(filename))
- return;
- texture.Save(filename, level, Config::Get(Config::GFX_TEXTURE_PNG_COMPRESSION_LEVEL));
- }
- void TextureDumper::DumpTexture(const ::AbstractTexture& texture, std::string basename, u32 level,
- bool is_arbitrary)
- {
- const std::string dump_dir =
- File::GetUserPath(D_DUMPTEXTURES_IDX) + SConfig::GetInstance().GetGameID();
- if (m_dumped_textures.empty())
- {
- if (!File::IsDirectory(dump_dir))
- File::CreateDir(dump_dir);
- for (auto& filename : Common::DoFileSearch({dump_dir}, {".png"}, true))
- {
- std::string name;
- SplitPath(filename, nullptr, &name, nullptr);
- m_dumped_textures.insert(name);
- }
- NOTICE_LOG_FMT(VIDEO, "Found {} dumped textures that will not be re-dumped.",
- m_dumped_textures.size());
- }
- const std::string name = BuildDumpTextureFilename(std::move(basename), level, is_arbitrary);
- const bool file_existed = !m_dumped_textures.insert(name).second;
- if (file_existed)
- return;
- texture.Save(fmt::format("{}/{}.png", dump_dir, name), level,
- Config::Get(Config::GFX_TEXTURE_PNG_COMPRESSION_LEVEL));
- }
- } // namespace VideoCommon::TextureUtils
|