/*
 * Copyright (c) 2007-2009 by Oleg Trifonov <otrifonow@gmail.com>
 *
 * This file is free software; you can redistribute it and/or modify
 * it under the terms of either the GNU General Public License version 2
 * or the GNU Lesser General Public License version 2.1, both as
 * published by the Free Software Foundation.
 */

#ifndef _TR_TEXTURE_H_
#define _TR_TEXTURE_H_

#include "trTypes.h"

#include "trImage.h"
#include "trStream.h"

#include <string>
#include <list>


class TrTextures {
public:
	struct TextureRec {
		std::string name;		// название текстуры
		int width, height;	// размеры текстуры
		UInt32 id;				// идентификатор текстуры
		bool alpha;				// имеет альфа-канал?
		Byte bpp;				// бит на точку
	};

	TrTextures();
	~TrTextures();

	// создает текстуру и возвращает ее индекс или 0 в случае ошибки
	UInt32 Create(const std::string &fileName, const std::string &textureName = "");
	UInt32 Create(const TrImage &image, const std::string &textureName = "");
	UInt32 Create(const TrStream &stream, const std::string &textureName = "");

	// устанавливает текстуру текущей
	void Set(UInt32 index);

	// получение информации
	TextureRec* GetInfo(UInt32 index);
	TextureRec* GetInfo(const std::string &textureName);

	// удаляет текстуру 
	void Delete(UInt32 index);
	void Delete(const std::string &textureName);

	// удаляет все текстуры и очищает всю память
	void Clear();


/*
	// Включить текстуру
	void Enable();

	// Загрузить текстуру в видеопамять.
	gunResult Upload();
*/
protected:
	typedef std::list <TextureRec> TListType;	
	TListType tlist;
	UInt32 current;
};


#endif // _TR_TEXTURE_H_
