Fix multiple crashes with custom input curves
This commit is contained in:
parent
5136cc701f
commit
4785f80d51
|
@ -140,6 +140,8 @@ void BKE_brush_scale_size(int *r_brush_size,
|
|||
float new_unprojected_radius,
|
||||
float old_unprojected_radius);
|
||||
|
||||
void BKE_brush_default_input_curves_set(struct Brush *brush);
|
||||
|
||||
/* Accessors */
|
||||
#define BKE_brush_tool_get(brush, p) \
|
||||
(CHECK_TYPE_ANY(brush, struct Brush *, const struct Brush *), \
|
||||
|
|
|
@ -265,9 +265,10 @@ static void brush_reset_input_curve(CurveMapping *cumap)
|
|||
CurveMap *cuma = cumap->cm;
|
||||
BKE_curvemap_reset(cuma, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
|
||||
BKE_curvemapping_changed(cumap, false);
|
||||
BKE_curvemapping_init(cumap);
|
||||
}
|
||||
|
||||
static void BKE_brush_default_input_curves_set(Brush *brush)
|
||||
void BKE_brush_default_input_curves_set(Brush *brush)
|
||||
{
|
||||
if (!brush->pressure_size_curve) {
|
||||
brush->pressure_size_curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
|
||||
#include "BKE_animsys.h"
|
||||
#include "BKE_armature.h"
|
||||
#include "BKE_brush.h"
|
||||
#include "BKE_collection.h"
|
||||
#include "BKE_colortools.h"
|
||||
#include "BKE_cryptomatte.h"
|
||||
|
@ -1490,5 +1491,10 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
*/
|
||||
{
|
||||
/* Keep this block, even when empty. */
|
||||
LISTBASE_FOREACH (Brush *, br, &bmain->brushes) {
|
||||
if (!br->pressure_size_curve || !br->pressure_strength_curve) {
|
||||
BKE_brush_default_input_curves_set(br);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -681,6 +681,7 @@ static float paint_space_stroke_spacing(bContext *C,
|
|||
float size_clamp = 0.0f;
|
||||
float final_size_pressure = size_pressure;
|
||||
if (brush->pressure_size_curve) {
|
||||
BKE_curvemapping_init(brush->pressure_size_curve);
|
||||
final_size_pressure = BKE_curvemapping_evaluateF(brush->pressure_size_curve, 0, size_pressure);
|
||||
}
|
||||
float size = BKE_brush_size_get(scene, stroke->brush) * final_size_pressure;
|
||||
|
|
|
@ -2309,6 +2309,9 @@ static float brush_strength(const Sculpt *sd,
|
|||
}
|
||||
|
||||
float pressure = BKE_brush_use_alpha_pressure(brush) ? cache->pressure : 1.0f;
|
||||
if (brush->pressure_strength_curve) {
|
||||
BKE_curvemapping_init(brush->pressure_strength_curve);
|
||||
}
|
||||
pressure = BKE_brush_use_alpha_pressure(brush) && brush->pressure_strength_curve ?
|
||||
BKE_curvemapping_evaluateF(brush->pressure_strength_curve, 0, cache->pressure) :
|
||||
pressure;
|
||||
|
|
Loading…
Reference in New Issue