What is more faster ...
Blitz3D Forums/Blitz3D Programming/What is more faster ...
| ||
Hi all ! What is more faster betwwen a bank and an imagebuffer, I must do some zoom (not a scale), blend etc ... thank |
| ||
Why not do some speed tests? |
| ||
bank is faster. in blitz+ you can use lockedpixels to get a bank of the imagebuffer directly, which is the fastest method I've heard. havn't used B+ since the demo, so don't know if it's true or not. |
| ||
Yes it s really faster ... But is it possible to switch a bank memory into an imagebuffer Graphics3D 800,600,32,2 SetBuffer BackBuffer() Global nicolas nicolas = CreateImage(512,512) bk = CreateBank(512*512*4) colorrgb = 210 Or (100 Shl 8) Or (10 Shl 16) start = MilliSecs() For x=1 To 512 For y=1 To 512 WritePixel x,y,colorrgb,ImageBuffer(nicolas) Next Next Print MilliSecs()-start start = MilliSecs() For y=0 To 511 For x=0 To 511 PokeInt bk,(y*512+x )*4,colorrgb Next Next Print MilliSecs()-start WaitKey() |
| ||
Little correction with lockbuffer and read/write operation Graphics3D 800,600,32,2 SetBuffer BackBuffer() Global nicolas nicolas = CreateImage(512,512) bk = CreateBank(512*512*4) colorrgb = 210 Or (100 Shl 8) Or (10 Shl 16) start = MilliSecs() LockBuffer ImageBuffer(nicolas) For x=1 To 512 For y=1 To 512 test=ReadPixelFast ( x,y,ImageBuffer(nicolas)) WritePixelFast x,y,colorrgb,ImageBuffer(nicolas) Next Next UnlockBuffer ImageBuffer(nicolas) Print MilliSecs()-start start = MilliSecs() For y=0 To 511 For x=0 To 511 test=PeekInt (bk,(y*512+x )*4) PokeInt bk,(y*512+x )*4,colorrgb Next Next Print MilliSecs()-start WaitKey() |
| ||
A very interresting thing look at this, It s more faster to compute operation in a bank an copy the bank in the imagebuffer than directle compute the operation in the imagebuffer Graphics3D 800,600,32,2 SetBuffer BackBuffer() Global nicolas nicolas = CreateImage(512,512) bk = CreateBank(512*512*4) colorrgb = 210 Or (100 Shl 8) Or (10 Shl 16) Print "Read / Write from an ImageBuffer" start = MilliSecs() LockBuffer ImageBuffer(nicolas) For x=1 To 512 For y=1 To 512 test=ReadPixelFast ( x,y,ImageBuffer(nicolas)) WritePixelFast x,y,colorrgb,ImageBuffer(nicolas) Next Next UnlockBuffer ImageBuffer(nicolas) Print MilliSecs()-start Print "Read / Write from a banck) start = MilliSecs() For y=0 To 511 For x=0 To 511 test=PeekInt (bk,(y*512+x )*4) PokeInt bk,(y*512+x )*4,colorrgb Next Next Print MilliSecs()-start Print "Read/Write from a banck, an copy the result in ImageBuffer" start = MilliSecs() LockBuffer ImageBuffer(nicolas) For y=0 To 511 For x=0 To 511 test=PeekInt (bk,(y*512+x )*4) PokeInt bk,(y*512+x )*4,colorrgb test=PeekInt (bk,(y*512+x )*4) WritePixelFast x+1,y+1,colorrgb,ImageBuffer(nicolas) Next Next UnlockBuffer ImageBuffer(nicolas) Print MilliSecs()-start WaitKey() |
| ||
It's the ReadPixelFast which is not so fast. |
| ||
I also found that storing the values in arrays are much faster than banks.. On My PC I get 20ms for the array and 112ms for banks.width = 1024 Dim test(width ,width ) bank = CreateBank(width *width ) Print"Array" start = MilliSecs() For x = 0 To width -1 For y = 0 To width -1 test(x,y) = 1 a = test(x,y) Next Next Print MilliSecs() - start Print"Bank" start = MilliSecs() For x = 0 To width -1 For y = 0 To width -1 a=PeekInt (bank,((y*width )+x )) PokeInt bank,((y*width )+x ),1 Next Next Print MilliSecs() - start WaitKey() |
| ||
It 's true, sometime I don't understand the blitz ... |
| ||
Your grammar is incorrect. It's not "more faster". It's "more quicklier". |
| ||
thank |
| ||
@ Flynn Your Calculations are not very economical ;) Try this: width = 1024 Dim test(width ,width ) bank = CreateBank(width * width * 4 ) Print"Array" start = MilliSecs() For x = 0 To width -1 For y = 0 To width -1 test(x,y) = 1 a = test(x,y) Next Next Print MilliSecs() - start Print"Bank" width4=width * 4 start = MilliSecs() x1=0 For x = 0 To width -1 y1=0 For y = 0 To width -1 a=PeekInt (bank,(y1+x1 )) PokeInt bank,(y1+x1 ),1 y1=y1+4 Next x1=x1+width4 Next Print MilliSecs() - start WaitKey() |
| ||
"Your grammar is incorrect. It's not "more faster". It's "more quicklier"." Um, he was joking. It's just "faster," not "more faster," and definitely NOT "more quicklier." |
| ||
More quicklier is more better than more faster but more worse than more slowlily is more faster than more quicker ! |
| ||
Reading from video RAM is much slower than reading from system RAM. This is true. |
| ||
@Joe: Did you think I was serious? |
| ||
I think abomination had the quickest way, but this can also be handy if you multiply alot by powers of 2:function GetShiftValue(p) repeat p=p shr 1 c=c+1 until p=1 return c end function So now you can binary shift by c instead of multiply/divide by p. so instead of PeekInt (bk,(y*512+x )*4) you have texshift=getshiftvalue(width) ... PeekInt (bk,((y shl texshift)+ x ) shl 2) maybe it saves like 0.000001ms :P but maybe if you need to read the bank or multiply lots of times per loop its worth it. *Edit: Weird, binary shifting on my work PC (crappy celeron 333) makes no difference at all! Strange, because on an old pc like that I'd have thought it would. oh well. |