IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Copier une texture vers une autre en mémoire systeme ?


Sujet :

DirectX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut Copier une texture vers une autre en mémoire systeme ?
    Bonjour, j'ai repris une source qui crée une dll directx 9, en gros c'est pour un hook.
    Donc un programme qui utilise directx charge des textures et moi je veux créer des textures plus petite a partir de celles ci.
    Pour faire clair je récupère la texture (IDirect3DBaseTexture9) et je veux la copier dans une nouvelle texture, le problème c'est que si j'essaye de la locker ca bug, je suppose qu'elle est en mémoire video donc updatetexture ne fonctionnera pas non plus, comment puis je faire ?

    Merci d'avance (en espérant avoir été clair).

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 430
    Points : 93
    Points
    93
    Par défaut
    Voila quelques précisions:
    HRESULT FonctionDX(IDirect3DBaseTexture9* pTexture)
    {
    D3DXCreateTexture( m_pIDirect3DDevice9,32,32,0,D3DUSAGE_DYNAMIC,D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &ltexture[notex]);
    C'est la texture de destination, ça retourne bien S_OK.

    D3DSURFACE_DESC d3dsd;
    ((IDirect3DTexture9*)pTexture)->GetLevelDesc( 0, &d3dsd );
    La je recois bien les dimensions de la texture à copier.

    Ensuite la premiere méthode que j'ai essayé:
    IDirect3DSurface9* surfS;
    IDirect3DSurface9* surfD;
    ((IDirect3DTexture9*)pTexture)->GetSurfaceLevel(0,&surfS);
    ltexture[notex]->GetSurfaceLevel(0,&surfD);

    GetRenderTargetData(surfS,surfD);
    Là GetRenderTargetData ne retourne pas S_OK.

    Deuxieme méthode:
    D3DLOCKED_RECT d3dlrS,d3dlrD;

    ltexture[notex])->LockRect( 0, &d3dlrD, 0, 0 ))
    ((IDirect3DTexture9*)pTexture)->LockRect( 0, &d3dlrS, 0, 0 ))

    for(int x=0;x<d3dsd.Width;x++)
    {
    for(int y=0;y<d3dsd.Height;y++)
    {
    ((DWORD*)d3dlrD.pBits)[d3dsd.Width*y+x]=((DWORD*)d3dlrS.pBits)[d3dsd.Width*y+x];
    //((DWORD*)d3dlrD.pBits)[d3dsd.Width*y+x]=0; //meme ça ne fonctionne pas

    }
    }

    ltexture[notex]->UnlockRect(0);
    ((IDirect3DTexture9*)pTexture)->UnlockRect(0);
    Voila j'ai aussi essayé updatetexture et updatesurface sans succes.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  2. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50
  3. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  4. Réponses: 12
    Dernier message: 22/02/2006, 15h28
  5. Copier un enregistrement d'une table vers une autre
    Par le lynx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/01/2006, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo