Core OpenGL API and GLU library calls are available from Java through a thin wrapper looking very much as the original OpenGL C API, Except GLU NURBS routines which are not exposed through the public API.
All platform specific libraries (available from the CGL API for Mac OS X, GLX for X Window System, and WGL for Microsoft Windows) are also abstracted out to create a platform independent way of selecting Framebuffer attributes and performing platform specific Framebuffer operations.
Platform-specific extensions are not included in the public API. Each implementation can choose to export some of these APIs via the GL.getPlatformGLExtensions() and GL.getExtension(String) method calls which return Objects whose data types are specific to the given implementation.
Example
This example shows how to draw a polygon (without initialization or repaint code).[2] Here is the reference C implementation:
intDrawGLScene(GLvoid){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(-1.5f,0.0f,-6.0f);// Move Left 1.5 UnitsglBegin(GL_TRIANGLES);//Drawing Using TrianglesglVertex3f(0.0f,1.0f,0.0f);// TopglVertex3f(-1.0f,-1.0f,0.0f);// Bottom LeftglVertex3f(1.0f,-1.0f,0.0f);// Bottom RightglEnd();glTranslatef(3.0f,0.0f,0.0f);glBegin(GL_QUADS);// Draw A QuadglVertex3f(-1.0f,1.0f,0.0f);// Top LeftglVertex3f(1.0f,1.0f,0.0f);// Top RightglVertex3f(1.0f,-1.0f,0.0f);// Bottom RightglVertex3f(-1.0f,-1.0f,0.0f);// Bottom LeftglEnd();glFlush();returnTRUE;}
Which translates to the following Java implementation:
publicvoiddisplay(GLAutoDrawableglDrawable){finalGLgl=glDrawable.getGL();gl.glClear(GL.GL_COLOR_BUFFER_BIT|GL.GL_DEPTH_BUFFER_BIT);gl.glLoadIdentity();gl.glTranslatef(-1.5f,0.0f,-6.0f);// Move Left 1.5 Unitsgl.glBegin(GL.GL_TRIANGLES);// Drawing Using Trianglesgl.glVertex3f(0.0f,1.0f,0.0f);// Topgl.glVertex3f(-1.0f,-1.0f,0.0f);// Bottom Leftgl.glVertex3f(1.0f,-1.0f,0.0f);// Bottom Rightgl.glEnd();gl.glTranslatef(3.0f,0.0f,0.0f);gl.glBegin(GL.GL_QUADS);// Draw A Quadgl.glVertex3f(-1.0f,1.0f,0.0f);// Top Leftgl.glVertex3f(1.0f,1.0f,0.0f);// Top Rightgl.glVertex3f(1.0f,-1.0f,0.0f);// Bottom Rightgl.glVertex3f(-1.0f,-1.0f,0.0f);// Bottom Leftgl.glEnd();gl.glFlush();}
^Borrowed from the Nehe tutorial, whose code is free to use elsewhere.
^"JSR-000231 Java Bindings for the OpenGL API". Java Community Process. Retrieved 2011-02-06. 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 https://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.