To-GLSL is a library for converting Clojure s-expressions to GLSL.
[to-glsl "0.1.0-SNAPSHOT"]
(def basic-vs
'(do
(def-attribute vec4 vertex-position)
(def-attribute vec2 tex-coord-attr)
(def-uniform mat4 model-view)
(def-uniform mat4 projection)
(def-varying (highp vec2) tex-coord)
(defn main (void [])
(set! tex-coord tex-coord-attr)
(set!
gl/position
(* projection model-view vertex-position)))))
(def basic-fs
'(do
(def-uniform sampler-2D sampler)
(def-varying (highp vec2) tex-coord)
(defn main (void [])
(set! gl/frag-color (texture-2D sampler tex-coord)))))
(require '[to-glsl.core :refer [->glsl]])
(def vs-source (->glsl basic-vs))
(def fs-source (->glsl basic-fs))defn
(defn add-one (void [(int x)]) (+ x 1))becomes:
void addOne(int x) {
x + 1;
}Note: types must be specified
def
(def float pi 3.14159)becomes
float pi = 3.14159;def-varying - like def but creates a varying
def-uniform - like def but creates a uniform
def-attribute - like def but creates an attribute
set!
(set! x 5)becomes
x = 5;when
(when (and (= x 10) (= z 30))
(set! y 20))becomes
if (x == 10 && z == 30) {
y = 20;
}
if
(set! y (if (= x 10) 20 10))becomes
y = x == 10 ? 20 : 10;and, or, =, +, -, /, *, bit-and, bit-or, bit-xor, bit-not, bit-shift-right, bit-shift-left - all compile into appriate infix form.
inc and dec - compile into ++ and -- repectively.
field
(field vec x)becomes
vec.xswizzle
(swizzle vec x z)becomes
vec.xzAll symbols are automatically converted from kebab case into camel case.
The GLSL gl_ symbols like gl_Position and gl_FragColor can be accessed under the gl/ namespace in kebab case. i.e. gl/frag-color.
To-GLSL doesn't make any attempt to validate the provided code.
Copyright 2019 Jeremy Kross
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.