glFlush () prend beaucoup de temps sur la fenêtre avec un fond transparent

J’ai utilisé le code de Comment créer un contexte de rendu OpenGL avec un arrière-plan transparent? pour créer une fenêtre avec un fond transparent. Mon problème est que le taux de trame est très faible – j’ai environ 20 images / sec même lorsque je dessine un quad (composé de 2 sortingangles). J’ai essayé de savoir pourquoi et glFlush () prend environ 0,047 secondes. Avez-vous une idée de pourquoi? La même chose est rendue dans une fenêtre qui n’a pas d’arrière-plan transparent à 6000 images par seconde (lorsque je supprime la limitation de 60 images par seconde). Il faut aussi un kernel à 100%. Je l’ai testé sur un [email protected] avec ATI Radeon 4800 en utilisant Win7.

Je pense que vous ne pouvez pas obtenir de bonnes performances de cette façon, dans l’exemple lié il y a le code suivant

 void draw(HDC pdcDest) { assert(pdcDIB); verify(BitBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, SRCCOPY)); } 

BitBlt est une fonction exécutée sur le processeur, alors que les fonctions OpenGL sont exécutées par le GPU. Ainsi, les données de rendu du GPU qui retournent à la mémoire principale et la bande passante du GPU vers le CPU sont quelque peu limitées (encore plus parce que les données vont y retourner une fois BitBlt).

Si vous voulez vraiment une fenêtre transparente avec du contenu rendu, vous pourriez vouloir regarder Direct2D et / ou Direct3D. Peut-être y a-t-il un moyen de le faire sans que les données ne soient déplacées.