Java OpenGL
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 Sun Microsystems Game Technology Group. 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, and some extensions.

Design
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.

Status and standardization
, JOGL provides full access to the OpenGL 4.5 specification as well as almost all vendor extensions (and OpenCL, OpenMAX and OpenAL). The 1.1.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.3.2 release added support for OpenGL versions up to 4.5, and OpenGL ES versions up to 3.2.

Wayland and Vulkan support is planned.

Java2D-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.

Tutorials
 OpenGL ES 2 sample
 Hello Triangle, gl3 and gl4 Hello Triangle and Texture. The samples are offered in Java and Kotlin
 Java OpenGL Sample Pack, porting of g-truc OpenGL Sample Pack. The over 230 samples illustrate almost all OpenGL features ranging from ES 2.0 up to the last GL extensions, same of them usually also called AZDO (Almost Zero Driver Overhead).
 modern jogl examples, Porting of Learning Modern 3D Graphics Programming, Jason L. McKesson. Java and Kotlin side by side.
 Immediate mode sample (simplest example, using the fixed pipeline)

Code examples
    @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);
    }

See also

 Java Bindings for OpenGL, The Java Community Specification Request for which JOGL provides an implementation
 Ardor3D, a high performance, professionally oriented scene graph using several bindings for OpenGL and OpenGL-ES including JOGL
 Elflight Engine, a high performance 3D game engine optimised for the web
 JMonkey Engine, a high performance scene graph based graphics API using several bindings for OpenGL and OpenGL-ES including JOGL
 Poxnora, an online multiplayer game using JOGL
 RuneScape, a MMORPG using JOGL
 Jake2, a Java port of Quake II using several bindings for OpenGL including JOGL for its low-level graphic API
 Scilab, a numerical computing program using JOGL for 2D, 3D rendering
 ClearVolume, a JOGL powered real-time live 3D visualization library designed for high-end volumetric light sheet microscopes.
 LWJGL, an alternative open-source OpenGL wrapper library
 Java OpenAL
 Java OpenCL

References

External links
 
 JOGL 2.3.x Specification
 JSR-231 Java Bindings for OpenGL website
 tool kiet, The OpenGL Programming Guide examples using JOGL
 NeHe's tutorials and sample code
 Setting up a JogAmp JOGL project in your favorite IDE
 Viewer3D, an applet to display interactive 3D content with JOGL
 Eclipse OpenGL Pack OpenGL plugin for the Eclipse IDE

3D graphics software
Java (programming language) libraries
Java APIs
OpenGL
Software using the BSD license