Plot VS Sprite VS Poke

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Plot VS Sprite VS Poke

Message par SPH »

Salut,

Je post ici car j'incite tous ceux qui font du graphisme d'utiliser les plot plutot que les line et autre instruction graphique.

Mais je demande aussi au pro de PB si les plots sont finalement plus rapide que les sprites ? Je demande cela car je suis encore impressionné par leur rapidité...
Dernière modification par SPH le mar. 12/sept./2006 15:42, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Plot VS sprite&autre

Message par Backup »

SPH a écrit :Salut,

Je post ici car j'incite tous ceux qui font du graphisme d'utiliser les plot plutot que les line et autre instruction graphique.

Mais je demande aussi au pro de PB si les plots sont finalement plus rapide que les sprites ? Je demande cela car je suis encore impressionné par leur rapidité...
il est manifeste que t'a pas tous compris a purebasic !! .... :D

personellement j'utilise les lines si j'ai des ligne a dessiner, et des plots
pour d'autres besoin
quand au sprites , ce sont des Sprites , ils n'ont pas pour vocation a etre utiliser comme un plot !! (meme si l'on peut le faire) :D
mais bon un sprite de 1 pixel !! ??
de toute façon tu predessine dans ton sprite, en utilisant plot par exemple
cela reviens a faire du "precalculé" :D
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Hummmmmmmm, pas si sûr. Et je parlais de sprites avec zones transparentes que l'on peux faire avec des plots quand on ne les mets pas...
Attend, laisse moi finir mon pinguin elastique que je posterais dans le forum, puis je m'attaque a un sprite VS plots......
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je serais vraiment étonné que des plots soient plus rapides que des sprites dans une utilisation disons normales.

les sprites sont gérés en hardware par les cartes graphiques non ?

un sprite de 64x64 pixels représente quand meme 4096 pixels à dessiner point par point.
Image
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Flype a écrit :les sprites sont gérés en hardware par les cartes graphiques non ?
Haaaaa, alors dans ce cas, les plot iront moins vite, en effet...
Mais laissez moi essayer un truc........
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ok j'ai fais des tests et les sprites sont beaucoup plus rapide que les plots...
C'est seulement si un sprite ne contient que moins de 3 points que les plots equivalents sont plus rapides...
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

SPH a écrit :Ok j'ai fais des tests et les sprites sont beaucoup plus rapide que les plots...
C'est seulement si un sprite ne contient que moins de 3 points que les plots equivalents sont plus rapides...
si tu veux accelerer un plot Tu peux remplacer le plot part un poke avec juste un calcule de l'adresse. J'ai donné des exemples sur le forum...les poke sont même plus rapide que l'utilisation des pointeurs.
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

ok, je note ca avec interet !

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Thyphoon a écrit :les poke sont même plus rapide que l'utilisation des pointeurs.
permet moi de douter ^^
je suis persuadé du contraire :P

montre moi ca si tu as un exemple
je suis curieux de voir un poke plus rapide

Dri
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Puisque nous sommes dans les TRUCS ET ASTUCES, quelle tete a le code qui bat un plot(0,0,rgb(255,255,255)) ??
Quelqu'un peux faire un resumé plzzzz ??

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Poke vs Plot vs pointeur
http://www.purebasic.fr/french/viewtopi ... c&start=30

Je vous referais un code propre lorsque j'aurais le temps...mais je confirme en rapidité que ce soit la lecture ou pour l'écriture
le Pokel / Peekl est plus rapide que l'utilisation d'un pointeur qui est plus rapide que le Plot/Point

Prouvé moi le contraire... :P
Anonyme

Message par Anonyme »

Prouvé moi le contraire... :P
Voila : :D

Le code si dessous effectue un test sur un écran de 800x600, il dessine 100x dessus avant de retourner le temps, j'ai virer les fonctions Flipbuffers()... donc on ne voit rien :D

Sur mon PC il y a une grosse différence entre le pointeur & le peek
en revanche sur un dual core, c'est quand meme le pointeur qui remporte de peu ( de l'ordre de qq ms...)

Code : Tout sélectionner

InitSprite()
OpenScreen(800,600,32,"PEEK AND POKE VS POINTER  :D ")

Structure Pixel 
  Pixel.l 
EndStructure : Global *Ptr.Pixel :  Global *Poke.l


Declare PointerDraw()
Declare PokeDraw()


PTR.l = PointerDraw()
PKE.l = PokeDraw()

CloseScreen()

MessageRequester("","POINTEUR = "+Str(PTR)+"ms"+Chr(10)+"POKE = "+Str(PKE)+"ms")


Procedure PointerDraw()
Protected DBuffer.l,DBufferP.l,PixelFormat.l,Pbyte.l 
Protected TA.l,TB.l

TA=ElapsedMilliseconds()
StartDrawing(ScreenOutput()) 

    For i = 1 To 100
    DBuffer      = DrawingBuffer() 
    DBufferP     = DrawingBufferPitch() 
    PixelFormat  = DrawingBufferPixelFormat() 

                      Select PixelFormat 
                            Case #PB_PixelFormat_8Bits         : PixelFormat=1 
                            Case #PB_PixelFormat_15Bits        : PixelFormat=2 
                            Case #PB_PixelFormat_16Bits        : PixelFormat=2 
                            Case #PB_PixelFormat_24Bits_RGB    : PixelFormat=3 
                            Case #PB_PixelFormat_24Bits_BGR    : PixelFormat=3 
                            Case #PB_PixelFormat_32Bits_RGB    : PixelFormat=4 
                            Case #PB_PixelFormat_32Bits_BGR    : PixelFormat=4 
                      EndSelect 
    
    For y = 0 To 600-1 
      *Ptr = DBuffer+DBufferP*y 
        For x = 0 To 800-1 
          *Ptr\Pixel = RGB(0,(y*100)/255,0)
          *Ptr + PixelFormat 
        Next 
    Next 
    Next i
StopDrawing() 
TB=ElapsedMilliseconds()
ProcedureReturn TB-TA
EndProcedure



Procedure PokeDraw()
Protected DBuffer.l,DBufferP.l,PixelFormat.l,Pbyte.l 
Protected TA.l,TB.l

TA=ElapsedMilliseconds()
StartDrawing(ScreenOutput()) 

    For i = 1 To 100
    DBuffer      = DrawingBuffer() 
    DBufferP     = DrawingBufferPitch() 
    PixelFormat  = DrawingBufferPixelFormat() 

                      Select PixelFormat 
                            Case #PB_PixelFormat_8Bits         : PixelFormat=1 
                            Case #PB_PixelFormat_15Bits        : PixelFormat=2 
                            Case #PB_PixelFormat_16Bits        : PixelFormat=2 
                            Case #PB_PixelFormat_24Bits_RGB    : PixelFormat=3 
                            Case #PB_PixelFormat_24Bits_BGR    : PixelFormat=3 
                            Case #PB_PixelFormat_32Bits_RGB    : PixelFormat=4 
                            Case #PB_PixelFormat_32Bits_BGR    : PixelFormat=4 
                      EndSelect 
    
    For y = 0 To 600-1 
      *Poke = DBuffer+DBufferP*y 
        For x = 0 To 800-1 
           PokeL(*Poke,RGB((y*100)/255,0,0))
          *Poke + PixelFormat 
        Next 
    Next 
    Next i

TB=ElapsedMilliseconds()
ProcedureReturn TB-TA
EndProcedure
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Mes 2 cents ;)

Code : Tout sélectionner

;Original code by CplBator

;By Rescator
Procedure.l Ticks_HQ()
  Static maxfreq.q
  Protected t.q
  If maxfreq=0
    QueryPerformanceFrequency_(@maxfreq)
    maxfreq=maxfreq/1000
  EndIf
  QueryPerformanceCounter_(@t.q)
  ProcedureReturn t/maxfreq
EndProcedure


InitSprite()
OpenScreen(800,600,32,"PEEK AND POKE VS POINTER  :D ")

Structure Pixel
  Pixel.l
EndStructure : Global *Ptr.Pixel :  Global *Poke.l

Declare PointerDraw()
Declare PokeDraw()

PTR.l = PointerDraw()
PKE.l = PokeDraw()

CloseScreen()

MessageRequester("","POINTEUR = "+Str(PTR)+"ms"+Chr(10)+"POKE = "+Str(PKE)+"ms")


Procedure PointerDraw()
	Protected DBuffer.l,DBufferP.l,PixelFormat.l,Pbyte.l
	Protected TA.l,TB.l
	
	StartDrawing(ScreenOutput())
	
	DBuffer      = DrawingBuffer()
	DBufferP     = DrawingBufferPitch()
	PixelFormat  = DrawingBufferPixelFormat()
	
	Select PixelFormat
		Case #PB_PixelFormat_8Bits         : PixelFormat=1
		Case #PB_PixelFormat_15Bits        : PixelFormat=2
		Case #PB_PixelFormat_16Bits        : PixelFormat=2
		Case #PB_PixelFormat_24Bits_RGB    : PixelFormat=3
		Case #PB_PixelFormat_24Bits_BGR    : PixelFormat=3
		Case #PB_PixelFormat_32Bits_RGB    : PixelFormat=4
		Case #PB_PixelFormat_32Bits_BGR    : PixelFormat=4
	EndSelect

	TA=Ticks_HQ()
	For i = 1 To 300  
		*Ptr = DBuffer
		For y = 0 To 600-1
			v.l=RGB(0,y*i,0)
			For x = 0 To 800-1
				*Ptr\Pixel = v
				*Ptr + PixelFormat
			Next
		Next
		FlipBuffers()
	Next i
	TB=Ticks_HQ()

	StopDrawing()
	ProcedureReturn TB-TA

EndProcedure



Procedure PokeDraw()
	Protected DBuffer.l,DBufferP.l,PixelFormat.l,Pbyte.l
	Protected TA.l,TB.l
	
	StartDrawing(ScreenOutput())
	DBuffer      = DrawingBuffer()
	DBufferP     = DrawingBufferPitch()
	PixelFormat  = DrawingBufferPixelFormat()
	
	Select PixelFormat
		Case #PB_PixelFormat_8Bits         : PixelFormat=1
		Case #PB_PixelFormat_15Bits        : PixelFormat=2
		Case #PB_PixelFormat_16Bits        : PixelFormat=2
		Case #PB_PixelFormat_24Bits_RGB    : PixelFormat=3
		Case #PB_PixelFormat_24Bits_BGR    : PixelFormat=3
		Case #PB_PixelFormat_32Bits_RGB    : PixelFormat=4
		Case #PB_PixelFormat_32Bits_BGR    : PixelFormat=4
	EndSelect

	TA=Ticks_HQ()
	For i = 1 To 300
		*Poke = DBuffer
		For y = 0 To 600-1
			v.l=RGB(y*i,0,0)
			For x = 0 To 800-1
				PokeL(*Poke,v)
				*Poke + PixelFormat
			Next
		Next
		FlipBuffers()
	Next i
	TB=Ticks_HQ()

	StopDrawing()
	ProcedureReturn TB-TA
	
EndProcedure
Anonyme

Message par Anonyme »

Ca rejoins exactement mon post, c'est kif-kif a 200 ou 500 (poke remporte de peu) Sauf sur le dual core, le pointeur est en tête. :?
Pas facile de nos jour d'optimisé :?
Répondre