         height           (.-clientHeight node)
         driver           (make-driver gl)
         starting-program 0
-        programs         (mapv #(dp/program driver %)
-                               [program-diffuse-flat
-                                program-diffuse-light
-                                program-texture-flat
-                                program-texture-light])
+        programs         {:diffuse-flat  program-diffuse-flat
+                          :diffuse-light program-diffuse-light
+                          :texture-flat  program-texture-flat
+                          :texture-light program-texture-light}
         state            (-> (app-state width height)
                              (assoc-in [:runtime :programs] programs)
                              (assoc-in [:runtime :current-program] 0))]

                                                           material)
                                        sampler          (:sampler material)
                                        draw-count       (:count indices)
                                        program          (if texture-program?
                                                           (get-in state [:runtime :programs 3])
                                                           (get-in state [:runtime :programs 1]))
                                        scene-data       (when normals
                                                           (select-keys (get-data now
                                                                                  p mv

                                                                                  material
                                                                                  tex-coord-0)
                                                                        (:inputs program)))]
                                    ;;(js/console.log (pr-str program-name))
                                    ;; Check for normals so we don't try to draw e.g. lines right now.
                                    (when (and diffuse normals)
                                      (gd/draw-elements driver (gd/bind driver program
                                                                        (assoc scene-data
                                                                               {:tag :element-index} indices))
                                                        {:draw-mode (:draw-mode mesh)
                                                         :count     draw-count})))))
                              (doseq [child (vals (:children node))]
                                (render-node [(:name child) child] mv))))]
      (doseq [node (:nodes scene)]
