anchor.diff:                     (concatenate 'string result (subseq glsl-string last))))
                  ;;
                  (swap-out-args (glsl-string)
  -                 (let ((in-args (input-variables stage)))
  +                 (let ((input-variables (input-variables stage)))
                      (loop :for out :in out-vars
  -                      :for in :in in-args
  +                      :for in :in input-variables
                         :for out-glsl-name := (glsl-name out)
                         :for in-glsl-name := (glsl-name in)
                         :do (setf glsl-string (swap-out-arg glsl-string
  
positive.code:             (assert (eq in-prim out-prim) () 'primitives-dont-match
                      :out-stage (type-of last-stage) :out out-prim
                      :in-stage (type-of stage) :in in-prim)))
          ;; we need to modify the result of the compiled stage if the in-args
          ;; names dont match the names of the out args
          (let* ((glsl-code (glsl-code stage))
                 (glsl-code (swap-out-args glsl-code))
  
negative.code: 
  ;;----------------------------------------------------------------------
  
  (defgeneric input-variables-compatiblep (input-variables last-out-vars)
    ;;
    (:method ((input-variables list) (last-out-vars list))
      (and (= (length input-variables) (length last-out-vars)))
      (every (lambda (out in)
               (and (v-type-eq (v-type-of out) (v-type-of in))
                    (%suitable-qualifiersp out in)))
             last-out-vars input-variables)))
  
  (defun %suitable-qualifiersp (out-arg in-arg)
    (let ((out-qual (qualifiers out-arg)))
  