Index: viewer-draw-leds.lisp
===================================================================
--- viewer-draw-leds.lisp	(revision 98)
+++ viewer-draw-leds.lisp	(working copy)
@@ -72,25 +72,64 @@
   (destructuring-bind (x y z)
       position
     (gl:translate-f (- (* y *led-distance*)) (* z *led-distance*) (- (* x *led-distance*)))
-    (let* ((LED-intensity (ensure-intensity-to-be-of-number (aref (current-cube) x y z)))
-           (grey-value  (- .9f0 (* (- 5 LED-intensity)
-                                   (/ 0.8 5))))
-           (alpha-value  (- .9f0 (* (- 5 LED-intensity)
-                                    (/ 0.5 5))))
-           (old-grey-value (* (- 5 LED-intensity)
-                              (/ 0.9 5))))
-      (if (eq LED-intensity 0)
-          (sgum:with-single-float-values (emission 0f0 0f0 0f0 0f0)
-            (gl:material-fv gl:+front+ gl:+emission+ emission))
-          (sgum:with-single-float-values (emission .1f0 0f0 0f0 0f0)
-            (gl:material-fv gl:+front+ gl:+emission+ emission)))
-      (if *dark-mode*
-          (sgum:with-single-float-values (diffuse grey-value 0f0 0f0 alpha-value)
+    (let ((LED-intensity (ensure-intensity-to-be-of-number (aref (current-cube) x y z))))
+      ;; (draw-untranslated-led LED-intensity))
+      (gl:call-list (get-led-display-list LED-intensity)))
+    (gl:pop-matrix)))
+
+(defun draw-untranslated-led (LED-intensity)
+  (let ((grey-value  (- .9f0 (* (- 5 LED-intensity)
+                                (/ 0.8 5))))
+        (alpha-value  (- .9f0 (* (- 5 LED-intensity)
+                                 (/ 0.5 5))))
+        (old-grey-value (* (- 5 LED-intensity)
+                           (/ 0.9 5))))
+    (if (eq LED-intensity 0)
+        (sgum:with-single-float-values (emission 0f0 0f0 0f0 0f0)
+          (gl:material-fv gl:+front+ gl:+emission+ emission))
+        (sgum:with-single-float-values (emission .1f0 0f0 0f0 0f0)
+          (gl:material-fv gl:+front+ gl:+emission+ emission)))
+    (if *dark-mode*
+        (sgum:with-single-float-values (diffuse grey-value 0f0 0f0 alpha-value)
             (gl:material-fv gl:+front+ gl:+diffuse+ diffuse))
-          (sgum:with-single-float-values (diffuse 0.9f0 old-grey-value old-grey-value 1f0)
-            (gl:material-fv gl:+front+ gl:+diffuse+ diffuse))))
+        (sgum:with-single-float-values (diffuse 0.9f0 old-grey-value old-grey-value 1f0)
+          (gl:material-fv gl:+front+ gl:+diffuse+ diffuse))))
+  
+  ;; (gl:enable gl:+depth-test+)
+  (draw-sphere *LED-DIAMETER*)
+  ;; (gl:disable gl:+depth-test+)
+  )
 
-;;     (gl:enable gl:+depth-test+)
-      (draw-sphere *LED-DIAMETER*)
-;;     (gl:disable gl:+depth-test+)
-    (gl:pop-matrix)))
+
+;; call lists for the LEDs
+
+(defvar *led-display-lists* nil
+  "Contains the 12 display lists (while the viewer is running):
+   - elements 0 to  5 are the 6 display lists for the night mode
+   - elements 6 to 11 are the 6 display lists for the day mode")
+
+(defun get-led-display-list (intensity)
+  (unless *dark-mode*
+    (setf intensity (mod intensity 6)) ;; limit to 5, in case INTENSITY indexes already the day mode
+    (incf intensity 6))
+  (nth intensity *led-display-lists*))
+
+(defun create-led-display-lists ()
+  (setf *led-display-lists* (loop for i from 0 to 11
+                               collect (gl:gen-lists 1)))
+
+  (let ((*dark-mode* t)) ;; save global value
+    (dotimes (intensity 12)
+      (gl:new-list (get-led-display-list intensity) gl:+compile+)
+        (setf *dark-mode* (if (< intensity 6) ;; set *dark-mode* for DRAW-UNTRANSLATED-LED
+                              t
+                              nil))
+        (draw-untranslated-led (mod intensity 6))
+      (gl:end-list))))
+
+(defun destroy-led-display-lists ()
+  (let ((*dark-mode* t))
+    (dotimes (intensity 12)
+      (gl:delete-lists (get-led-display-list intensity) 1)))
+  
+  (setf *led-display-lists* nil))
Index: viewer.lisp
===================================================================
--- viewer.lisp	(revision 97)
+++ viewer.lisp	(working copy)
@@ -54,7 +54,7 @@
   (glu:with-quadric (sphere)
     (glu:quadric-draw-style sphere glu:+fill+)
     (glu:quadric-normals sphere glu:+smooth+)
-    (glu:sphere sphere size 15 15)))
+    (glu:sphere sphere size 16 8)))
 
 (defun draw-coordinate-system ()
   (gl:push-matrix)
@@ -463,8 +463,10 @@
 	     (init-gl)
              ;; (goto-cube :first)
 	     ;; (write-cube-to-device)
+             (create-led-display-lists)
 	     (run-sdl-event-loop))
 	(progn
+          (destroy-led-display-lists)
 	  (sdl:quit)
           (close-cube-device)
 	  (setf *modeller-window-shown* nil))))))
