What does it mean when ARB methods have a non-ARB equivalent?

If methods with an ARB suffix have non-ARB equivalents, such as glGenBuffers vs glGenBuffersARB… does this mean the ARB method has since been promoted into standard GL, or do ARB methods still have some advantage over the other?

I’ve noticed the same thing with some constants, such as GL_COMPRESSED_RGB and GL_COMPRESSED_RGB_ARB. If these are basically equivalent, and I don’t need to check for compatibility, then it’s a bunch of extra code I can take out of my program. Are these just left around so GL is backwards compatible? Or do they actually signify something?

Yes, the presence of a non-ARB version means that the function was promoted into the OpenGL core at some point. You can check the glext.h in the JOGL workspace to see the association of various functions to OpenGL versions. In this case, glGenBuffersARB would be available as an extension in OpenGL 1.4 and possibly earlier, and glGenBuffers would be available in OpenGL 1.5. However, you don’t really need to know this with JOGL; you can just call GL.isFunctionAvailable(“glGenBuffers”) or GL.isFunctionAvailable(“glGenBuffersARB”) and it will make the appropriate queries behind the scenes.