Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Carga De Texturas Dinamicas...

Iniciado por MA]Mestre, 04 de Mayo de 2006, 01:45:20 PM

« anterior - próximo »

MA]Mestre

 Hola,

Estoy desarrollando una aplicación que carga texturas de forma dinámicas,que forma parte de otro aplicación más comleja. Explico en que consiste:

a.- Cargo de disco a memoria ram convencional 8 texturas de 1024x1024xRGB ( 24mb)
b.- Creo 4 texturas. (Ejemplo de una de ellas, sin nada raro ).
            &sprite[2] es el puntero a memoria ram

glGenTextures(1,&ntxt[2]);
glBindTexture(GL_TEXTURE_2D, ntxt[2]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 1024, 1024, 0, GL_BGR, GL_UNSIGNED_BYTE,sprite[2]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);

c.- Con click de mouse, de forma alternativa voy destruyendo 4 texturas y vulevo a generar 4 texturas. ( siempre cogiendo del pool de las 8 texturas que tengo en ram.


En ejecución este programa cuando ralizo un click, es decir 'libero' 4 texturas i 'creo' 4 nuevas...

En una NVIDA 6600gt -> no me provoca ninguna espera
En una X600 Radeon -> me provoca una espera de aproximadamente 3 segundos para la carga
En una gráfica integrada intel GMA 900 -> no me provoca ninguna espera. GMA 900 Specs

Me gustaria saber si la X600 es demasiado antigua, si puede ser tema de drivers ( he provado varios ), si es bandwidth, gpu, etc etc... o cualquier cosa que me pueda estar asociado o de un sentido a el pq de este ' parón ' en la carga de texturas.

Por otro lado, no hace falta que me digais que deberia cargar todas las texturas y usarlas segun me hacen falta. Puesto que es imprescindible para la aplicación cargar las texturas de forma dinámica.

Un saludo.

senior wapo

 3 segundos para subir las texturas me parece excesivo. ¿ No te estará haciendo ese driver una conversión de BGR a RGB antes de subirla ? Prueba a ponerle GL_RGB (aunque los colores te salgan mal) a ver si es eso. Es muy descabellado pero por si acaso.

¿ Has probado a tocar en el panel de control de la tarjeta los ajustes de calidad a ver si afectan en algo ?

MA]Mestre

 Hola,

He provado cambiar el GL_RGB por el GL_BGR y sigue teniendo el mismo problema. Eso sí, quizas deba matizar que 3 segundos tal vez era una exageración. Podiamos dejarlo en la mitad, 1.5. Aunque para mi sigue siendo imcomprensible teniendo en cuenta que las otras tarjetas no existe parón alguno.

Después de releerme mi mensaje me he dado cuenta que hay frases inlegilbles, no se como coño me has entendido...  :lol: , los rehago...

>En ejecución este programa cuando ralizo un click, es decir 'libero' 4 texturas i 'creo' 4 nuevas...

Durante la ejecucion de este programa, cuando realizo un click, ' libero ' las 4 texturas actuales i creo 4 nuevas q se encuentran en un buffer de memoria de la lectura inicial de disco.

>Me gustaria saber si la X600 es demasiado antigua, si puede ser tema de drivers ( he provado varios ), si es bandwidth, gpu, etc etc... o >cualquier >cosa que me pueda estar asociado o de un sentido a el pq de este ' parón ' en la carga de texturas.

Agradeceria cualquier tipo de ayuda, o cualquier idea acerca de a que se puede asociar el problema.

P.D: Senior wapo, voy a mirar opciones de la config de la tarjeta... alguna idea ?

marcode

 Para recargar texturas usa glTexSubImage2D en lugar de crearlas de nuevo que creo que es ahí donde se pierde ese tiempo.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

zupervaca

 Se que es una tonteria, pero prueba a poner 4 elementos en vez de 3, algunas tarjetas trabajan muy lento con 24bits de color en las texturas ya que el render suele estar a 32, es decir, estan convirtiendo de 24 a 32.

MA]Mestre

 Bueno, buscando buscando... por las opciones de q trae el catalyst. He desabilitado una opcion que se llamaba Catalyst A.I. ( q optimiza el rendimiento ), i ahora el comportamiento es el mismo, en todas las graficas donde lo he probado :-D

Creo q lo que hacia por defecto era realizar una compresion de textura cuando la subia a memoria, que es muy util en muchas ocasiones, y en otras no :ph34r:

Gracias a todos por la colaboración :-D

Ithaqua

 En el internalformat (el tercer parámetro de glTexImage2D) deberías especificar el tamaño de los componentes, ya que con decirle el número no basta. En la implementación, las nvidia suelen usar 8, pero las ATI usaban un valor muy bajo por defecto la última vez que probé. Usa GL_RGB8 o GL_RGBA8 mejor, suponiendo que quieras 24/32 bits :)
Por otro lado conviene lo que comenta marcode, crear un pool de 8 texturas 'dummy' en memoria y luego actualizarlas con glTexSubImage2D en vez de estar creando/destruyendo texturas.
thaqua^Stravaganza
http://ithaqua.stravaganza.org

MA]Mestre

 
CitarEn el internalformat (el tercer parámetro de glTexImage2D) deberías especificar el tamaño de los componentes, ya que con decirle el número no basta. En la implementación, las nvidia suelen usar 8, pero las ATI usaban un valor muy bajo por defecto la última vez que probé. Usa GL_RGB8 o GL_RGBA8 mejor, suponiendo que quieras 24/32 bits :)

Tomo nota.

CitarPor otro lado conviene lo que comenta marcode, crear un pool de 8 texturas 'dummy' en memoria y luego actualizarlas con glTexSubImage2D en vez de estar creando/destruyendo texturas.

Lo se, pero el tamaño i la cantidad de ellas puede ir variando, es aquí cuando me encuentro con el retardo. Como dije antes en el primer post, trate de simplificar el problema para hacerlo más comprensible. Puedo ir usando texturas 'vacias' i el glTexSubimage... pero cuando cambia el tamaño i cantidad...






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.