/*
	ZWindowRenderTargetBase.hpp
	Author: James Russell <jcrussell@762studios.com>
	Created: 04/03/2011
	
	Purpose:	
	
	Base class for a window render target.

	License:

	TODO
*/

#pragma once

#ifndef _ZWINDOWRENDERTARGETBASE_HPP
#define _ZWINDOWRENDERTARGETBASE_HPP

#include <ZRenderer/ZWindowRenderTarget.hpp>

class ZWindowRenderTargetBase : public ZWindowRenderTarget
{
protected:
	//The Window Handle
	SST_Window WindowHandle;

	//The Screen Index
	size_t ScreenIndex;

	//Our current clear flags
	ZRenderTargetClearFlags ClearFlags;

	//Whether or not we should auto-swap buffers
	bool bAutoSwapBuffers;
	
	/*
	Parameterized Constructor.

	@param _window - the libsst-wm window handle to this render target
	@param _screenIndex - the libsst-wm index of this screen
	*/
	ZWindowRenderTargetBase(SST_Window _window, size_t _screenIndex);

public:
	//Virtual Destructor
	virtual ~ZWindowRenderTargetBase() { }

	/*************************/
	/* ZRenderTarget Methods */
	/*************************/

	//Subclass Implementation
	virtual const ZRenderTargetClearFlags& GetClearFlags();

	//Subclass Implementation
	virtual size_t GetHeight();

	//Subclass Implementation
	virtual ZRenderTargetType GetType();

	//Subclass Implementation
	virtual size_t GetWidth();

	//Subclass Implementation
	virtual bool SetClearFlags(const ZRenderTargetClearFlags& _flags);

	/***********************************/
	/* ZWindowRenderTargetBase Methods */
	/***********************************/

	//Subclass Implementation
	virtual bool GetAutoSwapBuffers();

	//Subclass Implementation
	virtual size_t GetScreenIndex();

	//Subclass Implementation
	virtual SST_Window GetWindowHandle();

	//Subclass Implementation
	virtual bool SetAutoSwapBuffers(bool _value);

	//Not Implemented
	virtual bool SwapBuffers() = 0;
};

#endif