/***************************************************************************
*   Copyright (C) 2004 by Denis A. Birukov aka Messenger of death         *
*   riper@fromru.com                                                      *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU General Public License     *
*   along with this program; if not, write to the                         *
*   Free Software Foundation, Inc.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/
#ifndef ME_N_VIDEOME_C_VIDEO_SURFACE_H
#define ME_N_VIDEOME_C_VIDEO_SURFACE_H
#include <me_defines.h>

namespace ME_n_Video
{

	/**
	Данный класс является интерфейсом к поверхностям. Он позволяет получать доступ к данным поверхности.
	 
	@author Denis A. Birukov aka Messenger of death 
	*/
	class ME_c_Video_Surface
	{
		public:
			virtual ~ME_c_Video_Surface(){};
			/** Возвращает указатель на данные о поверхности.
			*/
			virtual void* _get_surface_data()  = 0;
			/** Возвращает указатель на данные о поверхности.
			*/
			virtual void* operator ->() =0 ;
			/** Возвращает ширину поверхности в пикселях*/
			virtual Sint16 _get_width() const = 0;
			/** Возвращает высоту поверхности в пикселях*/
			virtual Sint16 _get_height() const = 0;
			/** Возвращает количество байт на пиксель*/
			virtual Sint8 _get_bpp() const = 0;
			/** Возвращает длину строки поверхности*/
			virtual Sint16 _get_line_size() const = 0;
			/** Возвращает маску данных красного канала*/
			virtual Uint32 _get_Rmask() const = 0;
			/** Возвращает маску данных синего канала*/
			virtual Uint32 _get_Bmask() const = 0;
			/** Возвращает маску данных зеленого канала*/
			virtual Uint32 _get_Gmask() const = 0;
			/** Возвращает маску данных альфа канала*/
			virtual Uint32 _get_Amask() const = 0;
			/** Производит коррекцию данных, в случае необзодимости, после вызова и изменения _get_surface_data*/
			virtual void _update() =0;
			/** Устанавливает или снимает обработку альфа канала для данной поверхности*/
			virtual void _set_alpha_status(bool act)=0;
			/** Возвращает признак обработки альфа канала поверхности*/
			virtual bool _get_alpha_status()=0;
			/** Изменяет коэффициент масштабирования*/
			virtual bool _set_scale(float x,float y)=0;
			/** Изменяет угол поворота по осям x,y,z*/
			virtual bool _set_rotation(float x,float y,float z)=0;
	};
}

#endif
