XNA - Escribir datos a una textura desde IntPtr sin copia intermedia

Respondida XNA - Escribir datos a una textura desde IntPtr sin copia intermedia

  • martes, 05 de mayo de 2009 10:50
     
     
    Hola,
    El título describe el problema. Me encuentro en un segmento crítico donde la velocidad prima. Tengo los datos de una Texture2D en una zona de memoria apuntada por un IntPtr y me gustaría copiarlos al vuelo, sin pasar por copias intermedias en un vector byte[].

    ¿Alguien conoce alguna alternativa o solución?

Todas las respuestas

  • miércoles, 06 de mayo de 2009 16:23
    Propietario
     
     
    no me queda muy claro lo que deseas...

    la forma más rápida de hacer la copia ya que tienes el IntPtr es a travez de Marshaling, que es como presumo que lo estas haciendo.

    dudas:

    ya esta la textura en memoria y tienes un Intprt hacia ella...

    que quieres crear un obejto exactamente igual?

    copiar solo la informacion de la textura (mipmaps) en otro objeto?


    realmente, segun como lo hagas, el paso a byte[] no es una copia intermedia, pues ese mismo espacio es entregado al nuevo objto creado..




    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
  • miércoles, 06 de mayo de 2009 16:35
     
     
    No, justo lo contrario. Asignar datos a una textura desde un IntPtr. Tengo un IntPtr que apunta a una zona de memoria la cual quiero asignar como datos de una textura. Lo que quiero es ahorrarme el tener que hacer un marshal a vector de byte y luego un set data.
    • Editado marranxo jueves, 07 de mayo de 2009 11:45
    •  
  • miércoles, 06 de mayo de 2009 16:38
    Propietario
     
     
    claro, pero alli puedes tene problemas..


    que tipo de objeto apuntado con el IntPtr? es un bitmap? que es?

    dame todos los detalles que puedas.


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
  • miércoles, 06 de mayo de 2009 17:32
     
     
    El objeto es un vector de bytes de dimensiones 320*240*4 que representaria un "bitmapdata" (bgra32 (pixelfrmat) * 320 (w) * 240 (H)).
  • viernes, 08 de mayo de 2009 14:44
    Propietario
     
     Respondida
    Malas noticias, he averiguado en todo lado, inclusive en los foros en ingles y la conclusión es que no hay manera de convertir un byte* a un byte[], puesto que byte * e sun tipo no manejado mientras que byte[] si es un tipo manejado.

    Asi las cosas hay dos formas de hacerlo que necesitas

    1- de manera manual convertir el byte* a byte[] recorriendo el puntero y copiando cada byte en el array.
    2- utilizando Marshall.Copy


    Saludos,





    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico