anchor.diff:  (in-package :cepl-gl)
  -
  -
  -;; ARGHHHHHHHHHHHHHHHHHHHHHHHHH
  -;; GOD DAMN ARRAY OF VEC3
  -;; mem-aref will be wrong god damnit
  -;; ARGHHHHHHHHhhhhh GRRRR aRGRRRG 
  -
  -;; Ok so we do need foreign helper types
  -;; create structs automatically from
  -;; varjo::*glsl-component-counts* 
  -;; Use in returning arrays of slot types 
  -;; in combination with gl-arrays, this 
  -;; gives us easy access and correct indexing
  -
  -;; (defglstruct new-type
  -;;   (position :vec3)
  -;;   (color :vec4)
  -;;   (depth (:float 3))
  -;;   (test :int :normalised t ))
   
   (defun agg-type-helper-name (type)
     (utils:symb 'cgl- (varjo:type-principle type)))
  
positive.code:                   `(,(utils:symb type-name '- slot-name)
                       (aref-gl gl-array index))))))
  
  ;; This is wrong!
  (defun make-gl-struct-attrib-assigner (type-name slots)
    (when (every #'varjo:type-built-inp (mapcar #'slot-type slots))
      (let* ((stride (if (> (length slots) 1)
                         `(cffi:foreign-type-size ',type-name)
                         0))
             (definitions 
  	     (loop for (slot-name slot-type normalised) in slots
  		   for i from 0
  		   :if (varjo:type-aggregate-p
  			(varjo:type-principle slot-type)) 
  		     :collect 
  		   `(%gl:vertex-attrib-pointer
  		     (+ attrib-num ,i)
  		     ,(* (varjo:type-component-count slot-type)
  			 (if (varjo:type-arrayp slot-type)
  			     (varjo:type-array-length slot-type)
  			     1))
  		     ',(varjo:type-component-type slot-type) 
  		     ,normalised
  		     ,stride
  		     (+ (foreign-slot-offset ',type-name
  					     ',slot-name)
  			pointer-offset))
  		   :else :collect
  		   `(%gl:vertex-attrib-pointer
  		     (+ attrib-num ,i) 
  		     ,(if (varjo:type-arrayp slot-type)
  			  (varjo:type-array-length slot-type)
  			  1)
  		     ,(varjo:type-principle slot-type) 
  		     ,normalised ,stride
  		     (cffi:make-pointer 
  		      (+ (foreign-slot-offset ',type-name
  					      ',slot-name)
  			 pointer-offset))))))
        (when definitions
          `(defmethod gl-assign-attrib-pointers 
  	     ((array-type (EQL ',type-name)) attrib-num
  	      &optional pointer-offset)
             (declare (ignore array-type))
             ,@definitions)))))
  
  (defun make-cstruct-def (name slots)
    `(defcstruct ,name
  
negative.code:    "This is the function that actually does the work in the 
      destructuring populate"))
  
  (defgeneric gl-assign-attrib-pointers (type &optional attrib-num pointer-offset))
  
  (defun glsl-struct-p (type-symb)
    (when (and (glsl-type-p type-symb)
  