Posted: Thu Apr 10, 2003 5:28 pm
Restored from previous forum. Originally posted by raphael.
anyone able to speed this up? maybe fred?
any tips appreciated!
anyone able to speed this up? maybe fred?
any tips appreciated!
Code: Select all
; converted from bb code
; turn debugger off for performance..
#appWidth = 640
#appHeight= 480
Structure LONG
l.l
EndStructure
Dim Palette.l(255)
Dim table.l(#appWidth, #appWidth)
; init
Procedure.l FP_Init()
Shared *Screen.LONG, bufferadr.l, byte_pixel.b, byte_line.l
StartDrawing(ScreenOutput())
StopDrawing()
bufferadr.l = DrawingBuffer()
byte_pixel.b = Round( ( DrawingBufferPixelFormat() + 1)/2, 1)
byte_line.l = DrawingBufferPitch()
*Screen.LONG = bufferadr
ProcedureReturn bufferadr
EndProcedure
Procedure SetupPalette()
; create a temporary image...
CreateImage(0, #appWidth, #appHeight)
; ...to draw a nice colour-pattern onto it
StartDrawing(ImageOutput())
For i = 0 To 63
LineXY(i,0,i,200, RGB(0, 0, i*4))
Next
For i = 0 To 127
LineXY(i+64,0,i+64,200, RGB(0, (i/2)*4, 63*4))
Next
For i = 0 To 63
LineXY(i+192,0,i+192,200,RGB(i*4, 63*4, 63*4))
Next
; grab palette data
For x = 0 To 255
Palette(x) = Point(x,0)
Next
StopDrawing()
; clean-up
FreeImage(0)
EndProcedure
Procedure PreCalc()
For y = 0 To #appHeight
For x = 0 To #appWidth
If x = 0 And y = 0
table(y,x) = 255
Else
table(y,x) = (9000000000 / (Sqr(x*x + y*y) * 250000))
EndIf
Next
Next
EndProcedure
If InitSprite() = 0
End
EndIf
OpenWindow(0, 0, 0, #appWidth, #appHeight, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "testing...")
OpenWindowedScreen(WindowID(), 0, 0, #appWidth, #appHeight, 0, 0 ,0)
If FP_Init() = 0 : End : EndIf
SetupPalette()
PreCalc()
Repeat
If WindowEvent() = #PB_Event_CloseWindow
quit.b = 1
EndIf
; fps
If GetTickCount_() => zeit + 1000
FrameSek = Frames
Frames = 0
zeit = GetTickCount_()
Else
Frames + 1
EndIf
FlipBuffers()
; ClearScreen(0,0,0)
x1.f = 60 * Cos (alfa.f) + 30 * Sin (-alfa) + #appWidth/2
y1.f = 30 * Cos (-alfa*2) + 60 * Sin (alfa) + #appHeight/2
x2.f = 30 * Cos (alfa) + 60 * Sin (alfa*2) + #appWidth/2
y2.f = 60 * Cos (alfa) + 30 * Sin (alfa) + #appHeight/2
x3.f = 45 * Cos (-alfa) + 45 * Sin (alfa) + #appWidth/2
y3.f = 45 * Cos (alfa*2) + 45 * Sin (-alfa) + #appHeight/2
x4.f = 75 * Cos (alfa) + 15 * Sin (alfa*2) + #appWidth/2
y4.f = 15 * Cos (-alfa) + 75 * Sin (alfa*2) + #appHeight/2
x5.f = 35 * Cos (alfa) + 10 * Sin (alfa) + #appWidth/2
y5.f = 10 * Cos (alfa*2) + 35 * Sin (-alfa) + #appHeight/2
x6.f = 40 * Cos (-alfa) + 30 * Sin (alfa*2) + #appWidth/2
y6.f = 40 * Cos (alfa) + 10 * Sin (alfa) + #appHeight/2
alfa.f+0.05
For y = 0 To #appHeight ;Step 2
For x = 0 To #appWidth
a1.l = Abs(y1-y)
a2.l = Abs(x1-x)
a3.l = Abs(y2-y)
a4.l = Abs(x2-x)
a5.l = Abs(y3-y)
a6.l = Abs(x3-x)
a7.l = Abs(y4-y)
a8.l = Abs(x4-x)
a9.l = Abs(y5-y)
a10.l = Abs(x5-x)
a11.l = Abs(y6-y)
a12.l = Abs(x6-x)
pixel.l = table(a1, a2) + table(a3, a4) + table(a5, a6) + table(a7,a8) + table(a9, a10) + table(a11, a12)
If pixel>255
pixel=255
EndIf
*Screen = bufferadr + (x * byte_pixel) + (y * byte_line)
*Screen\l = palette(pixel)
Next
Next
; display fps
StartDrawing(ScreenOutput())
FrontColor(255, 255, 255)
DrawingMode(1)
Locate(5,452)
DrawText("FPS: "+Str(FrameSek))
StopDrawing()
; Sleep_(5)
Until quit = 1
End