Перевожу один свой проект на SDL2, раньше использовал SDL. Была такая логика - главное окно делилось на несколько зон, в каждой из которых рисовался свой surface. Приведу код:
  (loop with plot-n = 3 with plot-h = (round (/ height plot-n))
        for i from 0 below plot-n
        for name in (list
                     "Температура охлаждающей жидкости (°С)"
                     "Положение дроссельной заслонки (%)"
                     "Скорость вращения двигателя на холостом ходу (об/мин)")
        for s = (sdl:create-surface width plot-h) 
        do (progn
             (sdl:fill-surface sdl:*white* :surface s)
             (draw-plot name s)
             (sdl:draw-surface-at s
                                  (point :x 0 :y (* i (/ height plot-n)))
                                  :surface sdl:*default-surface*))))
В SDL2 всё по-другому и у меня не получается увязать вместе render и surface, да и, скорее всего, неправильный подход я пытаюсь использовать. Пробовал по-разному, к примеру так -
(let* ((s (sdl2:create-rgb-surface 100 100 1))
       (r (sdl2:create-software-renderer s)))
  (sdl2:set-render-draw-color r 0 0 255 255)
  (sdl2:render-draw-line r 0 0 100 100)
  (sdl2:render-copy render (sdl2:create-texture-from-surface r s)
                    :source-rect (make-rect 0 0 100 100)
                    :dest-rect (make-rect 10 10 110 110)))
Доки почитал, но что-то не разобрался. Спасибо.
РЕШЕНИЕ:
(defun start-plot ()
  (sdl2:make-this-thread-main
   (lambda ()
     (sdl2:with-init (:everything)
       (sdl2:with-window (win :title "prostolog" :w *width* :h *height*)
         (sdl2:with-renderer (render win)
           (sdl2:with-gl-context (gl-context win)
             (init-scene)
             (sdl2:with-event-loop (:method :poll)
               (:keyup
                (:keysym keysym)
                (when
                    (sdl2:scancode= (sdl2:scancode-value keysym) :scancode-escape)
                  (sdl2:push-event :quit)))
               (:idle
                ()
                (let ((foreground-textures '()))
                  
                  (dotimes (i 30)
                    ;; texture
                    (let ((texture
                            (sdl2:create-texture render 373694468 :target 100 50)))
                      ;; clear texture background
                      (sdl2:set-render-target render texture)
                      (sdl2:set-render-draw-color render 200 200 200 255)
                      (sdl2:render-clear render)
                      ;; drawing at texture
                      (sdl2:set-render-draw-color render 0 0 0 255)
                      (sdl2:render-draw-line render 0 0 100 50)
                      (sdl2:render-draw-line render 100 0 0 50)
                      ;; return render 
                      (sdl2:set-render-target render nil)
                      (push texture foreground-textures))
                    ;; anouther texture
                    (let ((texture
                            (sdl2:create-texture render 373694468 :target 200 30)))
                      ;; clear texture background
                      (sdl2:set-render-target render texture)
                      (sdl2:set-render-draw-color render 100 100 100 255)
                      (sdl2:render-clear render)
                      
                      ;; drawing at texture
                      (sdl2:set-render-draw-color render 255 0 0 255)
                      (sdl2:render-draw-line render 0 0 200 30)
                      (sdl2:render-draw-line render 0 30 200 0)
                      
                      ;; return render 
                      (sdl2:set-render-target render nil)
                      (push texture foreground-textures)))
                  ;; draw window background graphics
                  (sdl2:set-render-draw-color render 255 255 255 255)
                  (sdl2:render-clear render)
                  (sdl2:set-render-draw-color render 255 0 0 255)
                  (sdl2:render-draw-line render 0 0 *width* *height*)
                  (sdl2:set-render-draw-color render 0 0 255 50)
                  (sdl2:render-draw-line render *width* 0 0 *height*)
                  
                  ;; draw textures at window surface
                  (loop for ft in foreground-textures
                        for w = (texture-width ft) for h = (texture-height ft)
                        with offset = 0
                        while (< (+ offset h) *height*)
                        do
                           (progn
                             (sdl2:render-copy
                              render ft
                              :dest-rect (sdl2:make-rect
                                          (- (/ *width* 2) (/ w 2))
                                          offset w h))
                             (incf offset h))))
                ;; present all stuff at window surface
                (sdl2:render-present render))
                
               (:quit () t)))))))))
