I am building a game in Java (long story on language choice, as I prefer C++), and having recently used JOGL for another project, decided to use that for my OpenGL access library. I'm about three months into this project.
I learned JOGL about a year ago and found a lot of chatter on the net about it vs. LWJGL. Last night, I finished a piece of optimization, and quite out of the blue decided to port it to LWJGL just to see how easy it would be and if some of the [very old] claims I heard were true, that LWJGL is faster.
A quick conclusion for those of you who can't wait: I am now using LWJGL for my game.
A longer one...
The port was far simpler than I had thought. Get rid of a bunch of window set-up junk, get rid of GL object instaces, replace a few float array's with FloatBuffers, and it worked. Sorta. My single gripe is with SlickUtil; it's TextureLoader automatically resizes non-power-of-two textures to make them power of two. "Magic" features like this make for bad libraries; they should add another load method called "loadScaledToPOT" or something, but I digress.
What's rendered in my game
Blocks. Yep, it's YABS -- Yet Another Blocky Sandbox.
How much stuff am I rendering
Around 4 million block faces at a time, meshed as 2 million triangles. My screen res is 1920x1200.
And, the performance?
These numbers are for use with JOGL and are in FPS.
Radeon 5450: 20 (I have GOT to figure out why this is so slow. Can this card really be THIS cruddy?)
Radeon 4550: 55
Radeon 3870: 130
Radeon 5870: 265
nVidia GTX 590: 410
What about using LWJGL?
They are identical.
So, there we have it. Now this doesn't mean that one or the other API isn't a tiny bit faster, it only means that the FPS bottleneck in my game is not related to library-specific Java-isms.
Note that I am making roughtly 8,000 GL calls per frame (glUnivorm... glBindBuffer... glVertexAttribPointer...).
So if the performance isn't better, why did you switch to LWJGL?
Because I forgot to back-up my code before porting it.
Just kidding :-)
The API is better. Display creation, input management, and getting rid of the annoying GL interface instances; combined, these represent a substantial simplification of my development. Also, the libraries are smaller--I know, this doesn't matter these days, but I'm old enough to still think smaller is better.
That's it. If you have any input, please share--the term "JOGL vs. LWGL" gets googled a lot :-)