[Bf-blender-cvs] [0a35afbf86c] master: Fix T99565: Cycles reading TGA files with alpha different than Blender

Brecht Van Lommel noreply at git.blender.org
Mon Oct 17 14:44:40 CEST 2022


Commit: 0a35afbf86c86963ebb638f0804a706d17df5b50
Author: Brecht Van Lommel
Date:   Mon Oct 17 14:20:42 2022 +0200
Branches: master
https://developer.blender.org/rB0a35afbf86c86963ebb638f0804a706d17df5b50

Fix T99565: Cycles reading TGA files with alpha different than Blender

Thanks to Lukas for tracking down the cause in OIIO.

===================================================================

M	intern/cycles/scene/image_oiio.cpp

===================================================================

diff --git a/intern/cycles/scene/image_oiio.cpp b/intern/cycles/scene/image_oiio.cpp
index 8792393e5a1..d59359970c6 100644
--- a/intern/cycles/scene/image_oiio.cpp
+++ b/intern/cycles/scene/image_oiio.cpp
@@ -192,8 +192,17 @@ bool OIIOImageLoader::load_pixels(const ImageMetaData &metadata,
     return false;
   }
 
-  const bool do_associate_alpha = associate_alpha &&
-                                  spec.get_int_attribute("oiio:UnassociatedAlpha", 0);
+  bool do_associate_alpha = false;
+  if (associate_alpha) {
+    do_associate_alpha = spec.get_int_attribute("oiio:UnassociatedAlpha", 0);
+
+    /* Workaround OIIO not detecting TGA file alpha the same as Blender (since #3019).
+     * We want anything not marked as premultiplied alpha to get associated. */
+    if (!do_associate_alpha && spec.alpha_channel != -1 &&
+        strcmp(in->format_name(), "targa") == 0) {
+      do_associate_alpha = spec.get_int_attribute("targa:alpha_type", -1) != 4;
+    }
+  }
 
   switch (metadata.type) {
     case IMAGE_DATA_TYPE_BYTE:



More information about the Bf-blender-cvs mailing list