Disable a static assert on gcc.

This commit is contained in:
Joseph Eagar 2021-09-20 20:26:53 -07:00
parent 015dae3dc5
commit 2b2b569229
5 changed files with 98 additions and 13 deletions

View File

@ -856,12 +856,19 @@ def brush_settings(layout, context, brush, popover=False):
if capabilities.has_color:
ups = context.scene.tool_settings.unified_paint_settings
row = layout.row(align=True)
if context.mode == "SCULPT":
row = layout.column(align=True)
else:
row = layout.row(align=True)
UnifiedPaintPanel.prop_unified_color(row, context, brush, "color", text="")
UnifiedPaintPanel.prop_unified_color(row, context, brush, "secondary_color", text="")
row.separator()
row.operator("paint.brush_colors_flip", icon='FILE_REFRESH', text="", emboss=False)
row.prop(ups, "use_unified_color", text="", icon='BRUSHES_ALL')
if context.mode != "SCULPT":
row.separator()
row.operator("paint.brush_colors_flip", icon='FILE_REFRESH', text="", emboss=False)
row.prop(ups, "use_unified_color", text="", icon='BRUSHES_ALL')
layout.prop(brush, "blend", text="Blend Mode")
# Per sculpt tool options.

View File

@ -1218,6 +1218,58 @@ static void float_set_uninherit(BrushChannelSet *chset, const char *channel, flo
ch->flag &= ~BRUSH_CHANNEL_INHERIT;
}
ATTR_NO_OPT static void bke_builtin_commandlist_create_paint(Brush *brush,
BrushChannelSet *chset,
BrushCommandList *cl,
int tool,
BrushMappingData *mapdata)
{
BrushCommand *cmd;
cmd = BKE_brush_commandlist_add(cl, chset, true);
BKE_brush_command_init(cmd, tool);
float radius = BKE_brush_channelset_get_float(chset, "radius", mapdata);
/* build autosmooth command */
float autosmooth_scale = BKE_brush_channelset_get_float(
chset, "autosmooth_radius_scale", mapdata);
float autosmooth_projection = BKE_brush_channelset_get_float(
chset, "autosmooth_projection", NULL);
float autosmooth_spacing;
if (BKE_brush_channelset_get_int(chset, "autosmooth_use_spacing", mapdata)) {
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "autosmooth_spacing", mapdata);
}
else {
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "spacing", mapdata);
}
float autosmooth = BKE_brush_channelset_get_float(chset, "autosmooth", mapdata);
if (autosmooth > 0.0f) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true), SCULPT_TOOL_SMOOTH);
float_set_uninherit(cmd->params, "strength", autosmooth);
float_set_uninherit(cmd->params, "radius", radius * autosmooth_scale);
float_set_uninherit(cmd->params, "projection", autosmooth_projection);
float_set_uninherit(cmd->params, "spacing", autosmooth_spacing);
}
float vcol_boundary = BKE_brush_channelset_get_float(chset, "vcol_boundary_factor", mapdata);
#define GETF(key) BKE_brush_channelset_get_float(chset, key, mapdata)
if (vcol_boundary > 0.0f) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true),
SCULPT_TOOL_VCOL_BOUNDARY);
float_set_uninherit(cmd->params, "radius", radius * GETF("vcol_boundary_radius_scale"));
float_set_uninherit(cmd->params, "spacing", GETF("vcol_boundary_spacing"));
float_set_uninherit(cmd->params, "strength", vcol_boundary);
}
#undef GETF
// float
}
ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
BrushChannelSet *chset,
BrushCommandList *cl,
@ -1227,6 +1279,10 @@ ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
BrushCommand *cmd;
/* add main tool */
if (ELEM(tool, SCULPT_TOOL_PAINT, SCULPT_TOOL_SMEAR)) {
bke_builtin_commandlist_create_paint(brush, chset, cl, tool, mapdata);
return;
}
cmd = BKE_brush_commandlist_add(cl, chset, true);
BKE_brush_command_init(cmd, tool);
@ -1253,8 +1309,7 @@ ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
float autosmooth = BKE_brush_channelset_get_float(chset, "autosmooth", mapdata);
if (!no_autosmooth && autosmooth > 0.0f) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
SCULPT_TOOL_SMOOTH);
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true), SCULPT_TOOL_SMOOTH);
float_set_uninherit(cmd->params, "strength", autosmooth);
float_set_uninherit(cmd->params, "radius", radius * autosmooth_scale);
float_set_uninherit(cmd->params, "projection", autosmooth_projection);
@ -1279,7 +1334,7 @@ ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
}
if (topology_rake > 0.0f) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true),
SCULPT_TOOL_TOPOLOGY_RAKE);
float_set_uninherit(cmd->params, "strength", topology_rake);
@ -1291,8 +1346,7 @@ ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
/* build dyntopo command */
if (!BKE_brush_channelset_get_int(chset, "dyntopo_disabled", NULL)) {
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
SCULPT_TOOL_DYNTOPO);
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, chset, true), SCULPT_TOOL_DYNTOPO);
float spacing = BKE_brush_channelset_get_float(chset, "dyntopo_spacing", mapdata);
float radius2 = BKE_brush_channelset_get_float(chset, "dyntopo_radius_scale", mapdata);

View File

@ -76,7 +76,7 @@ To enable converting to/from old data:
.type = BRUSH_CHANNEL_VEC3,\
.vector = {r, g, b, 1.0f},\
.min = 0.0f, .max = 5.0f,\
.min = 0.0f, .max = 1.0f,\
.soft_min = 0.0f, .soft_max = 1.0f,\
.flag = BRUSH_CHANNEL_COLOR,\
}
@ -87,7 +87,7 @@ To enable converting to/from old data:
.type = BRUSH_CHANNEL_VEC4,\
.vector = {r, g, b, a},\
.min = 0.0f, .max = 5.0f,\
.min = 0.0f, .max = 1.0f,\
.soft_min = 0.0f, .soft_max = 1.0f,\
.flag = BRUSH_CHANNEL_COLOR,\
}
@ -475,7 +475,15 @@ BrushChannelType brush_builtin_channels[] = {
MAKE_COLOR4("cursor_color_add", "Add Color", "Color of cursor when adding", 1.0f, 0.39f, 0.39f, 1.0f),
MAKE_COLOR4("cursor_color_sub", "Subtract Color", "Color of cursor when subtracting", 0.39f, 0.39f, 1.0f, 1.0f),
MAKE_COLOR3("color", "Color", "", 1.0f, 1.0f, 1.0f),
MAKE_COLOR3("secondary_color", "Secondary Color", "", 0.0f, 0.0f, 0.0f)
MAKE_COLOR3("secondary_color", "Secondary Color", "", 0.0f, 0.0f, 0.0f),
MAKE_FLOAT("vcol_boundary_factor", "Boundary Hardening", "Automatically align edges on color boundaries"
"to generate sharper features. ", 0.0f, 0.0f, 1.0f),
MAKE_FLOAT_EX("vcol_boundary_exponent", "Exponent", "Hardening exponent (smaller values make smoother edges)",
1.0, 0.001f, 6.0f, 0.001, 3.0f),
MAKE_FLOAT_EX("vcol_boundary_radius_scale", "Radius Scale",
"Scale brush radius for vcol boundary hardening",
1.0f, 0.0001f, 100.0f, 0.001f, 3.0f),
MAKE_FLOAT_EX("vcol_boundary_spacing", "Spacing", "Spacing for vcol boundary hardening", 15, 0.25, 5000, 0.5, 300),
};
/* clang-format on */
@ -573,6 +581,8 @@ static BrushSettingsMap brush_settings_map[] = {
DEF(sub_col, cursor_color_sub, FLOAT4, FLOAT4)
DEF(rgb, color, FLOAT3, FLOAT3)
DEF(secondary_rgb, secondary_color, FLOAT3, FLOAT3)
DEF(vcol_boundary_factor, vcol_boundary_factor, FLOAT, FLOAT)
DEF(vcol_boundary_exponent, vcol_boundary_exponent, FLOAT, FLOAT)
};
static const int brush_settings_map_len = ARRAY_SIZE(brush_settings_map);
@ -921,6 +931,11 @@ void BKE_brush_builtin_patch(Brush *brush, int tool)
ADDCH("autosmooth_use_spacing");
ADDCH("autosmooth_projection");
ADDCH("vcol_boundary_exponent");
ADDCH("vcol_boundary_factor");
ADDCH("vcol_boundary_radius_scale");
ADDCH("vcol_boundary_spacing");
ADDCH("topology_rake");
ADDCH("topology_rake_mode");
ADDCH("topology_rake_radius_scale");
@ -1090,6 +1105,11 @@ void BKE_brush_check_toolsettings(Sculpt *sd)
ADDCH("automasking");
ADDCH("topology_rake_mode");
ADDCH("vcol_boundary_exponent");
ADDCH("vcol_boundary_factor");
ADDCH("vcol_boundary_radius_scale");
ADDCH("vcol_boundary_spacing");
ADDCH("color");
ADDCH("secondary_color");

View File

@ -8428,7 +8428,9 @@ void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSettings
SCULPT_TOOL_CLAY,
SCULPT_TOOL_CREASE,
SCULPT_TOOL_CLOTH,
SCULPT_TOOL_SIMPLIFY)) {
SCULPT_TOOL_SIMPLIFY,
SCULPT_TOOL_PAINT,
SCULPT_TOOL_SMEAR)) {
if (SCULPT_stroke_is_first_brush_step(ss->cache)) {
if (ss->cache->commandlist) {

View File

@ -81,9 +81,11 @@ typedef enum {
BRUSH_MAPPING_MAX = 5 // see BrushChannel.mappings
} BrushMappingType;
#ifndef __GNUC__
static_assert(offsetof(BrushChannel, type) - offsetof(BrushChannel, mappings) ==
sizeof(BrushMapping) * BRUSH_MAPPING_MAX,
"BrushChannel.mappings must == BRUSH_MAPPING_MAX");
#endif
// BrushChannel->flag
enum {