namespace cocos2d {

typedef enum eImageFormat
{
	kCCImageFormatJPG       = 0,
	kCCImageFormatPNG       = 1,
    kCCImageFormatRawData   = 2
} tImageFormat;

class CCRenderTexture : public CCNode 
{
    /** The CCSprite being used.
    The sprite, by default, will use the following blending function: GL_ONE, GL_ONE_MINUS_SRC_ALPHA.
    The blending function can be changed in runtime by calling:
    - [[renderTexture sprite] setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE_MINUS_SRC_ALPHA}];
    */
	CCSprite* getSprite();
	void setSprite(CCSprite* psprite);

	CCRenderTexture();
	~CCRenderTexture();
    /** creates a RenderTexture object with width and height in Points and a pixel format, only RGB and RGBA formats are valid */
    static CCRenderTexture * renderTextureWithWidthAndHeight(int w, int h, CCTexture2DPixelFormat eFormat);

    /** creates a RenderTexture object with width and height in Points, pixel format is RGBA8888 */
    static CCRenderTexture * renderTextureWithWidthAndHeight(int w, int h);

    /** initializes a RenderTexture object with width and height in Points and a pixel format, only RGB and RGBA formats are valid */
    bool initWithWidthAndHeight(int w, int h, CCTexture2DPixelFormat eFormat);

    /** starts grabbing */
	void begin();

    /** starts rendering to the texture while clearing the texture first.
    This is more efficient then calling -clear first and then -begin */
    void beginWithClear(float r, float g, float b, float a);

    /** ends grabbing */
    void endToLua();

    /** clears the texture with a color */
    void clear(float r, float g, float b, float a);

	/** saves the texture into a file */
	bool saveBuffer(const char *name);
	/** saves the texture into a file. The format can be JPG or PNG */
	bool saveBuffer(const char *name, int format);

    /* get buffer as UIImage, can only save a render buffer which has a RGBA8888 pixel format */
    CCData *getUIImageAsDataFromBuffer(int format);

};

} // namespace cocos2d