Changeset View
Changeset View
Standalone View
Standalone View
source/blender/compositor/operations/COM_MixOperation.h
| Show All 12 Lines | |||||
| * along with this program; if not, write to the Free Software Foundation, | * along with this program; if not, write to the Free Software Foundation, | ||||
| * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
| * | * | ||||
| * Copyright 2011, Blender Foundation. | * Copyright 2011, Blender Foundation. | ||||
| */ | */ | ||||
| #pragma once | #pragma once | ||||
| #include "COM_NodeOperation.h" | #include "COM_MultiThreadedOperation.h" | ||||
| namespace blender::compositor { | namespace blender::compositor { | ||||
| /** | /** | ||||
| * All this programs converts an input color to an output value. | * All this programs converts an input color to an output value. | ||||
| * it assumes we are in sRGB color space. | * it assumes we are in sRGB color space. | ||||
| */ | */ | ||||
| class MixBaseOperation : public NodeOperation { | class MixBaseOperation : public MultiThreadedOperation { | ||||
| protected: | protected: | ||||
| struct PixelCursor { | |||||
| float *out; | |||||
| const float *row_end; | |||||
| const float *value; | |||||
| const float *color1; | |||||
| const float *color2; | |||||
| int out_stride; | |||||
| int value_stride; | |||||
| int color1_stride; | |||||
| int color2_stride; | |||||
| void next() | |||||
| { | |||||
| BLI_assert(out < row_end); | |||||
| out += out_stride; | |||||
| value += value_stride; | |||||
| color1 += color1_stride; | |||||
| color2 += color2_stride; | |||||
| } | |||||
| }; | |||||
| /** | /** | ||||
| * Prefetched reference to the inputProgram | * Prefetched reference to the inputProgram | ||||
| */ | */ | ||||
| SocketReader *m_inputValueOperation; | SocketReader *m_inputValueOperation; | ||||
| SocketReader *m_inputColor1Operation; | SocketReader *m_inputColor1Operation; | ||||
| SocketReader *m_inputColor2Operation; | SocketReader *m_inputColor2Operation; | ||||
| bool m_valueAlphaMultiply; | bool m_valueAlphaMultiply; | ||||
| bool m_useClamp; | bool m_useClamp; | ||||
| Show All 36 Lines | public: | ||||
| inline bool useValueAlphaMultiply() | inline bool useValueAlphaMultiply() | ||||
| { | { | ||||
| return this->m_valueAlphaMultiply; | return this->m_valueAlphaMultiply; | ||||
| } | } | ||||
| void setUseClamp(bool value) | void setUseClamp(bool value) | ||||
| { | { | ||||
| this->m_useClamp = value; | this->m_useClamp = value; | ||||
| } | } | ||||
| void update_memory_buffer_partial(MemoryBuffer *output, | |||||
| const rcti &area, | |||||
| Span<MemoryBuffer *> inputs) final; | |||||
| protected: | |||||
| virtual void update_memory_buffer_row(PixelCursor &p); | |||||
| }; | }; | ||||
| class MixAddOperation : public MixBaseOperation { | class MixAddOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixBlendOperation : public MixBaseOperation { | class MixBlendOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixColorBurnOperation : public MixBaseOperation { | class MixColorBurnOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixColorOperation : public MixBaseOperation { | class MixColorOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixDarkenOperation : public MixBaseOperation { | class MixDarkenOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixDifferenceOperation : public MixBaseOperation { | class MixDifferenceOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixDivideOperation : public MixBaseOperation { | class MixDivideOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixDodgeOperation : public MixBaseOperation { | class MixDodgeOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixGlareOperation : public MixBaseOperation { | class MixGlareOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixHueOperation : public MixBaseOperation { | class MixHueOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixLightenOperation : public MixBaseOperation { | class MixLightenOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixLinearLightOperation : public MixBaseOperation { | class MixLinearLightOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixMultiplyOperation : public MixBaseOperation { | class MixMultiplyOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixOverlayOperation : public MixBaseOperation { | class MixOverlayOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixSaturationOperation : public MixBaseOperation { | class MixSaturationOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixScreenOperation : public MixBaseOperation { | class MixScreenOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixSoftLightOperation : public MixBaseOperation { | class MixSoftLightOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixSubtractOperation : public MixBaseOperation { | class MixSubtractOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| class MixValueOperation : public MixBaseOperation { | class MixValueOperation : public MixBaseOperation { | ||||
| public: | public: | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| protected: | |||||
| void update_memory_buffer_row(PixelCursor &p) override; | |||||
| }; | }; | ||||
| } // namespace blender::compositor | } // namespace blender::compositor | ||||