Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Copiar de una surface a una textura

Iniciado por [Over], 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

[Over]

                                Hola, estoy haciendo una clase que se encargue de dividir una imagen de cualquier tamaño en partes iguales, o sea en texturas.

Todo el proceso de calcular el numero de texturas necesarias, crearlas y demas lo hace correctamente. Luego para copiar datos de la surface en la textura, bloqueo la surface y la textura.
Tengo dos punteros a BYTE que los coloco en el inicio de la TEXTURA y el lugar que quiero empezar a leer en la surface, luego recorro todo el ALTO del rectangulo de la surface que he elegido y linea a linea (calculo la linea teniendo en cuento el Pith y el tamaño del pixel) lo copia en la textura usando
memcpy(puntero_destino,puntero_origen,tamaño_linea);

Parece que lo copia bien, pero luego el Sprite->Draw(Textura[cont],etc...); no dibuja nda. el Textura es un LPDIRECT3DTEXTURE8 *Textura;

A ver si alguien se ha encontrado con el mismo problema. Gracias.                                

Lord Trancos

                                Solo te puedo decir que uso ese mismo metodo y si me va. Así que sigue investigando que debe de ser alguna fallo que se te ha escapao. (¿La textura es del mismo formato que la surface?)
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

[Over]

                                Hola Lord.
La creacion de la textura, la creacion de la surface y la carga de una imagen dentro de la surface se hace correctamente. He dibujado la surface con las CopyRects y lo hace correctamente, asi que he deducido que mi problema está en el paso de datos del trozo de surface bloqeuado al trozo de textura bloqueado. Con esta funcion:
memcpy(_DstCur,&_SrcCur,_ScanLineSize);
he conseguido que cuando dibujo la textura se dibuje una textura con colores raros, en realidad lo que hace es grabar la misma linea de pixel ERRONEAS desde la surface en las 512 lineas (256 de textura correcto) de la textura, con lo cual  bloqueo mal la surface,coloco mal el puntero o paso mal la informacion.
HE propbado a copiar dentro de la textura bloqueada un array de color blanco y luego al dibujarla lo hace correctamente, asi que no se que puede ser...

Cuentame como lo hiciste tu.
Gracias de antemano.                                

Drácula

                                Pon aquí tu código para que podamos ver cual es el problema.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Lord Trancos

                                Eso de "colores raros" también me pasaba. Si no recuerdo mal era un problema de que al cargar la surface me lo hacia en una surface de 24 bits (pq le habia puesto el flag de default al formato del pixel). Mientras que la textura al estar en modo 16 bits, me la hacia en modo 16 bits. Asi que estaba copiando pixels de 24 bits en una textura con pixels de 16 bits...

Me huelo que tienes que estar haciendo lo mismo. Asegurate de que el formato de la surface y de la textura es el mismo.
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

[Over]

                                Hola a todos.
El problema no era el tipo de formato de pixel, ya me aseguro que la surface creada sea del tipo del fichero cargado y ademas la textura es creada con este formato, comprobado.
Ya he conseguido solucinarlo y dibuja a la perfeccion, la surface la tenia como LPDIRECT3DSURFACE8 m_pSurface; y la Textura era LPDIRECT3DTEXTURE8 *m_pTextura;
Al bloquearlos y colocar los punteros, parece que el memcpy no lo hacia correctamente, ahora he declarado la surface como *m_pSurface; y el memcpy lo hace bien y como tenia pensado. Gracias por vuestro interes. Gracias.                                

[Over]

                                Hola a todos.
El problema no era el tipo de formato de pixel, ya me aseguro que la surface creada sea del tipo del fichero cargado y ademas la textura es creada con este formato, comprobado.
Ya he conseguido solucinarlo y dibuja a la perfeccion, la surface la tenia como LPDIRECT3DSURFACE8 m_pSurface; y la Textura era LPDIRECT3DTEXTURE8 *m_pTextura;
Al bloquearlos y colocar los punteros, parece que el memcpy no lo hacia correctamente, ahora he declarado la surface como *m_pSurface; y el memcpy lo hace bien y como tenia pensado. Gracias por vuestro interes. Gracias.                                

Drácula

                                ¡Me parece que te equivocas completamente! No tiene sentido que declares un puntero a un puntero para este caso!!!                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías






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.