anchor.diff:  (in-package :proto)
   
   (defvar *font*)
  +
  +(defmacro vector-push-extend-to (vec &rest rest)
  +  `(loop for e in (list ,@rest)
  +         do (vector-push-extend e ,vec)))
   
   (defun separate-contour (contour)
     (let ((curve (make-array 6 :element-type 'fixnum :fill-pointer 0 :adjustable t))
  
positive.code:   (gl:stencil-func :always 0 1)
    (gl:stencil-op :keep :invert :invert)
    (gl:color-mask nil nil nil nil)
    (fill-inner glyph)
    (gl:stencil-func :notequal 0 1)
    (gl:stencil-op :keep :keep :keep)
    (gl:color-mask t t t t)
  
negative.code:                    (zpb-ttf:x next) (zpb-ttf:y next))))
      (values curve control)))
  
  (defun fill-vertex (glyph)
    (zpb-ttf:do-contours (contour glyph)
      (multiple-value-bind (curve control) (separate-contour contour)
        (declare (ignorable control))
        (gl:with-primitives :triangle-fan
          (gl:vertex (aref curve 0) (aref curve 1))
          (loop for i from 2 below (- (length curve) 2) by 2
                do (gl:vertex (aref curve    i   ) (aref curve (+ i 1)))
                   (gl:vertex (aref curve (+ i 2)) (aref curve (+ i 3))))))))
  
  
  ;; !! :stencil is required !!
  (defclass main-window (glut:window)
  