sswift: It's not doing 10 writepixels it's doing 800x600 of them 10 times over! All my "changed" stats actually write a single pixel *inside* the loop not outside, that's what causes the delay. Remove the Plot and the time drops again.
I'll post the source.
hang on ...
;/////////////////////////////////////
;Bench V0.1 Jake Birkett Mon 07/11/05
;/////////////////////////////////////
Global ScreenWidth = 800
Global ScreenHeight = 600
Global BitDepth = 32
Global multiplier = 100
Graphics (ScreenWidth, ScreenHeight, BitDepth, 0)
Global Results = WriteFile("Results.txt")
Global ly = 0
Global gap = 10
Color 0,255,255
Text 0,ly,"Blitz Plus Bench V0.1 (c) 2005 Jake Birkett"
ly=ly+gap
Text 0,ly,"-------------------------------------------"
ly=ly+gap*2
Color 255,255,0
Text 0,ly,"width="+ScreenWidth+" height="+ScreenHeight+" depth="+BitDepth
ly=ly+gap*2
Color 0,255,0
Text 0,ly,"<press any key to start>"
ly=ly+gap*2
Flip
WaitKey()
Func(1, "Empty For Loop", 100)
Func(2, "Read Pixel Fast From BackBuffer", 10)
Func(3, "Read Pixel Fast From Dynamic Image", 10)
Func(4, "Read Pixel Fast From Managed Image", 10)
Func(5, "Write Pixel Fast To BackBuffer", 10)
Func(6, "Write Pixel Fast To Dynamic Image", 10)
Func(7, "Write Pixel Fast To Managed Image", 10)
Func(8, "DrawBlock Dynamic Image to BackBuffer", 10)
Func(9, "DrawBlock Managed Image to BackBuffer", 10)
Func(10, "DrawBlock changed Dynamic Image to BackBuffer", 10)
Func(11, "DrawBlock changed Managed Image to BackBuffer", 10)
Func(12, "CopyRect Dynamic Image to BackBuffer", 10)
Func(13, "CopyRect Managed Image to BackBuffer", 10)
Func(14, "CopyRect changed Dynamic Image to BackBuffer", 10)
Func(15, "CopyRect changed Managed Image to BackBuffer", 10)
Func(16, "CopyRect Dynamic Image to Dynamic Image", 10)
Func(17, "CopyRect Managed Image to Managed Image", 10)
Func(18, "CopyRect Dynamic Image to Managed Image", 10)
Func(19, "CopyRect Managed Image to Dynamic Image", 10)
Func(20, "CopyRect changed DI to MI", 10)
Func(21, "CopyRect changed MI to DI", 10)
Func(22, "GrabImage (dynamic) from BackBuffer", 10)
Func(23, "GrabImage (managed) from BackBuffer", 10)
Func(24, "GrabImage (dynamic) from DI", 10)
Func(25, "GrabImage (managed) from MI", 10)
Func(26, "GrabImage (dynamic) from MI", 10)
Func(27, "GrabImage (managed) from DI", 10)
CloseFile(Results)
gfxGrab = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Flip
GrabImage gfxGrab,0,0
Flip
SaveImage gfxGrab, CurrentDir()+"screenshot.bmp"
FreeImage gfxGrab
Flip
Color 255,255,255
ly=ly+gap
Text 0,ly,"Screenshot saved"
ly=ly+gap*2
Color 0,255,0
Text 0,ly,"<press any key to exit>"
Flip
FlushKeys ;doesn't seem to work
WaitKey()
Function Func(num%, name$, m%)
multiplier = m
Flip
Color 255,255,255
Text 0,ly,name$ + " x "+multiplier
Flip
st = MilliSecs()
Select num
Case 1 EmptyForLoop()
Case 2 ReadPixelFastFromBackBuffer()
Case 3 ReadPixelFastFromDI()
Case 4 ReadPixelFastFromMI()
Case 5 WritePixelFastToBackBuffer()
Case 6 WritePixelFastToDI()
Case 7 WritePixelFastToMI()
Case 8 DrawBlockDynamicImagetoBackBuffer()
Case 9 DrawBlockManagedImagetoBackBuffer()
Case 10 DrawBlockModDynamicImagetoBackBuffer()
Case 11 DrawBlockModManagedImagetoBackBuffer()
Case 12 CopyRectDynamicImagetoBackBuffer()
Case 13 CopyRectManagedImagetoBackBuffer()
Case 14 CopyRectModDynamicImagetoBackBuffer()
Case 15 CopyRectModManagedImagetoBackBuffer()
Case 16 CopyRectDynamicImagetoDI()
Case 17 CopyRectManagedImagetoMI()
Case 18 CopyRectDItoMI()
Case 19 CopyRectMItoDI()
Case 20 CopyModRectDItoMI()
Case 21 CopyModRectMItoDI()
Case 22 GrabDIFromBB()
Case 23 GrabMIFromBB()
Case 24 GrabDIFromDI()
Case 25 GrabMIFromMI()
Case 26 GrabDIFromMI()
Case 27 GrabMIFromDI()
End Select
endt = MilliSecs()-st
Flip
Color 255,255,0
Local lx= 450
Text lx,ly,endt+"ms"
Text lx+70,ly,"= "+endt/(multiplier*1.0) + " each"
ly=ly+gap+2
Flip
WriteLine(Results, ccPadRight(name$ + " x "+multiplier, 52) + ccPadRight(endt+"ms", 9) + "= "+endt/(multiplier*1.0) + " each")
End Function
Function EmptyForLoop()
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
Next
Next
Next
End Function
Function ReadPixelFastFromBackBuffer()
LockBuffer BackBuffer()
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
z = ReadPixelFast(x,y)
Next
Next
Next
UnlockBuffer BackBuffer()
End Function
Function ReadPixelFastFromDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
SetBuffer ImageBuffer(Temp)
LockBuffer ImageBuffer(Temp)
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
z = ReadPixelFast(x,y)
Next
Next
Next
UnlockBuffer ImageBuffer(Temp)
FreeImage Temp
SetBuffer BackBuffer()
End Function
Function ReadPixelFastFromMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
SetBuffer ImageBuffer(Temp)
LockBuffer ImageBuffer(Temp)
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
z = ReadPixelFast(x,y)
Next
Next
Next
UnlockBuffer ImageBuffer(Temp)
FreeImage Temp
SetBuffer BackBuffer()
End Function
Function WritePixelFastToBackBuffer()
LockBuffer BackBuffer()
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
WritePixelFast(x,y, 0)
Next
Next
Next
UnlockBuffer BackBuffer()
End Function
Function WritePixelFastToDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
SetBuffer ImageBuffer(Temp)
LockBuffer ImageBuffer(Temp)
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
WritePixelFast(x,y, 0)
Next
Next
Next
UnlockBuffer ImageBuffer(Temp)
FreeImage Temp
SetBuffer BackBuffer()
End Function
Function WritePixelFastToMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
SetBuffer ImageBuffer(Temp)
LockBuffer ImageBuffer(Temp)
For n = 0 To multiplier-1
For y = 0 To ScreenHeight-1
For x = 0 To ScreenWidth-1
WritePixelFast(x,y, 0)
Next
Next
Next
UnlockBuffer ImageBuffer(Temp)
FreeImage Temp
SetBuffer BackBuffer()
End Function
Function DrawBlockDynamicImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
For n = 0 To multiplier-1
DrawBlock(Temp,0,0)
Next
FreeImage Temp
End Function
Function DrawBlockManagedImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
For n = 0 To multiplier-1
DrawBlock(Temp,0,0)
Next
FreeImage Temp
End Function
Function DrawBlockModDynamicImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
DrawBlock(Temp,0,0)
Next
FreeImage Temp
End Function
Function DrawBlockModManagedImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
DrawBlock(Temp,0,0)
Next
FreeImage Temp
End Function
Function CopyRectDynamicImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Local ib = ImageBuffer(temp)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib)
Next
FreeImage Temp
End Function
Function CopyRectManagedImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Local ib = ImageBuffer(temp)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib)
Next
FreeImage Temp
End Function
Function CopyRectModDynamicImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Local ib = ImageBuffer(temp)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib)
Next
FreeImage Temp
End Function
Function CopyRectModManagedImagetoBackBuffer()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Local ib = ImageBuffer(temp)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib)
Next
FreeImage Temp
End Function
Function CopyRectDynamicImagetoDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function CopyRectManagedImagetoMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function CopyRectDItoMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function CopyRectMItoDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function CopyModRectDItoMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function CopyModRectMItoDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Local ib = ImageBuffer(temp)
Local ib2 = ImageBuffer(temp2)
For n = 0 To multiplier-1
SetBuffer ImageBuffer(Temp)
Plot 0,0
SetBuffer BackBuffer()
CopyRect(0,0,ScreenWidth, ScreenHeight, 0,0, ib, ib2)
Next
FreeImage Temp
FreeImage Temp2
End Function
Function GrabDIFromBB()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
FreeImage Temp
End Function
Function GrabMIFromBB()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
FreeImage Temp
End Function
Function GrabDIFromDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
SetBuffer ImageBuffer(Temp2)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
SetBuffer BackBuffer()
FreeImage Temp
FreeImage Temp2
End Function
Function GrabMIFromMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
SetBuffer ImageBuffer(Temp2)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
SetBuffer BackBuffer()
FreeImage Temp
FreeImage Temp2
End Function
Function GrabDIFromMI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
SetBuffer ImageBuffer(Temp2)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
SetBuffer BackBuffer()
FreeImage Temp
FreeImage Temp2
End Function
Function GrabMIFromDI()
Temp = CreateImage(ScreenWidth, ScreenHeight, 1, 1)
Temp2 = CreateImage(ScreenWidth, ScreenHeight, 1, 2)
SetBuffer ImageBuffer(Temp2)
For n = 0 To multiplier-1
GrabImage (temp,0,0)
Next
SetBuffer BackBuffer()
FreeImage Temp
FreeImage Temp2
End Function
Function ccPadRight$(TheString$, TheSize)
sl = TheSize - Len(TheString$) ; Get length of string
If sl > 0 Then ; Needs padding?
For p = 1 To sl
z$ = z$ + " " ; make a blank string
Next
TheString$ = TheString$ + z$; add the blank string to the main string
EndIf
Return TheString$
End Function
The stats are pretty damn important for developers. If there's wasn't a delay in sending modified managed images to the backbuffer I'd continue my game in BPlus but I can't get the effects in and maintain speed so it's gonna be in BMax now.