| JOGL | |
|---|---|
| Developer | JogAmp Community |
| Stable release | 2.6.0 / August 31, 2025; 2 months ago (2025-08-31) |
| Preview release | n/a / tbd |
| Written in | Java,C |
| Operating system | Cross-platform |
| Type | 3D computer graphics software (library/API) |
| License | BSD license |
| Website | jogamp |
Java OpenGL (JOGL) is a wrapperlibrary that allowsOpenGL to be used in theJava programming language.[1][2] It was originally developed by Kenneth Bradley Russell and Christopher John Kline, and was further developed by the Game Technology Group atSun Microsystems. Since 2010, it has been an independentopen-source project under aBSD license. It is the reference implementation forJava Bindings for OpenGL (JSR-231).
JOGL allows access to most OpenGL features available toC language programs through the use of theJava Native Interface (JNI). It offers access to both the standard GL* functions along with the GLU* functions; however theOpenGL Utility Toolkit (GLUT) library is not available for window-system related calls, as Java has its own windowing systems:Abstract Window Toolkit (AWT),Swing,JavaFX,SWT, its own NEWT and someextensions.
The baseOpenGLC API, as well as its associatedWindowing API,[3] are accessed in JOGL viaJava Native Interface (JNI) calls. As such, the underlying system must support OpenGL for JOGL to work.
JOGL differs from some other Java OpenGL wrapper libraries in that it merely exposes the procedural OpenGL API via methods on a few classes, rather than trying to map OpenGL functionality onto theobject-oriented programming paradigm. Indeed, most of the JOGL code is autogenerated from the OpenGL C header files via a conversion tool namedGlueGen, which was programmed specifically to facilitate the creation of JOGL.
As of 2025[update], JOGL provides full access to theOpenGL 4.6 andOpenGL ES 3.2 specification as well as almost all vendor extensions (andOpenCL,OpenMAX andOpenAL).[4] The2.5.0 version is the reference implementation forJSR-231 (Java Bindings for OpenGL).[5] The1.1.1 release gave limited access toGLUNURBS, providing rendering of curved lines and surfaces via the traditional GLU APIs. The2.6.0 release added support for OpenGL versions up to 4.6, and OpenGL ES versions up to 3.2.
Wayland and Vulkan support is planned.[6]
Since theJava SE 6 version of theJava language,Java2D (theAPI for drawing two dimensional graphics in Java) and JOGL have become interoperable, allowing it to :
@Overridepublicvoiddisplay(GLAutoDrawabledrawable){GL4gl4=drawable.getGL().getGL4();gl4.glClearBufferfv(GL2ES3.GL_COLOR,0,clearColor);gl4.glClearBufferfv(GL2ES3.GL_DEPTH,0,clearDepth);{FloatUtil.makeLookAt(view,0,eye,0,at,0,up,0,tmp);FloatUtil.makePerspective(projection,0,reset,45f,aspect,near,far);FloatUtil.multMatrix(projection,view);// projection *= viewtransformPointer.asFloatBuffer().put(projection);}gl4.glUseProgram(programName);gl4.glBindVertexArray(vertexArrayName.get(0));gl4.glBindBufferBase(GL2ES3.GL_UNIFORM_BUFFER/*target*/,1/*TRANSFORM0, index*/,bufferName.get(2)/*TRANSFORM, buffer*/);gl4.glBindTextureUnit(0/*diffuse*/,textureName.get(0));gl4.glBindSampler(0/*diffuse*/,samplerName.get(0));gl4.glDrawElements(GL.GL_TRIANGLES,elementCount,GL.GL_UNSIGNED_SHORT,0);}
JOGL originated as a project named Jungle, which was created by 3D graphics experts Ken Russell (of Sun Microsystems) and Chris Kline (of Irrational Games).
In order to facilitate maximum community participation for the Java Binding for the OpenGL API, we use the JOGL project on java.net found at jogl.dev.java.net. The JOGL source code can be found there, licensed under a liberal source code license (mostly licensed as BSD except where we use other parties' licensed code). We take a snapshot of the code from this project every few months, run the Technology Compatibility Kit on the source code, and then officially make it the Reference Implementation for each formal Java Binding for the OpenGL API release.