aboutsummaryrefslogtreecommitdiffstats
path: root/make/doc
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2009-06-11 07:05:29 +0000
committerSven Gothel <[email protected]>2009-06-11 07:05:29 +0000
commit0dec290ca2ff1245f16787bb3ccc62dab4bd9bfb (patch)
tree5dbeb595e2683333401a260ccbd92c550f70fffa /make/doc
parent3c5704666a2f64f66de432ef21ac223cc81131e8 (diff)
- Fixing SPEC documentation for bindings JOGL and NativeWindow,
lot's of javadoc changes/fixes. - Fixing transparency values RGB[A] in GLX and EGL, adding those in GLCapabilities. - Adding EGLPbuffer (untested yet) Added EGLOnscreenContext, EGLOnscreenDrawable and EGLPbufferContext, EGLPbufferDrawable, which completes the now abstract EGLContext and EGLDrawable. - Decoupling EGLDrawableFactory and DynamicLookupHelper: Since OpenGL ES has 2 libraries and hence 2 DynamicLookupHelper, one for each, these are decoupled in EGLES1DynamicLookupHelper and EGLES2DynamicLookupHelper, where each uses the base class EGLDynamicLookupHelper. EGLDynamicLookupHelper act's also as the owner of these singleton instances. EGLDrawableFactory is now pure singleton, and has no more relation to the ES[12] libraries. Still, GLDrawableFactory.getFactory(GLProfile) stays, due to the selection of the right factory, ie EGLDrawableFactory or a native one (X11GLX, WindowsWGL or MacOSXCGL). Added GLDrawableImpl.getDynamicLookupHelper(). DynamicLookupHelper implementation is pushed down to the specialisation of GLDrawableImpl, hence removed GLDrawableImpl implements DynamicLookupHelper. - Fixing Locking - Always throw an Exception if unlock is called without being locked. - Removed NativeWindow.LOCK_NOT_SUPPORTED, since it made the locking state ambiguos. - Using a generated Exception at locking to mark the object locked, and to let it throw in case of double locking. - Removed redundant lockToolkit() calls, where lockSurface() calls are made - Fixing GLWindow wrapped toolkit (e.g. AWTWindow) usage - In case the passed NativeWindow only contains a wrapper window, we use the NativeWindowFactory.getNativeWindow() pipeline to produce a valid NativeWindow. This object is only referenced within the drawable, hence we have to use it for actual NativeWindow related operations. - Add setVisible(): lockSurface()/unlockSurface() to allow getting the windowHandle - Overwriting all drawable related Window method's, using the drawable's NativeWindow if exists. - getNativeWindow() - lockSurface()/unlockSurface()/.. - getWindowHandle()/getSurfaceHandle() - Fix NativeWindowFactory.getNativeWindowType(), so the custom and pure values are set once (static init) - not overwritten (prev. bug). - NEWT: Added WindowEvent.EVENT_WINDOW_DESTROY_NOTIFY support in AWTWindow. Now the proper dispose() calls are made to all GLEventListeners if the AWT window is being closed - before it is actually destroyed. - Threading now uses the AWTThreadingPlugin, a ThreadingPlugin interface AWT implementation, containing the refactored Threading code. - Reintroduced getChosen*Capabilities and getRequested*Capabilites, where get*Capabilities is renamed back to getRequested*Capabilities. The semantics are necessary to allow the drawables (and NativeWindow) to be regenerated in case of a device change in a multihead environment. Otherwise there is a risk that recursive choosing of the Capabilities will degenerate the result. - Multihead logic .. Exception: Xinerama, where all monitors share the same static configuration, and the window handle 'survive' X11, MacOSX and Win32 with a Xinerama behavior 1) Recognition of a display/screen/surface change - It is prooven that the JAWT model (JAWT_LOCK_SURFACE_CHANGED) while locking the surface is not reliably propagated, ie doesn't work here, if the display change happens. - AWT's Canvas.getGraphicsConfiguration() can reliably being used to detect this case, ie compare the old GraphicsConfiguration with the new one. - A solution for other native windowing toolkits must be found, ie query the current underlying pixel-configuration, if it changed - act. In which case the the following shall be done: 2.0) - notify all GLEventListener via the dispose(GLAutoDrawable) 2.1) - destroy the OpenGL context 2.2) - call GLDrawable's setRealized(false) 2.3) - call GLDrawable's setRealized(true) 2.4) - create a new OpenGL context 2.5) - notify all GLEventListener via the init(GLAutoDrawable) Steps 2.0 - 2.5 are executed with GLAutoDrawable's dispose(true) call. Step 2.3, setRealized(true) on GLDrawable shall: 2.3.1) - Choose the GLCapabilities again, based on the requested ones, and update the choosen ones in the AbstractGraphicsConfiguration. 2.3.2) - Update AbstractScreen within the new AbstractGraphicsConfiguration to reflect the possible screen change. DONE: Xinerama mode: X11 + Xinerama, MacOSX DONE: Introducing GLAutoDrawable.dispose(boolean regenerate) DONE: 2.3.1 on setRealized(true): Windows, MacOSX (implicit on createContext) TODO: Windows setRealized(true) on AWT Canvas getGraphicsConfiguration(), can't lock the JAWT surface sometimes - exception, code disabled, see GLCanvas.java TODO: 2.3.1 on setRealized(true): X11 and EGL TODO: Find a test case, without Xinerama behavior TODO: Code for Newt/NativeWindow to detect (1) and propagate GLAutoDrawable's dispose(true). TESTS: - MacOSX (Xinerama) OK - X11 -TwinView (NV) OK -Xinerama (NV) OK - Win32 (Xinerama) OK - GLAutoDrawable's dispose(true) - git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1929 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'make/doc')
-rw-r--r--make/doc/jogl/spec-overview.html509
1 files changed, 509 insertions, 0 deletions
diff --git a/make/doc/jogl/spec-overview.html b/make/doc/jogl/spec-overview.html
new file mode 100644
index 000000000..11074e601
--- /dev/null
+++ b/make/doc/jogl/spec-overview.html
@@ -0,0 +1,509 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title>JSR 231 Draft Public Review Specification</title>
+</head>
+ <body>
+
+<h2>JSR 231 Specification Overview</h2>
+
+<h3>Preface</h3>
+ This specification, an optional set of packages, describes the Java(TM)
+bindings to the native OpenGL(R) 3D graphics library profiles:
+<ul>
+ <li> Desktop OpenGL 1.x, 2.y and 3.0, with x >= 5 and y >= 0 </li>
+ <li> Desktop OpenGL 3.x, with x >= 1 </li>
+ <li> Embedded OpenGL ES 1.x, with x >= 0 </li>
+ <li> Embedded OpenGL ES 2.x, with x >= 0 </li>
+</ul><br>
+ A binding to the native OpenCL(R) library is not yet specified, but intended to be
+ included in a <a href="#maintenanceupdates">maintenance update</a>.
+ <br>
+
+<h3>Dependencies</h3>
+ This binding has dependencies to the following:<br><br>
+ <ul>
+ <li> Either of the following Java implementations:<br>
+ <ul>
+ <li> <a href="http://java.sun.com/j2se/1.4.2/docs/api/">Java SE 1.4 or later</a> </li><br>
+ <li> <a href="http://java.sun.com/javame/technology/cdc/">Java ME CDC 1.1.2 (JSR 218)</a> and
+ <a href="http://java.sun.com/products/foundation/">Foundation Profile 1.1.2 (JSR 219)</a><br>
+ and either of the following <i>java.nio</i> implementations:<br>
+ <ul>
+ <li> <a href="http://java.sun.com/javame/reference/apis/jsr239/java/nio/package-summary.html"> JSR239 <i>java.nio</i> subset</a> </li>
+ <li> <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/nio/package-summary.html"> Java 1.4 <i>java.nio</i> implementation</a> </li>
+ </ul><br>
+ </ul>
+ <li> {@linkplain javax.media.nativewindow NativeWindow Protocol} <br>
+ <br>
+ The <i>NativeWindow Protocol</i> is included in Sun's sample implementation </li><br>
+ </ul>
+ <br>
+
+<h3>Package Structure</h3>
+ The packages defined by this specification include:<br>
+
+<ul>
+ <li>The <b>javax.media.opengl</b> package<br><br>
+ This package contains all Java bindings for all OpenGL profiles.<br>
+ The main OpenGL profile interfaces are:<br><br>
+ <ul>
+ <li> {@link javax.media.opengl.GL2 javax.media.opengl.GL2} interface<br>
+ <br>
+ This interface contains all core desktop OpenGL methods through
+version 3.0, inclusive, as well as most of it's extensions defined at the
+time of this specification. Early OpenGL extensions whose functionality
+was incorporated into core OpenGL by version 2.0, inclusive, are specifically
+excluded.<br>
+ Future extensions will be added with a <a href="#maintenanceupdates">maintenance update</a></li><br>
+
+ <li> {@link javax.media.opengl.GL3 javax.media.opengl.GL3} interface<br>
+ <br>
+ This interface contains all core desktop OpenGL methods starting from 3.1,
+inclusive, as well as most of it's extensions defined at the
+time of this specification. <br>
+ Future extensions will be added with a <a href="#maintenanceupdates">maintenance update</a></li><br>
+
+ <li> {@link javax.media.opengl.GLES1 javax.media.opengl.GLES1} interface<br>
+ <br>
+ This interface contains all core embedded OpenGL methods of ES 1.x, with x >= 0,
+inclusive, as well as most of it's extensions defined at the
+time of this specification. <br>
+ Future extensions will be added with a <a href="#maintenanceupdates">maintenance update</a></li><br>
+
+ <li> {@link javax.media.opengl.GLES2 javax.media.opengl.GLES2} interface<br>
+ <br>
+ This interface contains all core embedded OpenGL methods of ES 2.x, with x >= 0,
+inclusive, as well as most of it's extensions defined at the
+time of this specification. <br>
+ Future extensions will be added with a <a href="#maintenanceupdates">maintenance update</a></li><br>
+ </ul>
+ Additionally the packages contains interfaces where the main profiles intersect each other.
+ These interfaces purposes is to provide common subsets of profiles to be used
+ on both, the desktop and the embedded device. These are:<br><br>
+ <ul>
+ <li> {@link javax.media.opengl.GLBase javax.media.opengl.GLBase} interface<br>
+ <br>
+ Common interface containing the profile type identification and conversion methods.<br>
+ Used to query which specialized profile class an instance of this object actually is and
+ offering a protocol to convert it to these types.</li><br>
+
+ <li> {@link javax.media.opengl.GL javax.media.opengl.GL} interface<br>
+ <br>
+ Common interface containing the subset of all profiles, GL3, GL2, GLES1 and GLES2.<br>
+ This interface reflects common data types, texture and framebuffer functionality.</li><br>
+
+ <li> {@link javax.media.opengl.GL2ES1 javax.media.opengl.GL2ES1} interface<br>
+ <br>
+ Interface containing the common subset of GL2 and GLES1.<br>
+ This interface reflects only the fixed functionality of OpenGL</li><br>
+
+ <li> {@link javax.media.opengl.GL2ES2 javax.media.opengl.GL2ES2} interface<br>
+ <br>
+ Interface containing the common subset of GL3, GL2 and GLES2.<br>
+ This interface reflects only the programmable shader functionality of OpenGL</li><br>
+ </ul>
+ </li><br>
+
+ <li>The <b>javax.media.opengl.glu</b> package<br>
+ <br>
+ This package contains bindings for the OpenGL Graphics System Utility (GLU)
+Library version 1.3, inclusive, with the exception of the GLU NURBS routines
+which are not exposed.</li><br>
+</ul>
+<br>
+
+<h3>API Binding Conventions</h3>
+ The Java language bindings to the pre-existing C APIs in these packages
+have been created using a consistent set of rules. Vendor-defined extensions
+should make use of the same rules in order to provide a consistent developer
+experience.<br>
+ <br>
+ The rules for creating the Java language binding are described in the following
+sections. These rules should be followed as closely as possible for all future
+APIs that share the javax.media.opengl namespace.<br>
+
+<h4>Function Naming</h4>
+ Functions are named in the same way as in the C binding. That is, an OpenGL
+API function glClear is bound to Java method GL.glClear. Although it would
+be possible to drop the gl prefix (since it is redundant with the interface
+name GL), the resulting code was deemed to look too foreign to experienced
+OpenGL developers. For the same reason, we have also carried over all type
+suffixes like 3f and 3fv from methods such as glColor3f and glColor3fv, respectively.<br>
+ <br>
+ Extension suffixes, such as EXT, ARB, and vendor-specific suffixes, are
+retained so as to match C conventions.<br>
+
+<h4>Mapping of Constants</h4>
+ Constants are named in the same way as in the C binding. For instance,
+the OpenGL constant GL_RGB is bound to Java constant GL.GL_RGB.<br>
+
+<h4>Mapping of Primitive Types</h4>
+ All 8-bit integral types become byte, all 16-bit integral types become
+short, and all 32-bit integral types become int. All 32-bit floating-point
+types become float and all 64-bit floating-point types become double.<br>
+ <br>
+ Integer return values that can only be GL_TRUE or GL_FALSE are mapped to
+boolean.<br>
+
+<h4>Mapping of Pointer Arguments</h4>
+ OpenGL functions that take pointer arguments fall into several categories:<br>
+
+<ul>
+ <li>Functions that take an untyped pointer argument for immediate use</li>
+ <li>Functions that take a typed pointer argument for immediate use</li>
+ <li>Functions that take an untyped pointer argument for deferred use</li>
+ <li>Functions that take a typed pointer argument for deferred use</li>
+ <br>
+</ul>
+ Functions that take an untyped (void*) pointer argument for immediate use
+are given a single binding that takes a New I/O (NIO) Buffer object. The Buffer
+may be of any type allowable by the function (and compatible with the other
+arguments to the function) and may be direct or indirect. An example of
+an OpenGL API in this category is glTexImage2D.<br>
+ <br>
+ Functions that take a typed pointer (e.g., GLfloat *) argument for immediate
+use are given two bindings. The first takes a Java primitive array with a
+type that matches the C pointer type (i.e., GLfloat* maps to float[]). The
+second takes a typed Buffer object (i.e., GLfloat* maps to FloatBuffer).
+An example of an OpenGL API in this category is glColor3fv.<br>
+ <br>
+ Functions that take an untyped (void*) pointer argument for deferred use
+are given a single binding that takes a Buffer object. The Buffer may be of
+any type allowable by the function (and compatible with the other arguments
+to the function), but must be direct. That is, it may not have been created
+from a Java primitive array using the wrap method. The functions that fall
+into this category generally have names ending with the suffix "pointer."
+An example of an OpenGL API in this category is glVertexPointer. Because these
+functions do not consume the data located at the given pointer immediately,
+but only at some unspecified later time, it is not possible to use a Java
+primitive array whose memory location may change.<br>
+ <br>
+ Functions that take a typed (e.g., GLfloat*) pointer argument for deferred
+use are given a single binding that takes a typed Buffer object (i.e., GLfloat*
+maps to FloatBuffer). The Buffer must be direct. That is, it may not have
+been created from a Java primitive array using the wrap method. An example
+of an OpenGL API in this category is glFeedbackBuffer.<br>
+ <br>
+ Methods that read or write a specific number of values from an array or
+Buffer argument do not read or write any subsequent elements of the array
+or Buffer.<br>
+ <br>
+ An outgoing C char* pointer, if representing a null-terminated, read-only
+C string, maps to a Java String. An outgoing C char** pointer, if similarly
+representing an array of read-only C strings, maps to a Java String[] (array
+of String objects). All other char* pointers, including those representing
+mutable C strings as used in some Get methods, are mapped to byte[] and ByteBuffer.
+ <br>
+
+<h4>Index Parameter for Arrays</h4>
+ Each C method argument that is mapped to a primitive array in Java is actually
+mapped to two separate parameters: the appropriate primitive array type in
+Java and an integer offset parameter. The value of the integer offset is
+the index which the method will start reading from within the array. Earlier
+indices will be ignored. This mapping provides more congruity with existing
+Java APIs and allows reuse of a single array across multiple Java method calls
+by changing the index in much the same way that C pointers permit for C arrays.<br>
+
+<h4>Reduction of Method Explosions</h4>
+ Since there are two ways to expand a given C method pointer parameter,
+it would be possible for C methods with multiple pointer arguments to expand
+to many Java methods if one was to consider every possible combination of
+mappings (the C method would expand to the number of pointer parameters to
+the power of 2). In order to avoid an API explosion, we restrict a given
+Java method to like kind mappings only. In other words, a given C method
+with N typed pointer parameters for immediate use, where N &gt;= 1, will map
+to exactly two Java methods: One with all primitive arrays and one with all
+Buffer types.<br>
+ <br>
+ Also, methods that accept multiple Buffer arguments require all direct
+or all non-direct Buffers. Direct and non-direct buffers should never be
+mixed within an API call by an application.<br>
+
+<h4>Byte ordering of Buffers</h4>
+ When allocating a New I/O Buffer (in particular, a direct ByteBuffer) to
+be passed to the APIs in these packages, it is essential to set the <em>byte
+ordering</em> of the newly-allocated ByteBuffer to the <em>native</em> byte
+ordering of the platform: e.g. <code>ByteBuffer.allocateDirect(...).order(ByteOrder.nativeOrder());</code>.
+The byte order of the ByteBuffer indicates how multi-byte values such as
+int and float are stored in the Buffer either using methods like putInt and
+putFloat or views such as IntBuffer or FloatBuffer. The Java bindings perform
+no conversion or byte swapping on the outgoing data to OpenGL, and the native
+OpenGL implementation expects data in the host CPU's byte order, so it is
+essential to always match the byte order of the underlying platform when
+filling Buffers with data. <br>
+
+<h4>Auto-slicing of Buffers</h4>
+ When a Buffer object is passed to an OpenGL function binding, the actual
+pointer argument that is passed down to the OpenGL C implementation is equal
+to the starting pointer of the Buffer data, plus an offset given by the Buffer.position()
+function, multiplied by the data type size in bytes (1 for a ByteBuffer, 2
+for a ShortBuffer, 4 for a IntBuffer or FloatBuffer, and 8 for DoubleBuffer).
+ The array offset given by Buffer&lt;type&gt;.arrayOffset() is also added
+in the offset for wrapped arrays.<br>
+ <br>
+ This feature is known as "auto-slicing," as it mimics the effect of calling
+slice() on the Buffer object without the overhead of explicit object creation.<br>
+
+<h4>Errors and Exceptions</h4>
+ For performance reasons, OpenGL functions do not return error values directly.
+Instead, applications must query for errors using functions such as glGetError.
+This behavior is largely preserved in the Java language bindings, as described
+below.<br>
+ <br>
+ In the interest of efficiency, the Java API does not generally throw exceptions.
+ However, running an application with the DebugGL composable pipeline, which
+is part of the API, will force an exception to be thrown at the point of failure.<br>
+ <br>
+ Many errors are defined by OpenGL merely to set the error code, rather
+than throwing an exception. For example, passing a bad enumerated parameter
+value may result in the error flag being set to GL.GL_INVALID_VALUE. Attempting
+to check for such errors in the binding layer would require either replicating
+the error-checking logic of the underlying engine, or querying the error state
+after every function. This would greatly impact performance by inhibiting
+the ability of the hardware to pipeline work.<br>
+
+<h4>Security</h4>
+ Exception behavior is defined in cases that could otherwise lead to illegal
+memory accesses in the underlying OpenGL engine. Implementations should take
+necessary steps to prevent the GL from accessing or overwriting memory except
+for properly allocated Buffers and array method arguments.<br>
+ <br>
+ An implementation should take care to validate arguments correctly before
+invoking native methods that could potentially access memory illegally. In
+particular, methods that validate the contents of an array (such as a list
+of GL attributes) or a Buffer should take precautions against exploits in
+which a separate thread attempts to alter the contents of the argument during
+the time interval following validation but preceding passage of the argument
+to the underlying native engine.<br>
+
+<h3><a name="SHARING">Sharing of Server-Side OpenGL Objects between GLContexts</a></h3>
+
+Sharing of server-side OpenGL objects such as textures and display
+lists among OpenGL contexts is supported in this specification.
+However, the specification does not guarantee that a request to share
+objects between two contexts will succeed. Certain OpenGL
+implementations restrict sharing in certain ways. Applications should
+assume that sharing is a request more than an assertion.
+Implementations of this specification should, but are not required to,
+provide timely notification of a failure of a request to share objects
+between two GLContexts, perhaps in the form of a GLException. The
+situation in which sharing is most likely to work on all platforms is
+between two GLContexts associated with the same GLDrawable.
+
+<h3>Criteria Used for Inclusion of APIs into the Java Bindings</h3>
+
+<h4>OpenGL API Inclusion Criteria</h4>
+ OpenGL functions and OpenGL extensions have been included in the Java bindings
+according the following rules: <br>
+
+<ul>
+ <li>
+ <li>All functions in core OpenGL 2.0, inclusive, have been included.</li>
+ <li>If the functionality of the OpenGL extension was subsumed into core
+OpenGL by version 2.0, then the extension was dropped from the Java bindings.
+ However, if the core function name is not available in the native OpenGL implementation,
+ the extension named equivalent is used instead, e.g. <i>GL_ARB_framebuffer_object</i>.</li>
+ <li>Functions that deal with explicit pointer values in such a way that
+they cannot be properly implemented in Java have been excluded.&nbsp; This
+includes retrieval methods with a C void ** in the OpenGL signature like glGetBufferPointerv,
+glGetPointerv, glGetVertexAttribPointerv, as well as functions that require
+persistent pointer to pointer storage across function calls like vertex array
+lists.</li>
+ <li>If the extension is registered in the official OpenGL extension registry
+but the specification was never completed or was discontinued (as indicated
+in the specification and/or lack of inclusion in SGI's official OpenGL header
+files), then the extension was not included.&nbsp; Using these criteria, ARB
+extensions through number 42 (GL_ARB_pixel_buffer_object), inclusive, and
+non-ARB extensions through number 311 (GL_REMEDY_string_marker), inclusive,
+have been included in the Java bindings according to the numbering scheme
+found in the official OpenGL extension registry.</li>
+ <li>Some bindings to several vendor-specific extensions have been included
+that are not found in the OpenGL extension registry.&nbsp; These extensions
+were deemed popular enough and/or were specifically requested by users.</li>
+ <li>Platform-specific extensions, such as those that begin with WGL, GLX,
+CGL, etc., have been excluded from the public API.&nbsp; See the section "Accessing
+platform-specific extensions" for more information about accessing these
+functions on certain implementations.<br>
+ </li>
+
+</ul>
+
+<h4>OpenGL GLU API Inclusion Criteria</h4>
+ Bindings for all core GLU APIs have been included with the exception of
+the GLU NURBS APIs. &nbsp;These APIs may be included in a future maintenance
+release of the Java bindings.<br>
+
+<h3>OpenGL Extensions</h3>
+
+<h4>Creating New Extensions</h4>
+ While the Java APIs for OpenGL extensions are unconditionally exposed, the
+underlying functions may not be present. A program can query whether a potentially
+unavailable function is actually available at runtime by using the method
+GL.isFunctionAvailable.<br>
+ <br>
+ Bindings for OpenGL extensions not covered in this specification may be
+supplied by individual vendors or groups. Such bindings may be considered
+for inclusion in a future version of the JSR. In order to avoid fragmentation,
+vendors creating extension bindings should expose new extensions using the
+method GL.getExtension. This method is intended to provide a mechanism for
+vendors who wish to provide access to new OpenGL extensions without changing
+the public API of the core package. <br>
+ <br>
+ Names for added extension methods and extension-defined constants and Java
+bindings for C parameters should follow the guidelines set forth in this specfication.<br>
+
+<h4>Accessing Platform-Specific Extensions</h4>
+ Platform-specific extensions such as those that begin with WGL, GLX, CGL,
+etc. are not included in the API.&nbsp; Each implementation can choose to
+export all, some, or none of these APIs via the GL.getPlatformGLExtensions
+API which returns an Object whose underlying data type is specific to a given
+implementation.<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<br>
+ Therefore, any usage of these APIs is both platform and implementation specific.<br>
+
+<h3>OpenGL Version on Runtime System</h3>
+ Even though OpenGL extensions whose functionality was included into core
+OpenGL by version 2.0, inclusive, are not included in the bindings, it should
+be noted that OpenGL version 2.0 is not an absolute requirement on the runtime
+system.&nbsp; This is because a user could query whether any particular function
+is available before calling certain core APIs that might not be present.&nbsp;
+Also, if the core function name is not available in the native OpenGL implementation,
+the extension named equivalent is used instead, e.g. <i>GL_ARB_framebuffer_object</i>.&nbsp;
+However, in general, it is reasonable to expect at least OpenGL 2.0 to be
+installed on the runtime system and an implementor of the API is free to require
+the presence of at least OpenGL 2.0 on the target system.<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<br>
+ In future revisions of the API, this minimum standard may be raised.<br>
+
+<h3>Runtime Version Information</h3>
+Any Java Bindings for OpenGL implementation should include version information
+in its jar manifest file. &nbsp;This information can then easily be accessed
+at runtime via the java.lang.Package API. &nbsp;At least the following information
+is included in the Reference Implementation jar file manifest: Specification
+Title, Specification Vendor, Specification Version, Implementation Vendor,
+and Implementation Version.<br>
+<a name="maintenanceupdates"/>
+<h3>Future Maintenance Updates</h3>
+ New core APIs found in future versions of OpenGL, as well as new OpenGL
+extensions, are expected to be added to the bindings and included into the
+javax.media.opengl namespace via future maintenance updates to the API.<br>
+
+<h3>Related Links</h3>
+
+<ul>
+ <li> JSR 231 JCP Web Page</li>
+
+</ul>
+
+<blockquote><a href="http://www.jcp.org/en/jsr/detail?id=231"> http://www.jcp.org/en/jsr/detail?id=231</a></blockquote>
+
+<ul>
+ <li>OpenCL Specification</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.khronos.org/registry/cl/">
+http://www.khronos.org/registry/cl/</a></blockquote>
+
+<ul>
+ <li>OpenGL 3.1 Specification</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.opengl.org/registry/doc/glspec31.20090324.pdf">
+http://www.opengl.org/registry/doc/glspec31.20090324.pdf</a></blockquote>
+
+<ul>
+ <li>OpenGL 2.1 Specification</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.opengl.org/registry/doc/glspec21.20061201.pdf">
+http://www.opengl.org/registry/doc/glspec21.20061201.pdf</a></blockquote>
+
+<ul>
+ <li>OpenGL 2.0 Specification</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">
+http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></blockquote>
+
+<ul>
+ <li> OpenGL Extension Registry</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.opengl.org/registry/"> http://www.opengl.org/registry/</a></blockquote>
+
+<pre></pre>
+
+<ul>
+ <li>OpenGL ES 2.x Specification </li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf">
+http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.24.pdf</a></blockquote>
+
+<ul>
+ <li>OpenGL ES 1.x Specification </li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.khronos.org/registry/gles/specs/1.1/es_full_spec_1.1.12.pdf">
+http://www.khronos.org/registry/gles/specs/1.1/es_full_spec_1.1.12.pdf</a></blockquote>
+
+<ul>
+ <li>OpenGL ES Registry</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.khronos.org/registry/gles/">
+http://www.khronos.org/registry/gles/</a></blockquote>
+
+<ul>
+ <li>OpenGL Utility Library: GLU 1.3 Specificiation</li>
+
+</ul>
+
+<blockquote><a
+ href="http://www.opengl.org/documentation/specs/glu/glu1_3.pdf"> http://www.opengl.org/documentation/specs/glu/glu1_3.pdf</a></blockquote>
+
+<ul>
+ <li>OpenGL ARB Web site</li>
+
+</ul>
+
+<blockquote><a href="http://www.opengl.org/about/arb/index.html"> http://www.opengl.org/about/arb/index.html</a></blockquote>
+
+<h3><br>
+ </h3>
+
+<h3>Revision History<br>
+ </h3>
+
+<ul>
+<li> Early Draft Review, October/November 2005
+<li> Public Review, December/January 2005
+<li> Proposed Final Draft Review, February/March 2006
+<li> 1.0.0 Final Release, September 2006
+<li> 1.1.0 Maintenance Release, April 2007
+<li> 1.2.0 Maintenance Release, June 2009
+</ul>
+ <br>
+ <br>
+ <br>
+</body>
+</html>