Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[DX] Cargar texturas sin D3DXCreateTextureFromFileEx

Iniciado por deadLock++, 29 de Mayo de 2003, 03:38:58 PM

« anterior - próximo »

deadLock++

                                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?                                

HgH

                                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.                                
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

Zaelsius

                                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?                                

BeRSeRKeR

                                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                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Zaelsius

                                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é...                                

BeRSeRKeR

                                Si, si estaba, lo que pasa es que hay tantas y tantas funciones en D3DX que a veces pasan desapercibidas  :)                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

ethernet


NeLo

                                No lo dudes ethernet, DirectX rules.                                
Drowning deep in my sea of loathing






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.