summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/release-notes.md1
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs8
2 files changed, 9 insertions, 0 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 69943248..2d6cbebf 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -10,6 +10,7 @@
* Fixed crash when a mod manifest is corrupted.
* Fixed error-handling when initialising paths.
* Fixed 'no update keys' warning not shown for mods with only invalid update keys.
+ * Fixed transparency issues on Linux/Mac for many mods.
* Updated compatibility list.
* For modders:
diff --git a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
index 7048dcf3..ed76a925 100644
--- a/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
+++ b/src/SMAPI/Framework/ContentManagers/ModContentManager.cs
@@ -171,6 +171,14 @@ namespace StardewModdingAPI.Framework.ContentManagers
/// <remarks>Based on <a href="https://gamedev.stackexchange.com/a/26037">code by David Gouveia</a>.</remarks>
private Texture2D PremultiplyTransparency(Texture2D texture)
{
+ // Textures loaded by Texture2D.FromStream are already premultiplied on Linux/Mac, even
+ // though the XNA documentation explicitly says otherwise. That's a glitch in MonoGame
+ // fixed in newer versions, but the game uses a bundled version that will always be
+ // affected. See https://github.com/MonoGame/MonoGame/issues/4820 for more info.
+ if (Constants.TargetPlatform != GamePlatform.Windows)
+ return texture;
+
+ // premultiply pixels
Color[] data = new Color[texture.Width * texture.Height];
texture.GetData(data);
for (int i = 0; i < data.Length; i++)