Surface de dessin la plus rapide?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

Bonjour à tous !
Je me demande entre le canvas, la fenêtre, le screen et le screen fenêtré lequel est le plus rapide pour y dessiner ?

J'ai fait ce code, mais comme vous allez le constater, l'affichage du dégradé derriére le Sherman est trés saccadé.

Les fichiers se trouvent ici(code + Sherman + BASS)

Code : Tout sélectionner

IncludeFile "bass.pbi"
IncludeFile "bass2.pbi"

UsePNGImageDecoder()

Enumeration
  #Sherman
  #Fond
  #Window
EndEnumeration

Define File.s
Global streamID, width,height, ShermanX,ShermanY, FPScount,FPS

#width = 800
#height = 600

Declare TH_Background(param)

If CountProgramParameters() = 0
  File = OpenFileRequester("Choisissez un fichier à lire","","Musique|*.wav;*.mp3;*.ogg|Wave|*.wav|MP3|*.mp3",0)
Else
  File = ProgramParameter(0)
EndIf

LoadImage(#Sherman,"M4_Sherman_early_normandy.png")

ShermanX = (#width/2)-(ImageWidth(#Sherman)/2)
ShermanY = (#height/2)-(ImageHeight(#Sherman)/2)

OpenWindow(#Window, 0, 0, #width,#height,"Sherman - ",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CanvasGadget(#Fond,0,0,#width,#height)
AddWindowTimer(#Window,1,1000)

retval_init = BASS_Init(-1,48000,0,WindowID(#Window),0)
streamID = BASS_StreamCreateFile(#False,File,0,0,#BASS_UNICODE | #BASS_SAMPLE_FLOAT | #BASS_SAMPLE_LOOP)
BASS_ChannelPlay(streamID,0)

CreateThread(@TH_Background(),1)

;- Boucle principale

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_Timer
      If EventTimer()= 1
        FPS = FPScount
        FPScount= 0
      EndIf
  EndSelect
  
  
Until event = #PB_Event_CloseWindow

;-Procédures

Procedure TH_Background(param)
  Protected vol,volf.f,clr.i
  Repeat
    vol = BASS_ChannelGetLevel(streamID)
    vol = (vol & $FFFF)
    volf = (vol/32768)*255
    If clr = $FFFFFF
      clr = 0
    Else
      clr = $FFFFFF
    EndIf
    FPScount + 1
    
    StartDrawing(CanvasOutput(#Fond))
    Box(0,0,#width,#height,$000000)
    
    FrontColor($000000)
    BackColor(RGB(volf,volf,volf))
    DrawingMode(#PB_2DDrawing_Gradient)
    CircularGradient(#width/2,#height/2,500)
    Box(0,0,#width,#height,RGB(volf,volf,volf))
    DrawingMode(#PB_2DDrawing_Default)
    Box(0,0,10,10,clr)
    DrawText(11,0,Str(FPS))
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(#Sherman),ShermanX, ShermanY)
    StopDrawing()
    Debug clr
    Delay(25)
  ForEver 
EndProcedure
Dernière modification par JohnJohnsonSHERMAN le lun. 03/oct./2016 22:25, modifié 1 fois.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Surface de dessin la plus rapide?

Message par Ollivier »

C'est le full screen le plus rapide.
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

...
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

J'ai testé ton code. C'est trés fluide. Pas une seule saccade.

A quoi sert Box(0,0,10,10,clr) ?

Pour ce type d'application le canvas est très bien.

Si c'est un jeu que tu souhaites faire alors oui le FullScreen sera le plus rapide.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

Ah merde, le code n'était pas corrigé.... Bref maintenant ca y est, j'ai enlevé les chemins en dur.

Dis mois quelle valeur de fps tu as falsam (le petit chiffre en haut à gauche).

Le Box(0,0,10,10,clr) c'est un petit carré qui s'affiche toutes les deux frames pour voir la vitesse d'affichage. Chez moi j'ai 8 fps avec un canvas.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

JohnJohnsonSHERMAN a écrit :Dis mois quelle valeur de fps tu as falsam (le petit chiffre en haut à gauche).
22
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

le même mais sans chemin en dur... ca me piquait les yeux aussi

22 Fps?! Pas mal... moi j'en suis à 8... T'as quoi comme processeur?

Ah aussi, pense tu qu'avec un windowed screen je pourrais remonter autour de 20 fps sans enlever le dégradé?
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Surface de dessin la plus rapide?

Message par Ollivier »

Falsam a écrit :Sort pas des trucs comme ça sans regardé le context du code.
Bonjour Falsam,

1) Prouve-le que je n'ai pas regardé le "contexte du code", cela m'intéresse.
2) S'il te plaît, t'est-il possible de faire moins de fautes?
Sors pas des trucs comme ça sans regarder le contexte du code.
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

@Ollivier:
1) Prouve-le que je n'ai pas regardé le "contexte du code", cela m'intéresse.
Tu as répondu pour une fois avec une réponse tellement courte et compréhensive que je suis certain que tu n'as pas testé le zip de John.
2) S'il te plaît, t'est-il possible de faire moins de fautes?
Gna Gna Gna. C'est facile quand on manque de répondant ^^ En général je fais attention mais en ce moment je ne suis pas en forme.
JohnJohnsonSHERMAN a écrit :T'as quoi comme processeur?
Processeur i3 3Ghz 4 Go Ram

Supprime ton debug et le delay(25)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

Même sans ca reste en dessous des 20fps avec un canvas... en bouffant le proco a cause de l'absence de delay...
C'est bizarre... je testerai sur mon PC avec un I4 demain, mais là je suis sur mon portable qui a un AMD A8.
Je retire le delay et je vous donne les fps

Edit : ca reste à 8 fps
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

Essaye avec l'environnement 2D dans ce cas pour voir.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

Je te tiens au courant, alors. Peut-être que la lib 2D Drawing n'est pas trés rapide pour les dégradés ?
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Surface de dessin la plus rapide?

Message par JohnJohnsonSHERMAN »

Je passe à 25 fps, et le dégradé ne fonctionne plus, le Sherman n'est plus transparent non plus... :(

Voici le nouveau code :

Code : Tout sélectionner

IncludeFile "bass.pbi"
IncludeFile "bass2.pbi"

UsePNGImageDecoder()
InitSprite()

Enumeration
  #Sherman
  #Fond
  #Window
EndEnumeration

Define File.s
Global streamID, width,height, ShermanX,ShermanY, FPScount,FPS

#width = 800
#height = 600

Declare TH_Background(param)

If CountProgramParameters() = 0
  File = OpenFileRequester("Choisissez un fichier à lire","","Musique|*.wav;*.mp3;*.ogg|Wave|*.wav|MP3|*.mp3",0)
Else
  File = ProgramParameter(0)
EndIf

LoadImage(#Sherman,"M4_Sherman_early_normandy.png")

ShermanX = (#width/2)-(ImageWidth(#Sherman)/2)
ShermanY = (#height/2)-(ImageHeight(#Sherman)/2)

OpenWindow(#Window, 0, 0, #width,#height,"Sherman - ",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
;CanvasGadget(#Fond,0,0,#width,#height)
AddWindowTimer(#Window,1,1000)

retval_init = BASS_Init(-1,48000,0,WindowID(#Window),0)
streamID = BASS_StreamCreateFile(#False,File,0,0,#BASS_UNICODE | #BASS_SAMPLE_FLOAT | #BASS_SAMPLE_LOOP)
BASS_ChannelPlay(streamID,0)

CreateThread(@TH_Background(),1)

;- Boucle principale

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_Timer
      If EventTimer()= 1
        FPS = FPScount
        FPScount= 0
      EndIf
  EndSelect
  
Until event = #PB_Event_CloseWindow

;-Procédures

Procedure TH_Background(param)
  Protected vol,volf.f,clr.i
  OpenWindowedScreen(WindowID(#Window),0,0,800,600)
  Repeat
    vol = BASS_ChannelGetLevel(streamID)
    vol = (vol & $FFFF)
    volf = (vol/32768)*255
    If clr = $FFFFFF
      clr = 0
    Else
      clr = $FFFFFF
    EndIf
    FPScount + 1
    
    StartDrawing(ScreenOutput())
    Box(0,0,#width,#height,$000000)
    
    FrontColor($000000)
    BackColor(RGB(volf,volf,volf))
    DrawingMode(#PB_2DDrawing_Gradient)
    CircularGradient(#width/2,#height/2,500)
    Box(0,0,#width,#height,RGB(volf,volf,volf))
    DrawingMode(#PB_2DDrawing_Default)
    Box(0,0,10,16,clr)
    DrawText(11,0,Str(FPS),$000000,$FFFFFF)
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(#Sherman),ShermanX, ShermanY)
    StopDrawing()
    FlipBuffers()
    Delay(25)
  ForEver 
EndProcedure
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Surface de dessin la plus rapide?

Message par falsam »

Essayes de cette maniere

Code : Tout sélectionner

IncludeFile "bass.pbi"
IncludeFile "bass2.pbi"

UsePNGImageDecoder()
InitSprite()
InitKeyboard()

Enumeration
  #Sherman
  #Fond
  #Window
EndEnumeration

Define File.s
Global streamID, width,height, ShermanX,ShermanY, FPScount,FPS 
Global starttime, time

#width = 800
#height = 600

Declare TH_Background()

If CountProgramParameters() = 0
  File = OpenFileRequester("Choisissez un fichier à lire","","Musique|*.wav;*.mp3;*.ogg|Wave|*.wav|MP3|*.mp3",0)
Else
  File = ProgramParameter(0)
EndIf

OpenWindow(#Window, 0, 0, #width,#height,"Sherman - ",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Window), 0, 0, #width, #height)

LoadSprite(#Sherman, "M4_Sherman_early_normandy.png", #PB_Sprite_AlphaBlending)

retval_init = BASS_Init(-1,48000,0,WindowID(#Window),0)
streamID = BASS_StreamCreateFile(#False,File,0,0,#BASS_UNICODE | #BASS_SAMPLE_FLOAT | #BASS_SAMPLE_LOOP)
BASS_ChannelPlay(streamID,0)

;- Boucle principale
starttime=ElapsedMilliseconds()

Repeat   
  Repeat
    Event = WindowEvent()
    
    Select Event    
      Case #PB_Event_CloseWindow
        End
    EndSelect  
  Until Event=0
  
  ClearScreen(RGB(0, 0, 0))
  TH_Background()
  ExamineKeyboard()
  
  FPScount + 1
  If time>1000
    FPS = FPScount
    FPScount=0
    starttime=ElapsedMilliseconds()
  EndIf

  FlipBuffers()
  time=ElapsedMilliseconds()-starttime
Until KeyboardPushed(#PB_Key_Escape)

;-Procédures

Procedure TH_Background()
  Protected vol,volf.f,clr.i
  vol = BASS_ChannelGetLevel(streamID)
  vol = (vol & $FFFF)
  volf = (vol/32768)*255
  If clr = $FFFFFF
    clr = 0
  Else
    clr = $FFFFFF
  EndIf
  
  StartDrawing(ScreenOutput())  
  FrontColor($000000)
  BackColor(RGB(volf,volf,volf))
  DrawingMode(#PB_2DDrawing_Gradient)
  CircularGradient(#width/2,#height/2,500)
  Box(0,0,#width,#height,RGB(volf,volf,volf))
  DrawingMode(#PB_2DDrawing_Default)
  Box(0,0,10,16,clr)
  DrawText(11,0,Str(FPS),$000000,$FFFFFF)
  StopDrawing()
  
  DisplayTransparentSprite(#Sherman, (ScreenWidth() - SpriteWidth(#Sherman))/2, (ScreenHeight() - SpriteHeight(#Sherman))/2)  
EndProcedure
FPS : 68
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Surface de dessin la plus rapide?

Message par Zorro »

Je me demande entre le canvas, la fenêtre, le screen et le screen fenêtré lequel est le plus rapide pour y dessiner ?
Ollivier a écrit :C'est le full screen le plus rapide.
falsam a écrit :Sors pas des trucs comme ça sans regarder le contexte du code.
ben Olivier a parfaitement répondu a la question !

la surface la plus rapide c'est bien le Full Screen !!
analyse de code ou pas, n'y changera rien ! :roll:

le FullScreen est géré par les cartes Graph !
directx ou openGl .... le canvas, n'est qu'un gadget , il ne beneficit pas de l’accélération materiel
voir pire, il depend carrement du bon vouloir des events windows ....

donc , Olivier a carrement raison , il n'y a pas a tortiller ....

apres que le code de Sherman, soit naze , c'est possible, mais il n'empeche que la reponse a la question
est parfaitement juste


@sherman
apres avoir vite fait regardé le code , sans le tester

je vois que tu utilises un delay et un thread .....meme un timer au debut

mais pourquoi faire ??

en matière de code type "demo" , il faut rester super simple
pas de timer ou le moins possible , pas de thread .... réserve les threads pour des opérations de calcul ou de chargement
sinon franchement ça n'a pas lieu d'etre dans le cadre d'un code type 'demo'

et le delay() c'est un truc a n'utiliser qu'en de rare cas ... (boucle principale pour relacher les event )
mais franchement si ont peut eviter,..... :)

il existe WaitWindowEvent(Delay) qui est preferable ...
Dernière modification par Zorro le sam. 01/oct./2016 19:09, modifié 4 fois.
Répondre