[Bf-blender-cvs] [00955cd31ed] master: Revert "Blenlib: Explicit Colors."

Jeroen Bakker noreply at git.blender.org
Tue May 25 17:04:14 CEST 2021


Commit: 00955cd31eda95aca619842064d22663af4c812b
Author: Jeroen Bakker
Date:   Tue May 25 17:03:54 2021 +0200
Branches: master
https://developer.blender.org/rB00955cd31eda95aca619842064d22663af4c812b

Revert "Blenlib: Explicit Colors."

This reverts commit fd94e033446c72fb92048a9864c1d539fccde59a.
does not compile against latest master.

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

M	source/blender/blenkernel/BKE_attribute_math.hh
M	source/blender/blenkernel/intern/attribute_access.cc
M	source/blender/blenkernel/intern/attribute_math.cc
M	source/blender/blenkernel/intern/geometry_component_mesh.cc
M	source/blender/blenlib/BLI_color.hh
M	source/blender/blenlib/CMakeLists.txt
D	source/blender/blenlib/intern/BLI_color.cc
D	source/blender/blenlib/tests/BLI_color_test.cc
M	source/blender/draw/intern/draw_cache_impl.h
M	source/blender/editors/space_spreadsheet/spreadsheet_cell_value.hh
M	source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
M	source/blender/editors/space_spreadsheet/spreadsheet_layout.cc
M	source/blender/functions/intern/cpp_types.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_clamp.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_color_ramp.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_compare.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_curve_map.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_mix.cc
M	source/blender/nodes/geometry/nodes/node_geo_attribute_sample_texture.cc
M	source/blender/nodes/geometry/nodes/node_geo_switch.cc
M	source/blender/nodes/intern/node_geometry_exec.cc
M	source/blender/nodes/intern/node_socket.cc
M	source/blender/nodes/intern/type_conversions.cc
M	source/blender/nodes/shader/nodes/node_shader_sepcombRGB.cc
M	source/blender/nodes/shader/nodes/node_shader_valToRgb.cc

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

diff --git a/source/blender/blenkernel/BKE_attribute_math.hh b/source/blender/blenkernel/BKE_attribute_math.hh
index ba683362e69..0afdc436415 100644
--- a/source/blender/blenkernel/BKE_attribute_math.hh
+++ b/source/blender/blenkernel/BKE_attribute_math.hh
@@ -52,7 +52,7 @@ inline void convert_to_static_type(const CustomDataType data_type, const Func &f
       func(bool());
       break;
     case CD_PROP_COLOR:
-      func(ColorGeometry4f());
+      func(Color4f());
       break;
     default:
       BLI_assert_unreachable();
@@ -78,8 +78,8 @@ inline void convert_to_static_type(const fn::CPPType &cpp_type, const Func &func
   else if (cpp_type.is<bool>()) {
     func(bool());
   }
-  else if (cpp_type.is<ColorGeometry4f>()) {
-    func(ColorGeometry4f());
+  else if (cpp_type.is<Color4f>()) {
+    func(Color4f());
   }
   else {
     BLI_assert_unreachable();
@@ -123,12 +123,9 @@ inline float3 mix3(const float3 &weights, const float3 &v0, const float3 &v1, co
 }
 
 template<>
-inline ColorGeometry4f mix3(const float3 &weights,
-                            const ColorGeometry4f &v0,
-                            const ColorGeometry4f &v1,
-                            const ColorGeometry4f &v2)
+inline Color4f mix3(const float3 &weights, const Color4f &v0, const Color4f &v1, const Color4f &v2)
 {
-  ColorGeometry4f result;
+  Color4f result;
   interp_v4_v4v4v4(result, v0, v1, v2, weights);
   return result;
 }
@@ -168,10 +165,9 @@ template<> inline float3 mix2(const float factor, const float3 &a, const float3
   return float3::interpolate(a, b, factor);
 }
 
-template<>
-inline ColorGeometry4f mix2(const float factor, const ColorGeometry4f &a, const ColorGeometry4f &b)
+template<> inline Color4f mix2(const float factor, const Color4f &a, const Color4f &b)
 {
-  ColorGeometry4f result;
+  Color4f result;
   interp_v4_v4v4(result, a, b, factor);
   return result;
 }
@@ -278,16 +274,15 @@ class SimpleMixerWithAccumulationType {
   }
 };
 
-class ColorGeometryMixer {
+class Color4fMixer {
  private:
-  MutableSpan<ColorGeometry4f> buffer_;
-  ColorGeometry4f default_color_;
+  MutableSpan<Color4f> buffer_;
+  Color4f default_color_;
   Array<float> total_weights_;
 
  public:
-  ColorGeometryMixer(MutableSpan<ColorGeometry4f> buffer,
-                     ColorGeometry4f default_color = ColorGeometry4f(0.0f, 0.0f, 0.0f, 1.0f));
-  void mix_in(const int64_t index, const ColorGeometry4f &color, const float weight = 1.0f);
+  Color4fMixer(MutableSpan<Color4f> buffer, Color4f default_color = {0, 0, 0, 1});
+  void mix_in(const int64_t index, const Color4f &color, const float weight = 1.0f);
   void finalize();
 };
 
@@ -304,10 +299,10 @@ template<> struct DefaultMixerStruct<float2> {
 template<> struct DefaultMixerStruct<float3> {
   using type = SimpleMixer<float3>;
 };
-template<> struct DefaultMixerStruct<ColorGeometry4f> {
-  /* Use a special mixer for colors. ColorGeometry4f can't be added/multiplied, because this is not
+template<> struct DefaultMixerStruct<Color4f> {
+  /* Use a special mixer for colors. Color4f can't be added/multiplied, because this is not
    * something one should usually do with colors.  */
-  using type = ColorGeometryMixer;
+  using type = Color4fMixer;
 };
 template<> struct DefaultMixerStruct<int> {
   static int double_to_int(const double &value)
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc
index d36e9ed3e86..62833e10438 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -61,7 +61,7 @@ const blender::fn::CPPType *custom_data_type_to_cpp_type(const CustomDataType ty
     case CD_PROP_INT32:
       return &CPPType::get<int>();
     case CD_PROP_COLOR:
-      return &CPPType::get<ColorGeometry4f>();
+      return &CPPType::get<Color4f>();
     case CD_PROP_BOOL:
       return &CPPType::get<bool>();
     default:
@@ -84,7 +84,7 @@ CustomDataType cpp_type_to_custom_data_type(const blender::fn::CPPType &type)
   if (type.is<int>()) {
     return CD_PROP_INT32;
   }
-  if (type.is<ColorGeometry4f>()) {
+  if (type.is<Color4f>()) {
     return CD_PROP_COLOR;
   }
   if (type.is<bool>()) {
@@ -355,7 +355,7 @@ ReadAttributeLookup CustomDataAttributeProvider::try_get_for_read(
       case CD_PROP_INT32:
         return this->layer_to_read_attribute<int>(layer, domain_size);
       case CD_PROP_COLOR:
-        return this->layer_to_read_attribute<ColorGeometry4f>(layer, domain_size);
+        return this->layer_to_read_attribute<Color4f>(layer, domain_size);
       case CD_PROP_BOOL:
         return this->layer_to_read_attribute<bool>(layer, domain_size);
       default:
@@ -389,7 +389,7 @@ WriteAttributeLookup CustomDataAttributeProvider::try_get_for_write(
       case CD_PROP_INT32:
         return this->layer_to_write_attribute<int>(layer, domain_size);
       case CD_PROP_COLOR:
-        return this->layer_to_write_attribute<ColorGeometry4f>(layer, domain_size);
+        return this->layer_to_write_attribute<Color4f>(layer, domain_size);
       case CD_PROP_BOOL:
         return this->layer_to_write_attribute<bool>(layer, domain_size);
       default:
diff --git a/source/blender/blenkernel/intern/attribute_math.cc b/source/blender/blenkernel/intern/attribute_math.cc
index 5cdf329effb..4ff3a6ceff5 100644
--- a/source/blender/blenkernel/intern/attribute_math.cc
+++ b/source/blender/blenkernel/intern/attribute_math.cc
@@ -18,21 +18,18 @@
 
 namespace blender::attribute_math {
 
-ColorGeometryMixer::ColorGeometryMixer(MutableSpan<ColorGeometry4f> output_buffer,
-                                       ColorGeometry4f default_color)
+Color4fMixer::Color4fMixer(MutableSpan<Color4f> output_buffer, Color4f default_color)
     : buffer_(output_buffer),
       default_color_(default_color),
       total_weights_(output_buffer.size(), 0.0f)
 {
-  buffer_.fill(ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
+  buffer_.fill(Color4f(0, 0, 0, 0));
 }
 
-void ColorGeometryMixer::mix_in(const int64_t index,
-                                const ColorGeometry4f &color,
-                                const float weight)
+void Color4fMixer::mix_in(const int64_t index, const Color4f &color, const float weight)
 {
   BLI_assert(weight >= 0.0f);
-  ColorGeometry4f &output_color = buffer_[index];
+  Color4f &output_color = buffer_[index];
   output_color.r += color.r * weight;
   output_color.g += color.g * weight;
   output_color.b += color.b * weight;
@@ -40,11 +37,11 @@ void ColorGeometryMixer::mix_in(const int64_t index,
   total_weights_[index] += weight;
 }
 
-void ColorGeometryMixer::finalize()
+void Color4fMixer::finalize()
 {
   for (const int64_t i : buffer_.index_range()) {
     const float weight = total_weights_[i];
-    ColorGeometry4f &output_color = buffer_[i];
+    Color4f &output_color = buffer_[i];
     if (weight > 0.0f) {
       const float weight_inv = 1.0f / weight;
       output_color.r *= weight_inv;
diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc
index 42f3a854aec..9e622ab2cdf 100644
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@ -773,20 +773,18 @@ static void set_loop_uv(MLoopUV &uv, float2 co)
   copy_v2_v2(uv.uv, co);
 }
 
-static ColorGeometry4f get_loop_color(const MLoopCol &col)
+static Color4f get_loop_color(const MLoopCol &col)
 {
-  ColorGeometry4b encoded_color = ColorGeometry4b(col.r, col.g, col.b, col.a);
-  ColorGeometry4f linear_color = encoded_color.decode();
+  Color4f srgb_color;
+  rgba_uchar_to_float(srgb_color, &col.r);
+  Color4f linear_color;
+  srgb_to_linearrgb_v4(linear_color, srgb_color);
   return linear_color;
 }
 
-static void set_loop_color(MLoopCol &col, ColorGeometry4f linear_color)
+static void set_loop_color(MLoopCol &col, Color4f linear_color)
 {
-  ColorGeometry4b encoded_color = linear_color.encode();
-  col.r = encoded_color.r;
-  col.g = encoded_color.g;
-  col.b = encoded_color.b;
-  col.a = encoded_color.a;
+  linearrgb_to_srgb_uchar4(&col.r, linear_color);
 }
 
 static float get_crease(const MEdge &edge)
@@ -1123,8 +1121,8 @@ static ComponentAttributeProviders create_attribute_providers_for_mesh()
       CD_PROP_COLOR,
       CD_MLOOPCOL,
       corner_access,
-      make_derived_read_attribute<MLoopCol, ColorGeometry4f, get_loop_color>,
-      make_derived_write_attribute<MLoopCol, ColorGeometry4f, get_loop_color, set_loop_color>);
+      make_derived_read_attribute<MLoopCol, Color4f, get_loop_color>,
+      make_derived_write_attribute<MLoopCol, Color4f, get_loop_color, set_loop_color>);
 
   static VertexGroupsAttributeProvider vertex_groups;
   static CustomDataAttributeProvider corner_custom_data(ATTR_DOMAIN_CORNER, corner_access);
diff --git a/source/blender/blenlib/BLI_color.hh b/source/blender/blenlib/BLI_color.hh
index 287587e04be..e57a5109a66 100644
--- a/source/blender/blenlib/BLI_color.hh
+++ b/source/blender/blenlib/BLI_color.hh
@@ -22,122 +22,41 @@
 
 namespace blender {
 
-/**
- * CPP based color structures.
- *
- * Strongly typed color storage structures with space and alpha association.
- * Will increase readability and visibility of typical mistakes when
- * working with colors.
- *
- * The storage structs can hold 4 channels (r, g, b and a).
- *
- * Usage:
- *
- * Convert a theme byte color to a linearrgb premultiplied.
- * ```
- * ColorTheme4b theme_color;
- * ColorSceneLinear4f<eAlpha::Premultiplied> linearrgb_color =
- *     BLI_color_convert_to_scene_linear(theme_color).premultiply_alpha();
- * ```
- *
- * The API is structured to make most use of inlining. Most notable are space
- * conversions done via `BLI_color_convert_to*` functions.
- *
- * - Conversions between spaces (theme <=> scene linear) should always be done by
- *   invoking the `BLI_color_convert_to*` methods.
- * - Encoding colors (compressing to store colors inside a less precision storage)
- *   should be done by invoking the `encode` and `decode` methods.
- * - Changing alpha association should be done by invoking `premultiply_alpha` or
- *   `unpremultiply_alpha` methods.
- 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list