/*
 * Copyright  1990-2006 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation. 
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt). 
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA 
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions. 
 */

package javax.microedition.khronos.opengles;

import java.nio.*;

/**
 * The <code>GL11ExtensionPack</code> interface contains the Java(TM)
 * programming language bindings for the OpenGL ES 1.1 Extension Pack.
 * The runtime OpenGL ES engine may or may not implement any
 * particular extensions defined in the extension pack.  Functions
 * that require a particular extension will throw an
 * <code>UnsupportedOperationException</code> if the extension is not
 * available at runtime.
 *
 * <p> The OpenGL ES 1.1 Extension Pack consists of the following extensions:
 *
 * <ul>
 * <li>OES_texture_env_crossbar</li>
 * <li>OES_texture_mirrored_repeat</li>
 * <li>OES_texture_cube_map</li>
 * <li>OES_blend_subtract</li>
 * <li>OES_blend_func_separate</li>
 * <li>OES_blend_equation_separate</li>
 * <li>OES_stencil_wrap</li>
 * <li>OES_extended_matrix_palette</li>
 * <li>OES_framebuffer_object</li>
 * </ul>
 *
 * <p> The specification for the OpenGL ES 1.1 Extension Pack may be
 * found at <a
 * href="http://www.khronos.org/cgi-bin/fetch/fetch.cgi?opengles_spec_1_1_extension_pack">http://www.khronos.org/cgi-bin/fetch/fetch.cgi?opengles_spec_1_1_extension_pack</a>.
 *
 * <p> The documentation in this class is normative with respect to
 * instance variable names and values, method names and signatures,
 * and exception behavior.  The remaining documentation is placed here
 * for convenience and does not replace the normative documentation
 * found in the OpenGL ES 1.1 Extension Pack specification, OpenGL ES
 * specification, relevant extension specifications, and the OpenGL
 * specification versions referenced by any of the preceding
 * specifications.
 */
public interface GL11ExtensionPack extends GL {

//   /**
//    * Flag indicating the presence of the "texture env crossbar"
//    * extension.  <code>OES_texture_env_crossbar</code> is an optional
//    * profile extension in OpenGL ES 1.1, and is part of the OpenGL ES
//    * 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment.
//    */
//   int GL_OES_texture_env_crossbar                         = 1;

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Set texture environment parameters.
   *
   * <p> The <code>OES_texture_env_crossbar</code> extension adds the
   * capability to use the texture color from other texture units as
   * sources to the <code>COMBINE</code> texture function. OpenGL ES
   * 1.1 defined texture combine functions which could use the color
   * from the current texture unit as a source. This extension adds
   * the ability to use the color from any texture unit as a source.
   *
   * <p> The tables that define arguments for <code>COMBINE_RGB</code>
   * and <code>COMBINE_ALPHA</code> functions are extended to include
   * <code>TEXTURE</code><i>n</i>:
   *
   * <pre>
   * SRCn_RGB           OPERANDn_RGB              Argument
   *
   * TEXTURE            SRC_COLOR                 Cs
   *                    ONE_MINUS_SRC_COLOR       1 - Cs
   *                    SRC_ALPHA                 As
   *                    ONE_MINUS_SRC_ALPHA       1 - As
   *
   * TEXTUREn           SRC_COLOR                 Cs^n
   *                    ONE_MINUS_SRC_COLOR       1 - Cs^n
   *                    SRC_ALPHA                 As^n
   *                    ONE_MINUS_SRC_ALPHA       1 - As^n
   *
   * CONSTANT           SRC_COLOR                 Cc
   *                    ONE_MINUS_SRC_COLOR       1 - Cc
   *                    SRC_ALPHA                 Ac
   *                    ONE_MINUS_SRC_ALPHA       1 - Ac
   *
   * PRIMARY_COLOR      SRC_COLOR                 Cf
   *                    ONE_MINUS_SRC_COLOR       1 - Cf
   *                    SRC_ALPHA                 Af
   *                    ONE_MINUS_SRC_ALPHA       1 - Af
   *
   * PREVIOUS           SRC_COLOR                 Cp
   *                    ONE_MINUS_SRC_COLOR       1 - Cp
   *                    SRC_ALPHA                 Ap
   *                    ONE_MINUS_SRC_ALPHA       1 - Ap
   * </pre>
   *
   * @param param additionally accept <code>TEXTURE</code><i>n</i>,
   * where <i>n</i> is a number between 0 and 31, inclusive.
   *
   * @see GL11#glTexEnvf(int target, int pname, float param)
   */
  void glTexEnvf(int target, int pname, float param);

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Floating-point array version of <code>glTexEnv</code>.
   *
   * @see #glTexEnvf(int target, int pname, float param)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glTexEnvfv(int target, int pname, float[] params, int offset);

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Floating-point <code>Buffer</code> version of
   * <code>glTexEnv</code>.
   *
   * @see #glTexEnvf(int target, int pname, float param)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glTexEnvfv(int target, int pname, FloatBuffer params);

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Integer version of <code>glTexEnv</code>.
   *
   * @see #glTexEnvf(int target, int pname, float param)
   */
  void glTexEnvx(int target, int pname, int param);

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Fixed-point array version of <code>glTexEnv</code>.
   *
   * @see #glTexEnvf(int target, int pname, float param)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glTexEnvxv(int target, int pname, int[] params, int offset);

  /**
   * (<code>OES_texture_env_crossbar</code> extension)
   * Fixed-point <code>Buffer</code> version of <code>glTexEnv</code>.
   *
   * @see #glTexEnvf(int target, int pname, float param)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glTexEnvxv(int target, int pname, IntBuffer params);    

//   /**
//    * Flag indicating the presence of the "texture mirrored repeat"
//    * extension.  <code>OES_texture_mirrored_repeat</code> is an optional
//    * profile extension in OpenGL ES 1.1, and is part of the OpenGL ES
//    * 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment.
//    */
//   int GL_OES_texture_mirrored_repeat                      = 1;

  /**
   * Constant for use with <code>glTexParameter</code> and
   * <code>glGetTexParameter</code>
   * (<code>OES_texture_mirrored_repeat</code> extension).
   */
  int GL_MIRRORED_REPEAT                                  = 0x8370;

  /**
   * (<code>OES_texture_mirrored_repeat</code> extension)
   * Set texture parameters.
   *
   * <p> An additional option is accepted for
   * <code>GL_TEXTURE_WRAP_S</code> and
   * <code>GL_TEXTURE_WRAP_T</code></li> parameters.
   * <code>GL_MIRRORED_REPEAT</code> effectively uses a texture map
   * twice as large as the original image im which the additional
   * half, for each coordinate, of the new image is a mirror image of
   * the original image.
   *
   * @see GL11#glTexParameterf(int target, int pname, float param)
   */
  void glTexParameterf(int target, int pname, float param);

//   /**
//    * Flag indicating the presence of the "texture cube map" extension.
//    * <code>OES_texture_cube_map</code> is an optional profile
//    * extension in OpenGL ES 1.1, and is part of the OpenGL ES 1.1
//    * Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment.
//    */
//   int GL_OES_texture_cube_map                             = 1;

  /**
   * Constant for use with <code>glTexGen</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_NORMAL_MAP                                       = 0x8511;

  /**
   * Constant for use with <code>glTexGen</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_REFLECTION_MAP                                   = 0x8512;

  /**
   * Constant for use with <code>glBindTexture</code>,
   * <code>glTexParameter</code>, <code>glEnable</code>,
   * <code>glDisable</code>, and <code>glIsEnabled</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP                                 = 0x8513;

  /**
   * Constant for use with <code>glGetInteger</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_BINDING_CUBE_MAP                         = 0x8514;

  // Need revisit - value
  /**
   * Constant for use with <code>glTexGen</code> for the
   * <code>OES_texture_cube_map</code> extension.
   */
  int GL_STR                                              = -1;

  /**
   * Constant for use with <code>glTexGen</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_GEN_MODE                                 = 0x2500;

  /**
   * Constant for use with <code>glEnable</code> and
   * <code>glDisable</code> (<code>OES_texture_cube_map</code>
   * extension).
   */
  int GL_TEXTURE_GEN_STR                                  = 0x8D60;
  
  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_POSITIVE_X                      = 0x207D;

  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_NEGATIVE_X                      = 0x207E;

  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_POSITIVE_Y                      = 0x207F;

  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                      = 0x2080;

  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_POSITIVE_Z                      = 0x2081;

  /**
   * Constant for use with <code>glTexImage2D</code> and
   * <code>glCompressedTexImage2D</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                      = 0x2082;

  /**
   * Constant for use with <code>glGetIntegerv</code>
   * (<code>OES_texture_cube_map</code> extension).
   */
  int GL_MAX_CUBE_MAP_TEXTURE_SIZE                        = 0x851C;

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Bind a named texture to a texturing target.
   *
   * <p> The <code>OES_texture_cube_map</code> extension allows the
   * value <code>GL_TEXTURE_CUBE_MAP</code> to be passed to the
   * <code>target</code> parameter.
   *
   * @param target additionally accepts
   * <code>GL_TEXTURE_CUBE_MAP</code>.
   *
   * @see GL11#glBindTexture(int target, int texture)
   */
  void glBindTexture(int target, int texture);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Specify a two-dimensional compressed texture image.
   *
   * <p> The <code>OES_texture_cube_map</code> extension allows the
   * values
   * <code>GL_TEXTURE_CUBE_MAP_{POSITIVE,NEGATIVE}_{X,Y,Z}</code> to
   * be passed to the <code>target</code> parameter.
   *
   * @param target additionally accepts the constants
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, and
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>.
   *
   * @see GL11#glCompressedTexImage2D
   *
   * @exception IllegalArgumentException if <code>data</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>data.remaining()</code> is less than
   * <code>imageSize</code>.
   */
  void glCompressedTexImage2D(int target, int level,
                              int internalformat,
                              int width, int height,
                              int border, int imageSize,
                              Buffer data);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Specify a two-dimensional texture image with pixels from the
   * color buffer.
   *
   * <p> The <code>OES_texture_cube_map</code> extension allows the
   * values
   * <code>GL_TEXTURE_CUBE_MAP_{POSITIVE,NEGATIVE}_{X,Y,Z}</code> to
   * be passed to the <code>target</code> parameter.
   *
   * @param target additionally accepts the constants
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, and
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>.
   *
   * @see GL11#glCompressedTexImage2D
   */
  void glCopyTexImage2D(int target, int level,
                        int internalformat,
                        int x, int y,
                        int width, int height,
                        int border);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Enable server-side GL capabilities.
   *
   * <p>Cube-map texturing is enabled if <code>cap</code> assumes the
   * value <code>GL_TEXTURE_CUBE_MAP</code>.
   *
   * <p>If enabled, cube-map texturing is performed for the active
   * texture unit. See <code>GL.glActiveTexture</code>,
   * <code>GL.glTexImage2D</code>, <code>glCompressedTexImage2D</code>,
   * and <code>glCopyTexImage2D</code>.
   *
   * <p>Texture coordinates with be generated if <code>cap</code> is
   * equal to <code>GL_TEXTURE_GEN_STR</code>.
   *
   * @see GL11#glEnable(int cap)
   */
  void glEnable(int cap);

  /**
   * (1.1 + <code>OES_texture_cube_map</code>,
   * <code>OES_blend_subtract</code>,
   * <code>OES_blend_func_separate</code>, and
   * <code>OES_blend_equation_separate</code> extensions) Return the
   * value or values of a selected parameter.
   *
   * <p> The extensions in the GL 1.1 Extension Pack add the following
   * constants as possible values for <code>pname</code>:
   *
   * <ul>
   *
   * <li><code>GL_BLEND_DST_ALPHA</code> (1.1 +
   * <code>OES_blend_func_separate</code> extension)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the destination blend function set by
   * <code>glBlendFunc</code>, or the destination alpha blend function
   * set by <code>glBlendFuncSeparate</code>. See
   * <code>glBlendFunc</code> and <code>glBlendFuncSeparate</code>.
   *
   * <li><code>GL_BLEND_DST_RGB</code> (1.1 +
   * <code>OES_blend_func_separate</code> extension)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the destination blend function set by
   * <code>glBlendFunc</code>, or the destination RGB blend function
   * set by <code>glBlendFuncSeparate</code>. See
   * <code>glBlendFunc</code> and <code>glBlendFuncSeparate</code>.
   *
   * <li><code>GL_BLEND_EQUATION</code> (1.1 +
   * <code>OES_blend_subtract</code> and
   * <code>OES_blend_equation_separate</code> extensions)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the blend equation set by
   * <code>glBlendEquation</code>, or the RGB blend equation set by
   * <code>glBlendEquationSeparate</code>. See
   * <code>glBlendEquation</code> and
   * <code>glBlendEquationSeparate</code>.
   *
   * <li><code>GL_BLEND_EQUATION_ALPHA</code> (1.1 +
   * <code>OES_blend_equation_separate</code> extension)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the blend equation set by
   * <code>glBlendEquation</code>, or the alpha blend equation set by
   * <code>glBlendEquationSeparate</code>. See
   * <code>glBlendEquation</code> and
   * <code>glBlendEquationSeparate</code>.
   *
   * <li><code>GL_BLEND_EQUATION_RGB</code> (1.1 +
   * <code>OES_blend_subtract</code> and
   * <code>OES_blend_equation_separate</code> extensions)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the blend equation set by
   * <code>glBlendEquation</code>, or the RGB blend equation set by
   * <code>glBlendEquationSeparate</code>. See
   * <code>glBlendEquation</code> and
   * <code>glBlendEquationSeparate</code>.
   *
   * <li><code>GL_BLEND_SRC</code> (1.1 only)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the source blend function set by <code>glBlendFunc</code>,
   * or the source RGB blend function set by
   * <code>glBlendFuncSeparate</code>. See <code>glBlendFunc</code> and
   * <code>glBlendFuncSeparate</code>.
   *
   * <li><code>GL_BLEND_SRC_ALPHA</code> (1.1 +
   * <code>OES_blend_func_separate</code> extension)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the source blend function set by <code>glBlendFunc</code>,
   * or the source alpha blend function set by
   * <code>glBlendFuncSeparate</code>. See <code>glBlendFunc</code> and
   * <code>glBlendFuncSeparate</code>.
   *
   * <li><code>GL_BLEND_SRC_RGB</code> (1.1 +
   * <code>OES_blend_func_separate</code> extension)</li>
   *
   * <p><code>params</code> returns one value, the symbolic constant
   * identifying the source blend function set by <code>glBlendFunc</code>,
   * or the source RGB blend function set by
   * <code>glBlendFuncSeparate</code>. See <code>glBlendFunc</code> and
   * <code>glBlendFuncSeparate</code>.
   *
   * <li><code>GL_MAX_CUBE_MAP_TEXTURE_SIZE</code> (1.1 +
   * <code>OES_texture_cube_map</code> extension)</li>
   * 
   * <p><code>params</code> returns one value, the maximum dimension
   * of any face in a cube map texture.  The value must be at least
   * 64. See <code>glTexImage2D</code>,
   * <code>glCompressedTexImage2D</code>, and
   * <code>glCopyTexImage2D</code>.
   *
   * <li><code>GL_MAX_PALETTE_MATRICES_OES</code>
   * (<code>OES_matrix_palette</code> extension)</li>
   *
   * <p><code>params</code> returns the size of the matrix
   * palette. The initial value is 32 if the
   * <code>OES_extended_matrix_palette</code> extension is present.
   *
   * <li><code>GL_MAX_VERTEX_UNITS_OES</code>
   * (<code>OES_matrix_palette</code> extension)</li>
   *
   * <p><code>params</code> returns the number of matrices per
   * vertex. The initial value is 4 if the
   * <code>OES_extended_matrix_palette</code> extension is present.
   *
   * </ul>
   *
   * @see GL11#glGetIntegerv(int pname, int[] params, int offset)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetIntegerv(int pname, int[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code>,
   * <code>OES_blend_subtract</code>,
   * <code>OES_blend_func_separate</code>, and
   * <code>OES_blend_equation_separate</code> extensions)
   * Integer <code>Buffer</code> version of
   * <code>getGetIntegerv</code>.
   *
   * @see #glGetIntegerv(int pname, int[] params, int offset)
   *
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetIntegerv(int pname, IntBuffer params);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Specify texture coordinate generation function.
   *
   * <p>The <code>OES_texture_cube_map</code> extension provides a new
   * texture generation scheme for cube map textures. Instead of the
   * current texture providing a 2D lookup into a 2D texture image,
   * the texture is a set of six 2D images representing the faces of a
   * cube. The <code>(s,t,r)</code> texture coordinates are treated as
   * a direction vector emanating from the center of a cube. At
   * texture generation time, the interpolated per-fragment
   * <code>(s,t,r)</code> selects one cube face 2D image based on the
   * largest magnitude coordinate (the major axis). A new 2D
   * <code>(s,t)</code> is calculated by dividing the two other
   * coordinates (the minor axes values) by the major axis value. Then
   * the new <code>(s,t)</code> is used to lookup into the selected 2D
   * texture image face of the cube map.
   *
   * <p>Unlike a standard 2D texture that have just one target, a cube
   * map texture has six targets, one for each of its six 2D texture
   * image cube faces. All these targets must be consistent, complete,
   * and have equal width and height.
   *
   * <p>This extension also provides two new texture coordinate
   * generation modes for use in conjunction with cube map
   * texturing. The reflection map mode generates texture coordinates
   * <code>(s,t,r)</code> matching the vertex?s eyespace reflection
   * vector. The reflection map mode is useful for environment mapping
   * without the singularity inherent in sphere mapping. The normal
   * map mode generates texture coordinates <code>(s,t,r)</code>
   * matching the vertex?s transformed eyespace normal. The normal map
   * mode is useful for sophisticated cube map texturing-based diffuse
   * lighting models.
   *
   * <p>The intent of the new texgen functionality is that an
   * application using cube map texturing can use the new texgen modes
   * to automatically generate the reflection or normal vectors used
   * to look up into the cube map texture.
   *
   * <p>The following texgen modes are supported: <code>GL_REFLECTION
   * MAP</code> and <code>GL_NORMAL MAP</code>. The
   * <code>GL_SPHERE_MAP</code>, <code>GL_OBJECT LINEAR</code>, and
   * <code>GL_EYE LINEAR</code> texgen modes are not supported. Texgen
   * supports a new coord value <code>GL_STR</code>.  This allows the
   * application to specify the texgen mode for the appropriate
   * coordinates in a single call. Texgen with coord values of
   * <code>GL_S</code>, <code>GL_T</code>, <code>GL_R</code> and
   * <code>GL_Q</code> are not supported.
   *
   * <h4>Errors</h4>
   *
   * <p><code>GL_INVALID_ENUM</code> is generated if
   * <code>param</code> or <code>pname</code> is not an accepted
   * value, or if <code>pname</code> is
   * <code>GL_TEXTURE_GEN_MODE</code> and <code>params</code> is not
   * <code>GL_REFLECTION_MAP</code> or <code>GL_NORMAL_MAP</code>.
   *
   * <h4>Associated Gets</h4>
   *
   * <p><code>glGetTexGen</code>, <code>glIsEnabled</code> with
   * argument <code>GL_TEXTURE_GEN_STR</code>.
   *
   * @param coord Specifies the texture coordinate or coordinates for
   * which a generation function is being specified. At present, only
   * <code>GL_STR</code> is accepted.
   * @param pname Specifies a single-valued integer texture coordinate
   * generation parameter. At present, only
   * <code>GL_TEXTURE_GEN_MODE</code> is accepted.
   * @param param Specifies the value that <code>pname</code> will be
   * set to.  If <code>pname</code> is <code>GL_TEXTURE_GEN_MODE</code>, then
   * <code>GL_REFLECTION_MAP</code> and <code>GL_NORMAL_MAP</code> are
   * accepted.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   */
  void glTexGeni(int coord, int pname, int param);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Floating-point version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   */
  void glTexGenf(int coord, int pname, float param);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Fixed-point version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   */
  void glTexGenx(int coord, int pname, int param);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Floating-point array version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glTexGenfv(int coord, int pname, float[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Floating-point <code>Buffer</code> version of
   * <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glTexGenfv(int coord, int pname, FloatBuffer params);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Integer array version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glTexGeniv(int coord, int pname, int[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Integer <code>Buffer</code> version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glTexGeniv(int coord, int pname, IntBuffer params);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Fixed-point array version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glTexGenxv(int coord, int pname, int[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Fixed-point <code>Buffer</code> version of <code>glTexGen</code>.
   *
   * @see #glTexGeni(int coord, int pname, int param)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glTexGenxv(int coord, int pname, IntBuffer params);

  // GetTexGen

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Get texture coordinate generation parameters.
   *
   * This method queries texture coordinate generation parameters set
   * using <code>glTexGen</code>.
   *
   * <h4>Errors</h4>
   *
   * <p><code>GL_INVALID_ENUM</code> is generated if
   * <code>param</code> or <code>pname</code> is not an accepted
   * value, or if <code>pname</code> is
   * <code>GL_TEXTURE_GEN_MODE</code> and <code>params</code> is not
   * <code>GL_REFLECTION_MAP</code> or <code>GL_NORMAL_MAP</code>.
   *
   * @param coord Specifies the texture coordinate or coordinates for
   * which a generation parameter is being requested. At present, only
   * <code>GL_STR</code> is accepted.
   * @param pname Specifies a single-valued integer texture coordinate
   * generation parameter. At present, only
   * <code>GL_TEXTURE_GEN_MODE</code> is accepted.
   * @param params Returns the value or values of the specified
   * parameter.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetTexGeniv(int coord, int pname, int[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Integer <code>Buffer</code> version of <code>glGetTexGen</code>.
   *
   * @see #glGetTexGeniv(int coord, int pname, int[] params, int offset)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetTexGeniv(int coord, int pname, IntBuffer params);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Floating-point array version of <code>glGetTexGen</code>.
   *
   * @see #glGetTexGeniv(int coord, int pname, int[] params, int offset)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetTexGenfv(int coord, int pname, float[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Fixed-point array version of <code>glGetTexGen</code>.
   *
   * @see #glGetTexGeniv(int coord, int pname, int[] params, int offset)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetTexGenxv(int coord, int pname, int[] params, int offset);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Fixed-point <code>Buffer</code> version of <code>glGetTexGen</code>.
   *
   * @see #glGetTexGeniv(int coord, int pname, int[] params, int offset)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetTexGenxv(int coord, int pname, IntBuffer params);

  /**
   * (1.1 + <code>OES_texture_cube_map</code> extension)
   * Floating-point <code>Buffer</code> version of <code>glGetTexGen</code>.
   *
   * @see #glGetTexGeniv(int coord, int pname, int[] params, int offset)
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_texture_cube_map</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetTexGenfv(int coord, int pname, FloatBuffer params);

//   /**
//    * Flag indicating the presence of the "blend subtract" extension.
//    * <code>OES_blend_subtract</code> is an optional profile extension
//    * in OpenGL ES 1.1, and is part of the OpenGL ES 1.1 Extension
//    * Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment.
//    */
//   int GL_OES_blend_subtract                               = 1;

  /**
   * Constant for use with <code>glBlendEquation</code>
   * (<code>OES_blend_subtract</code> extension).
   */
  int GL_FUNC_ADD                                         = 0x8006;

  /**
   * Constant for use with <code>glBlendEquation</code>
   * (<code>OES_blend_subtract</code> extension).
   */
  int GL_FUNC_SUBTRACT                                    = 0x800A;

  /**
   * Constant for use with <code>glBlendEquation</code>
   * (<code>OES_blend_subtract</code> extension).
   */
  int GL_FUNC_REVERSE_SUBTRACT                            = 0x800B;

  
  
  /**
   * (1.1 + <code>OES_blend_subtract</code> extension) Specify the
   * blending equation.
   *
   * <p>Blending is controlled by <code>glBlendEquation</code>.
   *
   * <p><code>glBlendEquation</code> <code>mode</code>
   * <code>GL_FUNC_ADD</code> defines the blend equation as
   *
   * <pre>C = Cs * S + Cd * D,</pre>
   *
   * where <code>Cs</code> and <code>Cd</code> are the source and
   * destination colors, <code>S</code> and <code>D</code> are the
   * quadruplets of weighting factors determined by the blend
   * functions <code>glBlendFunc</code> and
   * <code>glBlendFuncSeparate</code>, and C is the new color
   * resulting from blending.
   *
   * <p>If <code>mode</code> is <code>GL_FUNC_SUBTRACT</code>, the
   * blending equation is defined as
   *
   * <pre>C = Cs * S - Cd * D.</pre>
   *
   * <p>If <code>mode</code> is <code>GL_FUNC_REVERSE_SUBTRACT</code>,
   * the blend equation is defined as
   *
   * <pre>C = Cd * D - Cs * S.</pre>
   *
   * <h4>Errors</h4>
   *
   * <p><code>GL_INVALID_ENUM</code> is generated if <code>mode</code>
   * is not an accepted value.
   *
   * <h4>Associated Gets</h4>
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_EQUATION</code> returns the blend equation.
   *
   * @param mode Specifies the blend
   * equation. <code>GL_FUNC_ADD</code>,
   * <code>GL_FUNC_SUBTRACT</code>, and
   * <code>GL_FUNC_REVERSE_SUBTRACT</code> are accepted.
   *
   * @see GL11#glBlendFunc
   * @see #glBlendFuncSeparate
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_blend_subtract</code> extension.
   */
  void glBlendEquation(int mode);

//   /**
//    * Flag indicating the presence of the "blend func separate"
//    * extension.  <code>OES_blend_func_separate</code> is an optional
//    * profile extension in OpenGL ES 1.1, and is part of the OpenGL ES
//    * 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence
//    * of the extension in the runtime enviroment.
//    */
//   int GL_OES_blend_func_separate                          = 1;

  /**
   * Constant for use with <code>glBlendFuncSeparate</code> 
   * (<code>OES_blend_func_separate</code> extension).
   */
  int GL_BLEND_DST_RGB                                    = 0x80C8;

  /**
   * Constant for use with <code>glBlendFuncSeparate</code> 
   * (<code>OES_blend_func_separate</code> extension).
   */
  int GL_BLEND_SRC_RGB                                    = 0x80C9;

  /**
   * Constant for use with <code>glBlendFuncSeparate</code> 
   * (<code>OES_blend_func_separate</code> extension).
   */
  int GL_BLEND_DST_ALPHA                                  = 0x80CA;

  /**
   * Constant for use with <code>glBlendFuncSeparate</code> 
   * (<code>OES_blend_func_separate</code> extension).
   */
  int GL_BLEND_SRC_ALPHA                                  = 0x80CB;

  /**
   * (1.1 + <code>GL_OES_blend_func_separate</code> extension)
   * Apply different blend factors to RGB and alpha.
   *
   * <p><code>glBlendFuncSeparate</code> allows different blend factors to be
   * applied to RGB and alpha. The blend factors are those defined for
   * <code>glBlendFunc</code>.
   *
   * <h4>Errors</h4>
   *
   * <p><code>GL_INVALID_ENUM</code> is generated if
   * <code>srcRGB</code>, <code>dstRGB</code>, <code>srcAlpha</code>,
   * or <code>dstAlpha</code> is not an accepted value.
   *
   * <h4>Associated Gets</h4>
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_SRC_RGB</code> or <code>GL_BLEND_SRC</code>
   * returns the source RGB blend function.
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_DST_RGB</code> or <code>GL_BLEND_DST</code>
   * returns the destination RGB blend function.
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_SRC_ALPHA</code> returns the source alpha blend
   * function.
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_DST_ALPHA</code> returns the destination alpha
   * blend function.
   *
   * @param srcRGB Source RGB blend function. Must be one of the blend
   * functions accepted by <code>glBlendFunc</code>.
   * @param dstRGB Destination RGB blend function. Must be one of the blend
   * functions accepted by <code>glBlendFunc</code>.
   * @param srcAlpha Source alpha blend function. Must be one of the
   * blend functions accepted by <code>glBlendFunc</code>.
   * @param dstAlpha Destination alpha blend function. Must be one of
   * the blend functions accepted by <code>glBlendFunc</code>.
   *
   * @see GL11#glBlendFunc
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_blend_func_separate</code> extension.
   */
  void glBlendFuncSeparate(int srcRGB, int dstRGB,
			   int srcAlpha, int dstAlpha);

//   /**
//    * Flag indicating the presence of the "blend equation separate"
//    * extension.  <code>OES_blend_equation_separate</code> is an
//    * optional profile extension in OpenGL ES 1.1, and is part of the
//    * OpenGL ES 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence
//    * of the extension in the runtime enviroment.
//    */
//   int GL_OES_blend_equation_separate                      = 1;

  /**
   * Constant for use with <code>glBlendEquationSeparate</code> and
   * <code>glGetInteger</code>
   * (<code>OES_blend_equation_separate</code> extension).
   */
  int GL_BLEND_EQUATION                                   = 0x8009;

  /**
   * Constant for use with <code>glBlendEquationSeparate</code> and
   * <code>glGetInteger</code>
   * (<code>OES_blend_equation_separate</code> extension).  Synonym
   * for <code>GL_BLEND_EQUATION</code>.
   */
  int GL_BLEND_EQUATION_RGB                               = 0x8009;

  /**
   * Constant for use with <code>glBlendEquationSeparate</code> and
   * <code>glGetInteger</code>
   * (<code>OES_blend_equation_separate</code> extension).
   */
  int GL_BLEND_EQUATION_ALPHA                             = 0x883D;

  /**
   * (1.1 + <code>OES_blend_equation_separate</code> extension)
   * Provide different blend equations for RGB and alpha.
   *
   * <p><code>glBlendEquationSeparate</code> allows different blend
   * equations to be provideded for RGB and alpha. The blend equations
   * are those defined for <code>glBlendEquation</code>.
   *
   * <h4>Errors</h4>
   *
   * <p><code>GL_INVALID_ENUM</code> is generated if
   * <code>modeRGB</code>, or <code>modeAlpha</code> is not an
   * accepted value.
   *
   * <h4>Associated Gets</h4>
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_EQUATION_RGB</code> or
   * <code>GL_BLEND_EQUATION</code> returns the RGB blend equation.
   *
   * <p><code>glGetIntegerv</code> with argument
   * <code>GL_BLEND_EQUATION_ALPHA</code> returns the alpha blend
   * equation.
   *
   * @param modeRGB RGB blend equation. Must be one of the blend
   * equations accepted by <code>glBlendEquation</code>.
   * @param modeAlpha Alpha blend equation. Must be one of the blend
   * equations accepted by <code>glBlendEquation</code>.
   *
   * @see #glBlendEquation
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_blend_equation_separate</code> extension.
   */
  void glBlendEquationSeparate(int modeRGB, int modeAlpha);

//   /**
//    * Flag indicating the presence of the "stencil wrap" extension.
//    * <code>OES_stencil_wrap</code> is an optional profile extension in
//    * OpenGL ES 1.1, and is part of the OpenGL ES 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment. 
//   */
//   int GL_OES_stencil_wrap                                 = 1;

  /**
   * Constant for use with <code>glStencilOp</code>
   * (<code>OES_stencil_wrap</code> extension).
   */
  int GL_INCR_WRAP                                        = 0x8507;

  /**
   * Constant for use with <code>glStencilOp</code>
   * (<code>OES_stencil_wrap</code> extension).
   */
  int GL_DECR_WRAP                                        = 0x8508;

  /**
   * (<code>OES_stencil_wrap</code> extension)
   * Set stencil test actions.
   *
   * <p> Two additional actions are defined by the
   * <code>OES_stencil_wrap</code> extension:
   *
   * <ul>
   * 
   * <li>(<code>OES_stencil_wrap</code> extension)
   * <code>GL_DECR_WRAP</code></li>
   *
   * <p>Decrements the current stencil buffer value, wrapping around
   * to the maximum representable unsigned value if less than 0.
   *
   * <li>(<code>OES_stencil_wrap</code> extension)
   * <code>GL_INCR</code></li>
   *
   * <p>Increments the current stencil buffer value, wrapping around
   * to 0 if greater than the maximum representable unsigned value.
   *
   * </ul>
   *
   * @see GL11#glStencilOp(int fail, int zfail, int zpass)
   */
  void glStencilOp(int fail, int zfail, int zpass);


//   /**
//    * Flag indicating the presence of the "extended matrix palette"
//    * extension. <code>OES_extended_matrix_palette</code> is an
//    * optional profile extension in OpenGL ES 1.1, and is part of the
//    * OpenGL ES 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment. 
//    */
//   int GL_OES_extended_matrix_palette                      = 1;

//   /**
//    * Flag indicating the presence of the "framebuffer object"
//    * extension.  <code>OES_framebuffer_object</code> is an optional
//    * profile extension in OpenGL ES 1.1, and is part of the OpenGL ES
//    * 1.1 Extension Pack.
//    *
//    * <p> The value of this flag does not imply the presence of the
//    * extension in the runtime enviroment.
//    */
//   int GL_OES_framebuffer_object                           = 1;

  /**
   * Constant accepted by the <code>target</code> parameter of
   * <code>glBindFramebufferOES</code>,
   * <code>glCheckFramebufferStatusOES</code>,
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_OES                                  = 0x8D40;

  /**
   * Constant accepted by the <code>target</code> parameter of
   * <code>glBindRenderbufferOES</code>,
   * <code>glRenderbufferStorageOES</code>, and
   * <code>glGetRenderbufferParameterivOES</code>, and returned by
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_OES                                 = 0x8D41;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_WIDTH_OES                           = 0x8D42;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_HEIGHT_OES                          = 0x8D43;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_INTERNAL_FORMAT_OES                 = 0x8D44;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_RED_SIZE_OES                        = 0x8D50;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_GREEN_SIZE_OES                      = 0x8D51;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_BLUE_SIZE_OES                       = 0x8D52;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_ALPHA_SIZE_OES                      = 0x8D53;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_DEPTH_SIZE_OES                      = 0x8D54;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetRenderbufferParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_STENCIL_SIZE_OES                    = 0x8D55;
  
  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES           = 0x8CD0;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES           = 0x8CD1;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES         = 0x8CD2;

  /**
   * Constant accepted by the <code>pname</code> parameter of
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 0x8CD3;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT0_OES                            = 0x8CE0;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT1_OES                            = 0x8CE1;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT2_OES                            = 0x8CE2;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT3_OES                            = 0x8CE3;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT4_OES                            = 0x8CE4;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT5_OES                            = 0x8CE5;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT6_OES                            = 0x8CE6;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT7_OES                            = 0x8CE7;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT8_OES                            = 0x8CE8;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT9_OES                            = 0x8CE9;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT10_OES                           = 0x8CEA;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT11_OES                           = 0x8CEB;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT12_OES                           = 0x8CEC;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT13_OES                           = 0x8CED;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT14_OES                           = 0x8CEE;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_COLOR_ATTACHMENT15_OES                           = 0x8CEF;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_DEPTH_ATTACHMENT_OES                             = 0x8D00;

  /**
   * Constant accepted by the <code>attachment</code> parameter of
   * <code>glFramebufferTexture2DOES</code>,
   * <code>glFramebufferRenderbufferOES</code>, and
   * <code>glGetFramebufferAttachmentParameterivOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_STENCIL_ATTACHMENT_OES                           = 0x8D20;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_COMPLETE_OES                         = 0x8CD5;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES            = 0x8CD6;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES    = 0x8CD7;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES            = 0x8CD9;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES               = 0x8CDA;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES           = 0x8CDB;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES           = 0x8CDC;

  /**
   * Constant returned by <code>glCheckFramebufferStatusOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_UNSUPPORTED_OES                      = 0x8CDD;

  /**
   * Constant accepted by <code>glGetIntegerv</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_FRAMEBUFFER_BINDING_OES                          = 0x8CA6;

  /**
   * Constant accepted by <code>glGetIntegerv</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RENDERBUFFER_BINDING_OES                         = 0x8CA7;

  /**
   * Constant accepted by <code>glGetIntegerv</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_MAX_COLOR_ATTACHMENTS_OES                        = 0x8CDF;

  /**
   * Constant accepted by <code>glGetIntegerv</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_MAX_RENDERBUFFER_SIZE_OES                        = 0x84E8;

  /**
   * Constant returned by <code>glGetError</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_INVALID_FRAMEBUFFER_OPERATION_OES                = 0x0506;

  /**
   * Constant accepted by the <code>internalformat</code> parameter of
   * <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RGB565_OES                                       = 0x8D62;

  /**
   * Constant accepted by the <code>internalformat</code> parameter of
   * <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RGBA4                                            = 0x8056;

  /**
   * Constant accepted by the <code>internalformat</code> parameter of
   * <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RGB5_A1                                          = 0x8057;

  /**
   * Constant accepted by the <code>internalformat</code> parameter of
   * <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_DEPTH_COMPONENT16                                = 0x81A5;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RGBA8                                            = 0x8058;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_RGB8                                             = 0x8051;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_DEPTH_COMPONENT24                                = 0x81A6;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */
  int GL_DEPTH_COMPONENT32                                = 0x81A7;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */    
  int GL_STENCIL_INDEX1_OES                               = 0x8D46;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */    
  int GL_STENCIL_INDEX4_OES                               = 0x8D47;

  /**
   * Constant optionally accepted by the <code>internalformat</code>
   * parameter of <code>glRenderbufferStorageOES</code>
   * (<code>OES_framebuffer_object</code> extension).
   */    
  int GL_STENCIL_INDEX8_OES                               = 0x8D48;

/*
  int GL_STENCIL_INDEX16_OES                              = 0x8D49;
*/

  /**
   * Constant (<code>OES_framebuffer_object</code> extension).
   */    
  int GL_STENCIL_INDEX                                    = 0x1901;

  /**
   * Constant (<code>OES_framebuffer_object</code> extension).
   */    
  int GL_DEPTH_COMPONENT                                  = 0x1902;

  /**
   * (<code>OES_framebuffer_object</code> extension) Determine whether a
   * token represents a renderbuffer.
   *
   * <p> Returns <code>true</code> if <code>renderbuffer</code> is the
   * name of a renderbuffer object.  If <code>renderbuffer</code> is
   * zero, or if <code>renderbuffer</code> is a non-zero value that is
   * not the name of a renderbuffer object,
   * <code>glIsRenderbufferOES</code> returns <code>false</code>.
   *
   * @param renderbuffer an integer.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  boolean glIsRenderbufferOES(int renderbuffer);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Bind a renderbuffer.
   *

   * <p> A renderbuffer is a data storage object containing a single
   * image of a renderable internal format.  GL provides the methods
   * described below to allocate and delete a renderbuffer's image,
   * and to attach a renderbuffer's image to a framebuffer object.
   *
   * <p> The name space for renderbuffer objects is the unsigned
   * integers, with zero reserved for the GL.  A renderbuffer object
   * is created by binding an unused name to
   * <code>GL_RENDERBUFFER_OES</code>.  The binding is effected by
   * setting <code>target</code> to <code>GL_RENDERBUFFER_OES</code>
   * and <code>renderbuffer</code> set to the unused name.  If
   * <code>renderbuffer</code> is not zero, then the resulting
   * renderbuffer object is a new state vector, initialized with a
   * zero-sized memory buffer, and comprising the state values listed
   * in Table 8.nnn of the <code>EXT_framebuffer_object</code>
   * specification.  Any previous binding to <code>target</code> is
   * broken.
   *
   * <p> <code>glBindRenderbufferOES</code> may also be used to bind an
   * existing renderbuffer object.  If the bind is successful, no
   * change is made to the state of the newly bound renderbuffer
   * object, and any previous binding to <code>target</code> is
   * broken.
   *
   * <p> While a renderbuffer object is bound, GL operations on the target
   * to which it is bound affect the bound renderbuffer object, and
   * queries of the target to which a renderbuffer object is bound
   * return state from the bound object.
   *
   * <p> The name zero is reserved.  A renderbuffer object cannot be
   * created with the name zero.  If <code>renderbuffer</code> is
   * zero, then any previous binding to <code>target</code> is broken
   * and the <code>target</code> binding is restored to the initial
   * state.
   *
   * <p> In the initial state, the reserved name zero is bound to
   * <code>GL_RENDERBUFFER_OES</code>.  There is no renderbuffer
   * object corresponding to the name zero, so client attempts to
   * modify or query renderbuffer state for the target
   * <code>GL_RENDERBUFFER_OES</code> while zero is bound will
   * generate GL errors.
   *
   * <p> Using <code>glGetIntegerv</code>, the current
   * <code>GL_RENDERBUFFER_OES</code> binding can be queried as
   * <code>GL_RENDERBUFFER_BINDING_OES</code>.
   *
   * @param target the value <code>GL_RENDERBUFFER_OES</code>.
   * @param renderbuffer Specifies the name of a renderbuffer.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glBindRenderbufferOES(int target, int renderbuffer);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Delete a renderbuffer.
   *
   * <p> Renderbuffer objects are deleted by calling
   * glDeleteRenderbuffersOES where <code>renderbuffers</code>
   * contains <code>n</code> names of renderbuffer objects to be
   * deleted.  After a renderbuffer object is deleted, it has no
   * contents, and its name is again unused.  If a renderbuffer that
   * is currently bound to <code>GL_RENDERBUFFER_OES</code> is
   * deleted, it is as though <code>glBindRenderbufferOES</code> had
   * been executed with the <code>target</code>
   * <code>GL_RENDERBUFFER_OES</code> and <code>name</code> of zero.
   * Additionally, special care must be taken when deleting a
   * renderbuffer if the image of the renderbuffer is attached to a
   * framebuffer object.  Unused names in
   * <code>renderbuffers</code> are silently ignored, as is the value
   * zero.
   *
   * @param n the number of renderbuffers to be deleted.
   * @param renderbuffers an array of <code>n</code> renderbuffer names.
   * @param offset the starting offset within the
   * <code>renderbuffers</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>renderbuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>renderbuffers.length
   * - offset</code> is less than <code>n</code>.
   */
  void glDeleteRenderbuffersOES(int n, int[] renderbuffers, int offset);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glDeleteRenderbuffersOES</code>.
   *
   * @see #glDeleteRenderbuffersOES(int n, int[] renderbuffers, int offset)
   *
   * @param n the number of renderbuffers to be deleted.
   * @param renderbuffers an <code>IntBuffer</code> containing
   * renderbuffer names.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>renderbuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>renderbuffers.limit() - renderbuffers.position()</code> is
   * less than <code>n</code>.
   */
  void glDeleteRenderbuffersOES(int n, IntBuffer renderbuffers);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Generate renderbuffer names.
   *
   * <p> The command <code>glGenRenderbuffersOES</code> returns
   * <code>n</code> previously unused renderbuffer object names in
   * <code>renderbuffers</code>.  These names are marked as used, for
   * the purposes of <code>glGenRenderbuffersOES</code> only, but they
   * acquire renderbuffer state only when they are first bound, just
   * as if they were unused.
   *
   * @param n the number of renderbuffer names to be generated.
   * @param renderbuffers an array to be filled in with <code>n</code>
   * renderbuffer names.
   * @param offset the starting offset within the
   * <code>renderbuffers</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>renderbuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>renderbuffers.length
   * - offset</code> is less than <code>n</code>.
   */
  void glGenRenderbuffersOES(int n, int[] renderbuffers, int offset);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glGenRenderbuffersOES</code>.
   *
   * @see #glGenRenderbuffersOES(int n, int[] renderbuffers, int offset)
   *
   * @param n the number of renderbuffer names to be generated.
   * @param renderbuffers an <code>IntBuffer</code> to be filled in
   * with <code>n</code> renderbuffer names.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>renderbuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>renderbuffers.limit() - renderbuffers.position()</code> is
   * less than <code>n</code>.
   */
  void glGenRenderbuffersOES(int n, IntBuffer renderbuffers);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Establish the layout of a renderbuffer object's image.
   *
   * <p> The command <code>glRenderbufferStorageOES</code> establishes
   * the data storage, format, and dimensions of a renderbuffer
   * object's image.  <code>target</code> must be
   * <code>GL_RENDERBUFFER_OES</code>.  <code>internalformat</code>
   * must be one of the sized internal formats from the following
   * tables which has a base internal format of <code>GL_RGB</code>,
   * <code>GL_RGBA</code>, <code>GL_DEPTH_COMPONENT</code>, or
   * <code>GL_STENCIL_INDEX</code>.
   *
   * <p> The following formats are required:
   *
   * <pre>
   * Sized                 Base               Size in
   * Internal Format       Internal format    Bits
   * ---------------       ---------------    ----
   * RGB565_OES            RGB                16
   * RGBA4                 RGBA               16
   * RGB5_A1               RGBA               16
   * DEPTH_COMPONENT_16    DEPTH_COMPONENT    16
   * </pre>
   *
   * <p> The following formats are optional:
   *
   * <pre>
   * Sized                 Base               Size in
   * Internal Format       Internal format    Bits
   * ---------------       ---------------    ----
   * RGBA8                 RGBA               32
   * RGB8                  RGB                24
   * DEPTH_COMPONENT_24    DEPTH_COMPONENT    24
   * DEPTH_COMPONENT_32    DEPTH_COMPONENT    32
   * STENCIL_INDEX1_OES    STENCIL_INDEX      1
   * STENCIL_INDEX4_OES    STENCIL_INDEX      4
   * STENCIL_INDEX8_OES    STENCIL_INDEX      8
   * </pre>
   *
   * <p> The optional formats are described by the
   * <code>OES_rgb8_rgba8</code>, <code>OES_depth24</code>,
   * <code>OES_depth32</code>, <code>OES_stencil1</code>,
   * <code>OES_stencil4</code>, and <code>OES_stencil8</code>
   * extensions.
   *
   * <p> If <code>glRenderbufferStorageOES</code> is called with an
   * <code>internalformat</code> value that is not supported by the
   * OpenGL ES implementation, a <code>GL_INVALID_ENUM</code> error
   * will be generated.
   *
   * <p> <code>width</code> and
   * <code>height</code> are the dimensions in pixels of the
   * renderbuffer.  If either <code>width</code> or
   * <code>height</code> is greater than
   * <code>GL_MAX_RENDERBUFFER_SIZE_OES</code>, then the error
   * <code>GL_INVALID_VALUE</code> is generated.  If the GL is unable
   * to create a data store of the requested size, the error
   * <code>GL_OUT_OF_MEMORY</code> is
   * generated. <code>glRenderbufferStorageOES</code> deletes any
   * existing data store for the renderbuffer and the contents of the
   * data store after calling <code>glRenderbufferStorageOES</code>
   * are undefined.
   *
   * @param target the value <code>GL_RENDERBUFFER_OES</code>.
   * @param internalformat one of <code>GL_RGB</code>,
   * <code>GL_RGBA</code>, <code>GL_DEPTH_COMPONENT</code>,
   * <code>GL_STENCIL_INDEX</code>, or an internal format that has one
   * of those as a base format.
   * @param width the width of the image.
   * @param height the height of the image.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glRenderbufferStorageOES(int target, int internalformat,
				int width, int height);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Query a renderbuffer parameter.
   *
   * <p> <code>target</code> must be <code>GL_RENDERBUFFER_OES</code>.
   * <code>pname</code> must be one of the symbolic values in the
   * table below.
   *
   * <p> If the renderbuffer currently bound to <code>target</code> is
   * zero, then <code>GL_INVALID_OPERATION</code> is generated.
   *
   * <p> Upon successful return from
   * <code>glGetRenderbufferParameterivOES</code>, if
   * <code>pname</code> is <code>GL_RENDERBUFFER_WIDTH_OES</code>,
   * <code>GL_RENDERBUFFER_HEIGHT_OES</code>, or
   * <code>GL_RENDERBUFFER_INTERNAL_FORMAT_OES</code>, then
   * <code>params</code> will contain the width in pixels, height in
   * pixels, or internal format, respectively, of the image of the
   * renderbuffer currently bound to <code>target</code>.
   *
   * <p> Upon successful return from
   * <code>glGetRenderbufferParameterivOES</code>, if
   * <code>pname</code> is <code>GL_RENDERBUFFER_RED_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_GREEN_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_BLUE_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_ALPHA_SIZE_OES</code>,
   * <code>GK_RENDERBUFFER_DEPTH_SIZE_OES</code>, or
   * <code>GL_RENDERBUFFER_STENCIL_SIZE_OES</code>, then
   * <code>params</code> will contain the actual resolutions, (not the
   * resolutions specified when the image array was defined), for the
   * red, green, blue, alpha depth, or stencil components,
   * respectively, of the image of the renderbuffer currently bound to
   * <code>target</code>.
   *
   * <p> Otherwise, <code>GL_INVALID_ENUM</code> is generated.
   *
   * <p> The values in the first column of the table below should be
   * prefixed with <code>GL_RENDERBUFFER_</code> and suffixed with
   * <code>OES</code>.  The get command for all values is
   * <code>glGetRenderbufferParameterivOES</code>.  All take on
   * positive integral values.
   *
   * <pre>
   * Get               Initial
   * Value             Value    Description
   * ---------------   -------  ----------------------
   * WIDTH             0        width of renderbuffer
   * 
   * HEIGHT            0        height of renderbuffer
   *
   * INTERNAL_FORMAT   GL_RGBA  internal format
   *                            of renderbuffer
   *
   * RED_SIZE          0        size in bits of
   *                            renderbuffer image's
   *                            red component
   *
   * GREEN_SIZE        0        size in bits of
   *                            renderbuffer image's
   *                            green component
   *
   * BLUE_SIZE         0        size in bits of
   *                            renderbuffer image's
   *                            blue component
   *
   * ALPHA_SIZE        0        size in bits of
   *                            renderbuffer image's
   *                            alpha component
   *
   * DEPTH_SIZE        0        size in bits of
   *                            renderbuffer image's
   *                            depth component
   *
   * STENCIL_SIZE      0        size in bits of
   *                            renderbuffer image's
   *                            stencil component
   * </pre>
   *
   * @param target the value <code>GL_RENDERBUFFER_OES</code>.
   * @param pname one of <code>GL_RENDERBUFFER_WIDTH_OES</code>,
   * <code>GL_RENDERBUFFER_HEIGHT_OES</code>,
   * <code>GL_RENDERBUFFER_INTERNAL_FORMAT_OES</code>,
   * <code>GL_RENDERBUFFER_RED_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_GREEN_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_BLUE_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_ALPHA_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_DEPTH_SIZE_OES</code>, or
   * <code>GL_RENDERBUFFER_STENCIL_SIZE_OES</code>.
   * @param params an array into which renderbuffer parameters will be
   * written.
   * @param offset the starting offset within the
   * <code>params</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetRenderbufferParameterivOES(int target, int pname,
				       int[] params, int offset);
  
  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glGetRenderbufferParameterivOES</code>.
   *
   * @see #glGetRenderbufferParameterivOES(int target, int pname,
   * int[] params, int offset)
   *
   * @param target the value <code>GL_RENDERBUFFER_OES</code>.
   * @param pname one of <code>GL_RENDERBUFFER_WIDTH_OES</code>,
   * <code>GL_RENDERBUFFER_HEIGHT_OES</code>,
   * <code>GL_RENDERBUFFER_INTERNAL_FORMAT_OES</code>,
   * <code>GL_RENDERBUFFER_RED_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_GREEN_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_BLUE_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_ALPHA_SIZE_OES</code>,
   * <code>GL_RENDERBUFFER_DEPTH_SIZE_OES</code>, or
   * <code>GL_RENDERBUFFER_STENCIL_SIZE_OES</code>.
   * @param params an <code>IntBuffer</code> into which renderbuffer
   * parameters will be written.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetRenderbufferParameterivOES(int target, int pname,
				       IntBuffer params);

  /**
   * (<code>OES_framebuffer_object</code> extension) Determine whether a
   * token represents a framebuffer.
   *
   * <p> Returns <code>true</code> if <code>framebuffer</code> is the
   * name of a framebuffer object.  If <code>framebuffer</code> is
   * zero, or if <code>framebuffer</code> is a non-zero value that is
   * not the name of a framebuffer object,
   * <code>glIsFrambufferOES</code> returns <code>false</code>.
   *
   * @param framebuffer an integer.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  boolean glIsFramebufferOES(int framebuffer);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Bind a framebuffer.

   * <p> The operations described in chapter 4 of the OpenGL 1.5
   * specification affect the images attached to the framebuffer
   * object bound to the target GL_FRAMEBUFFER_OES.  By default,
   * framebuffer bound to the target GL_FRAMEBUFFER_OES is zero,
   * specifying the default implementation dependent framebuffer
   * provided by the windowing system.  When the framebuffer bound to
   * target GL_FRAMEBUFFER_OES is not zero, but instead names a
   * application-created framebuffer object, then operations
   * affect the application-created framebuffer object
   * rather than the default framebuffer.
   *
   * <p> The namespace for framebuffer objects is the unsigned
   * integers, with zero reserved by the GL to refer to the default
   * framebuffer.  A framebuffer object is created by binding an
   * unused name to the target <code>GL_FRAMEBUFFER_OES</code>.  The
   * binding is effected by calling <code>glBindFramebufferOES</code>
   * with <code>target</code> set to <code>GL_FRAMEBUFFER_OES</code>
   * and <code>framebuffer</code> set to the unused name.  The
   * resulting framebuffer object is a new state vector, comprising
   * all the state values listed in the table below.  There are
   * <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> color attachment
   * points, plus one each for the depth and stencil attachment
   * points.
   *
   * <code>glBindFramebufferOES</code> may also be used to bind an
   * existing framebuffer object to <code>target</code>.  If the bind
   * is successful no change is made to the state of the bound
   * framebuffer object and any previous binding to
   * <code>target</code> is broken.  The current
   * <code>GL_FRAMEBUFFER_OES</code> binding can be queried using
   * <code>glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES)</code>.
   *
   * <p> While a framebuffer object is bound to the target
   * <code>GL_FRAMEBUFFER_OES</code>, GL operations on the target to
   * which it is bound affect the images attached to the bound
   * framebuffer object, and queries of the target to which it is
   * bound return state from the bound object. The framebuffer object
   * bound to the target <code>GL_FRAMEBUFFER_OES</code> is used as
   * the destination of fragment operations and as the source of pixel
   * reads such as <code>glReadPixels</code>.
   *
   * In the initial state, the reserved name zero is bound to the
   * target <code>GL_FRAMEBUFFER_OES</code>.  There is no
   * application-created framebuffer object corresponding to the name
   * zero.  Instead, the name zero refers to the
   * window-system-provided framebuffer.  All queries and operations
   * on the framebuffer while the name zero is bound to the target
   * <code>GL_FRAMEBUFFER_OES</code> operate on this default
   * framebuffer.  On some implementations, the properties of the
   * default window-system-provided framebuffer can change over time
   * (e.g., in response to window-system events such as attaching the
   * context to a new window-system drawable.)
   *
   * <p> Application-created framebuffer objects (i.e., those with a
   * non-zero name) differ from the default window-system-provided
   * framebuffer in a few important ways.  First and foremost, unlike
   * the window-system-provided framebuffer,
   * application-created-framebuffers have modifiable attachment
   * points for each logical buffer in the framebuffer.
   * Framebuffer-attachable images can be attached to and detached
   * from these attachment points.  Also, the size and format of the
   * images attached to application-created framebuffers are
   * controlled entirely within the GL interface, and are not affected
   * by window-system events, such as pixel format selection, window
   * resizes, and display mode changes.
   *
   * <p> Additionally, when rendering to or reading from an
   * application created-framebuffer object:
   *
   * <ul>
   *
   * <li>The pixel ownership test always succeeds.  In other words,
   * application-created framebuffer objects own all of their
   * pixels.</li>
   *
   * <li>There are no visible color buffer bitplanes.  This means
   * there is no color buffer corresponding to the back, front, left,
   * or right color bitplanes.</li>
   *
   * <li>The only color buffer bitplanes are the ones defined by the
   * framebuffer attachment points named
   * <code>COLOR_ATTACHMENT0_OES</code> through
   * <code>COLOR_ATTACHMENT</code><i>n</i><code>_OES</code>.</li>
   *
   * <li>The only depth buffer bitplanes are the ones defined by the
   * framebuffer attachment point
   * <code>DEPTH_ATTACHMENT_OES</code>.</li>
   * 
   * <li>The only stencil buffer bitplanes are the ones defined by the
   * framebuffer attachment point
   * <code>STENCIL_ATTACHMENT_OES</code>.</li>
   *
   * </ul>
   *
   * @param target the value <code>GL_FRAMEBUFFER_OES</code>.
   * @param framebuffer the framebuffer to be bound.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glBindFramebufferOES(int target, int framebuffer);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Delete framebuffer objects.
   *
   * <p> Framebuffer objects are deleted by calling
   * <code>glDeleteFramebuffersOES</code>. <code>framebuffers</code>
   * contains <code>n</code> names of framebuffer objects to be
   * deleted.  After a framebuffer object is deleted, it has no
   * attachments, and its name is again unused.  If a framebuffer that
   * is currently bound to the target <code>GL_FRAMEBUFFER_OES</code>
   * is deleted, it is as though <code>glBindFramebufferOES</code> had
   * been executed with the <code>target</code> of
   * <code>GL_FRAMEBUFFER_OES</code> and <code>framebuffer</code> of
   * zero.  Unused names in <code>framebuffers</code> are silently
   * ignored, as is the value zero.
   *
   * @param n the number of framebuffers to be deleted.
   * @param framebuffers a list of framebuffers.
   * @param offset the starting offset within the
   * <code>framebuffers</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>framebuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>framebuffers.length
   * - offset</code> is less than <code>n</code>.
   */
  void glDeleteFramebuffersOES(int n, int[] framebuffers, int offset);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glDeleteFramebuffersOES</code>.
   *
   * @see #glDeleteFramebuffersOES(int n, int[] framebuffers, int offset)
   *
   * @param n
   * @param framebuffers
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>framebuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>framebuffers.limit()
   * - framebuffers.position()</code> is less than <code>n</code>.
   */
  void glDeleteFramebuffersOES(int n, IntBuffer framebuffers);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Generate framebuffer names.
   *
   * <p> The command <code>glGenFramebuffersOES</code> returns
   * <code>n</code> previously unused framebuffer object names in
   * <code>ids</code>.  These names are marked as used, for the
   * purposes of <code>glGenFramebuffersOES</code> only, but they
   * acquire state and type only when they are first bound, just as if
   * they were unused.
   *
   * @param n the number of framebuffer names to be generated.
   * @param framebuffers an array to be filled in with <code>n</code>
   * framebuffer names.
   * @param offset the starting offset within the
   * <code>framebuffers</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>framebuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>framebuffers.length
   * - offset</code> is less than <code>n</code>.
   */
  void glGenFramebuffersOES(int n, int[] framebuffers, int offset);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glGenFramebuffersOES</code>.
   *
   * @see #glGenFramebuffersOES(int n, int[] framebuffers, int offset)
   *
   * @param n the number of framebuffer names to be generated.
   * @param framebuffers an <code>IntBuffer</code> to be filled in
   * with <code>n</code> framebuffer names.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>framebuffers</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>framebuffers.limit()
   * - framebuffers.position()</code> is less than <code>n</code>.
   */
  void glGenFramebuffersOES(int n, IntBuffer framebuffers);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Check the status of a framebuffer.
   *
   * <p> Returns one of <code>GL_FRAMEBUFFER_COMPLETE_OES</code>,
   * <code>GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES</code>,
   * <code>GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES</code>,
   * <code>GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES</code>,
   * <code>GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES</code>,
   * <code>GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES</code>, or
   * <code>GL_FRAMEBUFFER_UNSUPPORTED_OES</code>.
   *
   * @param target a framebuffer.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  int glCheckFramebufferStatusOES(int target);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Attach an image from a texture object to a framebuffer.
   *
   * <p> To render directly into a texture image, a specified image from a
   * texture object can be attached as one of the logical buffers of the
   * currently bound framebuffer object by calling this method.
   *
   * <p> GL_INVALID_OPERATION is generated if the current value of
   * <code>GL_FRAMEBUFFER_BINDING_OES</code> is zero when
   * <code>glFramebufferTexture2DOES</code> is called.
   * <code>attachment</code> must be one of the attachment points of
   * the framebuffer, either
   * <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   *
   * <p> If <code>texture</code> is zero, then <code>textarget</code>
   * and <code>level</code> are ignored.  If <code>texture</code> is
   * not zero, then <code>texture</code> must either name an existing
   * texture object with an target of <code>textarget</code>, or
   * <code>texture</code> must name an existing cube map texture and
   * <code>textarget</code> must be one of:
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, or
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>.  Otherwise,
   * <code>GL_INVALID_OPERATION</code> is generated.
   *
   * <p> <code>level</code> specifies the mipmap level of the texture
   * image to be attached to the framebuffer and must be 0 (indicating
   * the base MIPmap level).
   *
   * <p> If <code>textarget</code> is one of
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, or
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>, then
   * <code>level</code> must be greater than or equal to zero and less
   * than or equal to log base 2 of
   * <code>GL_MAX_CUBE_MAP_TEXTURE_SIZE</code>. For all other values of
   * <code>textarget</code>, <code>level</code> must be greater than or
   * equal to zero and no larger than log base 2 of
   * <code>GL_MAX_TEXTURE_SIZE</code>.  Otherwise,
   * <code>GL_INVALID_VALUE</code> is generated.
   *
   * <p> If <code>texture</code> is not zero, then
   * <code>textarget</code> must be one of:
   * <code>GL_TEXTURE_2D</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, or
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>.
   *
   * <p> If <code>texture</code> is not zero, and if
   * <code>glFramebufferTexture2DOES</code> is successful, then the
   * specified texture image will be used as the logical buffer
   * identified by <code>attachment</code> of the framebuffer currently
   * bound to <code>target</code>.  The value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code> for the
   * specified attachment point is set to <code>GL_TEXTURE</code> and
   * the value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code> is set to
   * <texture>.  Additionally, the value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES</code> for the
   * named attachment point is set to <code>level</code>.  If
   * <code>texture</code> is a cubemap texture then, the value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES</code>
   * the named attachment point is set to <code>textarget</code>.  All
   * other state values of the attachment point specified by
   * <code>attachment</code> are set to their default values listed in
   * the table below.  No change is made to the state of the texture
   * object, and any previous attachment to the <code>attachment</code>
   * logical buffer of the framebuffer object bound to framebuffer
   * <code>target</code> is broken.  If, on the other hand, the
   * attachment is not successful, then no change is made to the state
   * of either the texture object or the framebuffer object.
   *
   * <p> Calling <code>glFramebufferTexture2DOES</code> with
   * <code>texture</code> name zero will detach the image identified by
   * <code>attachment</code>, if any, in the framebuffer currently
   * bound to <code>target</code>.  All state values of the attachment
   * point specified by <code>attachment</code> are set to their
   * default values listed in the table below.
   *
   * <p> If a texture object is deleted while its image is attached to
   * one or more attachment points in the currently bound framebuffer,
   * then it is as if <code>glFramebufferTexture2DOES</code> had been
   * called, with a <code>texture</code> of 0, for each attachment
   * point to which this image was attached in the currently bound
   * framebuffer.  In other words, this texture image is first detached
   * from all attachment points in the currently bound framebuffer.
   * Note that the texture image is specifically <b>not</b> detached from
   * any other framebuffer objects.  Detaching the texture image from
   * any other framebuffer objects is the responsibility of the
   * application.
   *
   * <p> The entire texture image, including border texels, if any, can be
   * addressed with window-coordinates in the following range:
   *
   * <pre>
   * 0 <= window_x < (texture_width  + (2 * border)),
   * </pre>
   * and
   * <pre>
   * 0 <= window_y < (texture_height + (2 * border))
   * </pre>
   *
   * <p> The values in the first column of the table below should be
   * prefixed with <code>GL_RENDERBUFFER_</code> and suffixed with
   * <code>OES</code>.  The get command for all values is
   * <code>glGetRenderbufferParameterivOES</code>.  All take on
   * positive integral values.
   *
   * <pre>
   * Get                        Initial
   * Value                      Value         Description
   * ---------------            -------       ----------------------
   * ATTACHMENT_OBJECT_TYPE     GL_NONE       type of
   *                                          image attached to
   *                                          framebuffer attachment
   *                                          point
   *
   * ATTACHMENT_OBJECT_NAME     0             name of object
   *                                          attached to
   *                                          framebuffer attachment
   *                                          point
   *
   * ATTACHMENT_TEXTURE_LEVEL   0             mipmap level of
   *                                          texture image
   *                                          attached, if object
   *                                          attached is texture.
   *
   * ATTACHMENT_TEXTURE_        GL_TEXTURE_   cubemap face of
   * CUBE_MAP_FACE              CUBE_MAP_     texture image
   *                            POSITIVE_X    attached, if object
   *                                          attached is cubemap
   *                                          texture.
   * </pre>
   *
   * @param target the value <code>GL_FRAMEBUFFER_OES</code>.
   * @param attachment the framebuffer attachment, one of
   * <code>GL_COLOR_ATTACHMENT_</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * @param textarget one of <code>GL_TEXTURE_2D</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Y</code>,
   * <code>GL_TEXTURE_CUBE_MAP_POSITIVE_Z</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_X</code>,
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Y</code>, or
   * <code>GL_TEXTURE_CUBE_MAP_NEGATIVE_Z</code>.
   * @param texture the texture, or zero.
   * @param level the texture MIPmap level, which must be 0.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glFramebufferTexture2DOES(int target, int attachment,
				 int textarget, int texture,
				 int level);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Attach a renderbuffer to a framebuffer.
   *
   * <p> A renderbuffer can be attached as one of the logical buffers
   * of the currently bound framebuffer object by calling
   * <code>glFramebufferRenderbufferOES</code>. <code>target</code>
   * must be <code>GL_FRAMEBUFFER_OES</code>.
   * <code>GL_INVALID_OPERATION</code> is generated if the current
   * value of <code>GL_FRAMEBUFFER_BINDING_OES</code> is zero when
   * <code>glFramebufferRenderbufferOES</code> is called.
   * <code>attachment</code> should be set to one of the attachment
   * points of the framebuffer, one of
   * <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * <code>renderbuffertarget</code> must be
   * <code>GL_RENDERBUFFER_OES</code> and <code>renderbuffer</code>
   * should be set to the name of the renderbuffer object to be
   * attached to the framebuffer.  <code>renderbuffer</code> must be
   * either zero or the name of an existing renderbuffer object of
   * type <code>renderbuffertarget</code>, otherwise
   * <code>GL_INVALID_OPERATION</code> is generated.  If
   * <code>renderbuffer</code> is zero, then the value of
   * <code>renderbuffertarget</code> is ignored.
   *
   * <p> If <code>renderbuffer</code> is not zero and if
   * <code>glFramebufferRenderbufferOES</code> is successful, then the
   * renderbuffer named <code>renderbuffer</code> will be used as the
   * logical buffer identified by <code>attachment</code> of the
   * framebuffer currently bound to <code>target</code>.  The value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code> for the
   * specified attachment point is set to
   * <code>GL_RENDERBUFFER_OES</code> and the value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code> is set to
   * <code>renderbuffer</code>. All other state values of the
   * attachment point specified by <code>attachment</code> are set to
   * their default values listed in the table below. No change is made
   * to the state of the renderbuffer object and any previous
   * attachment to the <code>attachment</code> logical buffer of the
   * framebuffer object bound to framebuffer <code>target</code> is
   * broken.  If, on the other hand, the attachment is not successful,
   * then no change is made to the state of either the renderbuffer
   * object or the framebuffer object.
   *
   * <p> Calling <code>glFramebufferRenderbufferOES</code> with the
   * <code>renderbuffer</code> name zero will detach the image, if
   * any, identified by <code>attachment</code>, in the framebuffer
   * currently bound to <code>target</code>.  All state values of the
   * attachment point specified by <code>attachment</code> in the
   * object bound to <code>target</code> are set to their default
   * values listed in the table below.
   *
   * <p> If a renderbuffer object is deleted while its image is
   * attached to one or more attachment points in the currently bound
   * framebuffer, then it is as if
   * <code>glFramebufferRenderbufferOES</code> had been called, with a
   * <code>renderbuffer</code> of 0, for each attachment point to
   * which this image was attached in the currently bound framebuffer.
   * In other words, this renderbuffer image is first detached from
   * all attachment points in the currently bound framebuffer.  Note
   * that the renderbuffer image is specifically *not* detached from
   * any non-bound framebuffers.  Detaching the image from any
   * non-bound framebuffers is the responsibility of the application.
   *
   * <p> The values in the first column of the table below should be
   * prefixed with <code>GL_RENDERBUFFER_</code> and suffixed with
   * <code>OES</code>.  The get command for all values is
   * <code>glGetRenderbufferParameterivOES</code>.  All take on
   * positive integral values.
   *
   * <pre>
   * Get                        Initial
   * Value                      Value         Description
   * ---------------            -------       ----------------------
   * ATTACHMENT_OBJECT_TYPE     GL_NONE       type of
   *                                          image attached to
   *                                          framebuffer attachment
   *                                          point
   *
   * ATTACHMENT_OBJECT_NAME     0             name of object
   *                                          attached to
   *                                          framebuffer attachment
   *                                          point
   *
   * ATTACHMENT_TEXTURE_LEVEL   0             mipmap level of
   *                                          texture image
   *                                          attached, if object
   *                                          attached is texture.
   *
   * ATTACHMENT_TEXTURE_        GL_TEXTURE_   cubemap face of
   * CUBE_MAP_FACE              CUBE_MAP_     texture image
   *                            POSITIVE_X    attached, if object
   *                                          attached is cubemap
   *                                          texture.
   * </pre>
   *
   * @param target the value <code>GL_FRAMEBUFFER_OES</code>.
   * @param attachment one of
   * <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * @param renderbuffertarget the value
   * <code>GL_RENDERBUFFER_OES</code>.
   * @param renderbuffer the renderbuffer to be attached to the framebuffer.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glFramebufferRenderbufferOES(int target, int attachment,
				    int renderbuffertarget,
				    int renderbuffer);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Query the value of a framebuffer attachment parameter.
   *
   * <p> <code>target</code> must be <code>GL_FRAMEBUFFER_OES</code>.
   * <code>attachment</code> must be one of the attachment points of
   * the framebuffer, either <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * <code>pname</code> must be one of the following:
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES</code>, or
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES</code>.
   *
   * <p> If the framebuffer currently bound to <code>target</code> is
   * zero, then <code>GL_INVALID_OPERATION</code> is generated.
   *
   * <p> Upon successful return from
   * <code>glGetFramebufferAttachmentParameterivOES</code>, if
   * <code>pname</code> is
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code>, then
   * <code>param</code> will contain one of <code>GL_NONE</code>,
   * <code>GL_TEXTURE</code>, or <code>GL_RENDERBUFFER_OES</code>,
   * identifying the type of object which contains the attached image.
   *
   * <p> If the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES is
   * <code>GL_RENDERBUFFER_OES</code>, then:
   * 
   * <ul> <li>If <code>pname</code> is
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code>,
   * <code>params</code> will contain the name of the renderbuffer
   * object which contains the attached image.</li>
   *
   * <li>Otherwise, <code>GL_INVALID_ENUM</code> is generated.</li>
   * </ul>
   *
   * <p> If the value of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code> is
   * <code>GL_TEXTURE</code>, then:
   *
   * <ul>
   *
   * <li>If <pname> is
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code>, then
   * <params> will contain the name of the texture object which
   * contains the attached image.</li>
   *
   * <li>If <pname> is
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES</code>, then
   * <params> will contain the mipmap level of the texture object
   * which contains the attached image.</li>
   *
   * <li>If <pname> is
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES</code>
   * and the texture object named
   * <code>FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code> is a cube map
   * texture, then <params> will contain the cube map face of the
   * cubemap texture object which contains the attached image.
   * Otherwise <params> will contain the value zero.</li>
   *
   * <li>Otherwise, <code>GL_INVALID_ENUM</code> is generated.</li>
   *
   * </ul>
   *
   * @param target the value <code>GL_FRAMEBUFFER_OES</code>.
   * @param attachment one of
   * <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * @param pname one of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES</code>, or
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES</code>.
   * @param params an array to which the query results will be written.
   * @param offset the starting offset within the
   * <code>params</code> array.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if <code>offset</code> is
   * less than 0.
   * @exception IllegalArgumentException if <code>params.length -
   * offset</code> is smaller than the number of values required by
   * the parameter.
   */
  void glGetFramebufferAttachmentParameterivOES(int target,
						int attachment,
						int pname,
						int[] params, int offset);

  /**
   * (<code>OES_framebuffer_object</code> extension)
   * Integer <code>Buffer</code> version of
   * <code>glGetFramebufferAttachmentParameterivOES</code>.
   * 
   * @see #glGetFramebufferAttachmentParameterivOES(int target, int
   * attachment, int pname, int[] params, int offset)
   *
   * @param target the value <code>GL_FRAMEBUFFER_OES</code>.
   * @param attachment one of
   * <code>GL_COLOR_ATTACHMENT</code><i>n</i><code>_OES</code> (where
   * <i>n</i> is from 0 to <code>GL_MAX_COLOR_ATTACHMENTS_OES</code> -
   * 1), <code>GL_DEPTH_ATTACHMENT_OES</code>, or
   * <code>GL_STENCIL_ATTACHMENT_OES</code>.
   * @param pname one of
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES</code>,
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES</code>, or
   * <code>GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES</code>.
   * @param params an <code>IntBuffer</code> to which the query
   * results will be written.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   * @exception IllegalArgumentException if <code>params</code> is
   * <code>null</code>.
   * @exception IllegalArgumentException if
   * <code>params.remaining()</code> is smaller than the number of
   * values required by the parameter.
   */
  void glGetFramebufferAttachmentParameterivOES(int target,
						int attachment,
						int pname,
						IntBuffer params);

  /**
   * (<code>OES_framebuffer_object</code> extension) Generate mipmaps
   * manually.
   *
   * <p> <code>target</code> is one of <code>TEXTURE_2D</code> or
   * <code>TEXTURE_CUBE_MAP</code>.  Mipmap generation affects the
   * texture image attached to <code>target</code>.  For cube map
   * textures, <code>INVALID_OPERATION</code> is generated if the
   * texture bound to <code>target</code> is not cube complete.
   *
   * @param target one of <code>TEXTURE_2D</code> or
   * <code>TEXTURE_CUBE_MAP</code>.
   *
   * @exception UnsupportedOperationException if the underlying
   * runtime engine does not support the
   * <code>OES_framebuffer_object</code> extension.
   */
  void glGenerateMipmapOES(int target);
}
