/*====================ÉCOLE POLYTECHNIQUE DE MONTRÉAL============================

	NOM DU FICHIER :CPngTexture.cpp

	DESCRIPTION :	Déclaration des fonctions relatives au fichiers .PNG

	AUTEUR : Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse

	DATE DE CRÉATION : 2004-3-16

	MISES À JOUR :

===============================================================================*/
#include "CPngTexture.h"
#include "glpng.h"
#include "GL/glut.h"


/*------------------------------------------------------------------
  Fonction :	CPngTexture::CPngTexture

  Description :	Constructeur

  Paramètres :

  Valeur retournée :	 : 

  Par : 2004-3-16 Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse
  MAJ: 
------------------------------------------------------------------*/
CPngTexture::CPngTexture()
{
	ID = 0;
}

/*------------------------------------------------------------------
  Fonction :	
CPngTexture::~CPngTexture

  Description :	Destructeur

  Paramètres :

  Valeur retournée :	 : 

  Par : 2004-3-16 Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse
  MAJ: 
------------------------------------------------------------------*/

CPngTexture::~CPngTexture()
{
	ID = 0;
}

/*------------------------------------------------------------------
  Fonction :	CPngTexture::LoadPNG

  Description :	Fonction qui charge le .PNG

  Paramètres :
	 const char* FileName : Nom de fichier de l'image
	 int Mipmap : 
	 int Transparency : 
	 int TextureWrap : 
	 int MagFilterParam : 
	 int MinFilterParam : 

  Valeur retournée :	int : le ID de l'image 

  Par : 2004-3-16 Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse
  MAJ: 
------------------------------------------------------------------*/
int CPngTexture::LoadPNG(const char* FileName, int Mipmap, int Transparency, int TextureWrap, int MagFilterParam, int MinFilterParam)
{
	pngLoadRaw(FileName,(pngRawInfo*)&this->RawInfo);
	return(this->ID = pngBind(FileName, Mipmap, Transparency, ((pngInfo*)&this->Info), TextureWrap, MagFilterParam, MinFilterParam));
}


/*------------------------------------------------------------------
  Fonction :	CPngTexture::Unload

  Description :	Décharge l'image .png

  Paramètres :

  Valeur retournée :	void : 

  Par : 2004-3-16 Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse
  MAJ: 
------------------------------------------------------------------*/
void CPngTexture::Unload()
{
	glDeleteTextures(1,&this->ID);
}

void CPngTexture::UpdateData(GLubyte *data)
{
	int w,h;
	int NumColor = (this->RawInfo.Alpha)?4:3;
	for (int i = 0; i < this->RawInfo.Width*this->RawInfo.Height*NumColor; i++)
		this->RawInfo.Data[i] = data[i];
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,this->ID);
	glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,this->RawInfo.Width,this->RawInfo.Height,0,NumColor==4?GL_RGBA:GL_RGB,GL_UNSIGNED_BYTE,data);
	glDisable(GL_TEXTURE_2D);
}
