;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;

;; OpenGL Basic Lissajous Example

;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(define *gl* (gl:make-opengl))

(gl:open-opengl *gl* '(200 200 640 480))


(define init

   (lambda ()

      (gl:clear-color *gl* 0.0 0.0 0.0 0.0)

      (gl:clear-accum *gl* 0.0 0.0 0.0 0.0)      

      (gl:enable *gl* *gl:depth-test*)))


(define view

   (lambda ()

      (gl:viewport *gl* 0 0 640 480)

      (gl:matrix-mode *gl* *gl:projection*)

      (gl:load-identity *gl*)

      (glu:perspective *gl* 40.0 (/ 640 480) 1.0 50.0)

      (gl:matrix-mode *gl* *gl:modelview*)))


(define draw

   (lambda (time)

      (gl:clear *gl* (io:binary-or *gl:depth-buffer-bit* *gl:color-buffer-bit*))

      (gl:load-identity *gl*)

      (glu:look-at *gl* 0 0 5 0 0 0 0 1 0)

      

      (gl:begin *gl* *gl:points*)

      (gl:color *gl* 0.0 1.0 0.0 1.0)      

      (gl:vertex *gl* 

                 (sin (* 1.0 pi (/ time 200000)))

                 (sin (* 2.2 pi (/ time 200000))))

      (gl:vertex *gl* 

                 (* .5 (sin (* 1.0 pi (/ time 200000))))

                 (* .5 (sin (* 2.2 pi (/ time 200000)))))

      (gl:end *gl*)

      

      (gl:accum *gl* *gl:accum* 1.0)

      (gl:accum *gl* *gl:mult* .9999999999)           

      (gl:accum *gl* *gl:return* 1.0)

      (gl:flush *gl*)      

      (callback (+ time 1000) 'draw (+ time 2000))))


(init)

(view)

(draw (now))