/*
*	glFont2D.h
*
*	Programmé par Hillaire Sébastien
*
*
*	- utilité :
*		Classe permettant l'affichage de texte en 2D dans un espace défine.
*		On peut spécifier la taille des caractères ainsi que leur couleur à chaque requêtes de dessin.
*		
*
*	- version :
*		1.0
*
*	- update :
*		21/06/2004 : ajout de la protection contre les "caractères invalides"
*		27/04/2004 : ajout des paramètres width et height et de la prise en compte de la couleur.
*					 optimisation : la texture est maintenant bindé dans l'initialisation.
*		26/04/2004 : première version
*
*	- NOTE :
*		la texture de font doit contenir les caractère dans un carré 16x16 (exemple fournie).
*
*/


#ifndef GL_FONT_2D
#define GL_FONT_2D


#ifdef WIN32
#include <windows.h>
#endif
#include "GL\gl.h"
#include "GL\glu.h"
#include <iostream>
#include <cstdarg>

#include "MemoryManager/DebugNew.h"


#define NB_CARACTERE				256				// 16*16=256
#define NB_CAR_SIDE					16
#define TEX_CAR_OFFSET				0.0625f			// 1/16


/**
* Permet d'afficher à l'écran des caractères 2D.
*/
class glFont2D  
{
private:

protected:

	/**
	* contient la chaine afficher à l'écran après concaténation de information (%d, %f....)
	*/
	char texte[512];

	/**
	* l'identifiant OpenGL de la texture de font
	*/
	unsigned int idTexFont;

	/**
	* le tableau de toutes les coordonnée de texture
	*/
	float tabTexCoord[NB_CARACTERE][2];

	/**
	* La largeur des caractères
	*/
	float width;
	/**
	* La hauteur des caractères
	*/
	float height;

public:

	/**
	* constructeur
	*/
	glFont2D();

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

	/**
	* Permet d'assigner la texture de font
	*
	* @param id l'identifiant de texture OpenGL.
	*/
	void setIdTexFont(unsigned int id);

	/**
	* Permet de récupérer la texture de font
	*
	* @return l'identifiant de texture OpenGL.
	*/
	unsigned int getIdTexFont();

	/**
	* permet de desinner à l'écran du texte en 2D.
	*
	* @param x la coordonnée x de la chaine de caractère affichée
	* @param y la coordonnée y de la chaine de caractère affichée
	* @param chaine la coordonnée chaine, la chaine des caractère afficher avec les atribut%
	*pour les valeur supplémentaire
	* @param ... les attribut suplémentaire
	*/
	void renderText2D(float x, float y, const char *chaine, ...);

	/**
	* permet de régler une projection 2d pour l'affichage des caractère
	* cette fonction sauvegarde l'état des matrice MODELVIEW et PROJECTION d'OpenGL.
	*
	* @param min_x la coordonnée x à gauche de l'écran
	* @param max_x la coordonnée x à droite de l'écran
	* @param min_y la coordonnée y en bas de l'écran
	* @param max_y la coordonnée y en haut de l'écran
	*/
	void setProjection2DForGLFont2D(double min_x, double max_x, double min_y, double max_y);

	/**
	* Enleve la projection 2D en restituant les anciennes matrices MODELVIEW et PROJECTION d'OpenGL.
	*/
	void unsetProjection2DForGLFont2D();

	/**
	* recupère la largeur des caractères
	*
	* @return la largeur
	*/
	float getWidth();
	/**
	* affecte la largeur des caractères
	*
	* @param w la largeur
	*/
	void setWidth(float w);

	/**
	* recupère la hauteur des caractères
	*
	* @return la hauteur
	*/
	float getHeight();
	/**
	* affecte la hauteur des caractères
	*
	* @param w la largeur
	*/
	void setHeight(float h);


};


#include "MemoryManager/DebugNewOff.h"

#endif
