Arff je vais essayer de t'aider pour l'affichage les images (au passage, ca te donnera des notions sur Dx). Cela dit, mes connaissances sont plutôt limitées (suis jamais allé au fond du prb) et peut-être dépassées!
Déjà, il n'y a pas de fonction de haut niveau en 2D qui gère l'affichage (mes souvenirs!). Ca veut dire qu'il faut les créer.
Alors déjà comme pour toutes les librairies tu dessine sur une surface qui est censé représenter l'écran (celle de Direct3D ressemble bcp au GDI sans les abstractions ).
Cette surface c'est une longue suite de pixels. Si les pixels sont codés sur 32 bits en RGB(A), de 0 à 7 bits, tu as la couleur rouge du pixel en haut a gauche. De 8 à 15, tu as la couleur verte, etc.
En fait, dans ton ordi (et donc dans DirectX ou n'importe quelle librairie), tu as plusieurs de ces surfaces. Tu as notamment au moins un buffer qui te permet de dessiner même quand tu attends que ton moniteur et ta carte soient prèt (cf. Vsync).
Donc dans l'ordre, tu dois:
- Effacer le buffer (en anglais "back buffer) parce que si tu ne l'efface pas tu vas redessiner sur l'image présédente. Utilise la fonction IDirect3DDevice8::Clear()
- Obtenir un pointer sur le back buffer pour pouvoir jouer avec. IDirect3DDevice8::GetBackBuffer()
- Locker le back buffer pour être sur que seul toi accéde à ce buffer (sinon avec le multitache, t'as plusieurs appli qui peuvent toucher a ce backbuffer en même temps -> prb). IDirect3DDevice8::LockRect()
- Dessiner dans le back buffer (en mémoire)
- Delocker le back buffer. IDirect3DDevice8::UnlockRect()
- Deleter le pointer. IDirect3DDevice8::Release
- Copier le back buffer dans la surface representant l'ecran ("primary surface" ). Ca DirectX s'en occupe très bien. IDirect3DDevice8::Present()
Voilà maintenant que mettre dans l'étape "Dessiner dans le back buffer"...??
Ben j'en sais rien
A priori, en cherchant un peu j'ai pas trouvé de fonction pour loader de bmp!! J'utiliserais donc le GDI de win pour loader l'image et obtenir les info dessus! Tu delete le BMP de la mémoire! Puis tu crée une nouvelle surface D3D (notons la NewSurf) en utilisant les info obtenu précédement. Tu charge l'image (D3DXLoadSurfaceFromFile() ). Tu copies (avec D3D!!! le GDI de win est trop lent!!!) la NewSurf dans le back buffer....(avec CopyRects)
Et tu copies le back buffer dans la primary surface...
Bon maintenant loader 2 fois une image c'est de la perte de temps, il doit y avoir une autre méthode!!! Les pros, une idée?
Je cherche de mon coté
Edit: Me suis aidé de GameGuru pour les fonctions
[jfdsdjhfuetppo]--Message édité par Willyzekid le 14-05-2002 à 19:48:40--[/jfdsdjhfuetppo]