GPv3: Tint and Color modifiers #117297

Merged
Lukas Tönne merged 20 commits from LukasTonne/blender:gp3-color-modifier into main 2024-01-19 16:59:49 +01:00
2 changed files with 29 additions and 29 deletions
Showing only changes of commit 916c9faad6 - Show all commits

View File

@ -98,7 +98,7 @@ static void apply_color_factor(ColorGeometry4f &color,
hsv_to_rgb_v(hsv, color);
}
static void modify_stroke_color(Object *ob,
static void modify_stroke_color(Object &ob,
const GreasePencilColorModifierData &cmd,
bke::CurvesGeometry &curves,
const IndexMask &curves_mask,
@ -112,7 +112,7 @@ static void modify_stroke_color(Object *ob,
"material_index", bke::AttrDomain::Curve, 0);
LukasTonne marked this conversation as resolved Outdated

Looks like you just need attributes() here.

Looks like you just need `attributes()` here.
LukasTonne marked this conversation as resolved
Review

const

`const`
curves_mask.foreach_index(GrainSize(512), [&](const int64_t curve_i) {
const Material *ma = BKE_object_material_get(ob, stroke_materials[curve_i]);
const Material *ma = BKE_object_material_get(&ob, stroke_materials[curve_i]);
const MaterialGPencilStyle *gp_style = ma ? ma->gp_style : nullptr;
const ColorGeometry4f material_color = (gp_style ? gp_style->fill_rgba :
ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
@ -134,7 +134,7 @@ static void modify_stroke_color(Object *ob,
});
}
static void modify_fill_color(Object *ob,
static void modify_fill_color(Object &ob,
LukasTonne marked this conversation as resolved Outdated

Object * -> Object &

`Object *` -> `Object &`
const GreasePencilColorModifierData &cmd,
bke::CurvesGeometry &curves,
const IndexMask &curves_mask)
@ -148,7 +148,7 @@ static void modify_fill_color(Object *ob,
"material_index", bke::AttrDomain::Curve, 0);
curves_mask.foreach_index(GrainSize(512), [&](int64_t curve_i) {
const Material *ma = BKE_object_material_get(ob, stroke_materials[curve_i]);
const Material *ma = BKE_object_material_get(&ob, stroke_materials[curve_i]);
const MaterialGPencilStyle *gp_style = ma ? ma->gp_style : nullptr;
const ColorGeometry4f material_color = (gp_style ? gp_style->fill_rgba :
ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
@ -159,27 +159,27 @@ static void modify_fill_color(Object *ob,
fill_colors.finish();
}
static void modify_drawing(ModifierData *md, const ModifierEvalContext *ctx, Drawing &drawing)
static void modify_drawing(ModifierData &md, const ModifierEvalContext &ctx, Drawing &drawing)
LukasTonne marked this conversation as resolved Outdated

use references, use const for ModifierData

use references, use const for `ModifierData`
{
auto *cmd = reinterpret_cast<GreasePencilColorModifierData *>(md);
auto &cmd = reinterpret_cast<GreasePencilColorModifierData &>(md);
bke::CurvesGeometry &curves = drawing.strokes_for_write();
IndexMaskMemory mask_memory;
const IndexMask curves_mask = modifier::greasepencil::get_filtered_stroke_mask(
ctx->object, curves, cmd->influence, mask_memory);
ctx.object, curves, cmd.influence, mask_memory);
LukasTonne marked this conversation as resolved
Review

const

`const`
switch (cmd->color_mode) {
switch (cmd.color_mode) {
case MOD_GREASE_PENCIL_COLOR_STROKE:
modify_stroke_color(
ctx->object, *cmd, curves, curves_mask, drawing.vertex_colors_for_write());
*ctx.object, cmd, curves, curves_mask, drawing.vertex_colors_for_write());
break;
case MOD_GREASE_PENCIL_COLOR_FILL:
modify_fill_color(ctx->object, *cmd, curves, curves_mask);
modify_fill_color(*ctx.object, cmd, curves, curves_mask);
break;
case MOD_GREASE_PENCIL_COLOR_BOTH:
modify_stroke_color(
ctx->object, *cmd, curves, curves_mask, drawing.vertex_colors_for_write());
modify_fill_color(ctx->object, *cmd, curves, curves_mask);
*ctx.object, cmd, curves, curves_mask, drawing.vertex_colors_for_write());
modify_fill_color(*ctx.object, cmd, curves, curves_mask);
break;
case MOD_GREASE_PENCIL_COLOR_HARDNESS:
BLI_assert_unreachable();
@ -206,7 +206,7 @@ static void modify_geometry_set(ModifierData *md,
const Vector<Drawing *> drawings = modifier::greasepencil::get_drawings_for_write(
LukasTonne marked this conversation as resolved Outdated

const

`const`
grease_pencil, layer_mask, frame);
threading::parallel_for_each(drawings,
[&](Drawing *drawing) { modify_drawing(md, ctx, *drawing); });
[&](Drawing *drawing) { modify_drawing(*md, *ctx, *drawing); });
}
static void panel_draw(const bContext *C, Panel *panel)

View File

@ -160,7 +160,7 @@ static ColorGeometry4f apply_gradient_tint(const GreasePencilTintModifierData &t
return ColorGeometry4f(rgb[0], rgb[1], rgb[2], factor);
}
static void modify_stroke_color(Object *ob,
static void modify_stroke_color(Object &ob,
const GreasePencilTintModifierData &tmd,
bke::CurvesGeometry &curves,
const IndexMask &curves_mask,
@ -179,7 +179,7 @@ static void modify_stroke_color(Object *ob,
/* Common input color and base factor calculation. */
auto get_material_color = [&](const int64_t curve_i) {
const Material *ma = BKE_object_material_get(ob, stroke_materials[curve_i]);
const Material *ma = BKE_object_material_get(&ob, stroke_materials[curve_i]);
const MaterialGPencilStyle *gp_style = ma ? ma->gp_style : nullptr;
return (gp_style ? gp_style->stroke_rgba : ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
};
@ -217,7 +217,7 @@ static void modify_stroke_color(Object *ob,
const Span<float3> positions = curves.positions();
/* Transforms points to the gradient object space. */
const float4x4 matrix = float4x4_view(tmd.object->world_to_object) *
float4x4_view(ob->object_to_world);
float4x4_view(ob.object_to_world);
curves_mask.foreach_index(GrainSize(512), [&](const int64_t curve_i) {
const ColorGeometry4f material_color = get_material_color(curve_i);
@ -237,7 +237,7 @@ static void modify_stroke_color(Object *ob,
}
}
static void modify_fill_color(Object *ob,
static void modify_fill_color(Object &ob,
const GreasePencilTintModifierData &tmd,
bke::CurvesGeometry &curves,
const IndexMask &curves_mask)
@ -265,7 +265,7 @@ static void modify_fill_color(Object *ob,
/* Common input color and base factor calculation. */
auto get_material_color = [&](const int64_t curve_i) {
const Material *ma = BKE_object_material_get(ob, stroke_materials[curve_i]);
const Material *ma = BKE_object_material_get(&ob, stroke_materials[curve_i]);
const MaterialGPencilStyle *gp_style = ma ? ma->gp_style : nullptr;
return (gp_style ? gp_style->fill_rgba : ColorGeometry4f(0.0f, 0.0f, 0.0f, 0.0f));
};
@ -296,7 +296,7 @@ static void modify_fill_color(Object *ob,
const Span<float3> positions = curves.positions();
/* Transforms points to the gradient object space. */
const float4x4 matrix = float4x4_view(tmd.object->world_to_object) *
float4x4_view(ob->object_to_world);
float4x4_view(ob.object_to_world);
curves_mask.foreach_index(GrainSize(512), [&](int64_t curve_i) {
const ColorGeometry4f material_color = get_material_color(curve_i);
@ -344,30 +344,30 @@ static void modify_opacity(const GreasePencilTintModifierData &tmd,
opacities.finish();
}
static void modify_curves(ModifierData *md, const ModifierEvalContext *ctx, Drawing &drawing)
static void modify_curves(ModifierData &md, const ModifierEvalContext &ctx, Drawing &drawing)
{
auto *tmd = reinterpret_cast<GreasePencilTintModifierData *>(md);
auto &tmd = reinterpret_cast<GreasePencilTintModifierData &>(md);
bke::CurvesGeometry &curves = drawing.strokes_for_write();
IndexMaskMemory mask_memory;
const IndexMask curves_mask = modifier::greasepencil::get_filtered_stroke_mask(
ctx->object, curves, tmd->influence, mask_memory);
ctx.object, curves, tmd.influence, mask_memory);
/* Factor > 1.0 also affects the opacity of the stroke. */
modify_opacity(*tmd, curves, curves_mask);
modify_opacity(tmd, curves, curves_mask);
switch (tmd->color_mode) {
switch (tmd.color_mode) {
case MOD_GREASE_PENCIL_COLOR_STROKE:
modify_stroke_color(
ctx->object, *tmd, curves, curves_mask, drawing.vertex_colors_for_write());
*ctx.object, tmd, curves, curves_mask, drawing.vertex_colors_for_write());
break;
case MOD_GREASE_PENCIL_COLOR_FILL:
modify_fill_color(ctx->object, *tmd, curves, curves_mask);
modify_fill_color(*ctx.object, tmd, curves, curves_mask);
break;
case MOD_GREASE_PENCIL_COLOR_BOTH:
modify_stroke_color(
ctx->object, *tmd, curves, curves_mask, drawing.vertex_colors_for_write());
modify_fill_color(ctx->object, *tmd, curves, curves_mask);
*ctx.object, tmd, curves, curves_mask, drawing.vertex_colors_for_write());
modify_fill_color(*ctx.object, tmd, curves, curves_mask);
break;
case MOD_GREASE_PENCIL_COLOR_HARDNESS:
BLI_assert_unreachable();
@ -394,7 +394,7 @@ static void modify_geometry_set(ModifierData *md,
const Vector<Drawing *> drawings = modifier::greasepencil::get_drawings_for_write(
grease_pencil, layer_mask, frame);
threading::parallel_for_each(drawings,
[&](Drawing *drawing) { modify_curves(md, ctx, *drawing); });
[&](Drawing *drawing) { modify_curves(*md, *ctx, *drawing); });
}
LukasTonne marked this conversation as resolved Outdated

const

`const`
static void panel_draw(const bContext *C, Panel *panel)