Reference articles on history, science, culture and more
Encyclopedia

Java OpenGL

Wrapper library providing access to OpenGL from Java

Image credit is listed at the end of this article.

Java OpenGL (JOGL) is a wrapper library that allows OpenGL to be used in the Java programming language. It was originally developed by Kenneth Bradley Russell and Christopher John Kline, and was further developed by the Game Technology Group at Sun Microsystems. Since 2010, it has been an independent open-source project under a BSD license. It is the reference implementation for Java Bindings for OpenGL (JSR-231).

JOGL allows access to most OpenGL features available to C language programs through the use of the Java Native Interface (JNI). It offers access to both the standard GL* functions along with the GLU* functions; however the OpenGL 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 some extensions.

01Design

The base OpenGL C API, as well as its associated Windowing API, are accessed in JOGL via Java 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 the object-oriented programming paradigm. Indeed, most of the JOGL code is autogenerated from the OpenGL C header files via a conversion tool named GlueGen, which was programmed specifically to facilitate the creation of JOGL.

02Status and standardization

As of 2025, JOGL provides full access to the OpenGL 4.6 and OpenGL ES 3.2 specification as well as almost all vendor extensions (and OpenCL, OpenMAX and OpenAL). The 2.5.0 version is the reference implementation for JSR-231 (Java Bindings for OpenGL). The 1.1.1 release gave limited access to GLU NURBS, providing rendering of curved lines and surfaces via the traditional GLU APIs. The 2.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.

03Java2D-OpenGL interoperability

Since the Java SE 6 version of the Java language, Java2D (the API for drawing two dimensional graphics in Java) and JOGL have become interoperable, allowing it to :

  • Overlay Swing components (lightweight menus, tooltips, and other widgets) on top of OpenGL rendering.
  • Draw 3D OpenGL graphics on top of Java2D rendering (see here for a button with an OpenGL icon).
  • Use 3D graphics anywhere where ordinarily a Swing widget would be used. (Inside a JTable, JTree, ...)
  • Draw Java2D graphics on top of 3D OpenGL rendering.

04Tutorials

05Code example

@Override public void display(GLAutoDrawable drawable) { GL4 gl4 = 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 *= view transformPointer.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); }
Watch videos about Java OpenGLExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article Java OpenGL, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Images, from Wikimedia Commons:

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.