92 lines
2.3 KiB
C
92 lines
2.3 KiB
C
|
#pragma once
|
|||
|
|
|||
|
#ifndef IWA_FLOWBLURFX
|
|||
|
#define IWA_FLOWBLURFX
|
|||
|
|
|||
|
#include "stdfx.h"
|
|||
|
#include "tfxparam.h"
|
|||
|
|
|||
|
#include <QThread>
|
|||
|
|
|||
|
struct double2 {
|
|||
|
double x = 0., y = 0.;
|
|||
|
};
|
|||
|
|
|||
|
struct double4 {
|
|||
|
double x = 0., y = 0., z = 0, w = 0.;
|
|||
|
};
|
|||
|
|
|||
|
enum FILTER_TYPE { Linear = 0, Gaussian, Flat };
|
|||
|
|
|||
|
class FlowBlurWorker : public QThread {
|
|||
|
double4 *m_source_buf;
|
|||
|
double2 *m_flow_buf;
|
|||
|
double4 *m_out_buf;
|
|||
|
double *m_reference_buf;
|
|||
|
TDimension m_dim;
|
|||
|
double m_krnlen;
|
|||
|
int m_yFrom, m_yTo;
|
|||
|
FILTER_TYPE m_filterType;
|
|||
|
|
|||
|
public:
|
|||
|
FlowBlurWorker(double4 *source_buf, double2 *flow_buf, double4 *out_buf,
|
|||
|
double *ref_buf, TDimension dim, double krnlen, int yFrom,
|
|||
|
int yTo, FILTER_TYPE filterType)
|
|||
|
: m_source_buf(source_buf)
|
|||
|
, m_flow_buf(flow_buf)
|
|||
|
, m_out_buf(out_buf)
|
|||
|
, m_reference_buf(ref_buf)
|
|||
|
, m_dim(dim)
|
|||
|
, m_krnlen(krnlen)
|
|||
|
, m_yFrom(yFrom)
|
|||
|
, m_yTo(yTo)
|
|||
|
, m_filterType(filterType) {}
|
|||
|
|
|||
|
void run();
|
|||
|
};
|
|||
|
|
|||
|
class Iwa_FlowBlurFx final : public TStandardRasterFx {
|
|||
|
FX_PLUGIN_DECLARATION(Iwa_FlowBlurFx)
|
|||
|
|
|||
|
protected:
|
|||
|
TRasterFxPort m_source;
|
|||
|
TRasterFxPort m_flow;
|
|||
|
TRasterFxPort m_reference;
|
|||
|
|
|||
|
TDoubleParamP m_length;
|
|||
|
|
|||
|
TBoolParamP m_linear;
|
|||
|
TDoubleParamP m_gamma;
|
|||
|
|
|||
|
/*- リニア/ガウシアン/平均化 -*/
|
|||
|
TIntEnumParamP m_filterType;
|
|||
|
|
|||
|
// Reference, Blue Channel of Flow Image
|
|||
|
TIntEnumParamP m_referenceMode;
|
|||
|
|
|||
|
enum ReferenceMode { REFERENCE = 0, FLOW_BLUE_CHANNEL };
|
|||
|
|
|||
|
template <typename RASTER, typename PIXEL>
|
|||
|
void setSourceTileToBuffer(const RASTER srcRas, double4 *buf, bool isLinear,
|
|||
|
double gamma);
|
|||
|
template <typename RASTER, typename PIXEL>
|
|||
|
void setFlowTileToBuffer(const RASTER flowRas, double2 *buf, double *refBuf);
|
|||
|
template <typename RASTER, typename PIXEL>
|
|||
|
void setReferenceTileToBuffer(const RASTER srcRas, double *buf);
|
|||
|
|
|||
|
template <typename RASTER, typename PIXEL>
|
|||
|
void setOutputRaster(double4 *out_buf, const RASTER dstRas, bool isLinear,
|
|||
|
double gamma);
|
|||
|
|
|||
|
public:
|
|||
|
Iwa_FlowBlurFx();
|
|||
|
|
|||
|
void doCompute(TTile &tile, double frame,
|
|||
|
const TRenderSettings &settings) override;
|
|||
|
|
|||
|
bool doGetBBox(double frame, TRectD &bBox,
|
|||
|
const TRenderSettings &info) override;
|
|||
|
|
|||
|
bool canHandle(const TRenderSettings &info, double frame) override;
|
|||
|
};
|
|||
|
#endif
|