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; }