Exemple #1
0
int carga_texturas(void) {
    
    int tam_x,tam_y,i;

		textura=(GLuint)malloc(n_texturas*sizeof(GLuint));

    glGenTextures (n_texturas, textura);	

		for (i=0;i<n_texturas;i++) {
	    textura_datos=(char *)CargaTGA(f_texturas[i],&tam_x,&tam_y);
	    if (tam_x!=tam_y)
				return -1;
      if (textura_datos == NULL)  {
      	fprintf(logs, "Error al cargar %s\n",f_texturas[i]);
       	return -1;
  	  }
		
		glBindTexture (GL_TEXTURE_2D, textura[i]);

		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST);
		gluBuild2DMipmaps (GL_TEXTURE_2D, 4, tam_x, tam_y, GL_RGBA,
		     GL_UNSIGNED_BYTE, textura_datos);


		free(textura_datos);
	
    }
		
	
	return 0;
}
int carga_texturas() {
    int tam[NUM_TEXTURAS];
    int i;
    char nombre_archivo[30];
    for(i = 0; i < NUM_TEXTURAS; i++) {
        sprintf(nombre_archivo,"img/textura%d.tga", i);
        textura_datos[i]=(char *)CargaTGA(nombre_archivo,&tam[i]);
        if (textura_datos[i] == NULL){
            //strcpy(resultado_carga_tga, "-1");
            return -1;
        }
        /* Genera una textura, referenciada por el entero textura */
        glGenTextures (NUM_TEXTURAS, &textura[i]);
        /* Esta función indica que será una textura en 2D. Las siguientes
        funciones hará referncia a esta textura */
        glBindTexture (GL_TEXTURE_2D, textura[i]);
        /* Aquí ajustamos algunos parámetros de la textura, concretamente los filtros */
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
        /* Con esta función de GLU, creamos un mipmap. Nótese que especificamos
        el tamaño con tam, que devolvia la función CargaTGA*/
        gluBuild2DMipmaps (GL_TEXTURE_2D, 4, tam[i], tam[i], GL_RGBA, GL_UNSIGNED_BYTE, textura_datos[i]);
        /* Liberamos la memoria que ya no utilizaremos para obtener un mejor rendimiento */
        free(textura_datos[i]);
    }
    return 0;
}
FUENTE *carga_fuente(char *fichero,	int tam_base,int espacio_base) {
	
	int tam_x,tam_y;		/* Tamaño del mapa*/
	char *textura_datos;	/* Temporal; para guardar el bitmap */
	int i,j,k;				/* Indices */
	FUENTE *fuente_x;		/* Fuente a crear */


	
	/* Lo primero, reservar memoria para la estructura FUENTE */

	fuente_x=(FUENTE *)malloc(sizeof(FUENTE));
	if (fuente_x==NULL)  {
			fprintf(logs,"No pude reservar memoria\n");
			return NULL;
	}
	
	/* Fuentes texturizadas */
	
	glGenTextures (1, &(fuente_x->mapabits));	

    /* Creación de la ruta completa, tenemos en cuenta el base_dir */


	textura_datos=(char *)CargaTGA(fichero,&tam_x,&tam_y);
    if ((textura_datos == NULL)||(tam_x!=tam_y))  {
        return NULL;
    }
	 
	glBindTexture (GL_TEXTURE_2D, fuente_x->mapabits);
	
	glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, 4, tam_x, tam_y, 0, GL_RGBA, GL_UNSIGNED_BYTE,  textura_datos);

	
	/* Ahora establecemos las coordenadas */

	k=0;
	for (j=1;j<(tam_y/2);j+=16) {
		for (i=0;i<tam_x;i+=16) {
			tipo1[k][0]=(float)i/(float)tam_x;
			tipo1[k][1]=(float)j/(float)tam_y;
			tipo1[k][2]=(float)i/(float)tam_x+(float)15/(float)tam_x;
			tipo1[k][3]=(float)j/(float)tam_y+(float)15/(float)tam_y;
			k++;
		}
	}
	
	fuente_x->tam_base=tam_base;
	fuente_x->espacio_base=espacio_base;
	fuente_x->inicializado=1;


	free(textura_datos);  

	return fuente_x;
}