/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// This source file is automatically generated

package javax.microedition.khronos.opengles;

public interface GL10 extends GL {
    int GL_ADD                                   = 0x0104;
    int GL_ALIASED_LINE_WIDTH_RANGE              = 0x846E;
    int GL_ALIASED_POINT_SIZE_RANGE              = 0x846D;
    int GL_ALPHA                                 = 0x1906;
    int GL_ALPHA_BITS                            = 0x0D55;
    int GL_ALPHA_TEST                            = 0x0BC0;
    int GL_ALWAYS                                = 0x0207;
    int GL_AMBIENT                               = 0x1200;
    int GL_AMBIENT_AND_DIFFUSE                   = 0x1602;
    int GL_AND                                   = 0x1501;
    int GL_AND_INVERTED                          = 0x1504;
    int GL_AND_REVERSE                           = 0x1502;
    int GL_BACK                                  = 0x0405;
    int GL_BLEND                                 = 0x0BE2;
    int GL_BLUE_BITS                             = 0x0D54;
    int GL_BYTE                                  = 0x1400;
    int GL_CCW                                   = 0x0901;
    int GL_CLAMP_TO_EDGE                         = 0x812F;
    int GL_CLEAR                                 = 0x1500;
    int GL_COLOR_ARRAY                           = 0x8076;
    int GL_COLOR_BUFFER_BIT                      = 0x4000;
    int GL_COLOR_LOGIC_OP                        = 0x0BF2;
    int GL_COLOR_MATERIAL                        = 0x0B57;
    int GL_COMPRESSED_TEXTURE_FORMATS            = 0x86A3;
    int GL_CONSTANT_ATTENUATION                  = 0x1207;
    int GL_COPY                                  = 0x1503;
    int GL_COPY_INVERTED                         = 0x150C;
    int GL_CULL_FACE                             = 0x0B44;
    int GL_CW                                    = 0x0900;
    int GL_DECAL                                 = 0x2101;
    int GL_DECR                                  = 0x1E03;
    int GL_DEPTH_BITS                            = 0x0D56;
    int GL_DEPTH_BUFFER_BIT                      = 0x0100;
    int GL_DEPTH_TEST                            = 0x0B71;
    int GL_DIFFUSE                               = 0x1201;
    int GL_DITHER                                = 0x0BD0;
    int GL_DONT_CARE                             = 0x1100;
    int GL_DST_ALPHA                             = 0x0304;
    int GL_DST_COLOR                             = 0x0306;
    int GL_EMISSION                              = 0x1600;
    int GL_EQUAL                                 = 0x0202;
    int GL_EQUIV                                 = 0x1509;
    int GL_EXP                                   = 0x0800;
    int GL_EXP2                                  = 0x0801;
    int GL_EXTENSIONS                            = 0x1F03;
    int GL_FALSE                                 = 0;
    int GL_FASTEST                               = 0x1101;
    int GL_FIXED                                 = 0x140C;
    int GL_FLAT                                  = 0x1D00;
    int GL_FLOAT                                 = 0x1406;
    int GL_FOG                                   = 0x0B60;
    int GL_FOG_COLOR                             = 0x0B66;
    int GL_FOG_DENSITY                           = 0x0B62;
    int GL_FOG_END                               = 0x0B64;
    int GL_FOG_HINT                              = 0x0C54;
    int GL_FOG_MODE                              = 0x0B65;
    int GL_FOG_START                             = 0x0B63;
    int GL_FRONT                                 = 0x0404;
    int GL_FRONT_AND_BACK                        = 0x0408;
    int GL_GEQUAL                                = 0x0206;
    int GL_GREATER                               = 0x0204;
    int GL_GREEN_BITS                            = 0x0D53;
    int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES  = 0x8B9B;
    int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES    = 0x8B9A;
    int GL_INCR                                  = 0x1E02;
    int GL_INVALID_ENUM                          = 0x0500;
    int GL_INVALID_OPERATION                     = 0x0502;
    int GL_INVALID_VALUE                         = 0x0501;
    int GL_INVERT                                = 0x150A;
    int GL_KEEP                                  = 0x1E00;
    int GL_LEQUAL                                = 0x0203;
    int GL_LESS                                  = 0x0201;
    int GL_LIGHT_MODEL_AMBIENT                   = 0x0B53;
    int GL_LIGHT_MODEL_TWO_SIDE                  = 0x0B52;
    int GL_LIGHT0                                = 0x4000;
    int GL_LIGHT1                                = 0x4001;
    int GL_LIGHT2                                = 0x4002;
    int GL_LIGHT3                                = 0x4003;
    int GL_LIGHT4                                = 0x4004;
    int GL_LIGHT5                                = 0x4005;
    int GL_LIGHT6                                = 0x4006;
    int GL_LIGHT7                                = 0x4007;
    int GL_LIGHTING                              = 0x0B50;
    int GL_LINE_LOOP                             = 0x0002;
    int GL_LINE_SMOOTH                           = 0x0B20;
    int GL_LINE_SMOOTH_HINT                      = 0x0C52;
    int GL_LINE_STRIP                            = 0x0003;
    int GL_LINEAR                                = 0x2601;
    int GL_LINEAR_ATTENUATION                    = 0x1208;
    int GL_LINEAR_MIPMAP_LINEAR                  = 0x2703;
    int GL_LINEAR_MIPMAP_NEAREST                 = 0x2701;
    int GL_LINES                                 = 0x0001;
    int GL_LUMINANCE                             = 0x1909;
    int GL_LUMINANCE_ALPHA                       = 0x190A;
    int GL_MAX_ELEMENTS_INDICES                  = 0x80E9;
    int GL_MAX_ELEMENTS_VERTICES                 = 0x80E8;
    int GL_MAX_LIGHTS                            = 0x0D31;
    int GL_MAX_MODELVIEW_STACK_DEPTH             = 0x0D36;
    int GL_MAX_PROJECTION_STACK_DEPTH            = 0x0D38;
    int GL_MAX_TEXTURE_SIZE                      = 0x0D33;
    int GL_MAX_TEXTURE_STACK_DEPTH               = 0x0D39;
    int GL_MAX_TEXTURE_UNITS                     = 0x84E2;
    int GL_MAX_VIEWPORT_DIMS                     = 0x0D3A;
    int GL_MODELVIEW                             = 0x1700;
    int GL_MODULATE                              = 0x2100;
    int GL_MULTISAMPLE                           = 0x809D;
    int GL_NAND                                  = 0x150E;
    int GL_NEAREST                               = 0x2600;
    int GL_NEAREST_MIPMAP_LINEAR                 = 0x2702;
    int GL_NEAREST_MIPMAP_NEAREST                = 0x2700;
    int GL_NEVER                                 = 0x0200;
    int GL_NICEST                                = 0x1102;
    int GL_NO_ERROR                              = 0;
    int GL_NOOP                                  = 0x1505;
    int GL_NOR                                   = 0x1508;
    int GL_NORMAL_ARRAY                          = 0x8075;
    int GL_NORMALIZE                             = 0x0BA1;
    int GL_NOTEQUAL                              = 0x0205;
    int GL_NUM_COMPRESSED_TEXTURE_FORMATS        = 0x86A2;
    int GL_ONE                                   = 1;
    int GL_ONE_MINUS_DST_ALPHA                   = 0x0305;
    int GL_ONE_MINUS_DST_COLOR                   = 0x0307;
    int GL_ONE_MINUS_SRC_ALPHA                   = 0x0303;
    int GL_ONE_MINUS_SRC_COLOR                   = 0x0301;
    int GL_OR                                    = 0x1507;
    int GL_OR_INVERTED                           = 0x150D;
    int GL_OR_REVERSE                            = 0x150B;
    int GL_OUT_OF_MEMORY                         = 0x0505;
    int GL_PACK_ALIGNMENT                        = 0x0D05;
    int GL_PALETTE4_R5_G6_B5_OES                 = 0x8B92;
    int GL_PALETTE4_RGB5_A1_OES                  = 0x8B94;
    int GL_PALETTE4_RGB8_OES                     = 0x8B90;
    int GL_PALETTE4_RGBA4_OES                    = 0x8B93;
    int GL_PALETTE4_RGBA8_OES                    = 0x8B91;
    int GL_PALETTE8_R5_G6_B5_OES                 = 0x8B97;
    int GL_PALETTE8_RGB5_A1_OES                  = 0x8B99;
    int GL_PALETTE8_RGB8_OES                     = 0x8B95;
    int GL_PALETTE8_RGBA4_OES                    = 0x8B98;
    int GL_PALETTE8_RGBA8_OES                    = 0x8B96;
    int GL_PERSPECTIVE_CORRECTION_HINT           = 0x0C50;
    int GL_POINT_SMOOTH                          = 0x0B10;
    int GL_POINT_SMOOTH_HINT                     = 0x0C51;
    int GL_POINTS                                = 0x0000;
    int GL_POINT_FADE_THRESHOLD_SIZE             = 0x8128;
    int GL_POINT_SIZE                            = 0x0B11;
    int GL_POLYGON_OFFSET_FILL                   = 0x8037;
    int GL_POLYGON_SMOOTH_HINT                   = 0x0C53;
    int GL_POSITION                              = 0x1203;
    int GL_PROJECTION                            = 0x1701;
    int GL_QUADRATIC_ATTENUATION                 = 0x1209;
    int GL_RED_BITS                              = 0x0D52;
    int GL_RENDERER                              = 0x1F01;
    int GL_REPEAT                                = 0x2901;
    int GL_REPLACE                               = 0x1E01;
    int GL_RESCALE_NORMAL                        = 0x803A;
    int GL_RGB                                   = 0x1907;
    int GL_RGBA                                  = 0x1908;
    int GL_SAMPLE_ALPHA_TO_COVERAGE              = 0x809E;
    int GL_SAMPLE_ALPHA_TO_ONE                   = 0x809F;
    int GL_SAMPLE_COVERAGE                       = 0x80A0;
    int GL_SCISSOR_TEST                          = 0x0C11;
    int GL_SET                                   = 0x150F;
    int GL_SHININESS                             = 0x1601;
    int GL_SHORT                                 = 0x1402;
    int GL_SMOOTH                                = 0x1D01;
    int GL_SMOOTH_LINE_WIDTH_RANGE               = 0x0B22;
    int GL_SMOOTH_POINT_SIZE_RANGE               = 0x0B12;
    int GL_SPECULAR                              = 0x1202;
    int GL_SPOT_CUTOFF                           = 0x1206;
    int GL_SPOT_DIRECTION                        = 0x1204;
    int GL_SPOT_EXPONENT                         = 0x1205;
    int GL_SRC_ALPHA                             = 0x0302;
    int GL_SRC_ALPHA_SATURATE                    = 0x0308;
    int GL_SRC_COLOR                             = 0x0300;
    int GL_STACK_OVERFLOW                        = 0x0503;
    int GL_STACK_UNDERFLOW                       = 0x0504;
    int GL_STENCIL_BITS                          = 0x0D57;
    int GL_STENCIL_BUFFER_BIT                    = 0x0400;
    int GL_STENCIL_TEST                          = 0x0B90;
    int GL_SUBPIXEL_BITS                         = 0x0D50;
    int GL_TEXTURE                               = 0x1702;
    int GL_TEXTURE_2D                            = 0x0DE1;
    int GL_TEXTURE_COORD_ARRAY                   = 0x8078;
    int GL_TEXTURE_ENV                           = 0x2300;
    int GL_TEXTURE_ENV_COLOR                     = 0x2201;
    int GL_TEXTURE_ENV_MODE                      = 0x2200;
    int GL_TEXTURE_MAG_FILTER                    = 0x2800;
    int GL_TEXTURE_MIN_FILTER                    = 0x2801;
    int GL_TEXTURE_WRAP_S                        = 0x2802;
    int GL_TEXTURE_WRAP_T                        = 0x2803;
    int GL_TEXTURE0                              = 0x84C0;
    int GL_TEXTURE1                              = 0x84C1;
    int GL_TEXTURE2                              = 0x84C2;
    int GL_TEXTURE3                              = 0x84C3;
    int GL_TEXTURE4                              = 0x84C4;
    int GL_TEXTURE5                              = 0x84C5;
    int GL_TEXTURE6                              = 0x84C6;
    int GL_TEXTURE7                              = 0x84C7;
    int GL_TEXTURE8                              = 0x84C8;
    int GL_TEXTURE9                              = 0x84C9;
    int GL_TEXTURE10                             = 0x84CA;
    int GL_TEXTURE11                             = 0x84CB;
    int GL_TEXTURE12                             = 0x84CC;
    int GL_TEXTURE13                             = 0x84CD;
    int GL_TEXTURE14                             = 0x84CE;
    int GL_TEXTURE15                             = 0x84CF;
    int GL_TEXTURE16                             = 0x84D0;
    int GL_TEXTURE17                             = 0x84D1;
    int GL_TEXTURE18                             = 0x84D2;
    int GL_TEXTURE19                             = 0x84D3;
    int GL_TEXTURE20                             = 0x84D4;
    int GL_TEXTURE21                             = 0x84D5;
    int GL_TEXTURE22                             = 0x84D6;
    int GL_TEXTURE23                             = 0x84D7;
    int GL_TEXTURE24                             = 0x84D8;
    int GL_TEXTURE25                             = 0x84D9;
    int GL_TEXTURE26                             = 0x84DA;
    int GL_TEXTURE27                             = 0x84DB;
    int GL_TEXTURE28                             = 0x84DC;
    int GL_TEXTURE29                             = 0x84DD;
    int GL_TEXTURE30                             = 0x84DE;
    int GL_TEXTURE31                             = 0x84DF;
    int GL_TRIANGLE_FAN                          = 0x0006;
    int GL_TRIANGLE_STRIP                        = 0x0005;
    int GL_TRIANGLES                             = 0x0004;
    int GL_TRUE                                  = 1;
    int GL_UNPACK_ALIGNMENT                      = 0x0CF5;
    int GL_UNSIGNED_BYTE                         = 0x1401;
    int GL_UNSIGNED_SHORT                        = 0x1403;
    int GL_UNSIGNED_SHORT_4_4_4_4                = 0x8033;
    int GL_UNSIGNED_SHORT_5_5_5_1                = 0x8034;
    int GL_UNSIGNED_SHORT_5_6_5                  = 0x8363;
    int GL_VENDOR                                = 0x1F00;
    int GL_VERSION                               = 0x1F02;
    int GL_VERTEX_ARRAY                          = 0x8074;
    int GL_XOR                                   = 0x1506;
    int GL_ZERO                                  = 0;

    void glActiveTexture(
        int texture
    );

    void glAlphaFunc(
        int func,
        float ref
    );

    void glAlphaFuncx(
        int func,
        int ref
    );

    void glBindTexture(
        int target,
        int texture
    );

    void glBlendFunc(
        int sfactor,
        int dfactor
    );

    void glClear(
        int mask
    );

    void glClearColor(
        float red,
        float green,
        float blue,
        float alpha
    );

    void glClearColorx(
        int red,
        int green,
        int blue,
        int alpha
    );

    void glClearDepthf(
        float depth
    );

    void glClearDepthx(
        int depth
    );

    void glClearStencil(
        int s
    );

    void glClientActiveTexture(
        int texture
    );

    void glColor4f(
        float red,
        float green,
        float blue,
        float alpha
    );

    void glColor4x(
        int red,
        int green,
        int blue,
        int alpha
    );

    void glColorMask(
        boolean red,
        boolean green,
        boolean blue,
        boolean alpha
    );

    void glColorPointer(
        int size,
        int type,
        int stride,
        java.nio.Buffer pointer
    );

    void glCompressedTexImage2D(
        int target,
        int level,
        int internalformat,
        int width,
        int height,
        int border,
        int imageSize,
        java.nio.Buffer data
    );

    void glCompressedTexSubImage2D(
        int target,
        int level,
        int xoffset,
        int yoffset,
        int width,
        int height,
        int format,
        int imageSize,
        java.nio.Buffer data
    );

    void glCopyTexImage2D(
        int target,
        int level,
        int internalformat,
        int x,
        int y,
        int width,
        int height,
        int border
    );

    void glCopyTexSubImage2D(
        int target,
        int level,
        int xoffset,
        int yoffset,
        int x,
        int y,
        int width,
        int height
    );

    void glCullFace(
        int mode
    );

    void glDeleteTextures(
        int n,
        int[] textures,
        int offset
    );

    void glDeleteTextures(
        int n,
        java.nio.IntBuffer textures
    );

    void glDepthFunc(
        int func
    );

    void glDepthMask(
        boolean flag
    );

    void glDepthRangef(
        float zNear,
        float zFar
    );

    void glDepthRangex(
        int zNear,
        int zFar
    );

    void glDisable(
        int cap
    );

    void glDisableClientState(
        int array
    );

    void glDrawArrays(
        int mode,
        int first,
        int count
    );

    void glDrawElements(
        int mode,
        int count,
        int type,
        java.nio.Buffer indices
    );

    void glEnable(
        int cap
    );

    void glEnableClientState(
        int array
    );

    void glFinish(
    );

    void glFlush(
    );

    void glFogf(
        int pname,
        float param
    );

    void glFogfv(
        int pname,
        float[] params,
        int offset
    );

    void glFogfv(
        int pname,
        java.nio.FloatBuffer params
    );

    void glFogx(
        int pname,
        int param
    );

    void glFogxv(
        int pname,
        int[] params,
        int offset
    );

    void glFogxv(
        int pname,
        java.nio.IntBuffer params
    );

    void glFrontFace(
        int mode
    );

    void glFrustumf(
        float left,
        float right,
        float bottom,
        float top,
        float zNear,
        float zFar
    );

    void glFrustumx(
        int left,
        int right,
        int bottom,
        int top,
        int zNear,
        int zFar
    );

    void glGenTextures(
        int n,
        int[] textures,
        int offset
    );

    void glGenTextures(
        int n,
        java.nio.IntBuffer textures
    );

    int glGetError(
    );

    void glGetIntegerv(
        int pname,
        int[] params,
        int offset
    );

    void glGetIntegerv(
        int pname,
        java.nio.IntBuffer params
    );

    public String glGetString(
        int name
    );

    void glHint(
        int target,
        int mode
    );

    void glLightModelf(
        int pname,
        float param
    );

    void glLightModelfv(
        int pname,
        float[] params,
        int offset
    );

    void glLightModelfv(
        int pname,
        java.nio.FloatBuffer params
    );

    void glLightModelx(
        int pname,
        int param
    );

    void glLightModelxv(
        int pname,
        int[] params,
        int offset
    );

    void glLightModelxv(
        int pname,
        java.nio.IntBuffer params
    );

    void glLightf(
        int light,
        int pname,
        float param
    );

    void glLightfv(
        int light,
        int pname,
        float[] params,
        int offset
    );

    void glLightfv(
        int light,
        int pname,
        java.nio.FloatBuffer params
    );

    void glLightx(
        int light,
        int pname,
        int param
    );

    void glLightxv(
        int light,
        int pname,
        int[] params,
        int offset
    );

    void glLightxv(
        int light,
        int pname,
        java.nio.IntBuffer params
    );

    void glLineWidth(
        float width
    );

    void glLineWidthx(
        int width
    );

    void glLoadIdentity(
    );

    void glLoadMatrixf(
        float[] m,
        int offset
    );

    void glLoadMatrixf(
        java.nio.FloatBuffer m
    );

    void glLoadMatrixx(
        int[] m,
        int offset
    );

    void glLoadMatrixx(
        java.nio.IntBuffer m
    );

    void glLogicOp(
        int opcode
    );

    void glMaterialf(
        int face,
        int pname,
        float param
    );

    void glMaterialfv(
        int face,
        int pname,
        float[] params,
        int offset
    );

    void glMaterialfv(
        int face,
        int pname,
        java.nio.FloatBuffer params
    );

    void glMaterialx(
        int face,
        int pname,
        int param
    );

    void glMaterialxv(
        int face,
        int pname,
        int[] params,
        int offset
    );

    void glMaterialxv(
        int face,
        int pname,
        java.nio.IntBuffer params
    );

    void glMatrixMode(
        int mode
    );

    void glMultMatrixf(
        float[] m,
        int offset
    );

    void glMultMatrixf(
        java.nio.FloatBuffer m
    );

    void glMultMatrixx(
        int[] m,
        int offset
    );

    void glMultMatrixx(
        java.nio.IntBuffer m
    );

    void glMultiTexCoord4f(
        int target,
        float s,
        float t,
        float r,
        float q
    );

    void glMultiTexCoord4x(
        int target,
        int s,
        int t,
        int r,
        int q
    );

    void glNormal3f(
        float nx,
        float ny,
        float nz
    );

    void glNormal3x(
        int nx,
        int ny,
        int nz
    );

    void glNormalPointer(
        int type,
        int stride,
        java.nio.Buffer pointer
    );

    void glOrthof(
        float left,
        float right,
        float bottom,
        float top,
        float zNear,
        float zFar
    );

    void glOrthox(
        int left,
        int right,
        int bottom,
        int top,
        int zNear,
        int zFar
    );

    void glPixelStorei(
        int pname,
        int param
    );

    void glPointSize(
        float size
    );

    void glPointSizex(
        int size
    );

    void glPolygonOffset(
        float factor,
        float units
    );

    void glPolygonOffsetx(
        int factor,
        int units
    );

    void glPopMatrix(
    );

    void glPushMatrix(
    );

    void glReadPixels(
        int x,
        int y,
        int width,
        int height,
        int format,
        int type,
        java.nio.Buffer pixels
    );

    void glRotatef(
        float angle,
        float x,
        float y,
        float z
    );

    void glRotatex(
        int angle,
        int x,
        int y,
        int z
    );

    void glSampleCoverage(
        float value,
        boolean invert
    );

    void glSampleCoveragex(
        int value,
        boolean invert
    );

    void glScalef(
        float x,
        float y,
        float z
    );

    void glScalex(
        int x,
        int y,
        int z
    );

    void glScissor(
        int x,
        int y,
        int width,
        int height
    );

    void glShadeModel(
        int mode
    );

    void glStencilFunc(
        int func,
        int ref,
        int mask
    );

    void glStencilMask(
        int mask
    );

    void glStencilOp(
        int fail,
        int zfail,
        int zpass
    );

    void glTexCoordPointer(
        int size,
        int type,
        int stride,
        java.nio.Buffer pointer
    );

    void glTexEnvf(
        int target,
        int pname,
        float param
    );

    void glTexEnvfv(
        int target,
        int pname,
        float[] params,
        int offset
    );

    void glTexEnvfv(
        int target,
        int pname,
        java.nio.FloatBuffer params
    );

    void glTexEnvx(
        int target,
        int pname,
        int param
    );

    void glTexEnvxv(
        int target,
        int pname,
        int[] params,
        int offset
    );

    void glTexEnvxv(
        int target,
        int pname,
        java.nio.IntBuffer params
    );

    void glTexImage2D(
        int target,
        int level,
        int internalformat,
        int width,
        int height,
        int border,
        int format,
        int type,
        java.nio.Buffer pixels
    );

    void glTexParameterf(
        int target,
        int pname,
        float param
    );

    void glTexParameterx(
        int target,
        int pname,
        int param
    );

    void glTexSubImage2D(
        int target,
        int level,
        int xoffset,
        int yoffset,
        int width,
        int height,
        int format,
        int type,
        java.nio.Buffer pixels
    );

    void glTranslatef(
        float x,
        float y,
        float z
    );

    void glTranslatex(
        int x,
        int y,
        int z
    );

    void glVertexPointer(
        int size,
        int type,
        int stride,
        java.nio.Buffer pointer
    );

    void glViewport(
        int x,
        int y,
        int width,
        int height
    );

}
