/*
*	texture2D.h
*
*	Programmé par Hillaire Sébastien
*
*
*	- utilité :
*		permet de charger une texture 2D.
*
*	- version :
*		1.0
*
*	- update :
*		03/11/2004 :- ajout de la prise en compte de l'anisotropie.
*					- ajout de la methode loadLocalHeight permettant de charger une localmap
*				la heigtmap correspondante dans la canal alpha(a partir de la composante rouge
*				d'une autre texture).
*		17/06/2004 : Implémentation de l'interface 'Texture'.
*		17/04/2004 : enleve l'appele a glGenTexture dans le constructeur : permet d'instancier
*				objet sans périphérique OpenGL.
*		12/04/2004 : première version
*
*/

#ifndef TEXTURE_2D
#define TEXTURE_2D

#ifdef WIN32
#include "windows.h"
#endif

//bibliothèque C&C++
#include <iostream>
#include "stdio.h"
#include "math.h"

//bibliothèque OpenGL
#include "GL/gl.h"
#include "GL/glu.h"

//bibliothèque d'image
#include "Texture.h"
#include "Image.h"
#include "ImageBMP.h"
#include "ImageTGA.h"

#include "EXT_texture_filter_anisotropic.h"

#include "MemoryManager/DebugNew.h"

namespace RenderSystem
{

	/**
	* Classe simplifiant l'utilisation des textures 2D 
	*/
	class Texture2D : public Texture
	{
	private:

	public:

		/**
		* Permet de charger une texture au format bmp 24bit
		*
		* REM : l'extension du fichier doit correspondre à son contenue et elle doit être en miniscule.
		*
		* @param *filePath le chemin de l'image bmp a lire.
		* @param useMipMap indique si on doit génerer des mipmap pour l'objet de texture
		* @param magFilter indique le filtrage dans le cas de magnification de la texture
		* @param minFilter indique le filtrage dans le cas de minification de la texture
		* @param sWrap indique le type de répetition de texture pour la coordonnée s
		* @param tWrap indique le type de répetition de texture pour la coordonnée t
		* @param levelOfDetail le nombre de fois a faire baissé la qualité.de la texture.(0=qualité de l'authentique)
		* @param generateAlpha indique si l'on doit génerer un canal alpha pour la texture
		* @param rBlended indique la composante rouge de la couleur a laquel on affecte la valeur alphaBlendValue
		* @param gBlended indique la composante verte de la couleur a laquel on affecte la valeur alphaBlendValue
		* @param bBlended indique la composante bleue de la couleur a laquel on affecte la valeur alphaBlendValue
		* @param alphaBlendValue indique la valeur de la composant alpha dans le cas de la couleur de transparence 
		* @param alphaDefault indique la valeur de la composant alpha dans le cas d'une couleur normal
		* @param anisotropy le niveau d'anisotropy de la texture à appliquer
		*
		* @return retourn true si le fichier a bien été charger
		*/
		bool loadBMP(char *filePath, bool useMipMap, int magFilter, int minFilter, int sWrap, int tWrap, unsigned int levelOfDetail, bool generateAlpha, unsigned char rBlended, unsigned char gBlended, unsigned char bBlended, unsigned char alphaBlendValue, unsigned char alphaDefault,int anisotropy);

		/**
		*	Permet de charger une texture au format RGBA contenant un bitmap dans rgb et le canal rouge
		* d'une autre texture dans le canal alpha.
		* (utile pour texture local avec heighmap => dot3 et parallax mapping)
		*
		* @pre les 2 images doivent avoir la même taille.
		*
		* REM : l'extension du fichier doit correspondre à son contenue et elle doit être en miniscule.
		*
		* @param *filePath1 le chemin de l'image bmp RGB->RGB.
		* @param *filePath2 le chemin de l'image bmp R->A.
		* @param useMipMap indique si on doit génerer des mipmap pour l'objet de texture
		* @param magFilter indique le filtrage dans le cas de magnification de la texture
		* @param minFilter indique le filtrage dans le cas de minification de la texture
		* @param sWrap indique le type de répetition de texture pour la coordonnée s
		* @param tWrap indique le type de répetition de texture pour la coordonnée t
		* @param levelOfDetail le nombre de fois a faire baissé la qualité.de la texture.(0=qualité de l'authentique)
		* @param anisotropy le niveau d'anisotropy de la texture à appliquer
		*
		* @return retourn true si le fichier a bien été charger
		*/
		bool loadLocalHeight(char *filePath1,char *filePath2, bool useMipMap, int magFilter, int minFilter, int sWrap, int tWrap, unsigned int levelOfDetail, int anisotropy);

		/**
		* constructeur
		*/
		Texture2D();

		/**
		* destructeur
		*/
		virtual ~Texture2D();

	};
};// namespace RenderSystem

#include "MemoryManager/DebugNewOff.h"

#endif
