use calculated spline resoltion rather then fixed at 32.
authorCampbell Barton <ideasman42@gmail.com>
Mon, 16 Jul 2012 14:17:01 +0000 (14:17 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 16 Jul 2012 14:17:01 +0000 (14:17 +0000)
source/blender/blenkernel/BKE_mask.h
source/blender/blenkernel/intern/mask.c
source/blender/blenkernel/intern/mask_rasterize.c

index 411350764b38c287ac05af9b0372694ca3fc3c1e..a293e4a784b5c248926874df5274552e13577b52 100644 (file)
@@ -64,6 +64,9 @@ void BKE_mask_layer_copy_list(struct ListBase *masklayers_new, struct ListBase *
 /* splines */
 struct MaskSpline *BKE_mask_spline_add(struct MaskLayer *masklay);
 
+int BKE_mask_spline_resolution(struct MaskSpline *spline, int width, int height);
+int BKE_mask_spline_feather_resolution(struct MaskSpline *spline, int width, int height);
+
 int BKE_mask_spline_differentiate_calc_total(const struct MaskSpline *spline, const int resol);
 
 float (*BKE_mask_spline_differentiate(struct MaskSpline *spline, int *tot_diff_point))[2];
index 1efa62efa1334ae706fcd50309ce5152509674a4..9374b5dc1d9d0dd18e6812142304c2ff3835c73e 100644 (file)
@@ -246,7 +246,7 @@ MaskSpline *BKE_mask_spline_add(MaskLayer *masklay)
        return spline;
 }
 
-static int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
+int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
 {
        float max_segment = 0.01f;
        int i, resol = 1;
@@ -284,7 +284,7 @@ static int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
        return resol;
 }
 
-static int BKE_mask_spline_feather_resolution(MaskSpline *spline, int width, int height)
+int BKE_mask_spline_feather_resolution(MaskSpline *spline, int width, int height)
 {
        const float max_segment = 0.005;
        int resol = BKE_mask_spline_resolution(spline, width, height);
index c3d67a24c3ba17ae21f18f2704fb0eec8ec943f2..7b84abc3d36302c771e02ad356c92c5c814fbd44 100644 (file)
@@ -471,7 +471,6 @@ void BKE_maskrasterize_handle_init(MaskRasterHandle *mr_handle, struct Mask *mas
                                    const short do_feather)
 {
        const rctf default_bounds = {0.0f, 1.0f, 0.0f, 1.0f};
-       const int resol = SPLINE_RESOL;  /* TODO: real size */
        const float pixel_size = 1.0f / MIN2(width, height);
 
        const float zvec[3] = {0.0f, 0.0f, 1.0f};
@@ -522,6 +521,10 @@ void BKE_maskrasterize_handle_init(MaskRasterHandle *mr_handle, struct Mask *mas
                        float (*diff_feather_points)[2];
                        int tot_diff_feather_points;
 
+                       const int resol_a = BKE_mask_spline_resolution(spline, width, height) / 4;
+                       const int resol_b = BKE_mask_spline_feather_resolution(spline, width, height) / 4;
+                       const int resol = CLAMPIS(MAX2(resol_a, resol_b), 4, 512);
+
                        diff_points = BKE_mask_spline_differentiate_with_resolution_ex(
                                          spline, resol, &tot_diff_point);