Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJoseph Eagar <joeedh@gmail.com>2021-09-18 00:43:00 +0300
committerJoseph Eagar <joeedh@gmail.com>2021-09-18 00:43:00 +0300
commitd3bba94bf243c82b0c94b176f0541511e29bbcf3 (patch)
tree75b2e53629b732aafad63104209650ebb912e45d /source
parent04c3690299c51b79412fe395c2507a28fbae7b56 (diff)
Commit current working copy; having
weird file system issues
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/brush.c5
-rw-r--r--source/blender/blenkernel/intern/brush_engine.c40
-rw-r--r--source/blender/makesrna/RNA_access.h2
-rw-r--r--source/blender/makesrna/intern/rna_brush.c6
-rw-r--r--source/blender/makesrna/intern/rna_brush_engine.c69
5 files changed, 109 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 552708722ad..78fc0b54f5f 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -269,7 +269,7 @@ static void brush_blend_write(BlendWriter *writer, ID *id, const void *id_addres
}
}
-static void brush_blend_read_data(BlendDataReader *reader, ID *id)
+ATTR_NO_OPT static void brush_blend_read_data(BlendDataReader *reader, ID *id)
{
Brush *brush = (Brush *)id;
@@ -277,6 +277,9 @@ static void brush_blend_read_data(BlendDataReader *reader, ID *id)
BLO_read_data_address(reader, &brush->channels);
BKE_brush_channelset_read(reader, brush->channels);
}
+ else {
+ BKE_brush_builtin_create(brush, brush->sculpt_tool);
+ }
if (brush->dyntopo.radius_scale == 0.0f) {
brush->dyntopo.radius_scale = 1.0f;
diff --git a/source/blender/blenkernel/intern/brush_engine.c b/source/blender/blenkernel/intern/brush_engine.c
index a917c92879e..d247a69e4b5 100644
--- a/source/blender/blenkernel/intern/brush_engine.c
+++ b/source/blender/blenkernel/intern/brush_engine.c
@@ -214,7 +214,7 @@ void BKE_brush_channel_free(BrushChannel *ch)
}
}
-void BKE_brush_channel_copy(BrushChannel *dst, BrushChannel *src)
+ATTR_NO_OPT void BKE_brush_channel_copy(BrushChannel *dst, BrushChannel *src)
{
*dst = *src;
@@ -223,7 +223,7 @@ void BKE_brush_channel_copy(BrushChannel *dst, BrushChannel *src)
}
}
-void BKE_brush_channel_init(BrushChannel *ch, BrushChannelType *def)
+ATTR_NO_OPT void BKE_brush_channel_init(BrushChannel *ch, BrushChannelType *def)
{
memset(ch, 0, sizeof(*ch));
@@ -240,7 +240,7 @@ void BKE_brush_channel_init(BrushChannel *ch, BrushChannelType *def)
BrushMapping *map = ch->mappings + i;
CurveMapping *curve = &map->curve;
- BKE_curvemapping_init(curve);
+ memset(curve, 0, sizeof(*curve));
float min, max;
@@ -259,6 +259,17 @@ void BKE_brush_channel_init(BrushChannel *ch, BrushChannelType *def)
ch->mappings[i].flag |= BRUSH_MAPPING_INVERT;
}
+ int slope = CURVEMAP_SLOPE_POSITIVE;
+
+ for (int i = 0; i < 4; i++) {
+ BKE_curvemap_reset(&curve->cm[i],
+ &(struct rctf){.xmax = 0, .ymax = min, .xmax = 1, .ymax = max},
+ mdef->curve,
+ slope);
+ }
+
+ BKE_curvemapping_init(curve);
+
map->blendmode = mdef->blendmode;
map->factor = 1.0f;
@@ -290,17 +301,16 @@ void BKE_brush_channelset_add(BrushChannelSet *chset, BrushChannel *ch)
chset->totchannel++;
if (!chset->channels) {
- chset->channels = MEM_callocN(sizeof(BrushChannelSet) * chset->totchannel, "chset->channels");
+ chset->channels = MEM_callocN(sizeof(BrushChannel) * chset->totchannel, "chset->channels");
}
else {
- chset->channels = MEM_recallocN(chset->channels,
- sizeof(BrushChannelSet) * sizeof(chset->totchannel));
+ chset->channels = MEM_recallocN(chset->channels, sizeof(BrushChannel) * chset->totchannel);
}
- memcpy(chset->channels + chset->totchannel - 1, ch, sizeof(BrushChannelSet));
+ memcpy(chset->channels + chset->totchannel - 1, ch, sizeof(BrushChannel));
}
-BrushChannel *BKE_brush_channelset_lookup(BrushChannelSet *chset, const char *idname)
+ATTR_NO_OPT BrushChannel *BKE_brush_channelset_lookup(BrushChannelSet *chset, const char *idname)
{
for (int i = 0; i < chset->totchannel; i++) {
if (STREQ(chset->channels[i].idname, idname)) {
@@ -316,12 +326,12 @@ bool BKE_brush_channelset_has(BrushChannelSet *chset, const char *idname)
return BKE_brush_channelset_lookup(chset, idname) != NULL;
}
-void BKE_brush_channelset_add_builtin(BrushChannelSet *chset, const char *idname)
+ATTR_NO_OPT void BKE_brush_channelset_add_builtin(BrushChannelSet *chset, const char *idname)
{
BrushChannelType *def = NULL;
for (int i = 0; i < builtin_channel_len; i++) {
- BrushChannelType *def2 = builtin_channel_len + i;
+ BrushChannelType *def2 = brush_builtin_channels + i;
if (STREQ(def2->idname, idname)) {
def = def2;
@@ -485,8 +495,8 @@ void BKE_brush_builtin_create(Brush *brush, int tool)
ADDCH("STRENGTH");
ADDCH("AUTOSMOOTH");
ADDCH("TOPOLOGY_RAKE");
- ADDCH("AUTOSMOOTH_RADIUS_SCLAE");
- ADDCH("RAKE_RADIUS_SCALE");
+ ADDCH("AUTOSMOOTH_RADIUS_SCALE");
+ ADDCH("TOPOLOGY_RAKE_RADIUS_SCALE");
ADDCH("AUTOMASKING");
@@ -498,6 +508,12 @@ void BKE_brush_builtin_create(Brush *brush, int tool)
ch->flag = BRUSH_CHANNEL_INHERIT;
break;
}
+ default: {
+ // implement me!
+ BKE_brush_channelset_free(chset);
+ brush->channels = NULL;
+ break;
+ }
}
}
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index ce53e3390e1..aaf37b10db3 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -99,6 +99,8 @@ extern StructRNA RNA_BooleanModifier;
extern StructRNA RNA_Brush;
extern StructRNA RNA_BrushCapabilitiesImagePaint;
extern StructRNA RNA_BrushCapabilitiesVertexPaint;
+extern StructRNA RNA_BrushChannel;
+extern StructRNA RNA_BrushChannelSet;
extern StructRNA RNA_BrushTextureSlot;
extern StructRNA RNA_BuildGpencilModifier;
extern StructRNA RNA_BuildModifier;
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 165f22bca7b..e3454af8f2e 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -3615,6 +3615,12 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Gradient", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
+ prop = RNA_def_property(srna, "channels", PROP_POINTER, 0);
+ RNA_def_property_pointer_sdna(prop, NULL, "channels");
+ RNA_def_property_struct_type(prop, "BrushChannelSet");
+ RNA_def_property_ui_text(prop, "Channels", "");
+ RNA_def_property_update(prop, 0, "rna_Brush_update");
+
/* gradient source */
prop = RNA_def_property(srna, "gradient_stroke_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, brush_gradient_items);
diff --git a/source/blender/makesrna/intern/rna_brush_engine.c b/source/blender/makesrna/intern/rna_brush_engine.c
index 2c4011b956b..a16aec474d5 100644
--- a/source/blender/makesrna/intern/rna_brush_engine.c
+++ b/source/blender/makesrna/intern/rna_brush_engine.c
@@ -37,11 +37,80 @@
#include "IMB_imbuf.h"
+#include "BKE_brush_engine.h"
+#include "DNA_sculpt_brush_types.h"
#include "WM_types.h"
#ifdef RNA_RUNTIME
+
+int rna_BrushChannelSet_channels_begin(CollectionPropertyIterator *iter, struct PointerRNA *ptr)
+{
+ BrushChannelSet *chset = ptr->data;
+
+ rna_iterator_array_begin(
+ iter, chset->channels, sizeof(BrushChannel), chset->totchannel, false, NULL);
+
+ return 1;
+}
+
+int rna_BrushChannelSet_channels_assignint(struct PointerRNA *ptr,
+ int key,
+ const struct PointerRNA *assign_ptr)
+{
+ BrushChannelSet *chset = ptr->data;
+ BrushChannel *ch = chset->channels + key;
+ BrushChannel *src = assign_ptr->data;
+
+ BKE_brush_channel_copy(ch, src);
+
+ return 1;
+}
+
#endif
+void RNA_def_brush_channel(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "BrushChannel", NULL);
+ RNA_def_struct_sdna(srna, "BrushChannel");
+ RNA_def_struct_ui_text(srna, "Brush Channel", "Brush Channel");
+
+ prop = RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, "BrushChannel", "idname");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+
+ RNA_def_struct_name_property(srna, prop);
+}
+
+void RNA_def_brush_channelset(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "BrushChannelSet", NULL);
+ RNA_def_struct_sdna(srna, "BrushChannelSet");
+ RNA_def_struct_ui_text(srna, "Channel Set", "Brush Channel Collection");
+
+ prop = RNA_def_property(srna, "channels", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "channels", "totchannel");
+ RNA_def_property_collection_funcs(prop,
+ "rna_BrushChannelSet_channels_begin",
+ "rna_iterator_array_next",
+ "rna_iterator_array_end",
+ "rna_iterator_array_get",
+ NULL,
+ NULL,
+ NULL,
+ "rna_BrushChannelSet_channels_assignint");
+ RNA_def_property_struct_type(prop, "BrushChannel");
+ RNA_def_property_override_flag(
+ prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY | PROPOVERRIDE_LIBRARY_INSERTION);
+}
+
void RNA_def_brush_engine(BlenderRNA *brna)
{
+ RNA_def_brush_channel(brna);
+ RNA_def_brush_channelset(brna);
}