/*
 ** Copyright 2011, 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.
 */

// auto generated by generate_GLFunction_java.py"

package com.android.glesv2debugger;

public enum GLFunction {
    glActiveTexture(0, DebuggerMessage.Message.Function.glActiveTexture),
    glAttachShader(1, DebuggerMessage.Message.Function.glAttachShader),
    glBindAttribLocation(2, DebuggerMessage.Message.Function.glBindAttribLocation),
    glBindBuffer(3, DebuggerMessage.Message.Function.glBindBuffer),
    glBindFramebuffer(4, DebuggerMessage.Message.Function.glBindFramebuffer),
    glBindRenderbuffer(5, DebuggerMessage.Message.Function.glBindRenderbuffer),
    glBindTexture(6, DebuggerMessage.Message.Function.glBindTexture),
    glBlendColor(7, DebuggerMessage.Message.Function.glBlendColor),
    glBlendEquation(8, DebuggerMessage.Message.Function.glBlendEquation),
    glBlendEquationSeparate(9, DebuggerMessage.Message.Function.glBlendEquationSeparate),
    glBlendFunc(10, DebuggerMessage.Message.Function.glBlendFunc),
    glBlendFuncSeparate(11, DebuggerMessage.Message.Function.glBlendFuncSeparate),
    glBufferData(12, DebuggerMessage.Message.Function.glBufferData),
    glBufferSubData(13, DebuggerMessage.Message.Function.glBufferSubData),
    glCheckFramebufferStatus(14, DebuggerMessage.Message.Function.glCheckFramebufferStatus),
    glClear(15, DebuggerMessage.Message.Function.glClear),
    glClearColor(16, DebuggerMessage.Message.Function.glClearColor),
    glClearDepthf(17, DebuggerMessage.Message.Function.glClearDepthf),
    glClearStencil(18, DebuggerMessage.Message.Function.glClearStencil),
    glColorMask(19, DebuggerMessage.Message.Function.glColorMask),
    glCompileShader(20, DebuggerMessage.Message.Function.glCompileShader),
    glCompressedTexImage2D(21, DebuggerMessage.Message.Function.glCompressedTexImage2D),
    glCompressedTexSubImage2D(22, DebuggerMessage.Message.Function.glCompressedTexSubImage2D),
    glCopyTexImage2D(23, DebuggerMessage.Message.Function.glCopyTexImage2D),
    glCopyTexSubImage2D(24, DebuggerMessage.Message.Function.glCopyTexSubImage2D),
    glCreateProgram(25, DebuggerMessage.Message.Function.glCreateProgram),
    glCreateShader(26, DebuggerMessage.Message.Function.glCreateShader),
    glCullFace(27, DebuggerMessage.Message.Function.glCullFace),
    glDeleteBuffers(28, DebuggerMessage.Message.Function.glDeleteBuffers),
    glDeleteFramebuffers(29, DebuggerMessage.Message.Function.glDeleteFramebuffers),
    glDeleteProgram(30, DebuggerMessage.Message.Function.glDeleteProgram),
    glDeleteRenderbuffers(31, DebuggerMessage.Message.Function.glDeleteRenderbuffers),
    glDeleteShader(32, DebuggerMessage.Message.Function.glDeleteShader),
    glDeleteTextures(33, DebuggerMessage.Message.Function.glDeleteTextures),
    glDepthFunc(34, DebuggerMessage.Message.Function.glDepthFunc),
    glDepthMask(35, DebuggerMessage.Message.Function.glDepthMask),
    glDepthRangef(36, DebuggerMessage.Message.Function.glDepthRangef),
    glDetachShader(37, DebuggerMessage.Message.Function.glDetachShader),
    glDisable(38, DebuggerMessage.Message.Function.glDisable),
    glDisableVertexAttribArray(39, DebuggerMessage.Message.Function.glDisableVertexAttribArray),
    glDrawArrays(40, DebuggerMessage.Message.Function.glDrawArrays),
    glDrawElements(41, DebuggerMessage.Message.Function.glDrawElements),
    glEnable(42, DebuggerMessage.Message.Function.glEnable),
    glEnableVertexAttribArray(43, DebuggerMessage.Message.Function.glEnableVertexAttribArray),
    glFinish(44, DebuggerMessage.Message.Function.glFinish),
    glFlush(45, DebuggerMessage.Message.Function.glFlush),
    glFramebufferRenderbuffer(46, DebuggerMessage.Message.Function.glFramebufferRenderbuffer),
    glFramebufferTexture2D(47, DebuggerMessage.Message.Function.glFramebufferTexture2D),
    glFrontFace(48, DebuggerMessage.Message.Function.glFrontFace),
    glGenBuffers(49, DebuggerMessage.Message.Function.glGenBuffers),
    glGenerateMipmap(50, DebuggerMessage.Message.Function.glGenerateMipmap),
    glGenFramebuffers(51, DebuggerMessage.Message.Function.glGenFramebuffers),
    glGenRenderbuffers(52, DebuggerMessage.Message.Function.glGenRenderbuffers),
    glGenTextures(53, DebuggerMessage.Message.Function.glGenTextures),
    glGetActiveAttrib(54, DebuggerMessage.Message.Function.glGetActiveAttrib),
    glGetActiveUniform(55, DebuggerMessage.Message.Function.glGetActiveUniform),
    glGetAttachedShaders(56, DebuggerMessage.Message.Function.glGetAttachedShaders),
    glGetAttribLocation(57, DebuggerMessage.Message.Function.glGetAttribLocation),
    glGetBooleanv(58, DebuggerMessage.Message.Function.glGetBooleanv),
    glGetBufferParameteriv(59, DebuggerMessage.Message.Function.glGetBufferParameteriv),
    glGetError(60, DebuggerMessage.Message.Function.glGetError),
    glGetFloatv(61, DebuggerMessage.Message.Function.glGetFloatv),
    glGetFramebufferAttachmentParameteriv(62, DebuggerMessage.Message.Function.glGetFramebufferAttachmentParameteriv),
    glGetIntegerv(63, DebuggerMessage.Message.Function.glGetIntegerv),
    glGetProgramiv(64, DebuggerMessage.Message.Function.glGetProgramiv),
    glGetProgramInfoLog(65, DebuggerMessage.Message.Function.glGetProgramInfoLog),
    glGetRenderbufferParameteriv(66, DebuggerMessage.Message.Function.glGetRenderbufferParameteriv),
    glGetShaderiv(67, DebuggerMessage.Message.Function.glGetShaderiv),
    glGetShaderInfoLog(68, DebuggerMessage.Message.Function.glGetShaderInfoLog),
    glGetShaderPrecisionFormat(69, DebuggerMessage.Message.Function.glGetShaderPrecisionFormat),
    glGetShaderSource(70, DebuggerMessage.Message.Function.glGetShaderSource),
    glGetString(71, DebuggerMessage.Message.Function.glGetString),
    glGetTexParameterfv(72, DebuggerMessage.Message.Function.glGetTexParameterfv),
    glGetTexParameteriv(73, DebuggerMessage.Message.Function.glGetTexParameteriv),
    glGetUniformfv(74, DebuggerMessage.Message.Function.glGetUniformfv),
    glGetUniformiv(75, DebuggerMessage.Message.Function.glGetUniformiv),
    glGetUniformLocation(76, DebuggerMessage.Message.Function.glGetUniformLocation),
    glGetVertexAttribfv(77, DebuggerMessage.Message.Function.glGetVertexAttribfv),
    glGetVertexAttribiv(78, DebuggerMessage.Message.Function.glGetVertexAttribiv),
    glGetVertexAttribPointerv(79, DebuggerMessage.Message.Function.glGetVertexAttribPointerv),
    glHint(80, DebuggerMessage.Message.Function.glHint),
    glIsBuffer(81, DebuggerMessage.Message.Function.glIsBuffer),
    glIsEnabled(82, DebuggerMessage.Message.Function.glIsEnabled),
    glIsFramebuffer(83, DebuggerMessage.Message.Function.glIsFramebuffer),
    glIsProgram(84, DebuggerMessage.Message.Function.glIsProgram),
    glIsRenderbuffer(85, DebuggerMessage.Message.Function.glIsRenderbuffer),
    glIsShader(86, DebuggerMessage.Message.Function.glIsShader),
    glIsTexture(87, DebuggerMessage.Message.Function.glIsTexture),
    glLineWidth(88, DebuggerMessage.Message.Function.glLineWidth),
    glLinkProgram(89, DebuggerMessage.Message.Function.glLinkProgram),
    glPixelStorei(90, DebuggerMessage.Message.Function.glPixelStorei),
    glPolygonOffset(91, DebuggerMessage.Message.Function.glPolygonOffset),
    glReadPixels(92, DebuggerMessage.Message.Function.glReadPixels),
    glReleaseShaderCompiler(93, DebuggerMessage.Message.Function.glReleaseShaderCompiler),
    glRenderbufferStorage(94, DebuggerMessage.Message.Function.glRenderbufferStorage),
    glSampleCoverage(95, DebuggerMessage.Message.Function.glSampleCoverage),
    glScissor(96, DebuggerMessage.Message.Function.glScissor),
    glShaderBinary(97, DebuggerMessage.Message.Function.glShaderBinary),
    glShaderSource(98, DebuggerMessage.Message.Function.glShaderSource),
    glStencilFunc(99, DebuggerMessage.Message.Function.glStencilFunc),
    glStencilFuncSeparate(100, DebuggerMessage.Message.Function.glStencilFuncSeparate),
    glStencilMask(101, DebuggerMessage.Message.Function.glStencilMask),
    glStencilMaskSeparate(102, DebuggerMessage.Message.Function.glStencilMaskSeparate),
    glStencilOp(103, DebuggerMessage.Message.Function.glStencilOp),
    glStencilOpSeparate(104, DebuggerMessage.Message.Function.glStencilOpSeparate),
    glTexImage2D(105, DebuggerMessage.Message.Function.glTexImage2D),
    glTexParameterf(106, DebuggerMessage.Message.Function.glTexParameterf),
    glTexParameterfv(107, DebuggerMessage.Message.Function.glTexParameterfv),
    glTexParameteri(108, DebuggerMessage.Message.Function.glTexParameteri),
    glTexParameteriv(109, DebuggerMessage.Message.Function.glTexParameteriv),
    glTexSubImage2D(110, DebuggerMessage.Message.Function.glTexSubImage2D),
    glUniform1f(111, DebuggerMessage.Message.Function.glUniform1f),
    glUniform1fv(112, DebuggerMessage.Message.Function.glUniform1fv),
    glUniform1i(113, DebuggerMessage.Message.Function.glUniform1i),
    glUniform1iv(114, DebuggerMessage.Message.Function.glUniform1iv),
    glUniform2f(115, DebuggerMessage.Message.Function.glUniform2f),
    glUniform2fv(116, DebuggerMessage.Message.Function.glUniform2fv),
    glUniform2i(117, DebuggerMessage.Message.Function.glUniform2i),
    glUniform2iv(118, DebuggerMessage.Message.Function.glUniform2iv),
    glUniform3f(119, DebuggerMessage.Message.Function.glUniform3f),
    glUniform3fv(120, DebuggerMessage.Message.Function.glUniform3fv),
    glUniform3i(121, DebuggerMessage.Message.Function.glUniform3i),
    glUniform3iv(122, DebuggerMessage.Message.Function.glUniform3iv),
    glUniform4f(123, DebuggerMessage.Message.Function.glUniform4f),
    glUniform4fv(124, DebuggerMessage.Message.Function.glUniform4fv),
    glUniform4i(125, DebuggerMessage.Message.Function.glUniform4i),
    glUniform4iv(126, DebuggerMessage.Message.Function.glUniform4iv),
    glUniformMatrix2fv(127, DebuggerMessage.Message.Function.glUniformMatrix2fv),
    glUniformMatrix3fv(128, DebuggerMessage.Message.Function.glUniformMatrix3fv),
    glUniformMatrix4fv(129, DebuggerMessage.Message.Function.glUniformMatrix4fv),
    glUseProgram(130, DebuggerMessage.Message.Function.glUseProgram),
    glValidateProgram(131, DebuggerMessage.Message.Function.glValidateProgram),
    glVertexAttrib1f(132, DebuggerMessage.Message.Function.glVertexAttrib1f),
    glVertexAttrib1fv(133, DebuggerMessage.Message.Function.glVertexAttrib1fv),
    glVertexAttrib2f(134, DebuggerMessage.Message.Function.glVertexAttrib2f),
    glVertexAttrib2fv(135, DebuggerMessage.Message.Function.glVertexAttrib2fv),
    glVertexAttrib3f(136, DebuggerMessage.Message.Function.glVertexAttrib3f),
    glVertexAttrib3fv(137, DebuggerMessage.Message.Function.glVertexAttrib3fv),
    glVertexAttrib4f(138, DebuggerMessage.Message.Function.glVertexAttrib4f),
    glVertexAttrib4fv(139, DebuggerMessage.Message.Function.glVertexAttrib4fv),
    glVertexAttribPointer(140, DebuggerMessage.Message.Function.glVertexAttribPointer),
    glViewport(141, DebuggerMessage.Message.Function.glViewport),
    ;

    public final int index;
    public final DebuggerMessage.Message.Function function;

    GLFunction(final int index, final DebuggerMessage.Message.Function function) {
        this.index = index;
        this.function = function;
    }
}