/////////////////////////////////////////////////////////////
// CINEMA 4D SDK                                           //
/////////////////////////////////////////////////////////////
// (c) MAXON Computer GmbH, all rights reserved            //
/////////////////////////////////////////////////////////////

#ifndef __C4D_FILTERPLUGIN_H
#define __C4D_FILTERPLUGIN_H

#include "ge_math.h"
#include "c4d_filterdata.h"
#include "c4d_nodeplugin.h"

struct BITMAPLOADERPLUGIN : public STATICPLUGIN
{
	Bool				(BitmapLoaderData::*Identify			)(const Filename &name, UChar *probe, Int32 size);
	IMAGERESULT	(BitmapLoaderData::*Load					)(const Filename &name, BaseBitmap *bm, Int32 frame);
	Int32				(BitmapLoaderData::*GetSaver			)(void);
	Bool				(BitmapLoaderData::*GetInformation)(const Filename &name, Int32 *frames, Float *fps);
	IMAGERESULT	(BitmapLoaderData::*LoadAnimated  )(BitmapLoaderAnimatedData *bd, BITMAPLOADERACTION action, BaseBitmap *bm, Int32 frame);
	IMAGERESULT	(BitmapLoaderData::*ExtractSound  )(BitmapLoaderAnimatedData *bd, BaseSound *snd);
	IMAGERESULT	(BitmapLoaderData::*HasSound			)(BitmapLoaderAnimatedData *bd);

	void*	reserved[(32-7)*C4DPL_MEMBERMULTIPLIER];
};

struct BITMAPSAVERPLUGIN : public STATICPLUGIN
{
	String		*suffix;

	IMAGERESULT (BitmapSaverData::*Save					)(const Filename &name, BaseBitmap *bm, BaseContainer *data, SAVEBIT savebits);
	Bool				(BitmapSaverData::*Edit					)(BaseContainer *data);
	Int32				(BitmapSaverData::*GetMaxAlphas	)(BaseContainer *data);
	IMAGERESULT (BitmapSaverData::*Open					)(PluginMovieData *&md, const Filename &name, BaseBitmap *bm, BaseContainer *data, SAVEBIT savebits, Int32 fps);
	IMAGERESULT (BitmapSaverData::*Write				)(PluginMovieData *md, BaseBitmap *bm);
	void				(BitmapSaverData::*Close				)(PluginMovieData *&md);
	IMAGERESULT (BitmapSaverData::*AddSound     )(PluginMovieData *md, BaseSound *snd);
	Int32				(BitmapSaverData::*GetMaxResolution)(Bool layers);

	void*	reserved[(32-8)*C4DPL_MEMBERMULTIPLIER-1];
};

struct SCENELOADERPLUGIN : public NODEPLUGIN
{
	Bool (SceneLoaderData::*Identify			)(BaseSceneLoader *node, const Filename &name, UChar *probe, Int32 size);
	FILEERROR (SceneLoaderData::*Load  		)(BaseSceneLoader *node, const Filename &name, BaseDocument *doc, SCENEFILTER filterflags, String *error, BaseThread *bt);
	void*	reserved[(32-2)*C4DPL_MEMBERMULTIPLIER-0];
};

struct SCENESAVERPLUGIN : public NODEPLUGIN
{
	String		*suffix;

	FILEERROR (SceneSaverData::*Save			)(BaseSceneSaver *node, const Filename &name, BaseDocument *doc, SCENEFILTER filterflags);

	void*	reserved[(32-1)*C4DPL_MEMBERMULTIPLIER-1];
};

#endif
