Basic Univers
; Start without debugger to see full speed!

#ScreenWidth  = 1024 ; Feel free to change this to see the pixel filling speed !
#ScreenHeight = 768

If InitSprite() = 0 Or InitKeyboard()= 0
  MessageRequester("Error", "DirectX 7+ is needed.", 0)
EndIf

Structure Pixel
  Pixel.l
EndStructure

Procedure.f GSin(angle.f)
  ProcedureReturn Sin(angle*(2*3.14/360))
EndProcedure

; Pre-calculated values are faster than realtime calculated ones...
; ... so we save them in an array before starting gfx operations
Dim CosTable(#ScreenWidth*2)
Dim ColorTable(255)

For i = 0 To #ScreenWidth*2
  CosTable(i) = GSin(360*i/320)* 32 + 32
Next


If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "PB Plasma")

    t.f = 0.000001
  Repeat

    Wave + 10
    If Wave > 320 : Wave = 0 : EndIf
   
    If StartDrawing(ScreenOutput())
      Buffer      = DrawingBuffer()             ; Get the start address of the screen buffer
      Pitch       = DrawingBufferPitch()        ; Get the length (in byte) took by one horizontal line
      PixelFormat = DrawingBufferPixelFormat()  ; Get the pixel format.
         
      t * 1.1
      For y = 0 To #ScreenHeight - 1
        pos1 = CosTable(y + wave)
       
        *Line.Pixel = Buffer + Pitch*y
       
        For x = 0 To #ScreenWidth - 1
          pos2 =(CosTable(x + Wave) + CosTable(x + y) + pos1)
          *Line\Pixel =((x - 512) *(y - 384)) * t
          *Line + 4
        Next
      Next
     
      StopDrawing()
    EndIf
   
    ExamineKeyboard()
   
    FlipBuffers()
     
  Until KeyboardPushed(#PB_Key_Escape)

Else
  MessageRequester("Error", "Can't open the screen !", 0)
EndIf

End