      (.perspective *applet* (float fovy) (float aspect)
                    (float z-near) (float z-far))))
 
-(defn point
+(defn
+  ^{:requires-bindings true
+    :processing-name "point()"
+    :category "Shape"
+    :subcategory "2D Primitives"
+    :added "1.0"}
+  point
   "Draws a point, a coordinate in space at the dimension of one
   pixel. The first parameter is the horizontal value for the point,
   the second value is the vertical value for the point, and the

     (.copy *applet* img (int sx1) (int sy1) (int sx2) (int sy2)
            (int dx1) (int dy1) (int dx2) (int dy2))))

(defn cos
  "Calculates the cosine of an angle. This function expects the values
  of the angle parameter to be provided in radians (values from 0 to
  Math/PI*2). Values are returned in the range -1 to 1."
  [angle] (PApplet/cos (float angle)))

(def available-fonts
  "A sequence of strings representing the fonts on this system
  available for use.


  ([s] (.scale *applet* (float s)))
  ([sx sy] (.scale *applet* (float sx) (float sy))))

(defn- current-screen
  []
  (let [default-toolkit (java.awt.Toolkit/getDefaultToolkit)]
    (.getScreenSize default-toolkit)))

(def ^{:private true} orig-screen-width
  (let [screen (current-screen)]
    (.width screen)))

(defn
  ^{:requires-bindings false
    :processing-name "screen.width"
    :category "Environment"
    :subcategory nil
    :added "1.0"}
  screen-width
  "Returns the width of the main screen in pixels."
  []
  orig-screen-width)

(def ^{:private true} orig-screen-height
  (let [screen (current-screen)]
    (.height screen)))

(defn
  ^{:requires-bindings false
    :processing-name "screen.height"
    :category "Environment"
    :subcategory nil
    :added "1.0"}
  screen-height
  "Returns the height of the main screen in pixels."
  []
  orig-screen-height)

(defn
  ^{:requires-bindings true
    :processing-name "screenX()"
    :category "Lights, Camera"
    :subcategory "Coordinates"
    :added "1.0"}
  screen-x
  "Takes a three-dimensional x, y, z position and returns the x value
  for where it will appear on a (two-dimensional) screen, once
  affected by translate, scale or any other transformations"
  [x y z]
  (.screenX *applet* (float x) (float y) (float z)))

(defn
  ^{:requires-bindings true
    :processing-name "screenY()"
    :category "Lights, Camera"
    :subcategory "Coordinates"
    :added "1.0"}
  screen-y
  "Takes a three-dimensional x, y, z position and returns the y value
  for where it will appear on a (two-dimensional) screen, once
  affected by translate, scale or any other transformations"
  [x y z]
  (.screenY *applet* (float x) (float y) (float z)))

(defn
  ^{:requires-bindings true
    :processing-name "screenZ()"
    :category "Lights, Camera"
    :subcategory "Coordinates"
    :added "1.0"}
  screen-z
  "Given an x, y, z coordinate, returns its z value.
   This value can be used to determine if an x, y, z coordinate is in
   front or in back of another (x, y, z) coordinate. The units are
