#include <stdio.h>
#include <GL/glut.h>
#include "texturas.h"

void iniciaTexturas(void) {
	glGenTextures(numTexturas, nombreTexturas);
}

/******************************************************************************************/
/* Lee una imagen de textura en formato tga                                               */
/* Parametros --> char *fichero : Cadena de caracteres con el nombre del fichero          */
/*				  int num: Numero que identifica la textura                               */
/* Salido --> Ninguna                                                                     */
/******************************************************************************************/
void leeTextura (char *fichero, int num) {
	int   i, j;
	char  r, g, b, c;
	FILE  *tga;

	/* Apertura del fichero TGA */
	if ((tga = fopen(fichero, "rb")) == NULL)
		printf ("Error abriendo el fichero: %s\n", fichero);
	else
	{
		/* Lee los 18 primeros caracteres de la cabecera */
		for (j=1; j<=18; j++)
			fscanf (tga, "%c", &c);

		/* Lee la imagen */
		for (j=altoTextura-1; j>=0; j--)
		{
			for (i=anchoTextura-1; i>=0; i--)
			{
				fscanf(tga, "%c%c%c", &b, &g, &r); 
				texturas[num][j][i][0] = (GLubyte)r;
				texturas[num][j][i][1] = (GLubyte)g;
				texturas[num][j][i][2] = (GLubyte)b;
			}
		}
		fclose(tga);   /* Cierre del fichero TGA */
	}
}

void cargaTextura(char *fichero, int num) {
	leeTextura(fichero, num);
	glBindTexture(GL_TEXTURE_2D, nombreTexturas[0]);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, anchoTextura, altoTextura, 0, GL_RGB, GL_UNSIGNED_BYTE, texturas[num]);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
	glEnable(GL_TEXTURE_2D);
}

void cargaTexturas(void) {
	cargaTextura("madera.tga", 0);
}
