Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: deadLock++ en 29 de Mayo de 2003, 03:38:58 PM

Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: deadLock++ en 29 de Mayo de 2003, 03:38:58 PM
                                Requiero cargar una textura en DirectX desde un archivo tipo empaquetado, por lo que no existe realmente un archivo con el bmp. En OpenGL me es fácil pues utilizo Devil como librería por lo que hago ilLoadL y luego un ilGetData y finalmente un ilutGLTexImage(quien se encarga de llamar a glTexImage2D) para bindear la textura a OpenGL.

En DX quisiera hacer algo similar, ví que existe un método llamado CreateTexture (de la interfaz de IDirect3DDevice9):



HRESULT CreateTexture(      

   UINT Width,

   UINT Height,

   UINT Levels,

   DWORD Usage,

   D3DFORMAT Format,

   D3DPOOL Pool,

   IDirect3DTexture9** ppTexture,

   HANDLE* pHandle

);



Toma el alto, el ancho, los niveles, el formato y retorna el objeto textura creado pero no tengo claro luego a que método de este nuevo objeto debería llamar para pasarle datos del bitmap (los bytes que describen la imagen en el formato correspondiente a la textura).

¿como hace esto la función D3DXCreateTextureFromFileEx?                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: HgH en 29 de Mayo de 2003, 04:40:00 PM
                                Debes usar el método LockRect para que se te devuelva un puntero a la zona de memoria donde cargar el bitmap. Una vez hayas acabado, llamas a UnlockRect, y yastá. :)

Nota: esto es con Dx8. Me imagino que con Dx9 será igual o muy similar.                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: Zaelsius en 29 de Mayo de 2003, 07:47:52 PM
                                En DX9 se hace igual. DeadLock ten en cuenta que cuando haces el Lock(), éste te devuelve un puntero a memoria donde guardar la imagen, pero en el formato adecuado. Me explico: tienes que abrir la textura por tu cuenta, comprobar el formato del archivo, leer la cabecera, etc. Luego vas decodificando/leyendo la imagen de disco, y vas escribiendo píxel a píxel en el búfer de DX.

Vamos, que si quieres cargar TGA's(p.ej) tendrás que buscar información sobre la estructura de los TGA's para saber interpretarlos. Ok?                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: BeRSeRKeR en 29 de Mayo de 2003, 10:27:59 PM
                                Si no he entendido mal, lo que quieres es crear una textura desde una imagen que está en memoria (por ejemplo, has descomprimido en memoria una imagen que había en un zip). Para ello, yo utilizo la función

D3DXCreateTextureFromFileInMemoryEx

a la cual le pasas los datos de la imagen en memoria y te crea la textura.

Saludos                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: Zaelsius en 30 de Mayo de 2003, 05:40:25 PM
                                Bueno, despues de editar dos veces el mensaje pq estoy loco...

No digo ná que se me han quitado las ganas de escribir... :oops:

Por cierto, D3DXCreateTextureFromFileInMemoryEx es nueva de las DX9, no? Antes en DX8 me suena que no existía, pero no sé...                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: BeRSeRKeR en 30 de Mayo de 2003, 09:44:41 PM
                                Si, si estaba, lo que pasa es que hay tantas y tantas funciones en D3DX que a veces pasan desapercibidas  :)                                
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: ethernet en 30 de Mayo de 2003, 10:08:23 PM
Q manejable es DX! !!
Título: [DX] Cargar texturas sin D3DXCreateTextureFromFileEx
Publicado por: NeLo en 30 de Mayo de 2003, 10:50:33 PM
                                No lo dudes ethernet, DirectX rules.