Plot VS Sprite VS Poke
Plot VS Sprite VS Poke
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é...
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.
Re: Plot VS sprite&autre
il est manifeste que t'a pas tous compris a purebasic !! ....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é...

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)

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é"

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.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...
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...
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...

Voila :Prouvé moi le contraire...![]()

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

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
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