anchor.diff:    (unless (sdl:initialise-default-font sdl:*ttf-font-vera*)
       (error "FONT-EXAMPLE: Cannot initialize the default font.")))
   
  +@export
  +(defun load-font (filename size)
  +  (unless (sdl:initialise-default-font 
  +	   (make-instance 'sdl:ttf-font-definition
  +			  :size size
  +			  :filename  filename))
  +    (error "FONT-EXAMPLE: Cannot initialize the default font.")))
   
   ;; #+sbcl
   ;; (progn
  
positive.code: 	:cl-annot
  	:cl-annot.class
  	:cl-annot.doc
  	:vml-types
  	))
  (in-package :vml-fonts)
  (cl-annot:enable-annot-syntax)
  
  #|
  surface cache
  ----------
  
  create surface is slow & use memory.
  To avoid this overhead, memoize surface.
  
  |#
  (defparameter *solid-surface-cache* (make-hash-table :test 'equal))
  (defparameter *blend-surface-cache* (make-hash-table :test 'equal))
  
  (defun generate-font-key (string color)
    (format nil "~A:~A~A~A" string (red color) (green color) (blue color)))
  
  (defun get-text-blend-surface (string &key color
  					(font lispbuilder-sdl:*default-font*))
    (let ((key (generate-font-key string color)))
      (when (eq nil (nth-value 0 (gethash key *blend-surface-cache*)))
        (setf (gethash key *blend-surface-cache*)
  	    (sdl:render-string-blended string
  				       :font font :color (color-to-sdl-color color)
  				       :free nil :cache nil)))
      (gethash key *solid-surface-cache*)))
  
  (defun get-text-solid-surface (string &key color
  					(font lispbuilder-sdl:*default-font*))
    (let ((key (generate-font-key string color)))
      (when (eq nil (nth-value 0 (gethash key *solid-surface-cache*)))
        (setf (gethash key *solid-surface-cache*)
  	    (sdl:render-string-solid string :font font :color (color-to-sdl-color color)
  				     :free nil :cache nil)))
      (gethash key *solid-surface-cache*)))
  
  
  (defclass text-cache ()
    ((texture :initarg :texture :accessor texture)
     (surface :initarg :surface :accessor surface)
     (text :initarg :text :accessor text)
     (width :initarg :width :accessor font-width)
     (height :initarg :height :accessor font-height)))
  
  (defparameter *text-cache* (make-hash-table :test 'equal))
  
  (defun get-text-solid (text &key color (font lispbuilder-sdl:*default-font*))
    (let* ((font-surf (get-text-solid-surface text :font font :color color))
  	 (w (sdl:width font-surf))
    	 (h (sdl:height font-surf))
  	 (temp-surface (sdl:create-surface w h :bpp 32 :pixel-alpha t )))
  
negative.code: 				    :height h)))
      text-cache))
  
  (defun gen-text-texture (text &key color
  		 (font lispbuilder-sdl:*default-font*)
  		 (type :blend))
    (case type
      (:blend (gen-text-texture-blend text :color color :font font))
      (:solid (gen-text-texture-solid text :color color :font font))))
  	    
  @export
  (defun draw-font (text point color
  		  &key (font lispbuilder-sdl:*default-font*) (type :blend))
    (let* ((x (x point))
  	 (y (y point))
  	 (text-texture (gen-text-texture text :color color :font font :type type))
  	 (w (font-width text-texture))
    	 (h (font-height text-texture)))
      (gl:enable :texture-2d)
  