#pragma once //---------------------------------------- // Iwa_BokehAdvancedFx // Advanced version of Bokeh Fx Iwa // - Enabled to set different hardness for each layer // - Enabled to apply the depth reference image for each layer //---------------------------------------- #ifndef IWA_BOKEH_ADVANCED_H #define IWA_BOKEH_ADVANCED_H #include "stdfx.h" #include "tfxparam.h" #include "traster.h" #include "kiss_fft.h" #include "tools/kiss_fftnd.h" #include "iwa_bokeh_util.h" #include #include const int LAYER_NUM = 5; //------------------------------------ class Iwa_BokehAdvancedFx : public Iwa_BokehCommonFx { FX_PLUGIN_DECLARATION(Iwa_BokehAdvancedFx) protected: TFxPortDG m_control; TBoolParamP m_hardnessPerSource; // switch between layer and master hardness struct LAYERPARAM { TRasterFxPort m_source; TDoubleParamP m_distance; // The layer distance from the camera (0-1) TDoubleParamP m_bokehAdjustment; // Factor for adjusting distance (= focal // distance - layer distance) (0-2.0) TDoubleParamP m_hardness; // film gamma for each layer TIntParamP m_depth_ref; // port index of depth reference image TDoubleParamP m_depthRange; // distance range varies depends on the // brightness of the reference image (0-1) }; std::array m_layerParams; // sort source images QList getSortedSourceIndices(double frame); // Compute the bokeh size for each layer. The source tile will be enlarged by // the largest size of them. QMap getIrisSizes(const double frame, const QList sourceIndices, const double bokehPixelAmount, double& maxIrisSize); // return true if the control image is available and used bool portIsUsed(int portIndex); public: Iwa_BokehAdvancedFx(); void doCompute(TTile& tile, double frame, const TRenderSettings& settings) override; int dynamicPortGroupsCount() const override { return 1; } const TFxPortDG* dynamicPortGroup(int g) const override { return (g == 0) ? &m_control : 0; } }; #endif