 
 (defn
   ^{:requires-bindings true
+    :processing-name "loadShader()"
+    :category "Rendering"
+    :subcategory "Shaders"
+    :added "2.0"}
+  load-shader
+  "Loads a shader into the PShader object. Shaders are compatible with the
+  P2D and P3D renderers, but not with the default renderer."
+  ([fragment-filename]
+    (.loadShader (current-surface) fragment-filename))
+  ([fragment-filename vertex-filename]
+    (.loadShader (current-surface) fragment-filename vertex-filename)))
+
+(defn
+  ^{:requires-bindings true
     :processing-name "loadShape()"
     :category "Shape"
     :subcategory "Loading & Displaying"

    :added "1.0"}
  display-filter
  "Originally named filter in Processing Language.
  Filters the display window with the specified mode and level. Level
  defines the quality of the filter and mode may be one of the
  following keywords:

  :threshold - converts the image to black and white pixels depending
               if they are above or below the threshold defined by

  equivalent function in OpenGL is glLoadIdentity()"
  []
  (.resetMatrix (current-surface)))

(def ^{:private true}
     shader-modes {:points PApplet/POINTS
                   :lines PApplet/LINES
                   :triangles PApplet/TRIANGLES})

(defn
  ^{:requires-bindings true
    :processing-name "resetShader()"
    :category "Rendering"
    :subcategory "Shaders"
    :added "2.0"}
  reset-shader
  "Restores the default shaders. Code that runs after (reset-shader) will
  not be affected by previously defined shaders. Optional 'kind' parameter -
  type of shader, either :points, :lines, or :triangles"
  ([] (.resetShader (current-surface)))
  ([kind]
    (let [mode (resolve-constant-key kind shader-modes)]
      (.resetShader (current-surface) mode))))

(defn
  ^{:requires-bindings true
