bonjour

J'aimerai savoir si quelqu'un connait une méthode pour accéder à la mémoire vidéo ?

Je m'explique : pour un usage bien particulié j'ai besoin de comparer des milliers de scènes 3D entre elles.

Pour cela par exemple je peux 'noter' une scène en calculant le nombre de pixels rouge que comprend le rendu.

Ainsi l'algo est du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
best_note = 0;
best_index = -1;
for(int i=0; i<1000; ++i)
{
  surface.Rendu(scene[i]);
  note = Calcul_note(surface);
  {best_note, best_index} = Best([best_note, best_index}, {note, i});
}
Rien de bien compliquer en soi et j'arrive même à l'implanter.

Seulement voila... techniquement parlant il me semble faire une chose complètement absurde . Car la seul façon que je connaisse pour implémenter mon 'calcul de note' est de passer par 'Surface.LockRectangle' qui permet d'avoir un accès aux pixels du rendu.

C'est absurde car j'utilise ma belle carte graphique 3D avec tous pleins de shaders pour calculer le rendu et ... je ne le fais pas pour calculer la note ! Obligé de passer par le processeur x86 pour un rendu graphique

N'y a t-il pas moyen de rester dans la carte graphique pour faire des calculs sur une surface graphique ? bien sur à la fin faudra bien réinjecter le résultat quand même.

Voila, il est évident que si tel était le cas je gagnerai en efficacité et en rapidité car j'éviterai beaucoup de copies mémoire inutiles

Pourquoi n'existe-t-il pas un moyen de lancer une procédure sur la carte graphique ? On peut bien en faire au niveau de chaque pixel alors pourquoi ne pas pouvoir en lancer une comme ça indépendamment ?

Qu'en pensez vous ?