anchor.diff:    (asdf:load-system :cl-cairo2))
   
   (defparameter *vertex-shader* "
  +varying vec2 texture_coordinate;
   void main() {
  -    gl_TexCoord[0] = gl_MultiTexCoord0;
  -    gl_Position = ftransform();
  +    texture_coordinate = vec2(gl_MultiTexCoord0);
  +    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
   }
   ")
   
   (defparameter *fragment-shader* "
   #version 120
   
  +varying vec2 texture_coordinate;
   uniform sampler2D tex;
   
   void main() {
  -    gl_FragColor = texture2D(tex, gl_TexCoord[0].st).bgra;
  +    gl_FragColor = texture2D(tex, texture_coordinate);
   }
   ")
   
  
positive.code:             (gl:tex-parameter :texture-2d :texture-min-filter :nearest)
              (gl:tex-parameter :texture-2d :texture-mag-filter :nearest)
  
              (gl:matrix-mode :modelview)
              (gl:load-identity)
              (gl:clear-color 1.0 1.0 1.0 1.0)
              (gl:clear :color-buffer)
  
              (sdl2:with-event-loop (:method :poll)
                (:keyup () (sdl2:push-event :quit))
                (:mousebuttondown () (sdl2:push-event :quit))
                (:idle ()
                  (render window width height margin tex)
                  (sleep 0.1))
                (:quit () t))
  
              (sdl2:destroy-renderer renderer)
  
negative.code:         (gl:enable :texture-2d)
          (gl-ortho-setup :width width :height height)
  
          (autowrap:with-alloc (tex :unsigned-char
                                    (* *texture-size* *texture-size* 4))
            (let* ((program (gl-init-shaders))
                   (texname (car (gl:gen-textures 1)))
                   (texid (gl:get-uniform-location program "tex")))
  
              (gl:active-texture :texture0)
              (gl:bind-texture :texture-2d texname)
              (gl:uniformi texid 0)
  
              (gl:tex-parameter :texture-2d :texture-wrap-s :repeat)
  