Incohérence de performance avec la fonction "BitBlt" ?
MouLeT
Messages postés90Date d'inscriptionsamedi 11 octobre 2003StatutMembreDernière intervention27 juillet 2009
-
27 juil. 2009 à 01:31
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
27 juil. 2009 à 09:02
Bonsoir à tous, je viens depuis pas longtemps recommencer à programmer afin de créer un petit jeu 2D.
Cependant j'ai remarqué quelque chose qui me semble incohérent concernant les performances en utilisant la fonction BitBlt.
Voici une partie de mon code :
Option Explicit
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
'[...]
Private Sub Jeu()
'[...]
Do
DoEvents
'[...]
FOND.Refresh 'AutoRedraw de la PictureBox FOND : True
For BCL = 1 To TOBJ
If (PicPos(BCL, 1) < FOND.ScaleWidth And PicPos(BCL, 1) + PicSize(BCL, 1) > 0) _
And (PicPos(BCL, 2) < FOND.ScaleHeight And PicPos(BCL, 2) + PicSize(BCL, 2) > 0) Then
Select Case PicType(BCL)
Case 0
BitBlt FOND.hDC, PicPos(BCL, 1), PicPos(BCL, 2), PicSize(BCL, 1), PicSize(BCL, 2), PIC(PicPath(BCL)).hDC, PicDeb(BCL, 1), PicDeb(BCL, 2), SRCCOPY
Case 1
BitBlt FOND.hDC, PicPos(BCL, 1), PicPos(BCL, 2), PicSize(BCL, 1), PicSize(BCL, 2), PIC(PicPath(BCL)).hDC, PicDeb(BCL, 1) + PIC(PicPath(BCL)).ScaleWidth / 2, PicDeb(BCL, 2), SRCAND
BitBlt FOND.hDC, PicPos(BCL, 1), PicPos(BCL, 2), PicSize(BCL, 1), PicSize(BCL, 2), PIC(PicPath(BCL)).hDC, PicDeb(BCL, 1), PicDeb(BCL, 2), SRCPAINT
End Select
End If
Next
Loop
End Sub
Après avoir testé le code sur mon pc (E8400 3.0Ghz sous Windows Seven, Core utilisé à 100%) j'atteins "seulement" 350 FPS.
Sur mon ancien PC (Athlon XP 2200+ sous Windows XP SP0, Core utilisé à 30%) j'atteins près de 3000 FPS ... (c'est la carte graphique qui limite le nombre de FPS en étant utilisée à 100% !)
Je tourne aussi vers 300 FPS sur un ordinateur portable (T5200 1.6Ghz sous Windows XP SP3)
Quelle est la raison de cette différence de performance ? Comment y remédier ?