Penumbra was my first project with Clojure. Besides a few Euler
Project problems, it was the first real Clojure code I had written.
In spite of this, I think it was a pretty big success. I've had a lot
of fun with it, and so have a number of other people.
However, there are some flaws. A lot of it is half-finished,
especially the Clojure->GLSL transliteration, which can do some
fantastic stuff but falls down in some basic cases. The type
inference is pretty ad hoc, and needs a lot more hand-holding than it
should. There's also some clever stuff to abstract away the
lower-level details, but I have neither the resources nor the
expertise to say exactly what hardware will support these
abstractions. Thus, anything written with Penumbra will not run
anywhere, but neither will it necessarily run exactly the same on a
more limited set of hardware.
Also, the JVM is kind of a terrible platform for distributing OpenGL
applications (Minecraft is the exception that proves the rule). It's
a fun way for us as programmers to play around with the graphics
hardware, but not a good way to share what we make with other people.
I think this cuts away one of the major motivators for making cool
stuff. I wrote what I think are the first implementations of Tetris
and Asteroids in Clojure, but only a small number of people have ever
played them.
My current plan is to instead make a WebGL wrapper for ClojureScript.
This solves a number of the above problems: the API is more focused,
the minimum hardware specs are a lot more detailed, and distribution
is a snap. Also, I think I can apply the lessons I've learned from
using Clojure for the last two years and create a higher quality
implementation.
If you'd like to fork Penumbra, please be my guest. However, I may
not be able to give you sufficient time to bring you up to speed on
how everything fits together (and since it's been more than a year
since I touched most of the code, my own understanding is less than
perfect).
I hope that answers your question. If you have any others, please let me know.
Zach
Zach