anchor.diff:    (gl:delete-program *program2*)
   )
   
  -
  -
  -(defvar hoge 0)
  +(defmacro signeq (a b)
  +  `(or (and (plusp ,a) (plusp ,b))
  +       (and (minusp ,a) (minusp ,b))))
  +
   (defmethod glut:display ((w main-window))
     (gl:clear-color 0.2 0.7 0.5 1.0)
     (gl:clear-stencil 0)
     (gl:clear :color-buffer-bit :stencil-buffer-bit)
  -
  -  (let ((size 0.15))
  -    (render-string takao-gothic "新しい朝が来た　希望の朝だ" -1.0 0.8 size 0.0)
  -    (render-string takao-gothic "喜びに胸を開け　大空あおげ" -1.0 0.6 size 0.0)
  -    (render-string takao-gothic "ラジオの声に　健やかな胸を" -1.0 0.4 size 0.0)
  -    (render-string takao-gothic "この香る風に　開けよ" -1.0 0.2 size 0.0)
  -    (render-string takao-gothic "それ　一　ニ　三" -1.0 0.0 size 0.0))
  +  (gl:enable :normalize)
  +
  +  (if (/= *zoom* *zoom-delta*)
  +    (let* ((d (- *zoom* *zoom-delta*))
  +           (ad (abs d)))
  +      (when (> ad 2.0)
  +        (setf d (* (/ d ad) 2.0)))
  +      (setf *zoom-delta* (* *zoom-delta* (expt 1.2 d)))
  +      (let ((nd (- *zoom* *zoom-delta*)))
  +        (unless (signeq d nd)
  +          (setf *zoom-delta* *zoom*)))))
  +
  +  (gl:with-pushed-matrix
  +    (gl:translate -1.0 0.8 0.0)
  +    (gl:scale *zoom-delta* *zoom-delta* 0.0)
  +    (let ((size 0.15))
  +      (draw-string takao-gothic "新" :size size)
  +      (gl:translate 0.0 -0.2 0.0)
  +      (draw-string takao-gothic "新しい朝が来た　希望の朝だ" :size size)
  +      (gl:translate 0.0 -0.2 0.0)
  +      (draw-string takao-gothic "喜びに胸を開け　大空あおげ" :size size)
  +      (gl:translate 0.0 -0.2 0.0)
  +      (draw-string takao-gothic "ラジオの声に　健やかな胸を" :size size)
  +      (gl:translate 0.0 -0.2 0.0)
  +      (draw-string takao-gothic "この香る風に　開けよ" :size size)
  +      (gl:translate 0.0 -0.2 0.0)
  +      (draw-string takao-gothic "それ　一　ニ　三" :size size)))
  +
   
   
   
  
positive.code: 
    (gl:flush))
  
  (glut:display-window (make-instance 'main-window))
  
negative.code:   `(when (null (gethash ,ch ,table))
      (regist-glyph-helper ,table ,ch)))
  
  (defun set-glyph-color (r g b a)
    (gl:use-program *program2*)
    (gl:uniformf *uniform-color* r g b a)
    (gl:use-program 0))
  
  (defun render-glyph (vg)
    @type vglyph vg
    @optimize (speed 3)
    @optimize (safety 0)
    (gl:enable :stencil-test)
    (gl:enable :sample-alpha-to-coverage)
    (gl:stencil-func :always 0 1)
    (gl:stencil-op :keep :invert :invert)
    (gl:color-mask nil nil nil nil)
    (gl:use-program *program*)
    (gl:enable-vertex-attrib-array 0)
    (gl:enable-vertex-attrib-array 1)
    (gl:bind-buffer :array-buffer (vglyph-buffer vg))
    (gl:vertex-attrib-pointer 0 2 :float nil #.(* 4 4) 0)
    (gl:vertex-attrib-pointer 1 2 :float nil #.(* 4 4) #.(* 4 2))
    (gl:draw-arrays :triangles 0 (vglyph-count vg))
    (gl:disable-vertex-attrib-array 0)
    (gl:disable-vertex-attrib-array 1)
    (gl:use-program 0)
    (gl:disable :sample-alpha-to-coverage)
    (gl:stencil-func :notequal 0 1)
    (gl:stencil-op :keep :keep :keep)
    (gl:color-mask t t t t)
    (gl:use-program *program2*)
    (gl:enable-vertex-attrib-array 0)
    (gl:bind-buffer :array-buffer (vglyph-box-buffer vg))
    (gl:vertex-attrib-pointer 0 2 :float nil 0 0)
    (gl:draw-arrays :triangle-fan 0 4)
    (gl:disable-vertex-attrib-array 0)
    (gl:use-program 0)
    (gl:disable :stencil-test))
  
  (defun render-string (table str spacing)
    @type string str
    (gl:with-pushed-matrix
     (let ((em (gethash :em table)))
        (loop for i from 0 below (length str)
              for ch = (char str i)
              for cvg = (gethash ch table)
  