diff --git a/Source/Core/Core/Config/GraphicsSettings.cpp b/Source/Core/Core/Config/GraphicsSettings.cpp index 9a9bf41485..ff621b48c2 100644 --- a/Source/Core/Core/Config/GraphicsSettings.cpp +++ b/Source/Core/Core/Config/GraphicsSettings.cpp @@ -44,6 +44,8 @@ const Info GFX_OVERLAY_SCISSOR_STATS{{System::GFX, "Settings", "OverlaySci const Info GFX_DUMP_TEXTURES{{System::GFX, "Settings", "DumpTextures"}, false}; const Info GFX_DUMP_MIP_TEXTURES{{System::GFX, "Settings", "DumpMipTextures"}, true}; const Info GFX_DUMP_BASE_TEXTURES{{System::GFX, "Settings", "DumpBaseTextures"}, true}; +const Info GFX_TEXTURE_PNG_COMPRESSION_LEVEL{ + {System::GFX, "Settings", "TexturePNGCompressionLevel"}, 6}; const Info GFX_HIRES_TEXTURES{{System::GFX, "Settings", "HiresTextures"}, false}; const Info GFX_CACHE_HIRES_TEXTURES{{System::GFX, "Settings", "CacheHiresTextures"}, false}; const Info GFX_DUMP_EFB_TARGET{{System::GFX, "Settings", "DumpEFBTarget"}, false}; diff --git a/Source/Core/Core/Config/GraphicsSettings.h b/Source/Core/Core/Config/GraphicsSettings.h index c1f301a4a9..ce10005da9 100644 --- a/Source/Core/Core/Config/GraphicsSettings.h +++ b/Source/Core/Core/Config/GraphicsSettings.h @@ -46,6 +46,7 @@ extern const Info GFX_OVERLAY_SCISSOR_STATS; extern const Info GFX_DUMP_TEXTURES; extern const Info GFX_DUMP_MIP_TEXTURES; extern const Info GFX_DUMP_BASE_TEXTURES; +extern const Info GFX_TEXTURE_PNG_COMPRESSION_LEVEL; extern const Info GFX_HIRES_TEXTURES; extern const Info GFX_CACHE_HIRES_TEXTURES; extern const Info GFX_DUMP_EFB_TARGET; diff --git a/Source/Core/VideoCommon/AbstractTexture.cpp b/Source/Core/VideoCommon/AbstractTexture.cpp index 03b83b21cc..aa0968c3f8 100644 --- a/Source/Core/VideoCommon/AbstractTexture.cpp +++ b/Source/Core/VideoCommon/AbstractTexture.cpp @@ -19,7 +19,7 @@ void AbstractTexture::FinishedRendering() { } -bool AbstractTexture::Save(const std::string& filename, unsigned int level) +bool AbstractTexture::Save(const std::string& filename, unsigned int level, int compression) { // We can't dump compressed textures currently (it would mean drawing them to a RGBA8 // framebuffer, and saving that). TextureCache does not call Save for custom textures @@ -51,7 +51,7 @@ bool AbstractTexture::Save(const std::string& filename, unsigned int level) return Common::SavePNG(filename, reinterpret_cast(readback_texture->GetMappedPointer()), Common::ImageByteFormat::RGBA, level_width, level_height, - static_cast(readback_texture->GetMappedStride())); + static_cast(readback_texture->GetMappedStride()), compression); } bool AbstractTexture::IsCompressedFormat(AbstractTextureFormat format) diff --git a/Source/Core/VideoCommon/AbstractTexture.h b/Source/Core/VideoCommon/AbstractTexture.h index 0955fef037..3ebf1465fc 100644 --- a/Source/Core/VideoCommon/AbstractTexture.h +++ b/Source/Core/VideoCommon/AbstractTexture.h @@ -38,7 +38,7 @@ public: MathUtil::Rectangle GetRect() const { return m_config.GetRect(); } MathUtil::Rectangle GetMipRect(u32 level) const { return m_config.GetMipRect(level); } bool IsMultisampled() const { return m_config.IsMultisampled(); } - bool Save(const std::string& filename, unsigned int level); + bool Save(const std::string& filename, unsigned int level, int compression = 6); static bool IsCompressedFormat(AbstractTextureFormat format); static bool IsDepthFormat(AbstractTextureFormat format); diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index bcffe8e4ca..57808f9de6 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -1023,7 +1023,7 @@ void TextureCacheBase::DumpTexture(RcTcacheEntry& entry, std::string basename, u if (File::Exists(filename)) return; - entry->texture->Save(filename, level); + entry->texture->Save(filename, level, Config::Get(Config::GFX_TEXTURE_PNG_COMPRESSION_LEVEL)); } // Helper for checking if a BPMemory TexMode0 register is set to Point