                    (geom/translate [x 0 -7])
                    (geom/rotate-around-axis [1 0 0] cube-rotation)
                    (geom/rotate-around-axis [0 -1 0] cube-rotation))]
-        (driver/draw-elements driver program
-                          (assoc (get-data p mv cube-vertices cube-normals texture cube-texture-coords)
-                            {:tag :element-index} cube-indices)
+        (gd/draw-elements driver (gd/bind driver program
+                                          (assoc (get-data p mv cube-vertices cube-normals texture cube-texture-coords)
+                                                 {:tag :element-index} cube-indices))
                           {:draw-mode :triangles
-                           :first 0
+                           :first     0
                            ;; Hard-coded
-                           :count 36})))))  
+                           :count     36})))))  
 
 (defn animate [draw-fn step-fn current-value]
   (js/requestAnimationFrame

    (.clear gl (bit-or (.-COLOR_BUFFER_BIT gl) (.-DEPTH_BUFFER_BIT gl)))
    (let [image (js/Image.)]
      (aset image "onload"
            (fn [] (let [texture {:data {:data       image
                                        :filter     {:min :linear
                                                     :mag :nearest}
                                        :flip-y     true
                                        :texture-id 0}}]
                    (animate (draw-fn gl driver program) tick (assoc-in state [:scene :texture] texture)))))
      (aset image "src" "/images/crate.gif"))))

  (let [width     (.-clientWidth node)
        height    (.-clientHeight node)
        driver    (driver/basic-driver gl)
        program   program-source
        state (app-state width height)]
    (reset-gl-canvas! node)
    (.enable gl (.-DEPTH_TEST gl))
