Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Tamaño Texturas, Razones Técnicas

Iniciado por deadLock++, 17 de Julio de 2003, 01:49:33 AM

« anterior - próximo »

deadLock++

 ¿Alguien sabe cuál es la razón técnica por la cual las APIs 3D solicitan que el tamaño de las texturas sea una potencia de 2?

Entiendo que debe ser por como trabaja la placa de video, pero me gustaría conocer mas detalles al respecto.

Desde ya agradezco cualquier tipo de información.


Haddd

 Ya no es necesario en todas.

Yo creo que necesita ser potencia de 2 pq al calcular la relación texel-pixel se facilita mucho los cálculos. Pero ya te digo que ahora con las GPU, esto puede hacerse más fácilmente que antes.

fiero

 Para acceder a la dirección de memoria de un determinado texel de la textura, definido por unas coordenadas offsetX y offsetY, hay que hacer:

direcciónTexel = direcciónBase + offsetY * tamX * bytesPorPixel + offsetX *bytesPorPixel

Si tamX es una potencia de 2, se puede sustituir la multiplicación por tamX por un desplazamiento. Y si el número de bytesPorPixel de la textura es tambien potencia de 2, se pueden añadir al desplazamiento.

desplazamientoY = log(tamX) / log(2) + log(bytesPorPixel) / log(2)
desplazamientoX = log(bytesPorPixel) / log(2)

Así la fórmula quedaría en:

direcciónTexel = direcciónBase + offsetY << desplazamientoY + offsetX << desplazamientoX

Lo que es mucho más rápido para un procesador que realizar las multiplicaciones. Por eso las APIs suelen renderizar solo en 16 y 32 bits, para que los bytes por pixel sean tambien potencia de 2.

Todo esto, resultaba de vital importancia para los antiguos motores software, pero las tarjetas aceleradoras no deberían tener problemas con las operaciones. Me he hecho tambien esa pregunta muchas veces, ya que en mi motor software realizo toda la primera fórmula con una sola instrucción del procesador. Resulta lógico pensar que las GPU cuentan también con instrucciones especificas que hacen ese tipo de operaciones rápidamente, así que no sé a qué vienen tantas restricciones.

un saludo
www.videopanoramas.com Videopanoramas 3D player

MA]Mestre

 Como dice haddd, se facilitan muchos los calculos y operaciones  en especial las multiplicaciones y divisiones.
Es lo mismo Variable=Variable*2, que Variable=Variable<<1, Variable/=8 que Variable>>3, rotar bits no tiene el mismo coste de CPU, que una division o multiplicación, y en grandes cantidades exite mucha diferencia.

Respecto a la no necesidad de que la texturas sean potencias de 2, en OpenGL existe esa restricción, no se si DirectX deja cualquier textura, en cuyo caso creo que la acabaria reduciendo a una de potencia de 2 para trabajar con ella.

P.D: Alguien se acuerda de los bitplanes ( bancos de memoria ), con modos X e Vesa 2.0  (genial) , en esos momentos rotar bits se convertia en fundamental para obtener una velocidad correcta en las aplicaciones.

deadLock++

 Muchas gracias fiero, Haddd y MA]Mestre por su contestación me han sacado una duda que tenía hace mucho tiempo.

(ole)






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.