[Bf-blender-cvs] [3a65ea3b2d6] blender-v2.81-release: Fix: Forward compatibility issue in shader nodes

Charlie Jolly noreply at git.blender.org
Wed Nov 6 16:07:42 CET 2019


Commit: 3a65ea3b2d62235fdabf9eeeade675e2b1e338aa
Author: Charlie Jolly
Date:   Wed Nov 6 14:19:58 2019 +0000
Branches: blender-v2.81-release
https://developer.blender.org/rB3a65ea3b2d62235fdabf9eeeade675e2b1e338aa

Fix: Forward compatibility issue in shader nodes

Raised in https://developer.blender.org/rBe5618725fd1e

Reviewed By: brecht

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

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

M	source/blender/nodes/intern/node_util.c
M	source/blender/nodes/shader/nodes/node_shader_mapping.c
M	source/blender/nodes/shader/nodes/node_shader_math.c
M	source/blender/nodes/shader/nodes/node_shader_mixRgb.c
M	source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
M	source/blender/nodes/shader/nodes/node_shader_vector_math.c

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

diff --git a/source/blender/nodes/intern/node_util.c b/source/blender/nodes/intern/node_util.c
index 455da4b3881..b16c814ade9 100644
--- a/source/blender/nodes/intern/node_util.c
+++ b/source/blender/nodes/intern/node_util.c
@@ -82,7 +82,10 @@ void *node_initexec_curves(bNodeExecContext *UNUSED(context),
 void node_blend_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 {
   const char *name;
-  RNA_enum_name(rna_enum_ramp_blend_items, node->custom1, &name);
+  bool enum_label = RNA_enum_name(rna_enum_ramp_blend_items, node->custom1, &name);
+  if (!enum_label) {
+    name = "Unknown";
+  }
   BLI_strncpy(label, IFACE_(name), maxlen);
 }
 
@@ -96,21 +99,30 @@ void node_image_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int ma
 void node_math_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 {
   const char *name;
-  RNA_enum_name(rna_enum_node_math_items, node->custom1, &name);
+  bool enum_label = RNA_enum_name(rna_enum_node_math_items, node->custom1, &name);
+  if (!enum_label) {
+    name = "Unknown";
+  }
   BLI_strncpy(label, IFACE_(name), maxlen);
 }
 
 void node_vector_math_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 {
   const char *name;
-  RNA_enum_name(rna_enum_node_vec_math_items, node->custom1, &name);
+  bool enum_label = RNA_enum_name(rna_enum_node_vec_math_items, node->custom1, &name);
+  if (!enum_label) {
+    name = "Unknown";
+  }
   BLI_strncpy(label, IFACE_(name), maxlen);
 }
 
 void node_filter_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 {
   const char *name;
-  RNA_enum_name(rna_enum_node_filter_items, node->custom1, &name);
+  bool enum_label = RNA_enum_name(rna_enum_node_filter_items, node->custom1, &name);
+  if (!enum_label) {
+    name = "Unknown";
+  }
   BLI_strncpy(label, IFACE_(name), maxlen);
 }
 
diff --git a/source/blender/nodes/shader/nodes/node_shader_mapping.c b/source/blender/nodes/shader/nodes/node_shader_mapping.c
index d607fcdc7a1..7905cabab9f 100644
--- a/source/blender/nodes/shader/nodes/node_shader_mapping.c
+++ b/source/blender/nodes/shader/nodes/node_shader_mapping.c
@@ -50,7 +50,12 @@ static int gpu_shader_mapping(GPUMaterial *mat,
       [NODE_MAPPING_TYPE_NORMAL] = "mapping_normal",
   };
 
-  return GPU_stack_link(mat, node, names[node->custom1], in, out);
+  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
+    return GPU_stack_link(mat, node, names[node->custom1], in, out);
+  }
+  else {
+    return 0;
+  }
 }
 
 static void node_shader_update_mapping(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
index aaedc4aa1b7..db623c5599b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_math.c
@@ -68,14 +68,19 @@ static int gpu_shader_math(GPUMaterial *mat,
       [NODE_MATH_ARCTAN2] = "math_arctan2",
   };
 
-  GPU_stack_link(mat, node, names[node->custom1], in, out);
+  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
+    int ret = GPU_stack_link(mat, node, names[node->custom1], in, out);
 
-  if (node->custom2 & SHD_MATH_CLAMP) {
-    float min[3] = {0.0f, 0.0f, 0.0f};
-    float max[3] = {1.0f, 1.0f, 1.0f};
-    GPU_link(mat, "clamp_value", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
+    if (ret && node->custom2 & SHD_MATH_CLAMP) {
+      float min[3] = {0.0f, 0.0f, 0.0f};
+      float max[3] = {1.0f, 1.0f, 1.0f};
+      GPU_link(mat, "clamp_value", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
+    }
+    return ret;
+  }
+  else {
+    return 0;
   }
-  return 1;
 }
 
 static void node_shader_update_math(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_mixRgb.c b/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
index ae2184d8237..74936fedbd2 100644
--- a/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
@@ -88,13 +88,18 @@ static int gpu_shader_mix_rgb(GPUMaterial *mat,
       "mix_linear",
   };
 
-  int ret = GPU_stack_link(mat, node, names[node->custom1], in, out);
-  if (ret && node->custom2 & SHD_MIXRGB_CLAMP) {
-    float min[3] = {0.0f, 0.0f, 0.0f};
-    float max[3] = {1.0f, 1.0f, 1.0f};
-    GPU_link(mat, "clamp_color", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
+  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
+    int ret = GPU_stack_link(mat, node, names[node->custom1], in, out);
+    if (ret && node->custom2 & SHD_MIXRGB_CLAMP) {
+      float min[3] = {0.0f, 0.0f, 0.0f};
+      float max[3] = {1.0f, 1.0f, 1.0f};
+      GPU_link(mat, "clamp_color", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
+    }
+    return ret;
+  }
+  else {
+    return 0;
   }
-  return ret;
 }
 
 void register_node_type_sh_mix_rgb(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c b/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
index c0f9a033476..ec4fedec27c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
@@ -50,7 +50,12 @@ static int gpu_shader_tex_white_noise(GPUMaterial *mat,
       "node_white_noise_4d",
   };
 
-  return GPU_stack_link(mat, node, names[node->custom1], in, out);
+  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
+    return GPU_stack_link(mat, node, names[node->custom1], in, out);
+  }
+  else {
+    return 0;
+  }
 }
 
 static void node_shader_update_tex_white_noise(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_math.c b/source/blender/nodes/shader/nodes/node_shader_vector_math.c
index 03de83655b5..ba53cfd1799 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vector_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vector_math.c
@@ -65,8 +65,12 @@ static int gpu_shader_vector_math(GPUMaterial *mat,
       [NODE_VECTOR_MATH_MAXIMUM] = "vector_math_maximum",
   };
 
-  GPU_stack_link(mat, node, names[node->custom1], in, out);
-  return true;
+  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
+    return GPU_stack_link(mat, node, names[node->custom1], in, out);
+  }
+  else {
+    return 0;
+  }
 }
 
 static void node_shader_update_vector_math(bNodeTree *UNUSED(ntree), bNode *node)



More information about the Bf-blender-cvs mailing list