/*
/ DISPLAY.H
/ *********
/ Core display interface class.
/
/ Will Beddow 2010 - http://343gs.com/brainstem
/
/ This software is currently under development
/ and is subject to change and improvement. Some
/ aspects of the system are incomplete and/or 
/ unstable due to ongoing implementation.
/
*/

#ifndef __DISPLAY_H__
#define __DISPLAY_H__

#include "Compile.h"
#include "Types.h"

namespace Brainstem
{
	enum ENUM_CULLMODE
	{
		CULL_NONE = 1,
		CULL_CW,
		CULL_CCW
	};

	enum ENUM_RENDERMODE
	{
		RENDER_POINT = 1,
		RENDER_WIREFRAME,
		RENDER_SOLID
	};

	class IDisplay : public IObject
	{
	public:
		virtual void AddEffect(const char* name) = 0;
		virtual const char* GetEffect(int i) = 0;
		virtual void RemoveEffect(int i) = 0;
		virtual int GetEffectCount() = 0;

		virtual void Release() = 0;

		Color Background;
		Color Filter;
		Vector3<float> Scale;
		Vector3<float> Position;
		Vector3<float> Rotation;

		ENUM_RENDERMODE RenderMode;

		void ToggleRenderMode()
		{
			switch (RenderMode)
			{
				case RENDER_SOLID:
					RenderMode = RENDER_WIREFRAME;
					break;
				case RENDER_WIREFRAME:
					RenderMode = RENDER_POINT;
					break;
				default:
					RenderMode = RENDER_SOLID;
					break;
			}
		}

		AUTO_OBJECT_SIZE;
		const char* GetName() { return "Unknown Display"; }
	};
}

#endif