/*
/ DEVICE.H
/ ********
/ Core graphics device 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 __DEVICE_H__
#define __DEVICE_H__

#include "Compile.h"
#include "Types.h"
#include "Display.h"
#include "Params.h"
#include "Terrain.h"
#include "Camera.h"
#include <Windows.h>
#include <iostream>

namespace Brainstem
{
	class IDevice : public ITask
	{
	public:
		virtual void BeginRender() = 0;
		virtual void BeginRender(IDisplay* display) = 0;
		virtual void EndRender() = 0;

		virtual void Present() = 0;
		virtual void* GetDevicePtr() = 0;

		virtual Vector3<float> UnProject(Vector3<float> source, Matrix4<float> view, Matrix4<float> projection) = 0;

		virtual void DrawString(const char* text, Vector2<int> position) = 0;

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

#endif