Afficher un pixel en direct daw - Programmation
Marsh Posté le 14-05-2001 à 16:40:02
La méthode brutale : ecriture directe en mémoire.
1) DirectDrawSurface->Lock() pour verrouiller la surface dans laquelle tu veux écire.
2) Pour le moment de l'écriture en elle même, j'ai un trou de mémoire. C'est peut etre DirectDrawSurface->GetDC() pour obtenir un contexte puis une fonction de l'API windows ou une écriture directe en mémoire grâce au pointeur qui va bien.
3) On déverrouille tout.
Marsh Posté le 15-05-2001 à 10:13:46
En gros tu fais un lock sur une directdrawsurface, et tu travailles directement sur la zone memoire concernee.
ex:
DDSURFACEDESC2 ddsd;
LPDIRECTDRAWSURFACE4 g_pDDSBack;
LPSTR pBits;
HRESULT hRet;
ddsd.dwSize = sizeof(ddsd);
// On initialise la struct ddsd
hRet = g_pDDSBack->Lock(NULL, &ddsd, DDLOCK_WAIT , NULL);
// On verrouille la surface de travail (ici le backbuffer)
// On obtient un ddsurfacedesc2 en retour
if (hRet != DD_OK) //Erreur;
pBits = (LPSTR) ddsd.lpSurface;
// Operations de trace directement sur pBits.
g_pDDSBack->Unlock(NULL);
// Ne pas oublier de deverrouiller
Je crois meme que ce code est sorti directement d'un exemple du tutorial..
A+
LEGREG
Marsh Posté le 15-05-2001 à 15:11:48
Merci, maintenant ça marche, j'ai juste un petit probléme de conversion d'une couleur RBG 24 bits en une couleur RGB 16 bits (ca dépend du hardware utilisé...)
Marsh Posté le 14-05-2001 à 16:03:12
Voila, je voulais savour comment programmer une fonction putpixel(x,y,couleur), qui affiche un pixel sur une surface ddraw (fonction en C).
Merci