Voila ca fait depuis quelques temps que je fais mumuse avec DirectX. J’ai un algo de fBm (Brown motion) qui va super bien pour générer des terrains, seulement cet algo me remplit un buffer de char* (je l’avais programmé à l’époque en C pour OpenGL).
Je cherche à adapter cet algo pour directX9. Visiblement ya rien pour écrire dans la mémoire de la texture directement?
Bien sur que si!
Il suffit de prendre ta texture (de type IDirect3DTexture9 *), de faire un appel à la méthode IDirect3DTexture9::GetSurfaceLevel (pour récupérer les niveaux de mip map), ce qui te fournira une surface (de type IDirect3DSurface9 *), qui est le “containeur” des pixels. Cette surface, il suffit de la locker avec IDirect3DSurface9::LockRect pour obtenir un pointeur sur une zone de donnée à remplir (au format de la texture que tu as créée…).
Une fois que tu as fini de remplir ta texture, un petit appel à IDirect3DSurface9::UnlockRect pour libérer le lock de la texture, puis un petit appel à IDirect3DSurface9::Release pour libérer l’interface sur la surface, et le tour est joué ! (il ne faut pas oublier de l’appeler celle-là, sinon tu ne pourras pas libérer correctement ta texture, ça leakera)