Problema con las texturas de opengl
Publicado por CalambreNet (2 intervenciones) el 28/03/2009 11:47:55
Haber si alguien me puede ayudar porque voy a perder la cabeza con este tema:
Estoy construyendo un programa para instalarlo en un carpc (poner un ordenador pequeño en un coche y manejar lo desde la guantera con una pantalla táctil, como si fuera un radio o un gps).Este programa lo estoy haciendo usando opengl y ejecutado desde Linux, por diversos motivos que no vienen al caso. Resulta que cuando lanzo el programa usando las librerías MesaGL (sin usar aceleracion por hardware), todo se ve que te “cagas” pero va muy lento, es de esperar al no usar la gráfica. Pero cuando se ejecuta usando los controladores de la gráfica, una ati x700, va muy rápido todo pero las texturas de los botones (2d) se ven pixelados, es como si se cargaran a una resolución mas baja de lo que están hechos. Si le aplicas filtrado se ve sin pixelar pero sigue si usar la resolución original. En cambio cuando usa MESAGL si se dibujan con su correspondiente resolución. Esto es muy raro. Es como si cuando usa el hardware las imágenes no se cargan a su resolución. No se si el problema es de OpenGL o es de DevIl (las librerías que uso para cargar las imágnes). Este es el código para cargarlas:
bool Cuadro_Textura::Inicia(string nombref,unsigned int ancho,unsigned int largo)
{
#ifdef DEBUG
cout<<"-- Cargando textura: "<<nombref<<"...";
#endif
this->Ancho = ancho;
this->Largo = largo;
ilInit(); //iniciación de DevIL
ilGenImages(1, &iltexture);
glGenTextures(1, &gltexture);
ilBindImage(iltexture);
glBindTexture( GL_TEXTURE_2D, gltexture);
if (ilLoadImage(nombref.data()))
{
if(ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE))
{
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,ilGetData());
}
else
return false;
}
else
{
cout<<"- Error: El fichero no se encuentra"<<endl;
return false;
}
cout<<" OK"<<endl;
ilDeleteImages(1, &iltexture);
return true;
}
Haber si alguien me puede ayudar. Gracias.
Estoy construyendo un programa para instalarlo en un carpc (poner un ordenador pequeño en un coche y manejar lo desde la guantera con una pantalla táctil, como si fuera un radio o un gps).Este programa lo estoy haciendo usando opengl y ejecutado desde Linux, por diversos motivos que no vienen al caso. Resulta que cuando lanzo el programa usando las librerías MesaGL (sin usar aceleracion por hardware), todo se ve que te “cagas” pero va muy lento, es de esperar al no usar la gráfica. Pero cuando se ejecuta usando los controladores de la gráfica, una ati x700, va muy rápido todo pero las texturas de los botones (2d) se ven pixelados, es como si se cargaran a una resolución mas baja de lo que están hechos. Si le aplicas filtrado se ve sin pixelar pero sigue si usar la resolución original. En cambio cuando usa MESAGL si se dibujan con su correspondiente resolución. Esto es muy raro. Es como si cuando usa el hardware las imágenes no se cargan a su resolución. No se si el problema es de OpenGL o es de DevIl (las librerías que uso para cargar las imágnes). Este es el código para cargarlas:
bool Cuadro_Textura::Inicia(string nombref,unsigned int ancho,unsigned int largo)
{
#ifdef DEBUG
cout<<"-- Cargando textura: "<<nombref<<"...";
#endif
this->Ancho = ancho;
this->Largo = largo;
ilInit(); //iniciación de DevIL
ilGenImages(1, &iltexture);
glGenTextures(1, &gltexture);
ilBindImage(iltexture);
glBindTexture( GL_TEXTURE_2D, gltexture);
if (ilLoadImage(nombref.data()))
{
if(ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE))
{
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,ilGetData());
}
else
return false;
}
else
{
cout<<"- Error: El fichero no se encuentra"<<endl;
return false;
}
cout<<" OK"<<endl;
ilDeleteImages(1, &iltexture);
return true;
}
Haber si alguien me puede ayudar. Gracias.
Valora esta pregunta


0