anchor.diff:  
   (defn pack-pixels-from-texture ((tex-array gpu-array-t)
                                   (pixel-format pixel-format)
  -                                row-alignment
  -                                pointer/offset)
  +                                (row-alignment (integer 1 8))
  +                                (pointer/offset foreign-pointer)
  +                                (single-image-size c-array-index))
       (values)
     (with-gpu-array-t tex-array
       (destructuring-bind (pix-format pix-type)
           (cepl.pixel-formats::compile-pixel-format pixel-format)
         (%with-scratch-texture-bound texture
           (setf (pack-alignment) row-alignment)
  -        (%gl:get-tex-image (gl-enum texture-type)
  -                           (coerce level-num 'real)
  -                           pix-format
  -                           pix-type
  -                           pointer/offset))))
  +        (if (or (texture-cubes-p texture)
  +                (> (texture-layer-count texture) 0))
  +            (let* ((img-size-padded
  +                    (* row-alignment
  +                       (ceiling single-image-size row-alignment)))
  +                   (face-count
  +                    (if (texture-cubes-p texture) 6 1))
  +                   (layer-face-count
  +                    (* face-count
  +                       (texture-layer-count texture)))
  +                   (tmp-size
  +                    (* img-size-padded layer-face-count))
  +                   (img-index
  +                    (+ (* (gpu-array-t-layer-num tex-array) face-count)
  +                       (gpu-array-t-face-num tex-array) ))
  +                   (img-offset (* img-index img-size-padded)))
  +              (with-foreign-object (tmp-ptr :uint8 tmp-size)
  +                (%gl:get-tex-image (gl-enum texture-type)
  +                                   (coerce level-num '(signed-byte 32))
  +                                   pix-format
  +                                   pix-type
  +                                   tmp-ptr)
  +                (cepl.types::%memcpy
  +                 pointer/offset
  +                 (cffi:inc-pointer tmp-ptr img-offset)
  +                 single-image-size)))
  +            (%gl:get-tex-image (gl-enum texture-type)
  +                               (coerce level-num 'real)
  +                               pix-format
  +                               pix-type
  +                               pointer/offset)))))
     (values))
   
   ;; [TODO] implement gl-fill and fill arguments
  
positive.code:      src
       p-format
       1
       (gpu-array-bb-offset-in-bytes-into-buffer gpu-array-bb))
      gpu-array-bb))
  
  (defn copy-texture-backed-gpu-array-to-buffer-backed-gpu-array
  
negative.code:   (let ((pixel-format (lisp-type->pixel-format
                         (c-array-element-type dst))))
      (setf (gpu-buffer-bound (cepl-context) :pixel-pack-buffer) nil)
      (pack-pixels-from-texture
       src
       pixel-format
       (c-array-row-alignment dst)
       (c-array-pointer dst)
       (cepl.c-arrays::%gl-calc-byte-size
        (c-array-element-byte-size dst)
        (gpu-array-dimensions src)
        (c-array-row-alignment dst))))
    dst)
  
  (defn copy-texture-backed-gpu-array-to-new-buffer-backed-gpu-array
  