[Bf-blender-cvs] [b04de6d180e] master: Merge branch 'blender-v3.2-release'

Hans Goudey noreply at git.blender.org
Thu May 12 12:00:12 CEST 2022


Commit: b04de6d180e03ba334a1a22dad46289cfc930152
Author: Hans Goudey
Date:   Thu May 12 12:00:06 2022 +0200
Branches: master
https://developer.blender.org/rBb04de6d180e03ba334a1a22dad46289cfc930152

Merge branch 'blender-v3.2-release'

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



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

diff --cc source/blender/editors/sculpt_paint/paint_image_proj.c
index 02e992029ff,e442cd53639..2fd8bc1ba3f
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@@ -95,8 -82,9 +95,10 @@@
  #include "RNA_access.h"
  #include "RNA_define.h"
  #include "RNA_enum_types.h"
 +#include "RNA_types.h"
  
+ #include "NOD_shader.h"
+ 
  #include "IMB_colormanagement.h"
  
  //#include "bmesh_tools.h"
@@@ -6473,87 -6472,65 +6486,97 @@@ static Image *proj_paint_image_create(w
    return ima;
  }
  
 +static CustomDataLayer *proj_paint_color_attribute_create(wmOperator *op, Object *ob)
 +{
 +  char name[MAX_NAME] = "";
 +  float color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
 +  AttributeDomain domain = ATTR_DOMAIN_POINT;
 +  CustomDataType type = CD_PROP_COLOR;
 +
 +  if (op) {
 +    RNA_string_get(op->ptr, "name", name);
 +    RNA_float_get_array(op->ptr, "color", color);
 +    domain = (AttributeDomain)RNA_enum_get(op->ptr, "domain");
 +    type = (CustomDataType)RNA_enum_get(op->ptr, "data_type");
 +  }
 +
 +  ID *id = (ID *)ob->data;
 +  CustomDataLayer *layer = BKE_id_attribute_new(id, name, type, domain, op->reports);
 +
 +  if (!layer) {
 +    return NULL;
 +  }
 +
 +  BKE_id_attributes_active_color_set(id, layer);
 +
 +  if (!BKE_id_attributes_render_color_get(id)) {
 +    BKE_id_attributes_render_color_set(id, layer);
 +  }
 +
 +  BKE_object_attributes_active_color_fill(ob, color, false);
 +
 +  return layer;
 +}
 +
- static void proj_paint_default_color(wmOperator *op, int type, Material *ma)
+ /**
+  * Get a default color for the paint slot layer from a material's Principled BSDF.
+  *
+  * \param layer_type: The layer type of the paint slot
+  * \param ma: The material to attempt using as the default color source.
+  *            If this fails or \p ma is null, a default Principled BSDF is used instead.
+  */
+ static void default_paint_slot_color_get(int layer_type, Material *ma, float color[4])
  {
-   if (RNA_struct_property_is_set(op->ptr, "color")) {
-     return;
-   }
- 
-   bNode *in_node = ntreeFindType(ma->nodetree, SH_NODE_BSDF_PRINCIPLED);
-   if (in_node == NULL) {
-     return;
-   }
- 
-   float color[4];
- 
-   if (type >= LAYER_BASE_COLOR && type < LAYER_NORMAL) {
-     /* Copy color from node, so result is unchanged after assigning textures. */
-     bNodeSocket *in_sock = nodeFindSocket(in_node, SOCK_IN, layer_type_items[type].name);
- 
-     switch (in_sock->type) {
-       case SOCK_FLOAT: {
-         bNodeSocketValueFloat *socket_data = in_sock->default_value;
-         copy_v3_fl(color, socket_data->value);
-         color[3] = 1.0f;
-         break;
+   switch (layer_type) {
+     case LAYER_BASE_COLOR:
+     case LAYER_SPECULAR:
+     case LAYER_ROUGHNESS:
+     case LAYER_METALLIC: {
+       bNodeTree *ntree = NULL;
+       bNode *in_node = ma ? ntreeFindType(ma->nodetree, SH_NODE_BSDF_PRINCIPLED) : NULL;
+       if (!in_node) {
+         /* An existing material or Principled BSDF node could not be found.
+          * Copy default color values from a default Principled BSDF instead. */
+         ntree = ntreeAddTree(NULL, "Temporary Shader Nodetree", ntreeType_Shader->idname);
+         in_node = nodeAddStaticNode(NULL, ntree, SH_NODE_BSDF_PRINCIPLED);
        }
-       case SOCK_VECTOR:
-       case SOCK_RGBA: {
-         bNodeSocketValueRGBA *socket_data = in_sock->default_value;
-         copy_v3_v3(color, socket_data->value);
-         color[3] = 1.0f;
-         break;
+       bNodeSocket *in_sock = nodeFindSocket(in_node, SOCK_IN, layer_type_items[layer_type].name);
+       switch (in_sock->type) {
+         case SOCK_FLOAT: {
+           bNodeSocketValueFloat *socket_data = in_sock->default_value;
+           copy_v3_fl(color, socket_data->value);
+           color[3] = 1.0f;
+           break;
+         }
+         case SOCK_VECTOR:
+         case SOCK_RGBA: {
+           bNodeSocketValueRGBA *socket_data = in_sock->default_value;
+           copy_v3_v3(color, socket_data->value);
+           color[3] = 1.0f;
+           break;
+         }
+         default:
+           BLI_assert_unreachable();
+           rgba_float_args_set(color, 0.0f, 0.0f, 0.0f, 1.0f);
+           break;
        }
-       default: {
-         return;
+       /* Cleanup */
+       if (ntree) {
+         ntreeFreeTree(ntree);
+         MEM_freeN(ntree);
        }
+       return;
      }
+     case LAYER_NORMAL:
+       /* Neutral tangent space normal map. */
+       rgba_float_args_set(color, 0.5f, 0.5f, 1.0f, 1.0f);
+       break;
+     case LAYER_BUMP:
+     case LAYER_DISPLACEMENT:
+       /* Neutral displacement and bump map. */
+       rgba_float_args_set(color, 0.5f, 0.5f, 0.5f, 1.0f);
+       break;
    }
-   else if (type == LAYER_NORMAL) {
-     /* Neutral tangent space normal map. */
-     rgba_float_args_set(color, 0.5f, 0.5f, 1.0f, 1.0f);
-   }
-   else if (ELEM(type, LAYER_BUMP, LAYER_DISPLACEMENT)) {
-     /* Neutral displacement and bump map. */
-     rgba_float_args_set(color, 0.5f, 0.5f, 0.5f, 1.0f);
-   }
-   else {
-     return;
-   }
- 
-   RNA_float_set_array(op->ptr, "color", color);
  }
  
  static bool proj_paint_add_slot(bContext *C, wmOperator *op)



More information about the Bf-blender-cvs mailing list