Compositor: Full frame Mask node
Adds full frame implementation to this node operations. No functional changes. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D11751
This commit is contained in:
parent
079f35572b
commit
5deb3229a0
|
@ -161,4 +161,41 @@ void MaskOperation::executePixelSampled(float output[4],
|
|||
}
|
||||
}
|
||||
|
||||
void MaskOperation::update_memory_buffer_partial(MemoryBuffer *output,
|
||||
const rcti &area,
|
||||
Span<MemoryBuffer *> UNUSED(inputs))
|
||||
{
|
||||
Vector<MaskRasterHandle *> handles = get_non_null_handles();
|
||||
if (handles.size() == 0) {
|
||||
output->fill(area, COM_VALUE_ZERO);
|
||||
return;
|
||||
}
|
||||
|
||||
float xy[2];
|
||||
for (BuffersIterator<float> it = output->iterate_with({}, area); !it.is_end(); ++it) {
|
||||
xy[0] = it.x * m_maskWidthInv + m_mask_px_ofs[0];
|
||||
xy[1] = it.y * m_maskHeightInv + m_mask_px_ofs[1];
|
||||
*it.out = 0.0f;
|
||||
for (MaskRasterHandle *handle : handles) {
|
||||
*it.out += BKE_maskrasterize_handle_sample(handle, xy);
|
||||
}
|
||||
|
||||
/* Until we get better falloff. */
|
||||
*it.out /= m_rasterMaskHandleTot;
|
||||
}
|
||||
}
|
||||
|
||||
Vector<MaskRasterHandle *> MaskOperation::get_non_null_handles() const
|
||||
{
|
||||
Vector<MaskRasterHandle *> handles;
|
||||
for (int i = 0; i < m_rasterMaskHandleTot; i++) {
|
||||
MaskRasterHandle *handle = m_rasterMaskHandles[i];
|
||||
if (handle == nullptr) {
|
||||
continue;
|
||||
}
|
||||
handles.append(handle);
|
||||
}
|
||||
return handles;
|
||||
}
|
||||
|
||||
} // namespace blender::compositor
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "BLI_listbase.h"
|
||||
#include "COM_NodeOperation.h"
|
||||
#include "COM_MultiThreadedOperation.h"
|
||||
#include "DNA_mask_types.h"
|
||||
#include "IMB_imbuf_types.h"
|
||||
|
||||
|
@ -31,7 +31,7 @@ namespace blender::compositor {
|
|||
/**
|
||||
* Class with implementation of mask rasterization
|
||||
*/
|
||||
class MaskOperation : public NodeOperation {
|
||||
class MaskOperation : public MultiThreadedOperation {
|
||||
protected:
|
||||
Mask *m_mask;
|
||||
|
||||
|
@ -98,6 +98,13 @@ class MaskOperation : public NodeOperation {
|
|||
}
|
||||
|
||||
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override;
|
||||
|
||||
void update_memory_buffer_partial(MemoryBuffer *output,
|
||||
const rcti &area,
|
||||
Span<MemoryBuffer *> inputs) override;
|
||||
|
||||
private:
|
||||
Vector<MaskRasterHandle *> get_non_null_handles() const;
|
||||
};
|
||||
|
||||
} // namespace blender::compositor
|
||||
|
|
Loading…
Reference in New Issue