Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-07-04 11:10:23 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-07-04 11:10:23 +0400
commitfacc2429ab1dc7741d3e795216a27063ac1192b7 (patch)
treeae4cba1d05552e9ca613a63f0ad8fe7647d220a5 /source/blender/compositor/operations/COM_MaskOperation.cpp
parent81a509fa409091f65cad4e8ac2a31fcb486ca2c3 (diff)
Mask node: create a copy of layers to be rasterized in initExecution
This creates a list of splines to be rasterized in nitExecution which is being called from main thread. This should resolve possible threading issues discovered in tomato branch.
Diffstat (limited to 'source/blender/compositor/operations/COM_MaskOperation.cpp')
-rw-r--r--source/blender/compositor/operations/COM_MaskOperation.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/compositor/operations/COM_MaskOperation.cpp b/source/blender/compositor/operations/COM_MaskOperation.cpp
index aa16ecf5d09..2b45cd53fd5 100644
--- a/source/blender/compositor/operations/COM_MaskOperation.cpp
+++ b/source/blender/compositor/operations/COM_MaskOperation.cpp
@@ -49,11 +49,19 @@ MaskOperation::MaskOperation() : NodeOperation()
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;
@@ -75,7 +83,10 @@ void *MaskOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers
float *buffer;
buffer = (float *)MEM_callocN(sizeof(float) * width * height, "rasterized mask");
- BKE_mask_rasterize(this->m_mask, width, height, buffer, TRUE, this->m_do_smooth, this->m_do_feather);
+
+ 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);
}