    [(+ x w) (+ y h) 0]
    [(+ x w) y 0]])
 
+; Generating a number of rectangles.
+(defn generateRectangles [rects]
+  nil)
+
+; Loading all of the lines from a file.
+(defn loadFile [path]
+  (try
+    (let [sb (java.lang.StringBuilder)
+          rd (java.io.BufferedReader (java.io.FileReader path))]
+      (loop []
+          (let [line (.readLine rd)]
+            (if (== line nil)
+              (do (.close rd)
+                  sb)
+              (do (.append sb (.append sb line) "\n")
+                  (recur))))))
+    (catch Exception e (throw e))))
+
+; Loading a specific type of shader at a given path.
+(defn loadShader [path type]
+  (try
+    (let [content (loadFile path)
+          sid     (GL20/glCreateShader type)]
+      (do (GL20/glShaderSource sid content)
+          (GL20/glCompileShader sid)
+          sid))
+    (catch Exception e (.exit System 1)))) ; So very unsafe.
+
 ; Loading a shader. It loads all possible extensions for the shader. If there is
 ; a .vert, it'll load it. If there's a .frag, it'll load it, etc.
 (defn loadShaderProgram [path]
+  (use 'clojure.java.io)
   nil)
+
+; LOAD A SHADER :)
 
 ; Drawing based on the information contained in a VAO with a given shader.
 (defn drawVAO [shader vao vct]


; Drawing a single rectangle using a shader.
(defn drawRectangle [x y w h shader]
  (withVAO (generateVerts x y w h) (partial drawVAO shader)))


; Generating the vertices for a rectangle. Despite it being a rectangle, it
; requires 6 points to be rendered using using a VAO.
(defn generateRectangle [x y w h]
  [[x y 0]
   [x (+ y h) 0]
   [(+ x w) (+ y h) 0]
