Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef _TRASTERFX_
Toshihiro Shimizu 890ddd
#define _TRASTERFX_
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tnotanimatableparam.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "tfx.h"
Toshihiro Shimizu 890ddd
#include "trasterfxrenderdata.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TFX_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4251)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//  Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TFlash;
Toshihiro Shimizu 890ddd
class TPalette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
//    TRenderSettings  declaration
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    Data class containing the relevant additional informations needed in
Toshihiro Shimizu 890ddd
            a render process.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  \details  This class stores most of the data required by Toonz and single fxs to
Toshihiro Shimizu 890ddd
            perform a render. While a good part of this data group is used internally
Toshihiro Shimizu 890ddd
            by Toonz to deal with global aspects of a rendering process, another part
Toshihiro Shimizu 890ddd
            must be actively referenced when rendering an fx.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
            The most important member of this class is \p m_affine, which specifies
Toshihiro Shimizu 890ddd
            the affine transform that must be applied by an fx if it were to render
Toshihiro Shimizu 890ddd
            on the default reference.
Toshihiro Shimizu 890ddd
            
Toshihiro Shimizu 890ddd
  \sa       TRasterFx::compute() for further informations.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TRenderSettings
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	//! Specifies the filter quality applied on affine transforms.
Toshihiro Shimizu 890ddd
	enum ResampleQuality {
Toshihiro Shimizu 890ddd
		HighResampleQuality = 1,	 //!< Use TRop::Hammin3 filter  - pixel blur factor: 3.
Toshihiro Shimizu 890ddd
		ImprovedResampleQuality = 2, //!< Use TRop::Hann2 filter    - pixel blur factor: 2.
Toshihiro Shimizu 890ddd
		StandardResampleQuality = 3, //!< Use TRop::Triangle filter - pixel blur factor: 1.
Toshihiro Shimizu 890ddd
		Triangle_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Mitchell_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Cubic5_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Cubic75_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Cubic1_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Hann2_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Hann3_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Hamming2_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Hamming3_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Lanczos2_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Lanczos3_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Gauss_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		ClosestPixel_FilterResampleQuality,
Toshihiro Shimizu 890ddd
		Bilinear_FilterResampleQuality
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//! Specifies the field prevalence of a rendering request.
Toshihiro Shimizu 890ddd
	enum FieldPrevalence {
Toshihiro Shimizu 890ddd
		NoField,   //!< Common rendering.
Toshihiro Shimizu 890ddd
		EvenField, //!< Field rendering, even frame.
Toshihiro Shimizu 890ddd
		OddField   //!< Field rendering, odd frame.
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	// Note - fields are sorted by decreasing size. This ensures minimal padding.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TAffine m_affine;						  //!< Affine that \a should be applied \a after the fx has been rendered.
Toshihiro Shimizu 890ddd
											  //!  \sa TRasterFx::compute().
Toshihiro Shimizu 890ddd
	std::vector<trasterfxrenderdatap> m_data; //!< Fx-specific data inserted by upstream fxs.</trasterfxrenderdatap>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TRasterP m_mark; //!< Raster image that is overed on rendered frames in
Toshihiro Shimizu 890ddd
					 //!  demo versions of Toonz
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	double m_gamma;				//!< Gamma modifier for the output frame. \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
	double m_timeStretchFrom,   //!< Fps source stretch variable. \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
		m_timeStretchTo;		//!< Fps destination stretch variable. \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
	double m_stereoscopicShift; //!< X-axis camera shift for stereoscopy, in inches. \sa m_stereoscopic. \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_bpp;		   //!< Bits-per-pixel required in the output frame. \remark This data
Toshihiro Shimizu 890ddd
					   //!  must be accompanied by a tile of the suitable type. \sa TRasterFx::compute().
Toshihiro Shimizu 890ddd
	int m_maxTileSize; //!< Maximum size (in MegaBytes) of a tile cachable during a render process.
Toshihiro Shimizu 890ddd
					   //!  Used by the predictive cache manager to subdivide an fx calculation into tiles. \sa TRasterFx::compute().
Toshihiro Shimizu 890ddd
	int m_shrinkX,	 //!< Required horizontal shrink. \warning Obsolete, do not use. \todo Must be removed.
Toshihiro Shimizu 890ddd
		m_shrinkY;	 //!< Required vertical shrink. \warning Obsolete, do not use. \todo Must be removed.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	ResampleQuality m_quality;		   //!< Filter quality used on affine transforms.
Toshihiro Shimizu 890ddd
	FieldPrevalence m_fieldPrevalence; //!< Field prevalence of the required frame.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool m_stereoscopic; //!< Whether stereoscopic render (3D effect) is in use. \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
	bool m_isSwatch;	 //!< Whether this render instance comes from a swatch viewer.
Toshihiro Shimizu 890ddd
						 //!  This info could be used by computationally intensive fxs to
Toshihiro Shimizu 890ddd
						 //!  implement a simplified render during user interactions.
Toshihiro Shimizu 890ddd
	bool m_userCachable; //!< Whether the user can manually cache this render request. \sa TRasterFx::compute()
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// Toonz-relevant data (used by Toonz, fx writers should *IGNORE* them while rendering a single fx)
Toshihiro Shimizu 890ddd
	// NOTE: The signed options should to be moved in TOutputProperties class.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool m_applyShrinkToViewer; //!< Whether shrink must be considered.   \note Should be moved to TOutputProperties.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*-- カメラサイズ --*/
Toshihiro Shimizu 890ddd
	TRectD m_cameraBox;
Toshihiro Shimizu 890ddd
	/*-- 途中でPreview計算がキャンセルされたときのフラグ --*/
Toshihiro Shimizu 890ddd
	int *m_isCanceled;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TRenderSettings();
Toshihiro Shimizu 890ddd
	~TRenderSettings();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool operator==(const TRenderSettings &rhs) const;
Toshihiro Shimizu 890ddd
	bool operator!=(const TRenderSettings &rhs) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//! Returns a textual description of all data that can affect the result of a frame computation.
Toshihiro Shimizu 890ddd
	std::string toString() const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
//    TRasterFx  declaration
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//! TRasterFx is the base class for any \a renderable Toonz Fx.
Toshihiro Shimizu 890ddd
/*! 
Toshihiro Shimizu 890ddd
  A standard Toonz Fx is roughly composed of 2 parts: one providing the necessary
Toshihiro Shimizu 890ddd
  interface for access by a GUI interface (covered by the TFx class, which this class
Toshihiro Shimizu 890ddd
  inherits), the other for the actual computation of the fx - which is the focus
Toshihiro Shimizu 890ddd
  of the TRasterFx interface.
Toshihiro Shimizu 890ddd
\n\n
Toshihiro Shimizu 890ddd
  So, the essential part of this class lies in the compute() and doCompute() methods that
Toshihiro Shimizu 890ddd
  are invoked to perform an fx computation. The former method is the publicly accessed one, while
Toshihiro Shimizu 890ddd
  the latter is the one that fx writers must reimplement to supply their rendering code.
Toshihiro Shimizu 890ddd
\n
Toshihiro Shimizu 890ddd
  The allocateAndCompute() method can be used to automatically allocate the tile to be rendered
Toshihiro Shimizu 890ddd
  right before invoking compute().
Toshihiro Shimizu 890ddd
\n\n
Toshihiro Shimizu 890ddd
  The dryCompute() / doDryCompute() methods are required by Toonz to perform predictive caching
Toshihiro Shimizu 890ddd
  in order to minimize needless recomputations of the same fx. Fx writers must reimplement
Toshihiro Shimizu 890ddd
  doDryCompute() to mimic the behaviour of doCompute() in terms of compute() invocations for children
Toshihiro Shimizu 890ddd
  fx nodes. Those compute() invocations must be replaced with dryCompute().
Toshihiro Shimizu 890ddd
\n\n
Toshihiro Shimizu 890ddd
  The getBBox() / doGetBBox() methods are used to obtain the geometry of the maximal output that an
Toshihiro Shimizu 890ddd
  fx can produce with similar inputs to compute(). Again, doCompute() is the method to reimplement
Toshihiro Shimizu 890ddd
  by subclasses. Observe that, unlike doCompute() and doDryCompute(), in this case the affine supplied
Toshihiro Shimizu 890ddd
  with the render settings must be \b ignored (see the method itself for further details).
Toshihiro Shimizu 890ddd
\n\n
Toshihiro Shimizu 890ddd
  The canHandle() / handledAffine() methods are used by the compute() function to separate the part of
Toshihiro Shimizu 890ddd
  an affine that the doCompute() can apply to the result on its own from the rest (which is automatically
Toshihiro Shimizu 890ddd
  applied on the fx result using TRasterFx::applyAffine() ).
Toshihiro Shimizu 890ddd
  Note that every Toonz fx should be able to handle at least the scale part of an affine (applying
Toshihiro Shimizu 890ddd
  TRasterFx::applyAffine() on image enlargements typically hampers image quality).
Toshihiro Shimizu 890ddd
\n\n
Toshihiro Shimizu 890ddd
  Further methods whose reimplementation depends on the fx itself are getAlias(), which must return
Toshihiro Shimizu 890ddd
  a string uniquely descripting a rendered object, and getMemoryRequirement() to declare the amount of
Toshihiro Shimizu 890ddd
  memory that will be used by the fx.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI TRasterFx : public TFx
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	class TRasterFxImp;
Toshihiro Shimizu 890ddd
	TRasterFxImp *m_rasFxImp;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	virtual void doCompute(TTile &tile,
Toshihiro Shimizu 890ddd
						   double frame,
Toshihiro Shimizu 890ddd
						   const TRenderSettings &settings) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void doDryCompute(TRectD &rect,
Toshihiro Shimizu 890ddd
							  double frame,
Toshihiro Shimizu 890ddd
							  const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TRasterFx();
Toshihiro Shimizu 890ddd
	~TRasterFx();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void compute(
Toshihiro Shimizu 890ddd
		TTile &tile,
Toshihiro Shimizu 890ddd
		double frame,
Toshihiro Shimizu 890ddd
		const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void compute(TFlash &flash, int frame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void allocateAndCompute(
Toshihiro Shimizu 890ddd
		TTile &tile,
Toshihiro Shimizu 890ddd
		const TPointD &pos, const TDimension &size,
Toshihiro Shimizu 890ddd
		TRasterP templateRas, double frame,
Toshihiro Shimizu 890ddd
		const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool doGetBBox(
Toshihiro Shimizu 890ddd
		double frame,
Toshihiro Shimizu 890ddd
		TRectD &bBox,
Toshihiro Shimizu 890ddd
		const TRenderSettings &info) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool getBBox(double frame, TRectD &bBox, const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool isCachable() const { return true; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void transform(double frame,
Toshihiro Shimizu 890ddd
						   int port,
Toshihiro Shimizu 890ddd
						   const TRectD &rectOnOutput,
Toshihiro Shimizu 890ddd
						   const TRenderSettings &infoOnOutput,
Toshihiro Shimizu 890ddd
						   TRectD &rectOnInput,
Toshihiro Shimizu 890ddd
						   TRenderSettings &infoOnInput);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool canHandle(const TRenderSettings &info, double frame) = 0;
Toshihiro Shimizu 890ddd
	virtual TAffine handledAffine(const TRenderSettings &info, double frame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static TRasterP applyAffine(
Toshihiro Shimizu 890ddd
		TTile &tileOut,
Toshihiro Shimizu 890ddd
		const TTile &tileIn,
Toshihiro Shimizu 890ddd
		const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// cache interna all'effetto
Toshihiro Shimizu 890ddd
	void enableCache(bool on);
Toshihiro Shimizu 890ddd
	bool isCacheEnabled() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// resituisce una stringa che identifica univocamente il sottoalbero
Toshihiro Shimizu 890ddd
	// avente come radice l'effetto
Toshihiro Shimizu 890ddd
	virtual string getAlias(double frame, const TRenderSettings &info) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void dryCompute(TRectD &rect,
Toshihiro Shimizu 890ddd
							double frame,
Toshihiro Shimizu 890ddd
							const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual int getMemoryRequirement(const TRectD &rect, double frame, const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//! Returns the size (MB) of a tile with passed specs. It can be used to supply the
Toshihiro Shimizu 890ddd
	//! TRasterFx::getMemoryRequirement info. If rect is empty, returns 0.
Toshihiro Shimizu 890ddd
	static int memorySize(const TRectD &rect, int bpp);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool allowUserCacheOnPort(int port) { return true; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool isPlugin() const { return false; };
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	friend class FxResourceBuilder;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TZeraryColumnFx;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TPluginInterface
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	virtual bool isPlugin() const { return false; };
Toshihiro Shimizu 890ddd
	virtual bool isPluginZerary() const { return false; };
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TSmartPointerT<trasterfx>;</trasterfx>
Toshihiro Shimizu 890ddd
template class DVAPI TDerivedSmartPointerT<trasterfx, tfx="">;</trasterfx,>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TRasterFxP : public TDerivedSmartPointerT<trasterfx, tfx=""></trasterfx,>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TRasterFxP() {}
Toshihiro Shimizu 890ddd
	TRasterFxP(TRasterFx *fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
	TRasterFxP(TFx *fx) : DerivedSmartPointer(TFxP(fx)) {}
Toshihiro Shimizu 890ddd
	TRasterFxP(TFxP fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
	operator TFxP() { return TFxP(m_pointer); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TFxPortT<trasterfx>;</trasterfx>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
typedef TFxPortT<trasterfx> TRasterFxPort;</trasterfx>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
//    TGeometryFx  declaration
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TGeometryFx : public TRasterFx
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TGeometryFx();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual TAffine getPlacement(double frame) = 0;
Toshihiro Shimizu 890ddd
	virtual TAffine getParentPlacement(double frame) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void doCompute(TTile &tile, double frame, const TRenderSettings &info);
Toshihiro Shimizu 890ddd
	virtual void compute(TFlash &flash, int frame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool doGetBBox(double frame, TRectD &bbox, const TRenderSettings &info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual bool checkTimeRegion() const { return false; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getAlias(double frame, const TRenderSettings &info) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void transform(double frame,
Toshihiro Shimizu 890ddd
				   int port,
Toshihiro Shimizu 890ddd
				   const TRectD &rectOnOutput,
Toshihiro Shimizu 890ddd
				   const TRenderSettings &infoOnOutput,
Toshihiro Shimizu 890ddd
				   TRectD &rectOnInput,
Toshihiro Shimizu 890ddd
				   TRenderSettings &infoOnInput);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TSmartPointerT<tgeometryfx>;</tgeometryfx>
Toshihiro Shimizu 890ddd
template class DVAPI TDerivedSmartPointerT<tgeometryfx, tfx="">;</tgeometryfx,>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TGeometryFxP : public TDerivedSmartPointerT<tgeometryfx, tfx=""></tgeometryfx,>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TGeometryFxP() {}
Toshihiro Shimizu 890ddd
	TGeometryFxP(TGeometryFx *fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
	TGeometryFxP(TFx *fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
	TGeometryFxP(TFxP fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
	TGeometryFxP(TRasterFx *fx) : DerivedSmartPointer(TRasterFxP(fx)) {}
Toshihiro Shimizu 890ddd
	TGeometryFxP(TRasterFxP fx) : DerivedSmartPointer(fx) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	operator TRasterFxP() { return TRasterFxP(m_pointer); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
template class DVAPI TFxPortT<tgeometryfx>;</tgeometryfx>
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TGeometryPort : public TFxPortT<tgeometryfx></tgeometryfx>
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TGeometryPort() : TFxPortT<tgeometryfx>(true) {}</tgeometryfx>
Toshihiro Shimizu 890ddd
	TAffine getPlacement(double frame)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return m_fx->getPlacement(frame);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
//    NaAffineFx  declaration
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI NaAffineFx : public TGeometryFx
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	FX_DECLARATION(NaAffineFx)
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	~NaAffineFx() {}
Toshihiro Shimizu 890ddd
	NaAffineFx(bool isDpiAffine = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TFx *clone(bool recursive) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool canHandle(const TRenderSettings &info, double frame)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return true;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void compute(TFlash &flash, int frame);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TAffine getPlacement(double frame) { return m_aff; }
Toshihiro Shimizu 890ddd
	TAffine getParentPlacement(double frame) { return TAffine(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setAffine(const TAffine &aff)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		assert(aff != TAffine());
Toshihiro Shimizu 890ddd
		m_aff = aff;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	bool isDpiAffine() const { return m_isDpiAffine; }
Toshihiro Shimizu 890ddd
	string getPluginId() const { return string(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	TRasterFxPort m_port;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	TAffine m_aff;
Toshihiro Shimizu 890ddd
	bool m_isDpiAffine;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	NaAffineFx(const NaAffineFx &);
Toshihiro Shimizu 890ddd
	NaAffineFx &operator=(const NaAffineFx &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
//    Global functions
Toshihiro Shimizu 890ddd
//******************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI addRenderCache(const std::string &alias, TImageP image);
Toshihiro Shimizu 890ddd
void DVAPI removeRenderCache(const std::string &alias);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
#pragma warning(push)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4251)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef WIN32
Toshihiro Shimizu 890ddd
#pragma warning(pop)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif