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
