Skip to content
Surf Wiki
Save to docs
general/3d-graphics-software

From Surf Wiki (app.surf) — the open knowledge base

Java OpenGL

Wrapper library providing access to OpenGL from Java


Wrapper library providing access to OpenGL from Java

FieldValue
nameJOGL
screenshotJOGL Refrection Demo Screenshot.png
screenshot size200px
captionA demo screenshot illustrating real-time refraction using JOGL on Mac OS X
developerJogAmp Community
latest release version2.6.0
latest release date
latest preview versionn/a
latest preview datetbd
programming languageJava, C
operating systemCross-platform
genre3D computer graphics software (library/API)
licenseBSD license
website

Java OpenGL (JOGL) is a wrapper library that allows OpenGL to be used in the Java programming language.{{cite web |access-date=2020-07-23 |access-date=2020-07-23

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.

Design

The base OpenGL C API, as well as its associated Windowing API,{{cite web |access-date=2011-02-06

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.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).{{cite web |access-date=2011-02-06

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

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

References

References

  1. "JOGL - Java Binding for the OpenGL API".
  2. (2013-08-05). "Bug 794 - Add Wayland Windowing/Surface Interoperability".
  3. "JOGL Userguide".
Info: Wikipedia Source

This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.

Want to explore this topic further?

Ask Mako anything about Java OpenGL — get instant answers, deeper analysis, and related topics.

Research with Mako

Free with your Surf account

Content sourced from Wikipedia, available under CC BY-SA 4.0.

This content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.

Report