begin process at 2012 05 30 13:39:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

DirectX

 > 

Textures et lock()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Textures et lock()

vendredi 11 février 2005 à 17:29:09 | Textures et lock()

brosse_adan

Bonjour à tous,

j'essaie de lire les données d'une texture, en vain! Quand j'essaie d'écrire dans un fichier les couleurs qui la composent, les unes après les autres, rien ne marche! Quelqu'un peut-il m'aider? Voila mon code de création de texture :

if(!m_FileName)
  return;

 if(m_Texture!=NULL) {
  m_Texture->Release();
  m_Texture = NULL;
 }

 D3DXIMAGE_INFO info;
 ZeroMemory( &info, sizeof(D3DXIMAGE_INFO));

 if( FAILED(D3DXGetImageInfoFromFile( m_FileName, &info))) {
  ofstream o("stderr.txt");
  o << "Impossible de charger le fichier image!" << endl;
  o.close();
 }
 
 m_Height = info.Height;
 m_Width = info.Width;
 m_ColorKey = ColorKey;

 if(FAILED(D3DXCreateTextureFromFileEx( DXObject::m_3DDevice,
    m_FileName,
    m_Width,
    m_Height,
    1,
    0,
    D3DFMT_UNKNOWN,
    D3DPOOL_MANAGED,
    D3DX_DEFAULT,
    D3DX_DEFAULT,
    ColorKey,
    &info,
    NULL,
    &m_Texture))) {
     ofstream o("stderr.txt");
     o << "Impossible de charger le fichier image!" << endl;
     o.close();
    }

et voici celui ou je cherche à lire les données :

D3DLOCKED_RECT donnees;
 ZeroMemory( &donnees, sizeof(D3DLOCKED_RECT));
 HRESULT hr;

 hr = m_Texture->LockRect(0,
      &donnees,
      NULL,
      0);
 if(FAILED(hr)) {
  MessageBox(NULL, "Marche pas!", "Erreur!", MB_OK);
  return;
 }

  D3DCOLOR *pixels = (D3DCOLOR *)donnees.pBits;

  ofstream fo("sss.txt");
 for(int y=0; y<m_Height; y++) {
  for(int x=0; x<m_Width; x++) {
   fo << (*pixels) << ' ' ;
   pixels++;
  }
  fo << endl;
 }
 fo.close();

 m_Texture->UnlockRect(0);

Voila, à la sortie j'obtiens un fichier qui est complètement incohérent : je n'ai que des 0 partout!!!

Merci d'avance.

samedi 12 février 2005 à 02:12:20 | Re : Textures et lock()

Galmiza

Essaye plutôt d'écrire sur la surface liée à la texture.
pTexture->GetSurfaceLevel( 0, &pSurface );

Mais aussi lors de la création de la texture, défini son usage comme D3DUSAGE_DYNAMIC.


samedi 12 février 2005 à 11:32:23 | Re : Textures et lock()

brosse_adan

Ca marche toujours pas!!!  Comprends pas ce qu'ils disent dans la doc : c'est quoi une dirty region??? et le machin sur le pitch aussi, comprends pas non plus..... c'est bien directX, mais des fois, c'est dur

samedi 12 février 2005 à 12:11:42 | Re : Textures et lock()

Galmiza

Telecharge ma source 2D HARDWARE avec DirectX et ajoute juste avant le  le "return TRUE;" de la fonction BOOL InitDirect3D(HWND hWnd) le code suivant :

    // La surface est crée en même temps que le texture donc existe déjà
    pTileTexture->GetSurfaceLevel( 0, &pTileSurface );

    D3DLOCKED_RECT d3dLockedRect;
    pTileSurface->LockRect(    &d3dLockedRect,
                            NULL,
                            0);

    D3DCOLOR *pPixels = (D3DCOLOR*)d3dLockedRect.pBits;

    for (DWORD i=0; i<srcInfo.Height*srcInfo.Width/2; i++) *(pPixels++) = i*i*i|0xFF000000;

    pTileSurface->UnlockRect();

Chez moi ça fonctionne . J'espere que ça t'aidera . En fait la texture ne veut pas être crée avec D3DUSAGE_DYNAMIC comme paramètre !
samedi 12 février 2005 à 14:57:33 | Re : Textures et lock()

brosse_adan

Merci bien, je vais essayer....

brosse_adan, toujours dans le verre
samedi 12 février 2005 à 14:57:38 | Re : Textures et lock()

brosse_adan

Merci bien, je vais essayer....

samedi 12 février 2005 à 16:36:58 | Re : Textures et lock()

brosse_adan

Je comprends pas trop ton i*i*i. Ca sert à koi ça?

De plus, ton projet ne compile plus avec les deniers SDK de DX, la fonction Draw des des sprites ayant changée (cf SDK release octobre, decembre et février 2005 )

Voilà, en tout cas merci!

samedi 12 février 2005 à 18:02:10 | Re : Textures et lock()

Galmiza

Le i*i*i ça sert juste à colorier différement les pixels de la texture.
Enfin bref, en tout cas avec ce code j'arrive à modifier les pixels de la texture .
Ca les amuse de modifier le SDK sans arrêt ? J'imagine qu'il n'y a pas de grandes différences entre les versions de DirectX 9.... je vais garder la mienne car je n'ai pas envie d'avoir de mauvaises surprises de non-compatibilité des fonctions.... souvenir du passage DX8.1 -> DX9 ...

Attention à bien écrire 0xFF dans le channel alpha (mon  |0xFF000000 sert à ça) !

Allez bonne chance et vive DirectX.
mardi 15 février 2005 à 14:54:01 | Re : Textures et lock()

brosse_adan

Désolé, j'ai pas réécrit avant, j'étais pas là ce week-end...

C'est vrai que c'est pas bête, je vais peut-être déjà essayer de modifier les couleurs pour voir ce qui marche!!

Sinon, y a pas de grosses différences majeures dans le dernier SDK, sauf pour les sprites... , d'ailleurs, la version du SDK que tu as es plus facile pour gérer les sprites, mais bon, faut pas chercher!

merci pour tes coups de main!

mercredi 30 juillet 2008 à 15:33:54 | Re : Textures et lock()

Adeon

Haaa super cette question vient de me résoudre des heures de recherche.

Pour éviter aux autres d'avoir les problèmes que j'ai pu rencontré je tiens a préciser que cette commande :

*(pPixels+x) = 0xFFFF0000;

rend le texel numero x rouge Seulement si on l'a chargé en A8R8G8B8.

si on l'a chargé en R5G6R5 par exemple l'information *(pPixels+x) = 0xFFFF0000 voudra dire que le pixel x est noir et que le pixel x+1 est blanc !

Voila

______________________
Adeon, programmeur de jeux sur directX 9 (http://theolith.com/2.html) a votre service !



Cette discussion est classée dans : donnees, filename, info, texture, fo


Répondre à ce message

Sujets en rapport avec ce message

comparaison de strings [ par erazor ] voila je suis en train de mettre au point un gestionnaire de textures: sont but est de verifier si on charge pas deux fois la meme texture et dans ce Lire/Ecrire dans un fichier txt, pb, besoin d'aide [ par eupeup ] Salut a tous, j'ai un probleme avec une appli que je dois coder. Je suis un matheux et non un codeur, vous m'excuserez. J'ai un fichier xml, et je do Problème de gestion hDC et hWnd. [ par vith17 ] Bonjour à tous,J'essaie de faire un écran de veille avec un cube qui tourne en utilisant OpenGL (je me sers des tutoriaux de Nehe et de Christian Code OpenGL: problemes des textures [ par dletozeun ] bonjour,dans mon projet actuel sous devcpp j'affiche un objet 3D avec opengl en utilisant  GL_TRIANGLE_STRIP pour optimiser la vitesse d'affichage.... Problème de link [ par Kaneda Shotaro ] J'ai Visual Studio. Dans mon cpp principal j'ai ceci : #include "MWConfig.h" [...] LoadConfigFromFile("Config.mwc", MWConfiguration); [...] Dans mon OpenGL map blending [ par dletozeun ] bonjour, Dans mon projet je genere un terrain sur lequel j'applique une texture (roche par exemple) avec opengl. Maintenant je voudrais gerer le mult image non chargée [ par aurelivs ] bonjourje cherche a faire une appli en C++ et OpenGL pour charger une image et afficher cette image (puis la transformer). cependant je n'arrive pas à Transparence avec glBlend [ par smoove5198 ] Bonjour, A l'aide d'un tutorial j'ai crée une classe qui affiche du texte sous opengl a partir d'une texture bmp listant tous les caracteres. Dans c info pour un grand débutant [ par zut69 ] Bonjour,Je fais beaucoup de php, mais j essaie de me mettre au C/C++, pour l instant, j'arrive à créer des petits programmes qui sont gérés de même fa Probleme simple de chaine de caractere [ par lamoueste ] Voila j'ai un probleme je voudrais simplement copier un fichier essai.txt ce qui marche avec la fonction : char FileName[]={"c:\\essai.txt"}; char Ne


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales