StartDrawing très très très très lent PB6.30b6
Publié : jeu. 01/janv./2026 17:42
Je viens de remarquer quelques choses ... avec un écran en 4K un simple startdrawing(screenoutput()) et le nombre de FPS s'écroule totalement ... on passe de 60FPS a 30FPS juste en affichant le texte en appuyant sur F2 ... c'est normal ? je veux bien que StrartDrawing soit couteux, mais a ce point là ! Et même dans des affichages plus complexe on passe de 60 a 30 FPS.
Machine de test : i7-8700 Ram32GO et Nvidia GTX 1080 !
Quelqu'un peu confirmer ? je me demande si il n'y a pas un bug...
C'est avec la version de Purebasic 6.30 beta 6
Machine de test : i7-8700 Ram32GO et Nvidia GTX 1080 !
Quelqu'un peu confirmer ? je me demande si il n'y a pas un bug...
C'est avec la version de Purebasic 6.30 beta 6
Code : Tout sélectionner
EnableExplicit
#SpriteID = 0
#SpriteSize = 32
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Erreur", "InitSprite() ou InitKeyboard() a échoué.")
End
EndIf
; Récupération résolution écran (desktop 0)
ExamineDesktops()
Define.i screenW = DesktopWidth(0)
Define.i screenH = DesktopHeight(0)
If screenW <= 0 Or screenH <= 0
MessageRequester("Erreur", "Impossible de lire la résolution du bureau.")
End
EndIf
; Ouvrir l'écran à la résolution native
; Note: en fullscreen, pas de barre/menus, et Escape pour quitter.
If OpenScreen(screenW, screenH, 32, "Sprite rebond + FPS (F2)") = 0
MessageRequester("Erreur", "OpenScreen() a échoué.")
End
EndIf
; Création du sprite (carré blanc)
If CreateSprite(#SpriteID, #SpriteSize, #SpriteSize, #PB_Sprite_AlphaBlending) = 0
MessageRequester("Erreur", "CreateSprite() a échoué.")
End
EndIf
If StartDrawing(SpriteOutput(#SpriteID))
Box(0, 0, #SpriteSize, #SpriteSize, RGB(255, 255, 255))
StopDrawing()
EndIf
; Position / vitesse
Define.f x = (screenW - #SpriteSize) * 0.5
Define.f y = (screenH - #SpriteSize) * 0.5
Define.f vx = 6.0
Define.f vy = 4.0
; FPS
Define showFPS.i = #False
Define frames.i = 0
Define fps.i = 0
Define lastFpsTick.i = ElapsedMilliseconds()
; Gestion toggle F2 (anti-répétition)
Define f2WasDown.i = #False
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
Break
EndIf
; Toggle F2 (une fois par appui)
If KeyboardPushed(#PB_Key_F2)
If f2WasDown = #False
showFPS ! 1
f2WasDown = #True
EndIf
Else
f2WasDown = #False
EndIf
; Mouvement
x + vx
y + vy
; Rebond X
If x < 0
x = 0
vx = -vx
ElseIf x + #SpriteSize > screenW
x = screenW - #SpriteSize
vx = -vx
EndIf
; Rebond Y
If y < 0
y = 0
vy = -vy
ElseIf y + #SpriteSize > screenH
y = screenH - #SpriteSize
vy = -vy
EndIf
; Rendu
ClearScreen(RGB(0, 0, 0))
DisplaySprite(#SpriteID, Int(x), Int(y))
; Calcul FPS (mise à jour 1 fois / seconde)
frames + 1
If ElapsedMilliseconds() - lastFpsTick >= 1000
Debug fps
fps = frames
frames = 0
lastFpsTick = ElapsedMilliseconds()
EndIf
; Affichage FPS
If showFPS
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 10, "FPS : " + Str(fps), RGB(255, 255, 255))
StopDrawing()
EndIf
EndIf
FlipBuffers()
ForEver
End