#ifndef SDLGLUTILS_H
#define SDLGLUTILS_H

#include <GL/gl.h>
#include <SDL2/SDL.h>
#include <string>

#ifndef GL_CLAMP_TO_EDGE
	#define GL_CLAMP_TO_EDGE 0x812F
#endif


///	fonction qui initialise une texture pour OpenGl
/**	@param filename : image à initialiser
*/
GLuint loadTexture(const char * filename/*, bool useMipMap = true*/); //fonction qui initialise une texture pour OpenGl

///	fonction qui prend un impécran de l'affichage de l'application
/**	@param filename : nom du fichier de sauvegarde
*/
int takeScreenshot(const char * filename); //fonction qui prend un impécran de l'affichage de l'application

///	initialise une échelle pour le repère de OpenGl
/**	@param scale : échelle du repère
*/
void drawAxis(double scale = 1);  //initialise une échelle pour le repère de OpenGl

///	initialise le résolution de l'écran en full screen
/**	@param width : résolution en largeur
	@param height : résolution en hauteur
*/
int initFullScreen(unsigned int * width = NULL, unsigned int * height = NULL); //initialise le résolution de l'écran en full screen

///	Convertit une image normal en XPM
/**	@param imagefile : fichier image a convertir
	@param XPMfile : fichier XPM à sauvegarder
*/
int XPMFromImage(const char * imagefile, const char * XPMfile); //Convertit une image normal en XPM

///	fonction qui convertit une image XPM en cursseur pour SDL
/**	@param xpm : nom du fichier XPM a importer
*/
SDL_Cursor * cursorFromXPM(const char * xpm[]); //fonction qui convertit une image XPM en cursseur pour SDL

///initialise une image texture avec un fichier image fichier
/**	@param fichier : fichier image de texture 
	@param texture : textures à initialiser
*/
void initialiseTexture(const std::string & fichier, GLuint & texture);

///Fonction qui permet de bloquer une texture
/**	@param texture : numéro d'identification de la texture
*/
inline void pglBindTexture2D(GLuint texture){
	glBindTexture(GL_TEXTURE_2D, texture);
}

#endif //SDLGLUTILS_H
