remove references to raskter from compositor and BKE mask.
authorCampbell Barton <ideasman42@gmail.com>
Tue, 31 Jul 2012 16:04:47 +0000 (16:04 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 31 Jul 2012 16:04:47 +0000 (16:04 +0000)
source/blender/blenkernel/BKE_mask.h
source/blender/blenkernel/intern/mask.c
source/blender/blenkernel/intern/mask_rasterize.c
source/blender/compositor/operations/COM_MaskOperation.cpp
source/blender/compositor/operations/COM_MaskOperation.h
source/blender/nodes/composite/nodes/node_composite_mask.c

index 6c2e2b5d0f3402ecd56f449a913d5d13fe055f70..1148cffffb4e5d16007d6ceca6c1c00c05fbd9d3 100644 (file)
@@ -185,23 +185,8 @@ void BKE_mask_layer_shape_changed_add(struct MaskLayer *masklay, int index,
 
 void BKE_mask_layer_shape_changed_remove(struct MaskLayer *masklay, int index, int count);
 
-/* rasterization */
 int BKE_mask_get_duration(struct Mask *mask);
 
-void BKE_mask_rasterize_layers(struct ListBase *masklayers, int width, int height, float *buffer,
-                               const short do_aspect_correct, const short do_mask_aa,
-                               const short do_feather);
-
-void BKE_mask_rasterize(struct Mask *mask, int width, int height, float *buffer,
-                        const short do_aspect_correct, const short do_mask_aa,
-                        const short do_feather);
-
-/* initialization for tiling */
-#ifdef __PLX_RASKTER_MT__
-void BKE_mask_init_layers(Mask *mask, struct layer_init_data *mlayer_data, int width, int height,
-                                                        const short do_aspect_correct);
-#endif
-
 #define MASKPOINT_ISSEL_ANY(p)          ( ((p)->bezt.f1 | (p)->bezt.f2 | (p)->bezt.f2) & SELECT)
 #define MASKPOINT_ISSEL_KNOT(p)         ( (p)->bezt.f2 & SELECT)
 #define MASKPOINT_ISSEL_HANDLE_ONLY(p)  ( (((p)->bezt.f1 | (p)->bezt.f2) & SELECT) && (((p)->bezt.f2 & SELECT) == 0) )
@@ -216,11 +201,7 @@ void BKE_mask_init_layers(Mask *mask, struct layer_init_data *mlayer_data, int w
 
 #define MASK_RESOL_MAX 128
 
-/* disable to test alternate rasterizer */
-/* #define USE_RASKTER */
-
 /* mask_rasterize.c */
-#ifndef USE_RASKTER
 struct MaskRasterHandle;
 typedef struct MaskRasterHandle MaskRasterHandle;
 
@@ -236,6 +217,4 @@ void              BKE_maskrasterize_buffer(MaskRasterHandle *mr_handle,
                                            const unsigned int width, const unsigned int height,
                                            float *buffer);
 
-#endif /* USE_RASKTER */
-
 #endif /* __BKE_MASK_H__ */
index a088a91000cd37dd9c8b5e57ceed70e53f38903a..bb6e4d82bd26b0cc7a8203d60ab32429ebb654bd 100644 (file)
@@ -56,8 +56,6 @@
 #include "BKE_movieclip.h"
 #include "BKE_utildefines.h"
 
-#include "raskter.h"
-
 static MaskSplinePoint *mask_spline_point_next(MaskSpline *spline, MaskSplinePoint *points_array, MaskSplinePoint *point)
 {
        if (point == &points_array[spline->tot_point - 1]) {
@@ -2535,256 +2533,7 @@ void BKE_mask_layer_shape_changed_remove(MaskLayer *masklay, int index, int coun
        }
 }
 
-/* local functions */
-static void invert_vn_vn(float *array, const int size)
-{
-       float *arr = array + (size - 1);
-       int i = size;
-       while (i--) {
-               *(arr) = 1.0f - *(arr);
-               arr--;
-       }
-}
-
-static void m_invert_vn_vn(float *array, const float f, const int size)
-{
-       float *arr = array + (size - 1);
-       int i = size;
-       while (i--) {
-               *(arr) = 1.0f - (*(arr) * f);
-               arr--;
-       }
-}
-
-static void clamp_vn_vn(float *array, const int size)
-{
-       float *arr = array + (size - 1);
-
-       int i = size;
-       while (i--) {
-               if      (*arr < 0.0f) *arr = 0.0f;
-               else if (*arr > 1.0f) *arr = 1.0f;
-               arr--;
-       }
-}
-
 int BKE_mask_get_duration(Mask *mask)
 {
-       return MAX2(1, mask->efra - mask->sfra);
-}
-
-/* rasterization */
-void BKE_mask_rasterize_layers(ListBase *masklayers, int width, int height, float *buffer,
-                               const short do_aspect_correct, const short do_mask_aa,
-                               const short do_feather)
-{
-       MaskLayer *masklay;
-
-       /* temp blending buffer */
-       const int buffer_size = width * height;
-       float *buffer_tmp = MEM_mallocN(sizeof(float) * buffer_size, __func__);
-
-       for (masklay = masklayers->first; masklay; masklay = masklay->next) {
-               MaskSpline *spline;
-               float alpha;
-
-               if (masklay->restrictflag & MASK_RESTRICT_RENDER) {
-                       continue;
-               }
-
-               memset(buffer_tmp, 0, sizeof(float) * buffer_size);
-
-               for (spline = masklay->splines.first; spline; spline = spline->next) {
-                       float (*diff_points)[2];
-                       int tot_diff_point;
-
-                       float (*diff_feather_points)[2];
-                       int tot_diff_feather_points;
-
-                       diff_points = BKE_mask_spline_differentiate_with_resolution(spline, width, height,
-                                                                                   &tot_diff_point);
-
-                       if (tot_diff_point) {
-                               if (do_feather) {
-                                       diff_feather_points =
-                                               BKE_mask_spline_feather_differentiated_points_with_resolution(spline, width, height,
-                                                                                                             &tot_diff_feather_points);
-                               }
-                               else {
-                                       tot_diff_feather_points = 0;
-                                       diff_feather_points = NULL;
-                               }
-
-                               if (do_aspect_correct) {
-                                       if (width != height) {
-                                               float *fp;
-                                               float *ffp;
-                                               int i;
-                                               float asp;
-
-                                               if (width < height) {
-                                                       fp = &diff_points[0][0];
-                                                       ffp = tot_diff_feather_points ? &diff_feather_points[0][0] : NULL;
-                                                       asp = (float)width / (float)height;
-                                               }
-                                               else {
-                                                       fp = &diff_points[0][1];
-                                                       ffp = tot_diff_feather_points ? &diff_feather_points[0][1] : NULL;
-                                                       asp = (float)height / (float)width;
-                                               }
-
-                                               for (i = 0; i < tot_diff_point; i++, fp += 2) {
-                                                       (*fp) = (((*fp) - 0.5f) / asp) + 0.5f;
-                                               }
-
-                                               if (tot_diff_feather_points) {
-                                                       for (i = 0; i < tot_diff_feather_points; i++, ffp += 2) {
-                                                               (*ffp) = (((*ffp) - 0.5f) / asp) + 0.5f;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if (tot_diff_point) {
-                                       PLX_raskterize(diff_points, tot_diff_point,
-                                   buffer_tmp, width, height,do_mask_aa);
-
-                                       if (tot_diff_feather_points) {
-                                               PLX_raskterize_feather(diff_points, tot_diff_point,
-                                                                      diff_feather_points, tot_diff_feather_points,
-                                                                      buffer_tmp, width, height);
-                                               MEM_freeN(diff_feather_points);
-                                       }
-
-                                       MEM_freeN(diff_points);
-                               }
-                       }
-               }
-
-               /* blend with original */
-               if (masklay->blend_flag & MASK_BLENDFLAG_INVERT) {
-                       /* apply alpha multiply before inverting */
-                       if (masklay->alpha != 1.0f) {
-                               m_invert_vn_vn(buffer_tmp, masklay->alpha, buffer_size);
-                       }
-                       else {
-                               invert_vn_vn(buffer_tmp, buffer_size);
-                       }
-
-                       alpha = 1.0f;
-               }
-               else {
-                       alpha = masklay->alpha;
-               }
-
-               switch (masklay->blend) {
-                       case MASK_BLEND_SUBTRACT:
-                       {
-                               if (alpha == 1.0f) {
-                                       sub_vn_vn(buffer, buffer_tmp, buffer_size);
-                               }
-                               else {
-                                       msub_vn_vn(buffer, buffer_tmp, alpha, buffer_size);
-                               }
-                               break;
-                       }
-                       case MASK_BLEND_ADD:
-                       default:
-                       {
-                               if (alpha == 1.0f) {
-                                       add_vn_vn(buffer, buffer_tmp, buffer_size);
-                               }
-                               else {
-                                       madd_vn_vn(buffer, buffer_tmp, alpha, buffer_size);
-                               }
-                               break;
-                       }
-               }
-
-               if (do_mask_aa) {
-                       //PLX_antialias_buffer(buffer,width,height);
-               }
-               /* clamp at the end */
-               clamp_vn_vn(buffer, buffer_size);
-       }
-       MEM_freeN(buffer_tmp);
-}
-
-#ifdef __PLX_RASKTER_MT__
-void BKE_mask_init_layers(Mask *mask, struct layer_init_data *mlayer_data, int width, int height, const short do_aspect_correct)
-{
-       MaskLayer *masklay;
-       int numLayers=0;
-       int currLayer=0;
-       for (masklay = mask->masklayers->first; masklay; masklay = masklay->next) {
-               numLayers++;
-       }
-       mlayer_data = MEM_mallocN(sizeof(struct layer_init_data) * numLayers, __func__); //size correct?
-       
-       
-       for (masklay = mask->masklayers->first; masklay; masklay = masklay->next) {
-               MaskSpline *spline;
-               for (spline = masklay->splines.first; spline; spline = spline->next) {
-                       float (*diff_points)[2];
-                       int tot_diff_point;
-
-                       float (*diff_feather_points)[2];
-                       int tot_diff_feather_points;
-
-                       diff_points = BKE_mask_spline_differentiate_with_resolution(spline, width, height,
-                                                                                   &tot_diff_point);
-
-                       if (tot_diff_point) {
-                               if (do_feather) {
-                                       diff_feather_points =
-                                               BKE_mask_spline_feather_differentiated_points_with_resolution(spline, width, height,
-                                                                                                             &tot_diff_feather_points);
-                               }
-                               else {
-                                       tot_diff_feather_points = 0;
-                                       diff_feather_points = NULL;
-                               }
-
-                               if (do_aspect_correct) {
-                                       if (width != height) {
-                                               float *fp;
-                                               float *ffp;
-                                               int i;
-                                               float asp;
-
-                                               if (width < height) {
-                                                       fp = &diff_points[0][0];
-                                                       ffp = tot_diff_feather_points ? &diff_feather_points[0][0] : NULL;
-                                                       asp = (float)width / (float)height;
-                                               }
-                                               else {
-                                                       fp = &diff_points[0][1];
-                                                       ffp = tot_diff_feather_points ? &diff_feather_points[0][1] : NULL;
-                                                       asp = (float)height / (float)width;
-                                               }
-
-                                               for (i = 0; i < tot_diff_point; i++, fp += 2) {
-                                                       (*fp) = (((*fp) - 0.5f) / asp) + 0.5f;
-                                               }
-
-                                               if (tot_diff_feather_points) {
-                                                       for (i = 0; i < tot_diff_feather_points; i++, ffp += 2) {
-                                                               (*ffp) = (((*ffp) - 0.5f) / asp) + 0.5f;
-                                                       }
-                                               }
-                                       }
-                               }
-                               PLX_init_base_data(mlayer_data[currLayer], diff_points, tot_diff_points, width, height);
-                               currLayer++;
-                       }
-               }
-       }
-}
-#endif
-
-void BKE_mask_rasterize(Mask *mask, int width, int height, float *buffer,
-                        const short do_aspect_correct, const short do_mask_aa,
-                        const short do_feather)
-{
-       BKE_mask_rasterize_layers(&mask->masklayers, width, height, buffer, do_aspect_correct, do_mask_aa, do_feather);
+       return maxi(1, mask->efra - mask->sfra);
 }
index 6811a6fea1824af2045f518b96564105428e4d66..ce04ad31a335780be3799ec1508bac57657f3224 100644 (file)
@@ -45,8 +45,6 @@
 
 #include "BKE_mask.h"
 
-#ifndef USE_RASKTER
-
 /* this is rather and annoying hack, use define to isolate it.
  * problem is caused by scanfill removing edges on us. */
 #define USE_SCANFILL_EDGE_WORKAROUND
@@ -1317,5 +1315,3 @@ void BKE_maskrasterize_buffer(MaskRasterHandle *mr_handle,
                }
        }
 }
-
-#endif /* USE_RASKTER */
index a3326de0a3088f5296175963d67586b82214954a..32e79a794bf61f0f2bee7a7623f618d0b00f05a1 100644 (file)
 
 #include "DNA_scene_types.h"
 
-#ifdef USE_RASKTER
-
 extern "C" {
-       #include "../../../../intern/raskter/raskter.h"
+       #include "BKE_mask.h"
 }
 
-MaskOperation::MaskOperation() : NodeOperation()
-{
-       this->addOutputSocket(COM_DT_VALUE);
-       this->m_mask = NULL;
-       this->m_maskWidth = 0;
-       this->m_maskHeight = 0;
-       this->m_framenumber = 0;
-       this->m_rasterizedMask = NULL;
-       setComplex(true);
-}
-
-void MaskOperation::initExecution()
-{
-       initMutex();
-
-       this->m_rasterizedMask = NULL;
-       this->m_maskLayers.first = this->m_maskLayers.last = NULL;
-
-       if (this->m_mask) {
-               BKE_mask_layer_copy_list(&this->m_maskLayers, &this->m_mask->masklayers);
-       }
-}
-
-void MaskOperation::deinitExecution()
-{
-       BKE_mask_layer_free_list(&this->m_maskLayers);
-
-       if (this->m_rasterizedMask) {
-               MEM_freeN(this->m_rasterizedMask);
-               this->m_rasterizedMask = NULL;
-       }
-}
-
-void *MaskOperation::initializeTileData(rcti *rect)
-{
-       if (this->m_rasterizedMask)
-               return this->m_rasterizedMask;
-
-       if (!this->m_mask)
-               return NULL;
-
-       lockMutex();
-       if (this->m_rasterizedMask == NULL) {
-               int width = this->getWidth();
-               int height = this->getHeight();
-               float *buffer;
-
-               buffer = (float *)MEM_callocN(sizeof(float) * width * height, "rasterized mask");
-
-               BKE_mask_rasterize_layers(&this->m_maskLayers, width, height, buffer, TRUE,
-                                         this->m_do_smooth, this->m_do_feather);
-
-               if (this->m_do_smooth) {
-                       PLX_antialias_buffer(buffer, width, height);
-               }
-
-               this->m_rasterizedMask = buffer;
-       }
-       unlockMutex();
-       return this->m_rasterizedMask;
-}
-
-void MaskOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[])
-{
-       if (this->m_maskWidth == 0 || this->m_maskHeight == 0) {
-               NodeOperation::determineResolution(resolution, preferredResolution);
-       }
-       else {
-               unsigned int nr[2];
-
-               nr[0] = this->m_maskWidth;
-               nr[1] = this->m_maskHeight;
-
-               NodeOperation::determineResolution(resolution, nr);
-
-               resolution[0] = this->m_maskWidth;
-               resolution[1] = this->m_maskHeight;
-       }
-}
-
-void MaskOperation::executePixel(float *color, int x, int y, void *data)
-{
-       if (!data) {
-               color[0] = 0.0f;
-       }
-       else {
-               float *buffer = (float *) data;
-               int index = (y * this->getWidth() + x);
-
-               color[0] = buffer[index];
-       }
-}
-
-#else /* mask rasterizer by campbell wip */
-
 MaskOperation::MaskOperation() : NodeOperation()
 {
        this->addOutputSocket(COM_DT_VALUE);
@@ -252,5 +155,3 @@ void MaskOperation::executePixel(float *color, float x, float y, PixelSampler sa
                color[0] /= this->m_rasterMaskHandleTot;
        }
 }
-
-#endif /* USE_RASKTER */
index 77d8e1148c2db759117fb4d899b3425427545baf..859420bd6507a9b20597f121f973bc5b8452bcfe 100644 (file)
  *             Sergey Sharybin
  */
 
-
 #ifndef _COM_MaskOperation_h
 #define _COM_MaskOperation_h
 
-/* XXX, remove when the USE_RASKTER option is also removed */
-extern "C" {
-       #include "BKE_mask.h"
-}
 
 #include "COM_NodeOperation.h"
 #include "DNA_scene_types.h"
@@ -36,10 +31,6 @@ extern "C" {
 #include "BLI_listbase.h"
 #include "IMB_imbuf_types.h"
 
-#ifdef __PLX_RASKTER_MT__
-#include "../../../../intern/raskter/raskter.h"
-#endif
-
 /**
  * Class with implementation of mask rasterization
  */
@@ -60,15 +51,8 @@ protected:
        bool m_do_smooth;
        bool m_do_feather;
 
-#ifdef USE_RASKTER
-       float *m_rasterizedMask;
-       
-       ListBase m_maskLayers;
-
-#else /* USE_RASKTER */
        struct MaskRasterHandle *m_rasterMaskHandles[32];
        unsigned int             m_rasterMaskHandleTot;
-#endif /* USE_RASKTER */
 
        /**
         * Determine the output resolution. The resolution is retrieved from the Renderer
@@ -100,12 +84,7 @@ public:
        void setMotionBlurSamples(int samples) { this->m_rasterMaskHandleTot = max(1, samples); }
        void setMotionBlurShutter(float shutter) { this->m_frame_shutter = shutter; }
 
-#ifdef USE_RASKTER
-       void *initializeTileData(rcti *rect);
-       void executePixel(float *color, int x, int y, void *data);
-#else /* USE_RASKTER */
        void executePixel(float *color, float x, float y, PixelSampler sampler);
-#endif /* USE_RASKTER */
 };
 
 #endif
index 5df8bdc0a85955cef85d66c736f8f2fdbd51a337..f4cbd1b7f6fea0d6b6584d4bb39095313328f7dc 100644 (file)
@@ -38,8 +38,6 @@
 
 #include "node_composite_util.h"
 
-#include "../../../../intern/raskter/raskter.h"
-
 /* **************** Translate  ******************** */
 
 static bNodeSocketTemplate cmp_node_mask_out[] = {
@@ -51,6 +49,7 @@ static void exec(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **
 {
        if (node->id) {
                Mask *mask = (Mask *)node->id;
+               MaskRasterHandle *mr_handle;
                CompBuf *stackbuf;
                RenderData *rd = data;
                float *res;
@@ -70,13 +69,17 @@ static void exec(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **
                stackbuf = alloc_compbuf(sx, sy, CB_VAL, TRUE);
                res = stackbuf->rect;
 
-               BKE_mask_rasterize(mask, sx, sy, res, TRUE,
-                                  (node->custom1 & CMP_NODEFLAG_MASK_AA) != 0,
-                                  (node->custom1 & CMP_NODEFLAG_MASK_NO_FEATHER) == 0);
+               /* mask raster begin */
+               mr_handle = BKE_maskrasterize_handle_new();
+               BKE_maskrasterize_handle_init(mr_handle, mask,
+                                             sx, sy,
+                                             TRUE,
+                                             (node->custom1 & CMP_NODEFLAG_MASK_AA) != 0,
+                                             (node->custom1 & CMP_NODEFLAG_MASK_NO_FEATHER) == 0);
+               BKE_maskrasterize_buffer(mr_handle, sx, sy, res);
+               BKE_maskrasterize_handle_free(mr_handle);
+               /* mask raster end */
 
-               if (node->custom1) {
-                       PLX_antialias_buffer(res,sx,sy);
-               }
                /* pass on output and free */
                out[0]->data = stackbuf;
        }