Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre DirectX/OpenGL y texturas potencia de 2

Iniciado por matriax, 19 de Agosto de 2008, 08:09:29 PM

« anterior - próximo »

matriax

En el juego que estamos llevando a cabo tenemos una duda respecto a la resolucion de las texturas/graficos.

Primeramente estamos haciendo la version OpenGL. Y de momento estamos usando graficos con potencia de 2 donde metemos varias cosas.

Pero ahora tengo que hacer unos graficos y unas cosas que necesito tenerlas por separado.

Me cuenta Angel que por temas de compatibilidad y drivers de algunas tarjetas graficas mejor que sean potencia de 2 y si son cuadradas mejor que mejor. Tengo varios juegos bajados casuales y todos utilizan directx y las texturas son de lo mas dispares.

Ademas OpenGL de normal solo carga texturas de esa resolucion, para las demas hacen falta unas extensiones y tal.

Supongo que para las versiones de OpenGL y Directx se usaran los mismos graficos, entonces, seguimos haciendolo en potencia de 2, o las graficas que no puedan soportar eso son muy viejas y no afectara a la compatibilidad ¿?.
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

[EX3]

Que yo sepa todavia no es comun que una grafica acepte texturas no potencia de 2 ademas de que pierdes compatibilidad con mucho hardware no demasiado antiguo y si muy comun en la mayoria de los equipos actuales. Sin duda seguiria con las texturas potencias de 2, a 1024x1024 o 2048x2048 como mucho para tener compatibilidad con hardware de 3 a 5 años por lo menos.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

matriax

Y entonces por que juegos como Bejeweled y similares como los juegos casuales que en teoria estan hechos lo mas compatibles posibles con tarjetas antiguas, los graficos o texturas, no son nunca potencias de 2 ¿?.

A ver si alguien mas comenta su experiencia o sabe algo mas.
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/

fjfnaranjo

Hombre, así, sin tener mucha idea de programación gráfica a ese nivel, se me ocurre de que por compatibilidad puedes cargar una textura que no sea potencia de 2 en un espacio de textura (surface?) que si lo sea y pasárselo a la gráfica...

Pero bueno, esto es muy ñapa. Supongo que habrá otra forma.
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

[EX3]

Cita de: MatriaxY entonces por que juegos como Bejeweled y similares como los juegos casuales que en teoria estan hechos lo mas compatibles posibles con tarjetas antiguas, los graficos o texturas, no son nunca potencias de 2 ¿?.
Por que al menos la gran mayoria de los juegos casuales se ejecutan o permiten ejecutarse por software (DirectDraw por ejemplo), como veo que hace el Bejeweled que lo estoy ejecutando ahora mismo en una maquina virtual.

Llevo varios años pegandome exclusivamente con D3D8 y una GeForce3 y desde hace un año con una integrada Intel950 y quizas se me haya pasado por alto si las nuevas graficas soportan texturas que no sean potencia de 2. Mi actual integrada al menos no lo soporta y hablando de juegos casuales graficas como estas debes tenerlas en cuenta.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

LC0

Hazle caso a fjnaranjo. Con respecto a OpenGL, que es lo que conozco más o menos, la aceptación de texturas de tamaño potencia de dos es una cosa que en buena medida depende de las extensiones que acepte tu tarjeta gráfica.

Para curarte en salud carga la textura en una superficie potencia de dos. Si quieres optimizar el asunto y ahorrar memoria cuando se pueda, puedes hacer que tu juego compruebe mediante una llamada a glxinfo si tiene la capacidad de carga de texturas de cualquier tamaño (no me acuerdo del nombre, además de que este método solo te vale si estás bajo Linux).

fjfnaranjo

Cita de: LC0 en 20 de Agosto de 2008, 08:31:00 AM
Hazle caso a fjfnaranjo...

¿En serio? Insisto en que yo de esto no tengo ni idea :P. Lo mismo hay algo menos chapucero por ahí, googleando.
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

Prompt

Non Power of two. Tanto en D3D como en OGL se pueden cargar texturas hoy en dia sin necesidad de que sean potencia de 2. Internamente lo convierte en potencia de 2 creo recordar...

Aquello que ha dicho matriax de que no es soportado por OGL base... quiero hacer referencia que esto solo pasa en windows y que tanto en D3D como en OGL necesitaras EL MISMO hardware para poder cargar texturas de potencia de 2. Como deberiamos saber D3D lo que no permita aceleración por hardware lo hará por software con la consecuencia obvia.

ARB_texture_non_power_of_two
Written based on the OpenGL 1.4 specification. (Es bastante asequible)


Para más informacion http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_non_power_of_two.txt

davidgf

Pues me picaba la curiosidad pero me has matado mirano la referencia de OGL. Dice:

"Non-power-of-two textures are supported if the GL version is 2.0 or greater, or if the implementation exports the GL_ARB_texture_non_power_of_two extension."

I dice:

"Specifies the width of the texture image including the border if any. If the GL version does not support non-power-of-two sizes, this value must be 2n + 2 (border) for some integer n. All implementations support texture images that are at least 64 texels wide."

Pero no dice que si le pasas una textura no cuadrada él la convierta a cuadrada ni nada de eso. Yo pensaba que si que lo hacía. Tendré que hacer pruebas...

Xau!
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)

Prompt

Cita de: davidgf en 21 de Agosto de 2008, 07:10:47 PM
Pues me picaba la curiosidad pero me has matado mirano la referencia de OGL. Dice:

"Non-power-of-two textures are supported if the GL version is 2.0 or greater, or if the implementation exports the GL_ARB_texture_non_power_of_two extension."

1.4 señores, lo pone arriba del todo, o que tu tarjeta soporte la extension indicada, es muy posible que mucho antes de la 1.4 esté disponible para tarjetas antiguas.

Cita de: davidgf en 21 de Agosto de 2008, 07:10:47 PM
I dice:

"Specifies the width of the texture image including the border if any. If the GL version does not support non-power-of-two sizes, this value must be 2n + 2 (border) for some integer n. All implementations support texture images that are at least 64 texels wide."

Pero no dice que si le pasas una textura no cuadrada él la convierta a cuadrada ni nada de eso. Yo pensaba que si que lo hacía. Tendré que hacer pruebas...

Xau!

Yo te digo lo que me supongo que hace internamente la tarjeta. Aunque da a entender en una seccion que no es así, pero es cuestion de leerlo. No obstante es mejor una textura n^2, por razones de calculos menos costosos. las texturas NPOT solo tienen sentido si quieres ahorrarte algo de memoria que hoy en dia puede ser absurdo.

Algo interesante:

9. How does this extension interact with ARB_texture_compression?

RESOLUTION:  It does not.


Total que si quieres ahorrarte memoria, mejor una textura normal comprimida :P. No he leido más pero es un claro ejemplo de como OpenGL tiene información A RAUDALES sobre cosas muy especificas desde hace años y años. Para mi es una autentica maravilla.

http://www.opengl.org/registry/

Un saludo!

matriax

Pues nada, a seguir con imagenes potencia de 2  ;)
Pagina Oficial: http://www.taykron.com
Flash Portal : http://www.arkatia.com
Blog Personal : http://matriax.blogspot.com/






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.