It's not that hard actually...but it's hard to do it without changing the API, which is something that i'm trying to avoid at all costs, because it renders all examples, code snippets, sources etc useless. While this may not be a problem for an experienced developer, it is one for a less experienced.
One of the basic ideas behind jPCT is to be able to drop a new version into your classpath and everything will still work. Of course, sometimes i'm removing a method or two or change a behaviour but i'm always trying to make the transition as smooth as possible.
The drawback is, that things like Config arise...with bad naming, almost no structure and one has no idea why something is in Config and not in the class itself. Light is a fantastic example: You have a Lights-class, which does almost nothing. Lights themselves are managed by the World and there are some settings in Config that affect lighting. To complete the mess, we now have a Light-class in util, which actually wraps the World-methods into cleaner ones and allows to override some global Config-stuff per light, because it was just stupid to put these things there...but that happened years ago, where jPCT was not much more than a simple demo applet rendering a rotating box.
FrameBuffer itself is another great example of a WTF?-class, but that's caused by the fact that hardware and software rendering work fundamentally different (and as if this wasn't enough, the AWTGLRenderer is a completely different story too). You should see the construction that i had to build to make the render-to-texture in 1.13 work in a renderer independant way...no wait...you should not see this... :wink: I thought very hard about this, created two solutions that i scratched because they felt just wrong and ended up with what we have now...something that seems to be almost intuitive, but if you think a bit about it, it only is 80% intuitive and 20% strange. If you look behind the facade that FrameBuffer builds to hide the difference, it's 90% strange... :wink:
But the damn thing somehow works, it is small and easy to work with IMHO.