[Bf-blender-cvs] [42fe0b6dfcc] master: Attributes: add color_srgb property to FloatColorAttributeValue and ByteColorAttributeValue

Aras Pranckevicius noreply at git.blender.org
Wed Sep 14 21:51:07 CEST 2022


Commit: 42fe0b6dfcc276f5db1461add1e24aea55ca1131
Author: Aras Pranckevicius
Date:   Wed Sep 14 22:50:46 2022 +0300
Branches: master
https://developer.blender.org/rB42fe0b6dfcc276f5db1461add1e24aea55ca1131

Attributes: add color_srgb property to FloatColorAttributeValue and ByteColorAttributeValue

This patch adds color_srgb property to FloatColorAttributeValue and
ByteColorAttributeValue, so Python code can do
`layer.data.foreach_get("color_srgb", ...)` to fetch the data
efficiently, if it needs it in sRGB color space.

Reviewed By: Bastien Montagne
Differential Revision: https://developer.blender.org/D15966

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

M	source/blender/makesrna/intern/rna_attribute.c

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

diff --git a/source/blender/makesrna/intern/rna_attribute.c b/source/blender/makesrna/intern/rna_attribute.c
index 5e17f22ecf5..4bf55bcc701 100644
--- a/source/blender/makesrna/intern/rna_attribute.c
+++ b/source/blender/makesrna/intern/rna_attribute.c
@@ -321,6 +321,36 @@ static void rna_ByteColorAttributeValue_color_set(PointerRNA *ptr, const float *
   linearrgb_to_srgb_uchar4(&mlcol->r, values);
 }
 
+static void rna_ByteColorAttributeValue_color_srgb_get(PointerRNA *ptr, float *values)
+{
+  MLoopCol *col = (MLoopCol *)ptr->data;
+  values[0] = col->r / 255.0f;
+  values[1] = col->g / 255.0f;
+  values[2] = col->b / 255.0f;
+  values[3] = col->a / 255.0f;
+}
+
+static void rna_ByteColorAttributeValue_color_srgb_set(PointerRNA *ptr, const float *values)
+{
+  MLoopCol *col = (MLoopCol *)ptr->data;
+  col->r = round_fl_to_uchar_clamp(values[0] * 255.0f);
+  col->g = round_fl_to_uchar_clamp(values[1] * 255.0f);
+  col->b = round_fl_to_uchar_clamp(values[2] * 255.0f);
+  col->a = round_fl_to_uchar_clamp(values[3] * 255.0f);
+}
+
+static void rna_FloatColorAttributeValue_color_srgb_get(PointerRNA *ptr, float *values)
+{
+  MPropCol *col = (MPropCol *)ptr->data;
+  linearrgb_to_srgb_v4(values, col->color);
+}
+
+static void rna_FloatColorAttributeValue_color_srgb_set(PointerRNA *ptr, const float *values)
+{
+  MPropCol *col = (MPropCol *)ptr->data;
+  srgb_to_linearrgb_v4(col->color, values);
+}
+
 /* Int8 Attribute. */
 
 static int rna_ByteIntAttributeValue_get(PointerRNA *ptr)
@@ -715,6 +745,16 @@ static void rna_def_attribute_float_color(BlenderRNA *brna)
   RNA_def_property_float_sdna(prop, NULL, "color");
   RNA_def_property_array(prop, 4);
   RNA_def_property_update(prop, 0, "rna_Attribute_update_data");
+
+  prop = RNA_def_property(srna, "color_srgb", PROP_FLOAT, PROP_COLOR);
+  RNA_def_property_ui_text(prop, "Color", "RGBA color in sRGB color space");
+  RNA_def_property_float_sdna(prop, NULL, "color");
+  RNA_def_property_array(prop, 4);
+  RNA_def_property_float_funcs(prop,
+                               "rna_FloatColorAttributeValue_color_srgb_get",
+                               "rna_FloatColorAttributeValue_color_srgb_set",
+                               NULL);
+  RNA_def_property_update(prop, 0, "rna_Attribute_update_data");
 }
 
 static void rna_def_attribute_byte_color(BlenderRNA *brna)
@@ -756,6 +796,16 @@ static void rna_def_attribute_byte_color(BlenderRNA *brna)
                                NULL);
   RNA_def_property_ui_text(prop, "Color", "RGBA color in scene linear color space");
   RNA_def_property_update(prop, 0, "rna_Attribute_update_data");
+
+  prop = RNA_def_property(srna, "color_srgb", PROP_FLOAT, PROP_COLOR);
+  RNA_def_property_array(prop, 4);
+  RNA_def_property_range(prop, 0.0f, 1.0f);
+  RNA_def_property_float_funcs(prop,
+                               "rna_ByteColorAttributeValue_color_srgb_get",
+                               "rna_ByteColorAttributeValue_color_srgb_set",
+                               NULL);
+  RNA_def_property_ui_text(prop, "Color", "RGBA color in sRGB color space");
+  RNA_def_property_update(prop, 0, "rna_Attribute_update_data");
 }
 
 static void rna_def_attribute_int(BlenderRNA *brna)



More information about the Bf-blender-cvs mailing list