[Bf-blender-cvs] [72df7c23c4b] master: Particles: support Color Ramp node

Jacques Lucke noreply at git.blender.org
Thu Jul 16 16:09:36 CEST 2020


Commit: 72df7c23c4b5a7ac732cc224ded1fc93a0facb8c
Author: Jacques Lucke
Date:   Thu Jul 16 15:49:56 2020 +0200
Branches: master
https://developer.blender.org/rB72df7c23c4b5a7ac732cc224ded1fc93a0facb8c

Particles: support Color Ramp node

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

M	source/blender/nodes/CMakeLists.txt
R080	source/blender/nodes/shader/nodes/node_shader_valToRgb.c	source/blender/nodes/shader/nodes/node_shader_valToRgb.cc

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

diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index a4b10e955a3..ff512e1ddf7 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -215,7 +215,7 @@ set(SRC
   shader/nodes/node_shader_tex_white_noise.c
   shader/nodes/node_shader_uvAlongStroke.c
   shader/nodes/node_shader_uvmap.c
-  shader/nodes/node_shader_valToRgb.c
+  shader/nodes/node_shader_valToRgb.cc
   shader/nodes/node_shader_value.cc
   shader/nodes/node_shader_vectTransform.c
   shader/nodes/node_shader_vector_displacement.c
diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.cc
similarity index 80%
rename from source/blender/nodes/shader/nodes/node_shader_valToRgb.c
rename to source/blender/nodes/shader/nodes/node_shader_valToRgb.cc
index 20f280d00c3..76409c836d8 100644
--- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.cc
@@ -22,6 +22,11 @@
  */
 
 #include "IMB_colormanagement.h"
+
+#include "DNA_texture_types.h"
+
+#include "BLI_color.hh"
+
 #include "node_shader_util.h"
 
 /* **************** VALTORGB ******************** */
@@ -49,7 +54,7 @@ static void node_shader_exec_valtorgb(void *UNUSED(data),
     float fac;
     nodestack_get_vec(&fac, SOCK_FLOAT, in[0]);
 
-    BKE_colorband_evaluate(node->storage, fac, out[0]->vec);
+    BKE_colorband_evaluate((ColorBand *)node->storage, fac, out[0]->vec);
     out[1]->vec[0] = out[0]->vec[3];
   }
 }
@@ -65,7 +70,7 @@ static int gpu_shader_valtorgb(GPUMaterial *mat,
                                GPUNodeStack *in,
                                GPUNodeStack *out)
 {
-  struct ColorBand *coba = node->storage;
+  struct ColorBand *coba = (ColorBand *)node->storage;
   float *array, layer;
   int size;
 
@@ -121,6 +126,44 @@ static int gpu_shader_valtorgb(GPUMaterial *mat,
   }
 }
 
+class ColorBandFunction : public blender::fn::MultiFunction {
+ private:
+  const ColorBand &color_band_;
+
+ public:
+  ColorBandFunction(const ColorBand &color_band) : color_band_(color_band)
+  {
+    blender::fn::MFSignatureBuilder signature = this->get_builder("Color Band");
+    signature.single_input<float>("Value");
+    signature.single_output<blender::Color4f>("Color");
+    signature.single_output<float>("Alpha");
+  }
+
+  void call(blender::IndexMask mask,
+            blender::fn::MFParams params,
+            blender::fn::MFContext UNUSED(context)) const override
+  {
+    blender::fn::VSpan<float> values = params.readonly_single_input<float>(0, "Value");
+    blender::MutableSpan<blender::Color4f> colors =
+        params.uninitialized_single_output<blender::Color4f>(1, "Color");
+    blender::MutableSpan<float> alphas = params.uninitialized_single_output<float>(2, "Alpha");
+
+    for (uint i : mask) {
+      blender::Color4f color;
+      BKE_colorband_evaluate(&color_band_, values[i], color);
+      colors[i] = color;
+      alphas[i] = color.a;
+    }
+  }
+};
+
+static void sh_node_valtorgb_expand_in_mf_network(blender::bke::NodeMFNetworkBuilder &builder)
+{
+  bNode &bnode = builder.bnode();
+  const ColorBand *color_band = (const ColorBand *)bnode.storage;
+  builder.construct_and_set_matching_fn<ColorBandFunction>(*color_band);
+}
+
 void register_node_type_sh_valtorgb(void)
 {
   static bNodeType ntype;
@@ -132,6 +175,7 @@ void register_node_type_sh_valtorgb(void)
   node_type_storage(&ntype, "ColorBand", node_free_standard_storage, node_copy_standard_storage);
   node_type_exec(&ntype, NULL, NULL, node_shader_exec_valtorgb);
   node_type_gpu(&ntype, gpu_shader_valtorgb);
+  ntype.expand_in_mf_network = sh_node_valtorgb_expand_in_mf_network;
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list