     (filter #(= :uniform (:storage %))
             (:inputs fs))))
 
-(defn program [x]
-  (let [{:keys [vertex-shader fragment-shader]} x
-        vs (shader vertex-shader) fs (shader fragment-shader)]
-    {:tag             :program
-     :vertex-shader   vs
-     :fragment-shader fs
-     :inputs (program-inputs vs fs)}))
+(defn program
+  ([x] (program x {}))
+  ([x opts]
+   (let [{:keys [vertex-shader fragment-shader]} x
+         vs (shader vertex-shader opts) fs (shader fragment-shader opts)]
+     {:tag             :program
+      :vertex-shader   vs
+      :fragment-shader fs
+      :inputs          (program-inputs vs fs)})))
 
 
 

            [gamma.api :as g]))





(defn glsl [shader]
  (with-out-str
    (fipp.printer/pprint-document
      (emit/emit (:ir shader) shader)
      {:width 80})))

(defn ast [inputs]
  (apply g/block

        :ir      ir
        :ast     ast}]
      p
      (assoc p :glsl (glsl p opts)))))



