[Bf-blender-cvs] [15186f4259a] master: Shader Nodes: added alpha mode selector to Image Texture node

Ethan-Hall noreply at git.blender.org
Mon Mar 7 17:47:06 CET 2022


Commit: 15186f4259a2e0611a64a3aed8db8858e8ca081f
Author: Ethan-Hall
Date:   Mon Mar 7 17:36:27 2022 +0100
Branches: master
https://developer.blender.org/rB15186f4259a2e0611a64a3aed8db8858e8ca081f

Shader Nodes: added alpha mode selector to Image Texture node

Enables image user nodes to display the file alpha mode, similar to the
colorspace setting.

Also removes image_has_alpha in favor of using BKE_image_has_alpha, because it
did not check if the image actually had an alpha channel, just if the file format
was capable of supporting an alpha channel.

Differential Revision: https://developer.blender.org/D14153

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

M	source/blender/editors/space_image/image_buttons.c
M	source/blender/editors/space_node/drawnode.cc

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

diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 6f3d40abce1..0af32a717a4 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -718,22 +718,6 @@ static void rna_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
   RNA_property_update(C, &cb->ptr, cb->prop);
 }
 
-static bool image_has_alpha(Image *ima, ImageUser *iuser)
-{
-  ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL);
-  if (ibuf == NULL) {
-    return false;
-  }
-
-  int imtype = BKE_image_ftype_to_imtype(ibuf->ftype, &ibuf->foptions);
-  char valid_channels = BKE_imtype_valid_channels(imtype, false);
-  bool has_alpha = (valid_channels & IMA_CHAN_FLAG_ALPHA) != 0;
-
-  BKE_image_release_ibuf(ima, ibuf, NULL);
-
-  return has_alpha;
-}
-
 void uiTemplateImage(uiLayout *layout,
                      bContext *C,
                      PointerRNA *ptr,
@@ -943,7 +927,7 @@ void uiTemplateImage(uiLayout *layout,
 
     if (compact == 0) {
       if (ima->source != IMA_SRC_GENERATED) {
-        if (image_has_alpha(ima, iuser)) {
+        if (BKE_image_has_alpha(ima)) {
           uiLayout *sub = uiLayoutColumn(col, false);
           uiItemR(sub, &imaptr, "alpha_mode", 0, IFACE_("Alpha"), ICON_NONE);
 
diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc
index afb205f9f9e..fab2946ad76 100644
--- a/source/blender/editors/space_node/drawnode.cc
+++ b/source/blender/editors/space_node/drawnode.cc
@@ -304,9 +304,11 @@ static void node_buts_image_user(uiLayout *layout,
                                  const bool show_layer_selection,
                                  const bool show_color_management)
 {
-  if (!imaptr->data) {
+  Image *image = (Image *)imaptr->data;
+  if (!image) {
     return;
   }
+  ImageUser *iuser = (ImageUser *)iuserptr->data;
 
   uiLayout *col = uiLayoutColumn(layout, false);
 
@@ -318,8 +320,6 @@ static void node_buts_image_user(uiLayout *layout,
     /* don't use iuser->framenr directly
      * because it may not be updated if auto-refresh is off */
     Scene *scene = CTX_data_scene(C);
-    ImageUser *iuser = (ImageUser *)iuserptr->data;
-    /* Image *ima = imaptr->data; */ /* UNUSED */
 
     char numstr[32];
     const int framenr = BKE_image_user_frame_get(iuser, CFRA, nullptr);
@@ -343,11 +343,20 @@ static void node_buts_image_user(uiLayout *layout,
   }
 
   if (show_color_management) {
-    uiLayout *split = uiLayoutSplit(layout, 0.5f, true);
+    uiLayout *split = uiLayoutSplit(layout, 0.33f, true);
     PointerRNA colorspace_settings_ptr = RNA_pointer_get(imaptr, "colorspace_settings");
     uiItemL(split, IFACE_("Color Space"), ICON_NONE);
     uiItemR(split, &colorspace_settings_ptr, "name", DEFAULT_FLAGS, "", ICON_NONE);
 
+    if (image->source != IMA_SRC_GENERATED) {
+      split = uiLayoutSplit(layout, 0.33f, true);
+      uiItemL(split, IFACE_("Alpha"), ICON_NONE);
+      uiItemR(split, imaptr, "alpha_mode", DEFAULT_FLAGS, "", ICON_NONE);
+
+      bool is_data = IMB_colormanagement_space_name_is_data(image->colorspace_settings.name);
+      uiLayoutSetActive(split, !is_data);
+    }
+
     /* Avoid losing changes image is painted. */
     if (BKE_image_is_dirty((Image *)imaptr->data)) {
       uiLayoutSetEnabled(split, false);



More information about the Bf-blender-cvs mailing list