Revisiting the issue of LWJGL vs JOGL for game programming
*There exists the question, ["Java Game Programming: JOGL vs LWJGL?"][1] but it's not exactly what I'm looking for, and it's over a year old (in which time JOGL has gone through some changes) so I'd like to revisit this issue.*

I have been studying game development with a focus on Java. I've worked on some little projects with JOGL, but lately I'm having thoughts of changing to LWJGL.

I like JOGL's exact replica of OpenGL. It's fairly easy to create a JOGL app, and it doesn't try to impose a "framework" on your code. But JOGL has recently been moved around several times (it currently resides on [jogamp.org][2]) and doesn't seem to be well-maintained by its developers. In addition, it's terribly hard to figure out exactly what version of JOGL is stable, the differences between the versions, and which one to use; this was bad before, but has become something of a really terrible situation with JogAmp, as it's not even clear exactly where to download JOGL from [its new homepage][3].

My most recent project was a game developed for Ludum Dare, the 48-hour game programming competition. I spent at least 3 of my hours fiddling with a couple different versions of JOGL and finding a webstart version which might work on Mac, because the one I was using didn't. When I finally got it to work, it then started crashing my Windows browser (the whole time, Linux worked perfectly with either version). Long story short, it was painful trying to figure out a version of JOGL which worked cross-platform, using the official JOGL webstart files, and I ended up just shutting out Mac users. This was a very unfortunate failure which I don't consider to be my fault.

LWJGL, on the other hand, I've had very limited experience with. But in my short time using it, I really liked how it provided other handy features (like input handling); however, I found that in order to use the graphics, I had to know exactly what version of OpenGL a certain function call resided in. In JOGL, a GL2 object is able to call OpenGL 1.1 functions, because of course they are supported in OpenGL 2; but in LWJGL, the GL2 class only contains the few methods which are new to OpenGL 2. I can't keep track of which functions belong to which version, so I end up very frustrated and guessing until I get it right. I just want to use OpenGL. I was put off by this enough to stick with JOGL.

One other thing I really miss with LWJGL is the helper classes that JOGL provides; classes like [TextRenderer][4] and [TextureIO][5] greatly help with the use of JOGL, and LWJGL doesn't seem to have anything like them. I'd be in the same boat if I were using C++ and OpenGL, but I still just love those helper classes and I will really miss them with LWJGL.

So, have I covered all the issues? Are there other concerns that I should take into account when choosing between JOGL and LWJGL? How do I choose between the two?


  [1]: http://stackoverflow.com/questions/987579/java-game-programming-jogl-vs-lwjgl
  [2]: http://www.jogamp.org/
  [3]: http://jogamp.org/jogl/www/
  [4]: http://jogamp.org/deployment/jogl-next/javadoc_public/com/jogamp/opengl/util/awt/TextRenderer.html
  [5]: http://jogamp.org/deployment/jogl-next/javadoc_public/com/jogamp/opengl/util/texture/TextureIO.html
Revisiting the issue of LWJGL vs JOGL for game programming
===

*There exists the question, ["Java Game Programming: JOGL vs LWJGL?"][1] but it's not exactly what I'm looking for, and it's over a year old (in which time JOGL has gone through some changes) so I'd like to revisit this issue.*

I have been studying game development with a focus on Java. I've worked on some little projects with JOGL, but lately I'm having thoughts of changing to LWJGL.

I like JOGL's exact replica of OpenGL. It's fairly easy to create a JOGL app, and it doesn't try to impose a "framework" on your code. But JOGL has recently been moved around several times (it currently resides on [jogamp.org][2]) and doesn't seem to be well-maintained by its developers. In addition, it's terribly hard to figure out exactly what version of JOGL is stable, the differences between the versions, and which one to use; this was bad before, but has become something of a really terrible situation with JogAmp, as it's not even clear exactly where to download JOGL from [its new homepage][3].

My most recent project was a game developed for Ludum Dare, the 48-hour game programming competition. I spent at least 3 of my hours fiddling with a couple different versions of JOGL and finding a webstart version which might work on Mac, because the one I was using didn't. When I finally got it to work, it then started crashing my Windows browser (the whole time, Linux worked perfectly with either version). Long story short, it was painful trying to figure out a version of JOGL which worked cross-platform, using the official JOGL webstart files, and I ended up just shutting out Mac users. This was a very unfortunate failure which I don't consider to be my fault.

LWJGL, on the other hand, I've had very limited experience with. But in my short time using it, I really liked how it provided other handy features (like input handling); however, I found that in order to use the graphics, I had to know exactly what version of OpenGL a certain function call resided in. In JOGL, a GL2 object is able to call OpenGL 1.1 functions, because of course they are supported in OpenGL 2; but in LWJGL, the GL2 class only contains the few methods which are new to OpenGL 2. I can't keep track of which functions belong to which version, so I end up very frustrated and guessing until I get it right. I just want to use OpenGL. I was put off by this enough to stick with JOGL.

One other thing I really miss with LWJGL is the helper classes that JOGL provides; classes like [TextRenderer][4] and [TextureIO][5] greatly help with the use of JOGL, and LWJGL doesn't seem to have anything like them. I'd be in the same boat if I were using C++ and OpenGL, but I still just love those helper classes and I will really miss them with LWJGL.

So, have I covered all the issues? Are there other concerns that I should take into account when choosing between JOGL and LWJGL? How do I choose between the two?


  [1]: http://stackoverflow.com/questions/987579/java-game-programming-jogl-vs-lwjgl
  [2]: http://www.jogamp.org/
  [3]: http://jogamp.org/jogl/www/
  [4]: http://jogamp.org/deployment/jogl-next/javadoc_public/com/jogamp/opengl/util/awt/TextRenderer.html
  [5]: http://jogamp.org/deployment/jogl-next/javadoc_public/com/jogamp/opengl/util/texture/TextureIO.html