anchor.diff:       do
          (glutil:with-transform (matrix-stack)
   	   :translate fx-pos 0.0 fz-pos
  -	   (draw-tree matrix-stack trunk-height cone-height)))  )
  -
  +	   (draw-tree matrix-stack trunk-height cone-height))))
  +
  +(defparameter *column-base-height* 0.25)
  +
  +(defun draw-column (matrix-stack &optional (height 5.0))
  +  ;; Draw the bottom of the column
  +  (glutil:with-transform (matrix-stack)
  +;      (print (glutil:top-ms matrix-stack))
  +      :scale 1.0 *column-base-height* 1.0
  +;      :translate 0.0 0.5 0.0 ;; this is on purpose to prevent z-fighting?
  +      
  +      (gl:use-program (the-program *uniform-color-tint*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (%gl:uniform-4f (base-color-unif *uniform-color-tint*) 1.0 1.0 1.0 1.0)
  +      (framework:render *cube-tint-mesh*)
  +      (gl:use-program 0))
  +  ;; Draw the top of the column
  +  (glutil:with-transform (matrix-stack)
  +      :translate 0.0 (- height *column-base-height*) 0.0
  +      :scale 1.0 *column-base-height* 1.0
  +      ;; TODO: had to change from y = 0.5, maybe arc code is not up-to-date?
  +      :translate 0.0 -0.25 0.0
  +      (gl:use-program (the-program *uniform-color-tint*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (%gl:uniform-4f (base-color-unif *uniform-color-tint*) 0.9 0.9 0.9 0.9)
  +      (framework:render *cube-tint-mesh*)
  +      (gl:use-program 0))
  +  ;; Draw the main column ;; TODO: why does it draw it falsely
  +  (glutil:with-transform (matrix-stack)
  +      :translate 0.0 *column-base-height* 0.0
  +      :scale 0.8 (- height (* *column-base-height* 2.0)) 0.8
  +      ;; changed from y = 0.5
  +      :translate 0.0 2.0 0.0
  +      (gl:use-program (the-program *uniform-color-tint*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (%gl:uniform-4f (base-color-unif *uniform-color-tint*) 0.9 0.9 0.9 0.9)
  +      (framework:render *cylinder-mesh*)
  +      (gl:use-program 0)))
  +
  +(defparameter *parthenon-width* 14.0)
  +(defparameter *parthenon-length* 20.0)
  +(defparameter *parthenon-column-height* 5.0)
  +(defparameter *parthenon-base-height* 1.0)
  +(defparameter *parthenon-top-height* 2.0)
  +
  +(defun draw-parthenon (matrix-stack)
  +  ;; Draw base
  +  (glutil:with-transform (matrix-stack)
  +      :scale *parthenon-width* *parthenon-base-height* *parthenon-length*
  +      :translate 0.0 0.5 0.0
  +
  +      (gl:use-program (the-program *uniform-color-tint*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (%gl:uniform-4f (base-color-unif *uniform-color-tint*) 0.9 0.9 0.9 0.9)
  +      (framework:render *cube-tint-mesh*)
  +      (gl:use-program 0))
  +
  +  ;; Draw top
  +  (glutil:with-transform (matrix-stack)
  +      :translate 0.0 (+ *parthenon-column-height* *parthenon-base-height*) 0.0
  +      :scale *parthenon-width* *parthenon-top-height* *parthenon-length*
  +      :translate 0.0 0.5 0.0
  +      (gl:use-program (the-program *uniform-color-tint*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  +  			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (%gl:uniform-4f (base-color-unif *uniform-color-tint*) 0.9 0.9 0.9 0.9)
  +      (framework:render *cube-tint-mesh*)
  +      (gl:use-program 0))
  +
  +  ;; Draw columns
  +  (let ((f-front-z-val (1- (/ *parthenon-length* 2.0)))
  +	(f-right-x-val (1- (/ *parthenon-width* 2.0))))
  +    (loop for i-col-num below (/ *parthenon-width* 2.0) do
  +	 (glutil:with-transform (matrix-stack)
  +	     :translate (1+ (- (* i-col-num 2.0) (/ *parthenon-width* 2.0)))
  +	     *parthenon-base-height* f-front-z-val
  +	     (draw-column matrix-stack *parthenon-column-height*))
  +	 (glutil:with-transform (matrix-stack)
  +	     :translate (1+ (- (* 2.0 i-col-num) (/ *parthenon-width* 2.0)))
  +	     *parthenon-base-height* (- f-front-z-val)
  +	     (draw-column matrix-stack *parthenon-column-height*)))
  +
  +    ;; Don't draw the first or last columns, since they've been drawn already
  +    (loop for i-col-num from 1 below (/ (- *parthenon-length* 2.0) 2.0) do
  +	 (glutil:with-transform (matrix-stack)
  +	     :translate f-right-x-val *parthenon-base-height*
  +	     (1+ (- (* 2.0 i-col-num) (/ *parthenon-length* 2.0)))
  +	     (draw-column matrix-stack *parthenon-column-height*))
  +	 (glutil:with-transform (matrix-stack)
  +	     :translate (- f-right-x-val) *parthenon-base-height*
  +	     (1+ (- (* 2.0 i-col-num) (/ *parthenon-length* 2.0)))
  +	     (draw-column matrix-stack *parthenon-column-height*))))
  +
  +  ;; Draw interior
  +  (glutil:with-transform (matrix-stack)
  +      :translate 0.0 1.0 0.0
  +      :scale (- *parthenon-width* 6.0) *parthenon-column-height*
  +      (- *parthenon-length* 6.0)
  +      ;; changed from y = 0.5
  +      :translate 0.0 1.5 0.0
  +      ;; secret-cube :>
  +      (gl:use-program (the-program *object-color*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *object-color*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (framework:render *cube-color-mesh*)
  +      (gl:use-program 0))
  +    
  +  ;; Draw headpiece
  +  (glutil:with-transform (matrix-stack)
  +      :translate 0.0
  +      (- (+ *parthenon-column-height* *parthenon-base-height*
  +	    (/ *parthenon-top-height* 2.0)) 0.5)
  +      (/ *parthenon-length* 2.0)
  +      :rotate-x -135.0
  +      :rotate-y 45.0
  +      (gl:use-program (the-program *object-color*))
  +      (gl:uniform-matrix (model-to-world-matrix-unif *object-color*) 4
  +			 (vector (glutil:top-ms matrix-stack)) NIL)
  +      (framework:render *cube-color-mesh*)
  +      (gl:use-program 0))
  +    
  +  )
   
   (defparameter *look-pt* (glm:vec3 0.0 0.0 0.0)) ; look at actual vertex of drawn object
   (defparameter *cam-pt* (glm:vec3 0.0 0.0 1.0))
   (defparameter *draw-look-at-point* nil)
   
   (defun draw ()
  +  ;; TODO: as the demo runns sbcl's memory usage grows without stopping
  +  ;; once back to the REPL it isn't released
     (let ((cam-pos (resolve-cam-position))
   	(cam-matrix (make-instance 'glutil:matrix-stack))
   	(model-matrix (make-instance 'glutil:matrix-stack)))
  
positive.code:   (glutil:with-transform (matrix-stack)
        :scale 1.0 trunk-height 1.0
        :translate 0.0 0.5 0.0 ;; check out the z-fighting when y = 1.0 !
  
        ;; TODO: write with-program-data macro?
        (gl:use-program (the-program *uniform-color-tint*))
        (gl:uniform-matrix (model-to-world-matrix-unif *uniform-color-tint*) 4
  
negative.code: 	;; this gotta be a pernicious bug, swapping the z-axis so that the winding order is
  	;; always clock-wise?
  	(gl:enable :cull-face)
  	(%gl:cull-face :back)
  	(%gl:front-face :cw) 
  
  	(gl:viewport 0 0 500 500)
  