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

;;

;; OpenGL Basic Example

;;

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


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


(define init

   (lambda ()

      (gl:clear-color *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 10.0)

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


(define draw

   (lambda (angle)

      (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:push-matrix *gl*)

      (gl:rotate *gl* angle 1.0 1.0 1.0)

      (glut:wire-cube *gl* 1.0)

      (gl:pop-matrix *gl*)


      (gl:flush *gl*)

      (callback (+ (now) 5000) 'draw (fmod (+ angle 5) 360))))


(init)

(view)

(draw 0)