// Generated by the protocol buffer compiler.  DO NOT EDIT!

#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
#include "gltrace.pb.h"
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
// @@protoc_insertion_point(includes)

namespace android {
namespace gltrace {

void protobuf_ShutdownFile_gltrace_2eproto() {
  delete GLMessage::default_instance_;
  delete GLMessage_DataType::default_instance_;
  delete GLMessage_FrameBuffer::default_instance_;
}

void protobuf_AddDesc_gltrace_2eproto() {
  static bool already_here = false;
  if (already_here) return;
  already_here = true;
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  GLMessage::default_instance_ = new GLMessage();
  GLMessage_DataType::default_instance_ = new GLMessage_DataType();
  GLMessage_FrameBuffer::default_instance_ = new GLMessage_FrameBuffer();
  GLMessage::default_instance_->InitAsDefaultInstance();
  GLMessage_DataType::default_instance_->InitAsDefaultInstance();
  GLMessage_FrameBuffer::default_instance_->InitAsDefaultInstance();
  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_gltrace_2eproto);
}

// Force AddDescriptors() to be called at static initialization time.
struct StaticDescriptorInitializer_gltrace_2eproto {
  StaticDescriptorInitializer_gltrace_2eproto() {
    protobuf_AddDesc_gltrace_2eproto();
  }
} static_descriptor_initializer_gltrace_2eproto_;


// ===================================================================

bool GLMessage_Function_IsValid(int value) {
  switch(value) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
    case 28:
    case 29:
    case 30:
    case 31:
    case 32:
    case 33:
    case 34:
    case 35:
    case 36:
    case 37:
    case 38:
    case 39:
    case 40:
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    case 48:
    case 49:
    case 50:
    case 51:
    case 52:
    case 53:
    case 54:
    case 55:
    case 56:
    case 57:
    case 58:
    case 59:
    case 60:
    case 61:
    case 62:
    case 63:
    case 64:
    case 65:
    case 66:
    case 67:
    case 68:
    case 69:
    case 70:
    case 71:
    case 72:
    case 73:
    case 74:
    case 75:
    case 76:
    case 77:
    case 78:
    case 79:
    case 80:
    case 81:
    case 82:
    case 83:
    case 84:
    case 85:
    case 86:
    case 87:
    case 88:
    case 89:
    case 90:
    case 91:
    case 92:
    case 93:
    case 94:
    case 95:
    case 96:
    case 97:
    case 98:
    case 99:
    case 100:
    case 101:
    case 102:
    case 103:
    case 104:
    case 105:
    case 106:
    case 107:
    case 108:
    case 109:
    case 110:
    case 111:
    case 112:
    case 113:
    case 114:
    case 115:
    case 116:
    case 117:
    case 118:
    case 119:
    case 120:
    case 121:
    case 122:
    case 123:
    case 124:
    case 125:
    case 126:
    case 127:
    case 128:
    case 129:
    case 130:
    case 131:
    case 132:
    case 133:
    case 134:
    case 135:
    case 136:
    case 137:
    case 138:
    case 139:
    case 140:
    case 141:
    case 142:
    case 143:
    case 144:
    case 145:
    case 146:
    case 147:
    case 148:
    case 149:
    case 150:
    case 151:
    case 152:
    case 153:
    case 154:
    case 155:
    case 156:
    case 157:
    case 158:
    case 159:
    case 160:
    case 161:
    case 162:
    case 163:
    case 164:
    case 165:
    case 166:
    case 167:
    case 168:
    case 169:
    case 170:
    case 171:
    case 172:
    case 173:
    case 174:
    case 175:
    case 176:
    case 177:
    case 178:
    case 179:
    case 180:
    case 181:
    case 182:
    case 183:
    case 184:
    case 185:
    case 186:
    case 187:
    case 188:
    case 189:
    case 190:
    case 191:
    case 192:
    case 193:
    case 194:
    case 195:
    case 196:
    case 197:
    case 198:
    case 199:
    case 200:
    case 201:
    case 202:
    case 203:
    case 204:
    case 205:
    case 206:
    case 207:
    case 208:
    case 209:
    case 210:
    case 211:
    case 212:
    case 213:
    case 214:
    case 215:
    case 216:
    case 217:
    case 218:
    case 219:
    case 220:
    case 221:
    case 222:
    case 223:
    case 224:
    case 225:
    case 226:
    case 227:
    case 228:
    case 229:
    case 230:
    case 231:
    case 232:
    case 233:
    case 234:
    case 235:
    case 236:
    case 237:
    case 238:
    case 239:
    case 240:
    case 241:
    case 242:
    case 243:
    case 244:
    case 245:
    case 246:
    case 247:
    case 248:
    case 249:
    case 250:
    case 251:
    case 252:
    case 253:
    case 254:
    case 255:
    case 256:
    case 257:
    case 258:
    case 259:
    case 260:
    case 261:
    case 262:
    case 263:
    case 264:
    case 265:
    case 266:
    case 267:
    case 268:
    case 269:
    case 270:
    case 271:
    case 272:
    case 273:
    case 274:
    case 275:
    case 276:
    case 277:
    case 278:
    case 279:
    case 280:
    case 281:
    case 282:
    case 283:
    case 284:
    case 285:
    case 286:
    case 287:
    case 288:
    case 289:
    case 290:
    case 291:
    case 292:
    case 293:
    case 294:
    case 295:
    case 296:
    case 297:
    case 298:
    case 299:
    case 300:
    case 301:
    case 302:
    case 303:
    case 304:
    case 305:
    case 306:
    case 307:
    case 308:
    case 309:
    case 310:
    case 311:
    case 312:
    case 313:
    case 314:
    case 315:
    case 316:
    case 317:
    case 318:
    case 319:
    case 320:
    case 321:
    case 322:
    case 323:
    case 324:
    case 325:
    case 326:
    case 327:
    case 328:
    case 329:
    case 330:
    case 331:
    case 332:
    case 333:
    case 334:
    case 335:
    case 336:
    case 337:
    case 338:
    case 339:
    case 340:
    case 341:
    case 342:
    case 343:
    case 344:
    case 345:
    case 346:
    case 347:
    case 348:
    case 349:
    case 350:
    case 351:
    case 352:
    case 353:
    case 354:
    case 355:
    case 356:
    case 357:
    case 358:
    case 359:
    case 360:
    case 361:
    case 362:
    case 363:
    case 364:
    case 365:
    case 366:
    case 367:
    case 368:
    case 369:
    case 370:
    case 371:
    case 372:
    case 373:
    case 374:
    case 375:
    case 376:
    case 377:
    case 378:
    case 379:
    case 380:
    case 381:
    case 382:
    case 383:
    case 384:
    case 385:
    case 386:
    case 387:
    case 388:
    case 389:
    case 390:
    case 391:
    case 392:
    case 393:
    case 394:
    case 395:
    case 396:
    case 397:
    case 398:
    case 399:
    case 400:
    case 401:
    case 402:
    case 403:
    case 404:
    case 405:
    case 406:
    case 407:
    case 408:
    case 409:
    case 410:
    case 411:
    case 412:
    case 413:
    case 414:
    case 415:
    case 416:
    case 417:
    case 418:
    case 419:
    case 420:
    case 421:
    case 422:
    case 423:
    case 424:
    case 425:
    case 426:
    case 427:
    case 428:
    case 429:
    case 430:
    case 431:
    case 432:
    case 433:
    case 434:
    case 435:
    case 436:
    case 437:
    case 438:
    case 439:
    case 440:
    case 441:
    case 442:
    case 443:
    case 444:
    case 445:
    case 446:
    case 447:
    case 448:
    case 449:
    case 450:
    case 451:
    case 452:
    case 453:
    case 454:
    case 455:
    case 456:
    case 457:
    case 458:
    case 459:
    case 460:
    case 461:
    case 462:
    case 463:
    case 464:
    case 465:
    case 466:
    case 467:
    case 468:
    case 469:
    case 470:
    case 471:
    case 472:
    case 473:
    case 474:
    case 475:
    case 476:
    case 477:
    case 478:
    case 479:
    case 502:
    case 503:
    case 504:
    case 505:
    case 506:
    case 507:
    case 508:
    case 509:
    case 510:
    case 511:
    case 512:
    case 513:
    case 514:
    case 515:
    case 516:
    case 517:
    case 518:
    case 519:
    case 520:
    case 521:
    case 522:
    case 523:
    case 524:
    case 525:
    case 526:
    case 527:
    case 528:
    case 529:
    case 530:
    case 531:
    case 532:
    case 533:
    case 534:
    case 535:
    case 536:
    case 537:
    case 538:
    case 539:
    case 540:
    case 541:
    case 542:
    case 543:
    case 544:
    case 545:
    case 546:
    case 547:
    case 548:
    case 549:
    case 550:
    case 551:
    case 552:
    case 553:
    case 554:
    case 555:
    case 556:
    case 557:
    case 558:
    case 559:
    case 560:
    case 561:
    case 2000:
    case 2001:
    case 2002:
    case 2003:
    case 2004:
    case 2005:
    case 2006:
    case 2007:
    case 2008:
    case 2009:
    case 2010:
    case 2011:
    case 2012:
    case 2013:
    case 2014:
    case 2015:
    case 2016:
    case 2017:
    case 2018:
    case 2019:
    case 2020:
    case 2021:
    case 2022:
    case 2023:
    case 2024:
    case 2025:
    case 2026:
    case 2027:
    case 2028:
    case 2029:
    case 2030:
    case 2031:
    case 2032:
    case 2033:
    case 2034:
    case 2035:
    case 2036:
    case 2037:
    case 2038:
    case 2039:
    case 2040:
    case 2041:
    case 2042:
    case 2043:
    case 2044:
    case 2045:
    case 3000:
    case 3001:
      return true;
    default:
      return false;
  }
}

#ifndef _MSC_VER
const GLMessage_Function GLMessage::glActiveTexture;
const GLMessage_Function GLMessage::glAlphaFunc;
const GLMessage_Function GLMessage::glAlphaFuncx;
const GLMessage_Function GLMessage::glAlphaFuncxOES;
const GLMessage_Function GLMessage::glAttachShader;
const GLMessage_Function GLMessage::glBeginPerfMonitorAMD;
const GLMessage_Function GLMessage::glBindAttribLocation;
const GLMessage_Function GLMessage::glBindBuffer;
const GLMessage_Function GLMessage::glBindFramebuffer;
const GLMessage_Function GLMessage::glBindFramebufferOES;
const GLMessage_Function GLMessage::glBindRenderbuffer;
const GLMessage_Function GLMessage::glBindRenderbufferOES;
const GLMessage_Function GLMessage::glBindTexture;
const GLMessage_Function GLMessage::glBindVertexArrayOES;
const GLMessage_Function GLMessage::glBlendColor;
const GLMessage_Function GLMessage::glBlendEquation;
const GLMessage_Function GLMessage::glBlendEquationOES;
const GLMessage_Function GLMessage::glBlendEquationSeparate;
const GLMessage_Function GLMessage::glBlendEquationSeparateOES;
const GLMessage_Function GLMessage::glBlendFunc;
const GLMessage_Function GLMessage::glBlendFuncSeparate;
const GLMessage_Function GLMessage::glBlendFuncSeparateOES;
const GLMessage_Function GLMessage::glBufferData;
const GLMessage_Function GLMessage::glBufferSubData;
const GLMessage_Function GLMessage::glCheckFramebufferStatus;
const GLMessage_Function GLMessage::glCheckFramebufferStatusOES;
const GLMessage_Function GLMessage::glClearColor;
const GLMessage_Function GLMessage::glClearColorx;
const GLMessage_Function GLMessage::glClearColorxOES;
const GLMessage_Function GLMessage::glClearDepthf;
const GLMessage_Function GLMessage::glClearDepthfOES;
const GLMessage_Function GLMessage::glClearDepthx;
const GLMessage_Function GLMessage::glClearDepthxOES;
const GLMessage_Function GLMessage::glClear;
const GLMessage_Function GLMessage::glClearStencil;
const GLMessage_Function GLMessage::glClientActiveTexture;
const GLMessage_Function GLMessage::glClipPlanef;
const GLMessage_Function GLMessage::glClipPlanefIMG;
const GLMessage_Function GLMessage::glClipPlanefOES;
const GLMessage_Function GLMessage::glClipPlanex;
const GLMessage_Function GLMessage::glClipPlanexIMG;
const GLMessage_Function GLMessage::glClipPlanexOES;
const GLMessage_Function GLMessage::glColor4f;
const GLMessage_Function GLMessage::glColor4ub;
const GLMessage_Function GLMessage::glColor4x;
const GLMessage_Function GLMessage::glColor4xOES;
const GLMessage_Function GLMessage::glColorMask;
const GLMessage_Function GLMessage::glColorPointer;
const GLMessage_Function GLMessage::glCompileShader;
const GLMessage_Function GLMessage::glCompressedTexImage2D;
const GLMessage_Function GLMessage::glCompressedTexImage3DOES;
const GLMessage_Function GLMessage::glCompressedTexSubImage2D;
const GLMessage_Function GLMessage::glCompressedTexSubImage3DOES;
const GLMessage_Function GLMessage::glCopyTexImage2D;
const GLMessage_Function GLMessage::glCopyTexSubImage2D;
const GLMessage_Function GLMessage::glCopyTexSubImage3DOES;
const GLMessage_Function GLMessage::glCoverageMaskNV;
const GLMessage_Function GLMessage::glCoverageOperationNV;
const GLMessage_Function GLMessage::glCreateProgram;
const GLMessage_Function GLMessage::glCreateShader;
const GLMessage_Function GLMessage::glCullFace;
const GLMessage_Function GLMessage::glCurrentPaletteMatrixOES;
const GLMessage_Function GLMessage::glDeleteBuffers;
const GLMessage_Function GLMessage::glDeleteFencesNV;
const GLMessage_Function GLMessage::glDeleteFramebuffers;
const GLMessage_Function GLMessage::glDeleteFramebuffersOES;
const GLMessage_Function GLMessage::glDeletePerfMonitorsAMD;
const GLMessage_Function GLMessage::glDeleteProgram;
const GLMessage_Function GLMessage::glDeleteRenderbuffers;
const GLMessage_Function GLMessage::glDeleteRenderbuffersOES;
const GLMessage_Function GLMessage::glDeleteShader;
const GLMessage_Function GLMessage::glDeleteTextures;
const GLMessage_Function GLMessage::glDeleteVertexArraysOES;
const GLMessage_Function GLMessage::glDepthFunc;
const GLMessage_Function GLMessage::glDepthMask;
const GLMessage_Function GLMessage::glDepthRangef;
const GLMessage_Function GLMessage::glDepthRangefOES;
const GLMessage_Function GLMessage::glDepthRangex;
const GLMessage_Function GLMessage::glDepthRangexOES;
const GLMessage_Function GLMessage::glDetachShader;
const GLMessage_Function GLMessage::glDisableClientState;
const GLMessage_Function GLMessage::glDisableDriverControlQCOM;
const GLMessage_Function GLMessage::glDisable;
const GLMessage_Function GLMessage::glDisableVertexAttribArray;
const GLMessage_Function GLMessage::glDiscardFramebufferEXT;
const GLMessage_Function GLMessage::glDrawArrays;
const GLMessage_Function GLMessage::glDrawElements;
const GLMessage_Function GLMessage::glDrawTexfOES;
const GLMessage_Function GLMessage::glDrawTexfvOES;
const GLMessage_Function GLMessage::glDrawTexiOES;
const GLMessage_Function GLMessage::glDrawTexivOES;
const GLMessage_Function GLMessage::glDrawTexsOES;
const GLMessage_Function GLMessage::glDrawTexsvOES;
const GLMessage_Function GLMessage::glDrawTexxOES;
const GLMessage_Function GLMessage::glDrawTexxvOES;
const GLMessage_Function GLMessage::glEGLImageTargetRenderbufferStorageOES;
const GLMessage_Function GLMessage::glEGLImageTargetTexture2DOES;
const GLMessage_Function GLMessage::glEnableClientState;
const GLMessage_Function GLMessage::glEnableDriverControlQCOM;
const GLMessage_Function GLMessage::glEnable;
const GLMessage_Function GLMessage::glEnableVertexAttribArray;
const GLMessage_Function GLMessage::glEndPerfMonitorAMD;
const GLMessage_Function GLMessage::glEndTilingQCOM;
const GLMessage_Function GLMessage::glExtGetBufferPointervQCOM;
const GLMessage_Function GLMessage::glExtGetBuffersQCOM;
const GLMessage_Function GLMessage::glExtGetFramebuffersQCOM;
const GLMessage_Function GLMessage::glExtGetProgramBinarySourceQCOM;
const GLMessage_Function GLMessage::glExtGetProgramsQCOM;
const GLMessage_Function GLMessage::glExtGetRenderbuffersQCOM;
const GLMessage_Function GLMessage::glExtGetShadersQCOM;
const GLMessage_Function GLMessage::glExtGetTexLevelParameterivQCOM;
const GLMessage_Function GLMessage::glExtGetTexSubImageQCOM;
const GLMessage_Function GLMessage::glExtGetTexturesQCOM;
const GLMessage_Function GLMessage::glExtIsProgramBinaryQCOM;
const GLMessage_Function GLMessage::glExtTexObjectStateOverrideiQCOM;
const GLMessage_Function GLMessage::glFinishFenceNV;
const GLMessage_Function GLMessage::glFinish;
const GLMessage_Function GLMessage::glFlush;
const GLMessage_Function GLMessage::glFogf;
const GLMessage_Function GLMessage::glFogfv;
const GLMessage_Function GLMessage::glFogx;
const GLMessage_Function GLMessage::glFogxOES;
const GLMessage_Function GLMessage::glFogxv;
const GLMessage_Function GLMessage::glFogxvOES;
const GLMessage_Function GLMessage::glFramebufferRenderbuffer;
const GLMessage_Function GLMessage::glFramebufferRenderbufferOES;
const GLMessage_Function GLMessage::glFramebufferTexture2D;
const GLMessage_Function GLMessage::glFramebufferTexture2DMultisampleIMG;
const GLMessage_Function GLMessage::glFramebufferTexture2DOES;
const GLMessage_Function GLMessage::glFramebufferTexture3DOES;
const GLMessage_Function GLMessage::glFrontFace;
const GLMessage_Function GLMessage::glFrustumf;
const GLMessage_Function GLMessage::glFrustumfOES;
const GLMessage_Function GLMessage::glFrustumx;
const GLMessage_Function GLMessage::glFrustumxOES;
const GLMessage_Function GLMessage::glGenBuffers;
const GLMessage_Function GLMessage::glGenerateMipmap;
const GLMessage_Function GLMessage::glGenerateMipmapOES;
const GLMessage_Function GLMessage::glGenFencesNV;
const GLMessage_Function GLMessage::glGenFramebuffers;
const GLMessage_Function GLMessage::glGenFramebuffersOES;
const GLMessage_Function GLMessage::glGenPerfMonitorsAMD;
const GLMessage_Function GLMessage::glGenRenderbuffers;
const GLMessage_Function GLMessage::glGenRenderbuffersOES;
const GLMessage_Function GLMessage::glGenTextures;
const GLMessage_Function GLMessage::glGenVertexArraysOES;
const GLMessage_Function GLMessage::glGetActiveAttrib;
const GLMessage_Function GLMessage::glGetActiveUniform;
const GLMessage_Function GLMessage::glGetAttachedShaders;
const GLMessage_Function GLMessage::glGetAttribLocation;
const GLMessage_Function GLMessage::glGetBooleanv;
const GLMessage_Function GLMessage::glGetBufferParameteriv;
const GLMessage_Function GLMessage::glGetBufferPointervOES;
const GLMessage_Function GLMessage::glGetClipPlanef;
const GLMessage_Function GLMessage::glGetClipPlanefOES;
const GLMessage_Function GLMessage::glGetClipPlanex;
const GLMessage_Function GLMessage::glGetClipPlanexOES;
const GLMessage_Function GLMessage::glGetDriverControlsQCOM;
const GLMessage_Function GLMessage::glGetDriverControlStringQCOM;
const GLMessage_Function GLMessage::glGetError;
const GLMessage_Function GLMessage::glGetFenceivNV;
const GLMessage_Function GLMessage::glGetFixedv;
const GLMessage_Function GLMessage::glGetFixedvOES;
const GLMessage_Function GLMessage::glGetFloatv;
const GLMessage_Function GLMessage::glGetFramebufferAttachmentParameteriv;
const GLMessage_Function GLMessage::glGetFramebufferAttachmentParameterivOES;
const GLMessage_Function GLMessage::glGetIntegerv;
const GLMessage_Function GLMessage::glGetLightfv;
const GLMessage_Function GLMessage::glGetLightxv;
const GLMessage_Function GLMessage::glGetLightxvOES;
const GLMessage_Function GLMessage::glGetMaterialfv;
const GLMessage_Function GLMessage::glGetMaterialxv;
const GLMessage_Function GLMessage::glGetMaterialxvOES;
const GLMessage_Function GLMessage::glGetPerfMonitorCounterDataAMD;
const GLMessage_Function GLMessage::glGetPerfMonitorCounterInfoAMD;
const GLMessage_Function GLMessage::glGetPerfMonitorCountersAMD;
const GLMessage_Function GLMessage::glGetPerfMonitorCounterStringAMD;
const GLMessage_Function GLMessage::glGetPerfMonitorGroupsAMD;
const GLMessage_Function GLMessage::glGetPerfMonitorGroupStringAMD;
const GLMessage_Function GLMessage::glGetPointerv;
const GLMessage_Function GLMessage::glGetProgramBinaryOES;
const GLMessage_Function GLMessage::glGetProgramInfoLog;
const GLMessage_Function GLMessage::glGetProgramiv;
const GLMessage_Function GLMessage::glGetRenderbufferParameteriv;
const GLMessage_Function GLMessage::glGetRenderbufferParameterivOES;
const GLMessage_Function GLMessage::glGetShaderInfoLog;
const GLMessage_Function GLMessage::glGetShaderiv;
const GLMessage_Function GLMessage::glGetShaderPrecisionFormat;
const GLMessage_Function GLMessage::glGetShaderSource;
const GLMessage_Function GLMessage::glGetString;
const GLMessage_Function GLMessage::glGetTexEnvfv;
const GLMessage_Function GLMessage::glGetTexEnviv;
const GLMessage_Function GLMessage::glGetTexEnvxv;
const GLMessage_Function GLMessage::glGetTexEnvxvOES;
const GLMessage_Function GLMessage::glGetTexGenfvOES;
const GLMessage_Function GLMessage::glGetTexGenivOES;
const GLMessage_Function GLMessage::glGetTexGenxvOES;
const GLMessage_Function GLMessage::glGetTexParameterfv;
const GLMessage_Function GLMessage::glGetTexParameteriv;
const GLMessage_Function GLMessage::glGetTexParameterxv;
const GLMessage_Function GLMessage::glGetTexParameterxvOES;
const GLMessage_Function GLMessage::glGetUniformfv;
const GLMessage_Function GLMessage::glGetUniformiv;
const GLMessage_Function GLMessage::glGetUniformLocation;
const GLMessage_Function GLMessage::glGetVertexAttribfv;
const GLMessage_Function GLMessage::glGetVertexAttribiv;
const GLMessage_Function GLMessage::glGetVertexAttribPointerv;
const GLMessage_Function GLMessage::glHint;
const GLMessage_Function GLMessage::glIsBuffer;
const GLMessage_Function GLMessage::glIsEnabled;
const GLMessage_Function GLMessage::glIsFenceNV;
const GLMessage_Function GLMessage::glIsFramebuffer;
const GLMessage_Function GLMessage::glIsFramebufferOES;
const GLMessage_Function GLMessage::glIsProgram;
const GLMessage_Function GLMessage::glIsRenderbuffer;
const GLMessage_Function GLMessage::glIsRenderbufferOES;
const GLMessage_Function GLMessage::glIsShader;
const GLMessage_Function GLMessage::glIsTexture;
const GLMessage_Function GLMessage::glIsVertexArrayOES;
const GLMessage_Function GLMessage::glLightf;
const GLMessage_Function GLMessage::glLightfv;
const GLMessage_Function GLMessage::glLightModelf;
const GLMessage_Function GLMessage::glLightModelfv;
const GLMessage_Function GLMessage::glLightModelx;
const GLMessage_Function GLMessage::glLightModelxOES;
const GLMessage_Function GLMessage::glLightModelxv;
const GLMessage_Function GLMessage::glLightModelxvOES;
const GLMessage_Function GLMessage::glLightx;
const GLMessage_Function GLMessage::glLightxOES;
const GLMessage_Function GLMessage::glLightxv;
const GLMessage_Function GLMessage::glLightxvOES;
const GLMessage_Function GLMessage::glLineWidth;
const GLMessage_Function GLMessage::glLineWidthx;
const GLMessage_Function GLMessage::glLineWidthxOES;
const GLMessage_Function GLMessage::glLinkProgram;
const GLMessage_Function GLMessage::glLoadIdentity;
const GLMessage_Function GLMessage::glLoadMatrixf;
const GLMessage_Function GLMessage::glLoadMatrixx;
const GLMessage_Function GLMessage::glLoadMatrixxOES;
const GLMessage_Function GLMessage::glLoadPaletteFromModelViewMatrixOES;
const GLMessage_Function GLMessage::glLogicOp;
const GLMessage_Function GLMessage::glMapBufferOES;
const GLMessage_Function GLMessage::glMaterialf;
const GLMessage_Function GLMessage::glMaterialfv;
const GLMessage_Function GLMessage::glMaterialx;
const GLMessage_Function GLMessage::glMaterialxOES;
const GLMessage_Function GLMessage::glMaterialxv;
const GLMessage_Function GLMessage::glMaterialxvOES;
const GLMessage_Function GLMessage::glMatrixIndexPointerOES;
const GLMessage_Function GLMessage::glMatrixMode;
const GLMessage_Function GLMessage::glMultiDrawArraysEXT;
const GLMessage_Function GLMessage::glMultiDrawElementsEXT;
const GLMessage_Function GLMessage::glMultiTexCoord4f;
const GLMessage_Function GLMessage::glMultiTexCoord4x;
const GLMessage_Function GLMessage::glMultiTexCoord4xOES;
const GLMessage_Function GLMessage::glMultMatrixf;
const GLMessage_Function GLMessage::glMultMatrixx;
const GLMessage_Function GLMessage::glMultMatrixxOES;
const GLMessage_Function GLMessage::glNormal3f;
const GLMessage_Function GLMessage::glNormal3x;
const GLMessage_Function GLMessage::glNormal3xOES;
const GLMessage_Function GLMessage::glNormalPointer;
const GLMessage_Function GLMessage::glOrthof;
const GLMessage_Function GLMessage::glOrthofOES;
const GLMessage_Function GLMessage::glOrthox;
const GLMessage_Function GLMessage::glOrthoxOES;
const GLMessage_Function GLMessage::glPixelStorei;
const GLMessage_Function GLMessage::glPointParameterf;
const GLMessage_Function GLMessage::glPointParameterfv;
const GLMessage_Function GLMessage::glPointParameterx;
const GLMessage_Function GLMessage::glPointParameterxOES;
const GLMessage_Function GLMessage::glPointParameterxv;
const GLMessage_Function GLMessage::glPointParameterxvOES;
const GLMessage_Function GLMessage::glPointSize;
const GLMessage_Function GLMessage::glPointSizePointerOES;
const GLMessage_Function GLMessage::glPointSizex;
const GLMessage_Function GLMessage::glPointSizexOES;
const GLMessage_Function GLMessage::glPolygonOffset;
const GLMessage_Function GLMessage::glPolygonOffsetx;
const GLMessage_Function GLMessage::glPolygonOffsetxOES;
const GLMessage_Function GLMessage::glPopMatrix;
const GLMessage_Function GLMessage::glProgramBinaryOES;
const GLMessage_Function GLMessage::glPushMatrix;
const GLMessage_Function GLMessage::glQueryMatrixxOES;
const GLMessage_Function GLMessage::glReadPixels;
const GLMessage_Function GLMessage::glReleaseShaderCompiler;
const GLMessage_Function GLMessage::glRenderbufferStorage;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisampleIMG;
const GLMessage_Function GLMessage::glRenderbufferStorageOES;
const GLMessage_Function GLMessage::glRotatef;
const GLMessage_Function GLMessage::glRotatex;
const GLMessage_Function GLMessage::glRotatexOES;
const GLMessage_Function GLMessage::glSampleCoverage;
const GLMessage_Function GLMessage::glSampleCoveragex;
const GLMessage_Function GLMessage::glSampleCoveragexOES;
const GLMessage_Function GLMessage::glScalef;
const GLMessage_Function GLMessage::glScalex;
const GLMessage_Function GLMessage::glScalexOES;
const GLMessage_Function GLMessage::glScissor;
const GLMessage_Function GLMessage::glSelectPerfMonitorCountersAMD;
const GLMessage_Function GLMessage::glSetFenceNV;
const GLMessage_Function GLMessage::glShadeModel;
const GLMessage_Function GLMessage::glShaderBinary;
const GLMessage_Function GLMessage::glShaderSource;
const GLMessage_Function GLMessage::glStartTilingQCOM;
const GLMessage_Function GLMessage::glStencilFunc;
const GLMessage_Function GLMessage::glStencilFuncSeparate;
const GLMessage_Function GLMessage::glStencilMask;
const GLMessage_Function GLMessage::glStencilMaskSeparate;
const GLMessage_Function GLMessage::glStencilOp;
const GLMessage_Function GLMessage::glStencilOpSeparate;
const GLMessage_Function GLMessage::glTestFenceNV;
const GLMessage_Function GLMessage::glTexCoordPointer;
const GLMessage_Function GLMessage::glTexEnvf;
const GLMessage_Function GLMessage::glTexEnvfv;
const GLMessage_Function GLMessage::glTexEnvi;
const GLMessage_Function GLMessage::glTexEnviv;
const GLMessage_Function GLMessage::glTexEnvx;
const GLMessage_Function GLMessage::glTexEnvxOES;
const GLMessage_Function GLMessage::glTexEnvxv;
const GLMessage_Function GLMessage::glTexEnvxvOES;
const GLMessage_Function GLMessage::glTexGenfOES;
const GLMessage_Function GLMessage::glTexGenfvOES;
const GLMessage_Function GLMessage::glTexGeniOES;
const GLMessage_Function GLMessage::glTexGenivOES;
const GLMessage_Function GLMessage::glTexGenxOES;
const GLMessage_Function GLMessage::glTexGenxvOES;
const GLMessage_Function GLMessage::glTexImage2D;
const GLMessage_Function GLMessage::glTexImage3DOES;
const GLMessage_Function GLMessage::glTexParameterf;
const GLMessage_Function GLMessage::glTexParameterfv;
const GLMessage_Function GLMessage::glTexParameteri;
const GLMessage_Function GLMessage::glTexParameteriv;
const GLMessage_Function GLMessage::glTexParameterx;
const GLMessage_Function GLMessage::glTexParameterxOES;
const GLMessage_Function GLMessage::glTexParameterxv;
const GLMessage_Function GLMessage::glTexParameterxvOES;
const GLMessage_Function GLMessage::glTexSubImage2D;
const GLMessage_Function GLMessage::glTexSubImage3DOES;
const GLMessage_Function GLMessage::glTranslatef;
const GLMessage_Function GLMessage::glTranslatex;
const GLMessage_Function GLMessage::glTranslatexOES;
const GLMessage_Function GLMessage::glUniform1f;
const GLMessage_Function GLMessage::glUniform1fv;
const GLMessage_Function GLMessage::glUniform1i;
const GLMessage_Function GLMessage::glUniform1iv;
const GLMessage_Function GLMessage::glUniform2f;
const GLMessage_Function GLMessage::glUniform2fv;
const GLMessage_Function GLMessage::glUniform2i;
const GLMessage_Function GLMessage::glUniform2iv;
const GLMessage_Function GLMessage::glUniform3f;
const GLMessage_Function GLMessage::glUniform3fv;
const GLMessage_Function GLMessage::glUniform3i;
const GLMessage_Function GLMessage::glUniform3iv;
const GLMessage_Function GLMessage::glUniform4f;
const GLMessage_Function GLMessage::glUniform4fv;
const GLMessage_Function GLMessage::glUniform4i;
const GLMessage_Function GLMessage::glUniform4iv;
const GLMessage_Function GLMessage::glUniformMatrix2fv;
const GLMessage_Function GLMessage::glUniformMatrix3fv;
const GLMessage_Function GLMessage::glUniformMatrix4fv;
const GLMessage_Function GLMessage::glUnmapBufferOES;
const GLMessage_Function GLMessage::glUseProgram;
const GLMessage_Function GLMessage::glValidateProgram;
const GLMessage_Function GLMessage::glVertexAttrib1f;
const GLMessage_Function GLMessage::glVertexAttrib1fv;
const GLMessage_Function GLMessage::glVertexAttrib2f;
const GLMessage_Function GLMessage::glVertexAttrib2fv;
const GLMessage_Function GLMessage::glVertexAttrib3f;
const GLMessage_Function GLMessage::glVertexAttrib3fv;
const GLMessage_Function GLMessage::glVertexAttrib4f;
const GLMessage_Function GLMessage::glVertexAttrib4fv;
const GLMessage_Function GLMessage::glVertexAttribPointer;
const GLMessage_Function GLMessage::glVertexPointer;
const GLMessage_Function GLMessage::glViewport;
const GLMessage_Function GLMessage::glWeightPointerOES;
const GLMessage_Function GLMessage::glReadBuffer;
const GLMessage_Function GLMessage::glDrawRangeElements;
const GLMessage_Function GLMessage::glTexImage3D;
const GLMessage_Function GLMessage::glTexSubImage3D;
const GLMessage_Function GLMessage::glCopyTexSubImage3D;
const GLMessage_Function GLMessage::glCompressedTexImage3D;
const GLMessage_Function GLMessage::glCompressedTexSubImage3D;
const GLMessage_Function GLMessage::glGenQueries;
const GLMessage_Function GLMessage::glDeleteQueries;
const GLMessage_Function GLMessage::glIsQuery;
const GLMessage_Function GLMessage::glBeginQuery;
const GLMessage_Function GLMessage::glEndQuery;
const GLMessage_Function GLMessage::glGetQueryiv;
const GLMessage_Function GLMessage::glGetQueryObjectuiv;
const GLMessage_Function GLMessage::glUnmapBuffer;
const GLMessage_Function GLMessage::glGetBufferPointerv;
const GLMessage_Function GLMessage::glDrawBuffers;
const GLMessage_Function GLMessage::glUniformMatrix2x3fv;
const GLMessage_Function GLMessage::glUniformMatrix3x2fv;
const GLMessage_Function GLMessage::glUniformMatrix2x4fv;
const GLMessage_Function GLMessage::glUniformMatrix4x2fv;
const GLMessage_Function GLMessage::glUniformMatrix3x4fv;
const GLMessage_Function GLMessage::glUniformMatrix4x3fv;
const GLMessage_Function GLMessage::glBlitFramebuffer;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisample;
const GLMessage_Function GLMessage::glFramebufferTextureLayer;
const GLMessage_Function GLMessage::glMapBufferRange;
const GLMessage_Function GLMessage::glFlushMappedBufferRange;
const GLMessage_Function GLMessage::glBindVertexArray;
const GLMessage_Function GLMessage::glDeleteVertexArrays;
const GLMessage_Function GLMessage::glGenVertexArrays;
const GLMessage_Function GLMessage::glIsVertexArray;
const GLMessage_Function GLMessage::glGetIntegeri_v;
const GLMessage_Function GLMessage::glBeginTransformFeedback;
const GLMessage_Function GLMessage::glEndTransformFeedback;
const GLMessage_Function GLMessage::glBindBufferRange;
const GLMessage_Function GLMessage::glBindBufferBase;
const GLMessage_Function GLMessage::glTransformFeedbackVaryings;
const GLMessage_Function GLMessage::glGetTransformFeedbackVarying;
const GLMessage_Function GLMessage::glVertexAttribIPointer;
const GLMessage_Function GLMessage::glGetVertexAttribIiv;
const GLMessage_Function GLMessage::glGetVertexAttribIuiv;
const GLMessage_Function GLMessage::glVertexAttribI4i;
const GLMessage_Function GLMessage::glVertexAttribI4ui;
const GLMessage_Function GLMessage::glVertexAttribI4iv;
const GLMessage_Function GLMessage::glVertexAttribI4uiv;
const GLMessage_Function GLMessage::glGetUniformuiv;
const GLMessage_Function GLMessage::glGetFragDataLocation;
const GLMessage_Function GLMessage::glUniform1ui;
const GLMessage_Function GLMessage::glUniform2ui;
const GLMessage_Function GLMessage::glUniform3ui;
const GLMessage_Function GLMessage::glUniform4ui;
const GLMessage_Function GLMessage::glUniform1uiv;
const GLMessage_Function GLMessage::glUniform2uiv;
const GLMessage_Function GLMessage::glUniform3uiv;
const GLMessage_Function GLMessage::glUniform4uiv;
const GLMessage_Function GLMessage::glClearBufferiv;
const GLMessage_Function GLMessage::glClearBufferuiv;
const GLMessage_Function GLMessage::glClearBufferfv;
const GLMessage_Function GLMessage::glClearBufferfi;
const GLMessage_Function GLMessage::glGetStringi;
const GLMessage_Function GLMessage::glCopyBufferSubData;
const GLMessage_Function GLMessage::glGetUniformIndices;
const GLMessage_Function GLMessage::glGetActiveUniformsiv;
const GLMessage_Function GLMessage::glGetUniformBlockIndex;
const GLMessage_Function GLMessage::glGetActiveUniformBlockiv;
const GLMessage_Function GLMessage::glGetActiveUniformBlockName;
const GLMessage_Function GLMessage::glUniformBlockBinding;
const GLMessage_Function GLMessage::glDrawArraysInstanced;
const GLMessage_Function GLMessage::glDrawElementsInstanced;
const GLMessage_Function GLMessage::glFenceSync;
const GLMessage_Function GLMessage::glIsSync;
const GLMessage_Function GLMessage::glDeleteSync;
const GLMessage_Function GLMessage::glClientWaitSync;
const GLMessage_Function GLMessage::glWaitSync;
const GLMessage_Function GLMessage::glGetInteger64v;
const GLMessage_Function GLMessage::glGetSynciv;
const GLMessage_Function GLMessage::glGetInteger64i_v;
const GLMessage_Function GLMessage::glGetBufferParameteri64v;
const GLMessage_Function GLMessage::glGenSamplers;
const GLMessage_Function GLMessage::glDeleteSamplers;
const GLMessage_Function GLMessage::glIsSampler;
const GLMessage_Function GLMessage::glBindSampler;
const GLMessage_Function GLMessage::glSamplerParameteri;
const GLMessage_Function GLMessage::glSamplerParameteriv;
const GLMessage_Function GLMessage::glSamplerParameterf;
const GLMessage_Function GLMessage::glSamplerParameterfv;
const GLMessage_Function GLMessage::glGetSamplerParameteriv;
const GLMessage_Function GLMessage::glGetSamplerParameterfv;
const GLMessage_Function GLMessage::glVertexAttribDivisor;
const GLMessage_Function GLMessage::glBindTransformFeedback;
const GLMessage_Function GLMessage::glDeleteTransformFeedbacks;
const GLMessage_Function GLMessage::glGenTransformFeedbacks;
const GLMessage_Function GLMessage::glIsTransformFeedback;
const GLMessage_Function GLMessage::glPauseTransformFeedback;
const GLMessage_Function GLMessage::glResumeTransformFeedback;
const GLMessage_Function GLMessage::glGetProgramBinary;
const GLMessage_Function GLMessage::glProgramBinary;
const GLMessage_Function GLMessage::glProgramParameteri;
const GLMessage_Function GLMessage::glInvalidateFramebuffer;
const GLMessage_Function GLMessage::glInvalidateSubFramebuffer;
const GLMessage_Function GLMessage::glTexStorage2D;
const GLMessage_Function GLMessage::glTexStorage3D;
const GLMessage_Function GLMessage::glGetInternalformativ;
const GLMessage_Function GLMessage::glActiveShaderProgramEXT;
const GLMessage_Function GLMessage::glAlphaFuncQCOM;
const GLMessage_Function GLMessage::glBeginQueryEXT;
const GLMessage_Function GLMessage::glBindProgramPipelineEXT;
const GLMessage_Function GLMessage::glBlitFramebufferANGLE;
const GLMessage_Function GLMessage::glCreateShaderProgramvEXT;
const GLMessage_Function GLMessage::glDeleteProgramPipelinesEXT;
const GLMessage_Function GLMessage::glDeleteQueriesEXT;
const GLMessage_Function GLMessage::glDrawBuffersNV;
const GLMessage_Function GLMessage::glEndQueryEXT;
const GLMessage_Function GLMessage::glFramebufferTexture2DMultisampleEXT;
const GLMessage_Function GLMessage::glGenProgramPipelinesEXT;
const GLMessage_Function GLMessage::glGenQueriesEXT;
const GLMessage_Function GLMessage::glGetGraphicsResetStatusEXT;
const GLMessage_Function GLMessage::glGetObjectLabelEXT;
const GLMessage_Function GLMessage::glGetProgramPipelineInfoLogEXT;
const GLMessage_Function GLMessage::glGetProgramPipelineivEXT;
const GLMessage_Function GLMessage::glGetQueryObjectuivEXT;
const GLMessage_Function GLMessage::glGetQueryivEXT;
const GLMessage_Function GLMessage::glGetnUniformfvEXT;
const GLMessage_Function GLMessage::glGetnUniformivEXT;
const GLMessage_Function GLMessage::glInsertEventMarkerEXT;
const GLMessage_Function GLMessage::glIsProgramPipelineEXT;
const GLMessage_Function GLMessage::glIsQueryEXT;
const GLMessage_Function GLMessage::glLabelObjectEXT;
const GLMessage_Function GLMessage::glPopGroupMarkerEXT;
const GLMessage_Function GLMessage::glProgramParameteriEXT;
const GLMessage_Function GLMessage::glProgramUniform1fEXT;
const GLMessage_Function GLMessage::glProgramUniform1fvEXT;
const GLMessage_Function GLMessage::glProgramUniform1iEXT;
const GLMessage_Function GLMessage::glProgramUniform1ivEXT;
const GLMessage_Function GLMessage::glProgramUniform2fEXT;
const GLMessage_Function GLMessage::glProgramUniform2fvEXT;
const GLMessage_Function GLMessage::glProgramUniform2iEXT;
const GLMessage_Function GLMessage::glProgramUniform2ivEXT;
const GLMessage_Function GLMessage::glProgramUniform3fEXT;
const GLMessage_Function GLMessage::glProgramUniform3fvEXT;
const GLMessage_Function GLMessage::glProgramUniform3iEXT;
const GLMessage_Function GLMessage::glProgramUniform3ivEXT;
const GLMessage_Function GLMessage::glProgramUniform4fEXT;
const GLMessage_Function GLMessage::glProgramUniform4fvEXT;
const GLMessage_Function GLMessage::glProgramUniform4iEXT;
const GLMessage_Function GLMessage::glProgramUniform4ivEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix2fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix3fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix4fvEXT;
const GLMessage_Function GLMessage::glPushGroupMarkerEXT;
const GLMessage_Function GLMessage::glReadBufferNV;
const GLMessage_Function GLMessage::glReadnPixelsEXT;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisampleANGLE;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisampleAPPLE;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisampleEXT;
const GLMessage_Function GLMessage::glResolveMultisampleFramebufferAPPLE;
const GLMessage_Function GLMessage::glTexStorage1DEXT;
const GLMessage_Function GLMessage::glTexStorage2DEXT;
const GLMessage_Function GLMessage::glTexStorage3DEXT;
const GLMessage_Function GLMessage::glTextureStorage1DEXT;
const GLMessage_Function GLMessage::glTextureStorage2DEXT;
const GLMessage_Function GLMessage::glTextureStorage3DEXT;
const GLMessage_Function GLMessage::glUseProgramStagesEXT;
const GLMessage_Function GLMessage::glValidateProgramPipelineEXT;
const GLMessage_Function GLMessage::eglGetDisplay;
const GLMessage_Function GLMessage::eglInitialize;
const GLMessage_Function GLMessage::eglTerminate;
const GLMessage_Function GLMessage::eglGetConfigs;
const GLMessage_Function GLMessage::eglChooseConfig;
const GLMessage_Function GLMessage::eglGetConfigAttrib;
const GLMessage_Function GLMessage::eglCreateWindowSurface;
const GLMessage_Function GLMessage::eglCreatePixmapSurface;
const GLMessage_Function GLMessage::eglCreatePbufferSurface;
const GLMessage_Function GLMessage::eglDestroySurface;
const GLMessage_Function GLMessage::eglQuerySurface;
const GLMessage_Function GLMessage::eglCreateContext;
const GLMessage_Function GLMessage::eglDestroyContext;
const GLMessage_Function GLMessage::eglMakeCurrent;
const GLMessage_Function GLMessage::eglGetCurrentContext;
const GLMessage_Function GLMessage::eglGetCurrentSurface;
const GLMessage_Function GLMessage::eglGetCurrentDisplay;
const GLMessage_Function GLMessage::eglQueryContext;
const GLMessage_Function GLMessage::eglWaitGL;
const GLMessage_Function GLMessage::eglWaitNative;
const GLMessage_Function GLMessage::eglSwapBuffers;
const GLMessage_Function GLMessage::eglCopyBuffers;
const GLMessage_Function GLMessage::eglGetError;
const GLMessage_Function GLMessage::eglQueryString;
const GLMessage_Function GLMessage::eglGetProcAddress;
const GLMessage_Function GLMessage::eglSurfaceAttrib;
const GLMessage_Function GLMessage::eglBindTexImage;
const GLMessage_Function GLMessage::eglReleaseTexImage;
const GLMessage_Function GLMessage::eglSwapInterval;
const GLMessage_Function GLMessage::eglBindAPI;
const GLMessage_Function GLMessage::eglQueryAPI;
const GLMessage_Function GLMessage::eglWaitClient;
const GLMessage_Function GLMessage::eglReleaseThread;
const GLMessage_Function GLMessage::eglCreatePbufferFromClientBuffer;
const GLMessage_Function GLMessage::eglLockSurfaceKHR;
const GLMessage_Function GLMessage::eglUnlockSurfaceKHR;
const GLMessage_Function GLMessage::eglCreateImageKHR;
const GLMessage_Function GLMessage::eglDestroyImageKHR;
const GLMessage_Function GLMessage::eglCreateSyncKHR;
const GLMessage_Function GLMessage::eglDestroySyncKHR;
const GLMessage_Function GLMessage::eglClientWaitSyncKHR;
const GLMessage_Function GLMessage::eglGetSyncAttribKHR;
const GLMessage_Function GLMessage::eglSetSwapRectangleANDROID;
const GLMessage_Function GLMessage::eglGetRenderBufferANDROID;
const GLMessage_Function GLMessage::eglGetSystemTimeFrequencyNV;
const GLMessage_Function GLMessage::eglGetSystemTimeNV;
const GLMessage_Function GLMessage::invalid;
const GLMessage_Function GLMessage::glVertexAttribPointerData;
const GLMessage_Function GLMessage::Function_MIN;
const GLMessage_Function GLMessage::Function_MAX;
const int GLMessage::Function_ARRAYSIZE;
#endif  // _MSC_VER
bool GLMessage_DataType_Type_IsValid(int value) {
  switch(value) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
      return true;
    default:
      return false;
  }
}

#ifndef _MSC_VER
const GLMessage_DataType_Type GLMessage_DataType::VOID;
const GLMessage_DataType_Type GLMessage_DataType::CHAR;
const GLMessage_DataType_Type GLMessage_DataType::BYTE;
const GLMessage_DataType_Type GLMessage_DataType::INT;
const GLMessage_DataType_Type GLMessage_DataType::FLOAT;
const GLMessage_DataType_Type GLMessage_DataType::BOOL;
const GLMessage_DataType_Type GLMessage_DataType::ENUM;
const GLMessage_DataType_Type GLMessage_DataType::INT64;
const GLMessage_DataType_Type GLMessage_DataType::Type_MIN;
const GLMessage_DataType_Type GLMessage_DataType::Type_MAX;
const int GLMessage_DataType::Type_ARRAYSIZE;
#endif  // _MSC_VER
#ifndef _MSC_VER
const int GLMessage_DataType::kTypeFieldNumber;
const int GLMessage_DataType::kIsArrayFieldNumber;
const int GLMessage_DataType::kIntValueFieldNumber;
const int GLMessage_DataType::kFloatValueFieldNumber;
const int GLMessage_DataType::kCharValueFieldNumber;
const int GLMessage_DataType::kRawBytesFieldNumber;
const int GLMessage_DataType::kBoolValueFieldNumber;
const int GLMessage_DataType::kInt64ValueFieldNumber;
#endif  // !_MSC_VER

GLMessage_DataType::GLMessage_DataType()
  : ::google::protobuf::MessageLite() {
  SharedCtor();
}

void GLMessage_DataType::InitAsDefaultInstance() {
}

GLMessage_DataType::GLMessage_DataType(const GLMessage_DataType& from)
  : ::google::protobuf::MessageLite() {
  SharedCtor();
  MergeFrom(from);
}

void GLMessage_DataType::SharedCtor() {
  _cached_size_ = 0;
  type_ = 1;
  isarray_ = false;
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

GLMessage_DataType::~GLMessage_DataType() {
  SharedDtor();
}

void GLMessage_DataType::SharedDtor() {
  if (this != default_instance_) {
  }
}

void GLMessage_DataType::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const GLMessage_DataType& GLMessage_DataType::default_instance() {
  if (default_instance_ == NULL) protobuf_AddDesc_gltrace_2eproto();  return *default_instance_;
}

GLMessage_DataType* GLMessage_DataType::default_instance_ = NULL;

GLMessage_DataType* GLMessage_DataType::New() const {
  return new GLMessage_DataType;
}

void GLMessage_DataType::Clear() {
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    type_ = 1;
    isarray_ = false;
  }
  intvalue_.Clear();
  floatvalue_.Clear();
  charvalue_.Clear();
  rawbytes_.Clear();
  boolvalue_.Clear();
  int64value_.Clear();
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

bool GLMessage_DataType::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
  ::google::protobuf::uint32 tag;
  while ((tag = input->ReadTag()) != 0) {
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // required .android.gltrace.GLMessage.DataType.Type type = 1 [default = VOID];
      case 1: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          if (::android::gltrace::GLMessage_DataType_Type_IsValid(value)) {
            set_type(static_cast< ::android::gltrace::GLMessage_DataType_Type >(value));
          }
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(16)) goto parse_isArray;
        break;
      }
      
      // required bool isArray = 2 [default = false];
      case 2: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_isArray:
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &isarray_)));
          _set_bit(1);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(24)) goto parse_intValue;
        break;
      }
      
      // repeated int32 intValue = 3;
      case 3: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_intValue:
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 1, 24, input, this->mutable_intvalue())));
        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
                   == ::google::protobuf::internal::WireFormatLite::
                      WIRETYPE_LENGTH_DELIMITED) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_intvalue())));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(24)) goto parse_intValue;
        if (input->ExpectTag(37)) goto parse_floatValue;
        break;
      }
      
      // repeated float floatValue = 4;
      case 4: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_FIXED32) {
         parse_floatValue:
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 1, 37, input, this->mutable_floatvalue())));
        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
                   == ::google::protobuf::internal::WireFormatLite::
                      WIRETYPE_LENGTH_DELIMITED) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_floatvalue())));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(37)) goto parse_floatValue;
        if (input->ExpectTag(42)) goto parse_charValue;
        break;
      }
      
      // repeated bytes charValue = 5;
      case 5: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_charValue:
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_charvalue()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(42)) goto parse_charValue;
        if (input->ExpectTag(50)) goto parse_rawBytes;
        break;
      }
      
      // repeated bytes rawBytes = 6;
      case 6: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_rawBytes:
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_rawbytes()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(50)) goto parse_rawBytes;
        if (input->ExpectTag(56)) goto parse_boolValue;
        break;
      }
      
      // repeated bool boolValue = 7;
      case 7: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_boolValue:
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 1, 56, input, this->mutable_boolvalue())));
        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
                   == ::google::protobuf::internal::WireFormatLite::
                      WIRETYPE_LENGTH_DELIMITED) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_boolvalue())));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(56)) goto parse_boolValue;
        if (input->ExpectTag(64)) goto parse_int64Value;
        break;
      }
      
      // repeated int64 int64Value = 8;
      case 8: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_int64Value:
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 1, 64, input, this->mutable_int64value())));
        } else if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag)
                   == ::google::protobuf::internal::WireFormatLite::
                      WIRETYPE_LENGTH_DELIMITED) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_int64value())));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(64)) goto parse_int64Value;
        if (input->ExpectAtEnd()) return true;
        break;
      }
      
      default: {
      handle_uninterpreted:
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
          return true;
        }
        DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
        break;
      }
    }
  }
  return true;
#undef DO_
}

void GLMessage_DataType::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // required .android.gltrace.GLMessage.DataType.Type type = 1 [default = VOID];
  if (_has_bit(0)) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      1, this->type(), output);
  }
  
  // required bool isArray = 2 [default = false];
  if (_has_bit(1)) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->isarray(), output);
  }
  
  // repeated int32 intValue = 3;
  for (int i = 0; i < this->intvalue_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(
      3, this->intvalue(i), output);
  }
  
  // repeated float floatValue = 4;
  for (int i = 0; i < this->floatvalue_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(
      4, this->floatvalue(i), output);
  }
  
  // repeated bytes charValue = 5;
  for (int i = 0; i < this->charvalue_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      5, this->charvalue(i), output);
  }
  
  // repeated bytes rawBytes = 6;
  for (int i = 0; i < this->rawbytes_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      6, this->rawbytes(i), output);
  }
  
  // repeated bool boolValue = 7;
  for (int i = 0; i < this->boolvalue_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(
      7, this->boolvalue(i), output);
  }
  
  // repeated int64 int64Value = 8;
  for (int i = 0; i < this->int64value_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(
      8, this->int64value(i), output);
  }
  
}

int GLMessage_DataType::ByteSize() const {
  int total_size = 0;
  
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    // required .android.gltrace.GLMessage.DataType.Type type = 1 [default = VOID];
    if (has_type()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
    }
    
    // required bool isArray = 2 [default = false];
    if (has_isarray()) {
      total_size += 1 + 1;
    }
    
  }
  // repeated int32 intValue = 3;
  {
    int data_size = 0;
    for (int i = 0; i < this->intvalue_size(); i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::
        Int32Size(this->intvalue(i));
    }
    total_size += 1 * this->intvalue_size() + data_size;
  }
  
  // repeated float floatValue = 4;
  {
    int data_size = 0;
    data_size = 4 * this->floatvalue_size();
    total_size += 1 * this->floatvalue_size() + data_size;
  }
  
  // repeated bytes charValue = 5;
  total_size += 1 * this->charvalue_size();
  for (int i = 0; i < this->charvalue_size(); i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->charvalue(i));
  }
  
  // repeated bytes rawBytes = 6;
  total_size += 1 * this->rawbytes_size();
  for (int i = 0; i < this->rawbytes_size(); i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->rawbytes(i));
  }
  
  // repeated bool boolValue = 7;
  {
    int data_size = 0;
    data_size = 1 * this->boolvalue_size();
    total_size += 1 * this->boolvalue_size() + data_size;
  }
  
  // repeated int64 int64Value = 8;
  {
    int data_size = 0;
    for (int i = 0; i < this->int64value_size(); i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::
        Int64Size(this->int64value(i));
    }
    total_size += 1 * this->int64value_size() + data_size;
  }
  
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = total_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void GLMessage_DataType::CheckTypeAndMergeFrom(
    const ::google::protobuf::MessageLite& from) {
  MergeFrom(*::google::protobuf::down_cast<const GLMessage_DataType*>(&from));
}

void GLMessage_DataType::MergeFrom(const GLMessage_DataType& from) {
  GOOGLE_CHECK_NE(&from, this);
  intvalue_.MergeFrom(from.intvalue_);
  floatvalue_.MergeFrom(from.floatvalue_);
  charvalue_.MergeFrom(from.charvalue_);
  rawbytes_.MergeFrom(from.rawbytes_);
  boolvalue_.MergeFrom(from.boolvalue_);
  int64value_.MergeFrom(from.int64value_);
  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    if (from._has_bit(0)) {
      set_type(from.type());
    }
    if (from._has_bit(1)) {
      set_isarray(from.isarray());
    }
  }
}

void GLMessage_DataType::CopyFrom(const GLMessage_DataType& from) {
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool GLMessage_DataType::IsInitialized() const {
  if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
  
  return true;
}

void GLMessage_DataType::Swap(GLMessage_DataType* other) {
  if (other != this) {
    std::swap(type_, other->type_);
    std::swap(isarray_, other->isarray_);
    intvalue_.Swap(&other->intvalue_);
    floatvalue_.Swap(&other->floatvalue_);
    charvalue_.Swap(&other->charvalue_);
    rawbytes_.Swap(&other->rawbytes_);
    boolvalue_.Swap(&other->boolvalue_);
    int64value_.Swap(&other->int64value_);
    std::swap(_has_bits_[0], other->_has_bits_[0]);
    std::swap(_cached_size_, other->_cached_size_);
  }
}

::std::string GLMessage_DataType::GetTypeName() const {
  return "android.gltrace.GLMessage.DataType";
}


// -------------------------------------------------------------------

#ifndef _MSC_VER
const int GLMessage_FrameBuffer::kWidthFieldNumber;
const int GLMessage_FrameBuffer::kHeightFieldNumber;
const int GLMessage_FrameBuffer::kContentsFieldNumber;
#endif  // !_MSC_VER

GLMessage_FrameBuffer::GLMessage_FrameBuffer()
  : ::google::protobuf::MessageLite() {
  SharedCtor();
}

void GLMessage_FrameBuffer::InitAsDefaultInstance() {
}

GLMessage_FrameBuffer::GLMessage_FrameBuffer(const GLMessage_FrameBuffer& from)
  : ::google::protobuf::MessageLite() {
  SharedCtor();
  MergeFrom(from);
}

void GLMessage_FrameBuffer::SharedCtor() {
  _cached_size_ = 0;
  width_ = 0;
  height_ = 0;
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

GLMessage_FrameBuffer::~GLMessage_FrameBuffer() {
  SharedDtor();
}

void GLMessage_FrameBuffer::SharedDtor() {
  if (this != default_instance_) {
  }
}

void GLMessage_FrameBuffer::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const GLMessage_FrameBuffer& GLMessage_FrameBuffer::default_instance() {
  if (default_instance_ == NULL) protobuf_AddDesc_gltrace_2eproto();  return *default_instance_;
}

GLMessage_FrameBuffer* GLMessage_FrameBuffer::default_instance_ = NULL;

GLMessage_FrameBuffer* GLMessage_FrameBuffer::New() const {
  return new GLMessage_FrameBuffer;
}

void GLMessage_FrameBuffer::Clear() {
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    width_ = 0;
    height_ = 0;
  }
  contents_.Clear();
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

bool GLMessage_FrameBuffer::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
  ::google::protobuf::uint32 tag;
  while ((tag = input->ReadTag()) != 0) {
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // required int32 width = 1;
      case 1: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &width_)));
          _set_bit(0);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(16)) goto parse_height;
        break;
      }
      
      // required int32 height = 2;
      case 2: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_height:
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &height_)));
          _set_bit(1);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(26)) goto parse_contents;
        break;
      }
      
      // repeated bytes contents = 3;
      case 3: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_contents:
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_contents()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(26)) goto parse_contents;
        if (input->ExpectAtEnd()) return true;
        break;
      }
      
      default: {
      handle_uninterpreted:
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
          return true;
        }
        DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
        break;
      }
    }
  }
  return true;
#undef DO_
}

void GLMessage_FrameBuffer::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // required int32 width = 1;
  if (_has_bit(0)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->width(), output);
  }
  
  // required int32 height = 2;
  if (_has_bit(1)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->height(), output);
  }
  
  // repeated bytes contents = 3;
  for (int i = 0; i < this->contents_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      3, this->contents(i), output);
  }
  
}

int GLMessage_FrameBuffer::ByteSize() const {
  int total_size = 0;
  
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    // required int32 width = 1;
    if (has_width()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->width());
    }
    
    // required int32 height = 2;
    if (has_height()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->height());
    }
    
  }
  // repeated bytes contents = 3;
  total_size += 1 * this->contents_size();
  for (int i = 0; i < this->contents_size(); i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->contents(i));
  }
  
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = total_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void GLMessage_FrameBuffer::CheckTypeAndMergeFrom(
    const ::google::protobuf::MessageLite& from) {
  MergeFrom(*::google::protobuf::down_cast<const GLMessage_FrameBuffer*>(&from));
}

void GLMessage_FrameBuffer::MergeFrom(const GLMessage_FrameBuffer& from) {
  GOOGLE_CHECK_NE(&from, this);
  contents_.MergeFrom(from.contents_);
  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    if (from._has_bit(0)) {
      set_width(from.width());
    }
    if (from._has_bit(1)) {
      set_height(from.height());
    }
  }
}

void GLMessage_FrameBuffer::CopyFrom(const GLMessage_FrameBuffer& from) {
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool GLMessage_FrameBuffer::IsInitialized() const {
  if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
  
  return true;
}

void GLMessage_FrameBuffer::Swap(GLMessage_FrameBuffer* other) {
  if (other != this) {
    std::swap(width_, other->width_);
    std::swap(height_, other->height_);
    contents_.Swap(&other->contents_);
    std::swap(_has_bits_[0], other->_has_bits_[0]);
    std::swap(_cached_size_, other->_cached_size_);
  }
}

::std::string GLMessage_FrameBuffer::GetTypeName() const {
  return "android.gltrace.GLMessage.FrameBuffer";
}


// -------------------------------------------------------------------

#ifndef _MSC_VER
const int GLMessage::kContextIdFieldNumber;
const int GLMessage::kStartTimeFieldNumber;
const int GLMessage::kDurationFieldNumber;
const int GLMessage::kFunctionFieldNumber;
const int GLMessage::kArgsFieldNumber;
const int GLMessage::kReturnValueFieldNumber;
const int GLMessage::kFbFieldNumber;
const int GLMessage::kThreadtimeFieldNumber;
#endif  // !_MSC_VER

GLMessage::GLMessage()
  : ::google::protobuf::MessageLite() {
  SharedCtor();
}

void GLMessage::InitAsDefaultInstance() {
  returnvalue_ = const_cast< ::android::gltrace::GLMessage_DataType*>(&::android::gltrace::GLMessage_DataType::default_instance());
  fb_ = const_cast< ::android::gltrace::GLMessage_FrameBuffer*>(&::android::gltrace::GLMessage_FrameBuffer::default_instance());
}

GLMessage::GLMessage(const GLMessage& from)
  : ::google::protobuf::MessageLite() {
  SharedCtor();
  MergeFrom(from);
}

void GLMessage::SharedCtor() {
  _cached_size_ = 0;
  context_id_ = 0;
  start_time_ = GOOGLE_LONGLONG(0);
  duration_ = 0;
  function_ = 3000;
  returnvalue_ = NULL;
  fb_ = NULL;
  threadtime_ = 0;
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

GLMessage::~GLMessage() {
  SharedDtor();
}

void GLMessage::SharedDtor() {
  if (this != default_instance_) {
    delete returnvalue_;
    delete fb_;
  }
}

void GLMessage::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const GLMessage& GLMessage::default_instance() {
  if (default_instance_ == NULL) protobuf_AddDesc_gltrace_2eproto();  return *default_instance_;
}

GLMessage* GLMessage::default_instance_ = NULL;

GLMessage* GLMessage::New() const {
  return new GLMessage;
}

void GLMessage::Clear() {
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    context_id_ = 0;
    start_time_ = GOOGLE_LONGLONG(0);
    duration_ = 0;
    function_ = 3000;
    if (_has_bit(5)) {
      if (returnvalue_ != NULL) returnvalue_->::android::gltrace::GLMessage_DataType::Clear();
    }
    if (_has_bit(6)) {
      if (fb_ != NULL) fb_->::android::gltrace::GLMessage_FrameBuffer::Clear();
    }
    threadtime_ = 0;
  }
  args_.Clear();
  ::memset(_has_bits_, 0, sizeof(_has_bits_));
}

bool GLMessage::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
  ::google::protobuf::uint32 tag;
  while ((tag = input->ReadTag()) != 0) {
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // required int32 context_id = 1;
      case 1: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &context_id_)));
          _set_bit(0);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(16)) goto parse_start_time;
        break;
      }
      
      // required int64 start_time = 2;
      case 2: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_start_time:
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, &start_time_)));
          _set_bit(1);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(24)) goto parse_duration;
        break;
      }
      
      // required int32 duration = 3;
      case 3: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_duration:
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &duration_)));
          _set_bit(2);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(32)) goto parse_function;
        break;
      }
      
      // required .android.gltrace.GLMessage.Function function = 4 [default = invalid];
      case 4: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_function:
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          if (::android::gltrace::GLMessage_Function_IsValid(value)) {
            set_function(static_cast< ::android::gltrace::GLMessage_Function >(value));
          }
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(42)) goto parse_args;
        break;
      }
      
      // repeated .android.gltrace.GLMessage.DataType args = 5;
      case 5: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_args:
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, add_args()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(42)) goto parse_args;
        if (input->ExpectTag(50)) goto parse_returnValue;
        break;
      }
      
      // optional .android.gltrace.GLMessage.DataType returnValue = 6;
      case 6: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_returnValue:
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
               input, mutable_returnvalue()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(58)) goto parse_fb;
        break;
      }
      
      // optional .android.gltrace.GLMessage.FrameBuffer fb = 7;
      case 7: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
         parse_fb:
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
               input, mutable_fb()));
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectTag(64)) goto parse_threadtime;
        break;
      }
      
      // optional int32 threadtime = 8;
      case 8: {
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
         parse_threadtime:
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &threadtime_)));
          _set_bit(7);
        } else {
          goto handle_uninterpreted;
        }
        if (input->ExpectAtEnd()) return true;
        break;
      }
      
      default: {
      handle_uninterpreted:
        if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
          return true;
        }
        DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
        break;
      }
    }
  }
  return true;
#undef DO_
}

void GLMessage::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // required int32 context_id = 1;
  if (_has_bit(0)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->context_id(), output);
  }
  
  // required int64 start_time = 2;
  if (_has_bit(1)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->start_time(), output);
  }
  
  // required int32 duration = 3;
  if (_has_bit(2)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->duration(), output);
  }
  
  // required .android.gltrace.GLMessage.Function function = 4 [default = invalid];
  if (_has_bit(3)) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      4, this->function(), output);
  }
  
  // repeated .android.gltrace.GLMessage.DataType args = 5;
  for (int i = 0; i < this->args_size(); i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessage(
      5, this->args(i), output);
  }
  
  // optional .android.gltrace.GLMessage.DataType returnValue = 6;
  if (_has_bit(5)) {
    ::google::protobuf::internal::WireFormatLite::WriteMessage(
      6, this->returnvalue(), output);
  }
  
  // optional .android.gltrace.GLMessage.FrameBuffer fb = 7;
  if (_has_bit(6)) {
    ::google::protobuf::internal::WireFormatLite::WriteMessage(
      7, this->fb(), output);
  }
  
  // optional int32 threadtime = 8;
  if (_has_bit(7)) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->threadtime(), output);
  }
  
}

int GLMessage::ByteSize() const {
  int total_size = 0;
  
  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    // required int32 context_id = 1;
    if (has_context_id()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->context_id());
    }
    
    // required int64 start_time = 2;
    if (has_start_time()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int64Size(
          this->start_time());
    }
    
    // required int32 duration = 3;
    if (has_duration()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->duration());
    }
    
    // required .android.gltrace.GLMessage.Function function = 4 [default = invalid];
    if (has_function()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::EnumSize(this->function());
    }
    
    // optional .android.gltrace.GLMessage.DataType returnValue = 6;
    if (has_returnvalue()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->returnvalue());
    }
    
    // optional .android.gltrace.GLMessage.FrameBuffer fb = 7;
    if (has_fb()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->fb());
    }
    
    // optional int32 threadtime = 8;
    if (has_threadtime()) {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
          this->threadtime());
    }
    
  }
  // repeated .android.gltrace.GLMessage.DataType args = 5;
  total_size += 1 * this->args_size();
  for (int i = 0; i < this->args_size(); i++) {
    total_size +=
      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
        this->args(i));
  }
  
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = total_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void GLMessage::CheckTypeAndMergeFrom(
    const ::google::protobuf::MessageLite& from) {
  MergeFrom(*::google::protobuf::down_cast<const GLMessage*>(&from));
}

void GLMessage::MergeFrom(const GLMessage& from) {
  GOOGLE_CHECK_NE(&from, this);
  args_.MergeFrom(from.args_);
  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
    if (from._has_bit(0)) {
      set_context_id(from.context_id());
    }
    if (from._has_bit(1)) {
      set_start_time(from.start_time());
    }
    if (from._has_bit(2)) {
      set_duration(from.duration());
    }
    if (from._has_bit(3)) {
      set_function(from.function());
    }
    if (from._has_bit(5)) {
      mutable_returnvalue()->::android::gltrace::GLMessage_DataType::MergeFrom(from.returnvalue());
    }
    if (from._has_bit(6)) {
      mutable_fb()->::android::gltrace::GLMessage_FrameBuffer::MergeFrom(from.fb());
    }
    if (from._has_bit(7)) {
      set_threadtime(from.threadtime());
    }
  }
}

void GLMessage::CopyFrom(const GLMessage& from) {
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool GLMessage::IsInitialized() const {
  if ((_has_bits_[0] & 0x0000000f) != 0x0000000f) return false;
  
  for (int i = 0; i < args_size(); i++) {
    if (!this->args(i).IsInitialized()) return false;
  }
  if (has_returnvalue()) {
    if (!this->returnvalue().IsInitialized()) return false;
  }
  if (has_fb()) {
    if (!this->fb().IsInitialized()) return false;
  }
  return true;
}

void GLMessage::Swap(GLMessage* other) {
  if (other != this) {
    std::swap(context_id_, other->context_id_);
    std::swap(start_time_, other->start_time_);
    std::swap(duration_, other->duration_);
    std::swap(function_, other->function_);
    args_.Swap(&other->args_);
    std::swap(returnvalue_, other->returnvalue_);
    std::swap(fb_, other->fb_);
    std::swap(threadtime_, other->threadtime_);
    std::swap(_has_bits_[0], other->_has_bits_[0]);
    std::swap(_cached_size_, other->_cached_size_);
  }
}

::std::string GLMessage::GetTypeName() const {
  return "android.gltrace.GLMessage";
}


// @@protoc_insertion_point(namespace_scope)

}  // namespace gltrace
}  // namespace android

// @@protoc_insertion_point(global_scope)
