/****************************************************************************************

		BasicPostRenderer.h

		Copyright: (c) 2001 Eovia Corp. All rights reserved.

		Author:	Ray Dream
		Date:	02-11-99

		Revision History

		when		who			what & why
		==========	==========	======================================================
		02-11-99	Charles		Created

*****************************************************************************************/

#ifndef __BasicPostRenderer__
#define __BasicPostRenderer__

#if CP_PRAGMA_ONCE
#pragma once
#endif

#include "BasicCOMImplementations.h"
#include "I3DExPostRenderer.h"


/// \addtogroup BaseClass
/// \{

/************************************************************************\
*                                                                        *
*     TBasicPostRenderer                                                 *
*                                                                        *
\************************************************************************/
/// Basic Post Renderer class.  Derive from this for a default implementation of I3DExPostRenderer
/// \see I3DExPostRenderer
class TBasicPostRenderer : public I3DExPostRenderer, public TBasicDataExchanger
{
	public:
		virtual MCCOMErr MCCOMAPI QueryInterface	(const MCIID& riid, void** ppvObj);
		virtual uint32 	 MCCOMAPI AddRef			()		{ return TBasicDataExchanger::AddRef(); }

		virtual void	 MCCOMAPI GetBufferNeeds	(RenderFilterNeeds& needs, void* renderer)=0;

		virtual MCCOMErr MCCOMAPI PrepareDraw		(IShRasterLayer*	input,				// color buffer
													 const TMCRect&		bounds,				// image rectangle in pixels
													 IShChannel*		buffers[],			// gBuffers ( null pointers for those that are not filled
													 I3DShScene*		scene,				// current scene
													 I3DShCamera*		renderingCamera,	// current renderingCamera
													 const TBBox2D&		uvBox,				// screen coordinates of the image to render
													 const TBBox2D&		productionFrame)=0; // screen coordinates of the production frame

		virtual MCCOMErr MCCOMAPI DrawRect			(const TMCRect&				outputRect,
													 const TChannelDataBucket*	outputTile[],
													 const TChannelDataBucket* compositedOutputTile[],
													 const TBBox2D&				uvBox)=0;

		virtual MCCOMErr MCCOMAPI FinishDraw()=0;

		virtual MCCOMErr	MCCOMAPI BeginRender	(MicroTick beginTime,MicroTick endTime, 
														uint32 framePerSeconds,
														int32	nbrFrames, boolean isRenderMovie) {return MC_S_OK;}
		virtual MCCOMErr	MCCOMAPI EndRender		() {return MC_S_OK;}

		virtual IShRasterLayer::ELayerMode	MCCOMAPI GetEffectCompositionMode() { return IShRasterLayer::kUnknownMode; }

		virtual void		MCCOMAPI SetRaytracer(I3DExRaytracer* raytracer) {}
};
/// \}
#endif