// 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 480:
    case 481:
    case 482:
    case 483:
    case 484:
    case 485:
    case 486:
    case 487:
    case 488:
    case 489:
    case 490:
    case 491:
    case 492:
    case 493:
    case 494:
    case 495:
    case 496:
    case 497:
    case 498:
    case 499:
    case 500:
    case 501:
    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 562:
    case 563:
    case 564:
    case 565:
    case 566:
    case 567:
    case 568:
    case 569:
    case 570:
    case 571:
    case 572:
    case 573:
    case 574:
    case 575:
    case 576:
    case 577:
    case 578:
    case 579:
    case 580:
    case 581:
    case 582:
    case 583:
    case 584:
    case 585:
    case 586:
    case 587:
    case 588:
    case 589:
    case 590:
    case 591:
    case 592:
    case 593:
    case 594:
    case 595:
    case 596:
    case 597:
    case 598:
    case 599:
    case 600:
    case 601:
    case 602:
    case 603:
    case 604:
    case 605:
    case 606:
    case 607:
    case 608:
    case 609:
    case 610:
    case 611:
    case 612:
    case 613:
    case 614:
    case 615:
    case 616:
    case 617:
    case 618:
    case 619:
    case 620:
    case 621:
    case 622:
    case 623:
    case 624:
    case 625:
    case 626:
    case 627:
    case 628:
    case 629:
    case 630:
    case 631:
    case 632:
    case 633:
    case 634:
    case 635:
    case 636:
    case 637:
    case 638:
    case 639:
    case 640:
    case 641:
    case 642:
    case 643:
    case 644:
    case 645:
    case 646:
    case 647:
    case 648:
    case 649:
    case 650:
    case 651:
    case 652:
    case 653:
    case 654:
    case 655:
    case 656:
    case 657:
    case 658:
    case 659:
    case 660:
    case 661:
    case 662:
    case 663:
    case 664:
    case 665:
    case 666:
    case 667:
    case 668:
    case 669:
    case 670:
    case 671:
    case 672:
    case 673:
    case 674:
    case 675:
    case 676:
    case 677:
    case 678:
    case 679:
    case 680:
    case 681:
    case 682:
    case 683:
    case 684:
    case 685:
    case 686:
    case 687:
    case 688:
    case 689:
    case 690:
    case 691:
    case 692:
    case 693:
    case 694:
    case 695:
    case 696:
    case 697:
    case 698:
    case 699:
    case 700:
    case 701:
    case 702:
    case 703:
    case 704:
    case 705:
    case 706:
    case 707:
    case 708:
    case 709:
    case 710:
    case 711:
    case 712:
    case 713:
    case 714:
    case 715:
    case 716:
    case 717:
    case 718:
    case 719:
    case 720:
    case 721:
    case 722:
    case 723:
    case 724:
    case 725:
    case 726:
    case 727:
    case 728:
    case 729:
    case 730:
    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::glBeginPerfQueryINTEL;
const GLMessage_Function GLMessage::glCreatePerfQueryINTEL;
const GLMessage_Function GLMessage::glDeletePerfQueryINTEL;
const GLMessage_Function GLMessage::glEndPerfQueryINTEL;
const GLMessage_Function GLMessage::glGetFirstPerfQueryIdINTEL;
const GLMessage_Function GLMessage::glGetNextPerfQueryIdINTEL;
const GLMessage_Function GLMessage::glGetPerfCounterInfoINTEL;
const GLMessage_Function GLMessage::glGetPerfQueryDataINTEL;
const GLMessage_Function GLMessage::glGetPerfQueryIdByNameINTEL;
const GLMessage_Function GLMessage::glGetPerfQueryInfoINTEL;
const GLMessage_Function GLMessage::glBlendBarrierKHR;
const GLMessage_Function GLMessage::glBlendBarrierNV;
const GLMessage_Function GLMessage::glBlendParameteriNV;
const GLMessage_Function GLMessage::glBlitFramebufferNV;
const GLMessage_Function GLMessage::glFenceSyncAPPLE;
const GLMessage_Function GLMessage::glIsSyncAPPLE;
const GLMessage_Function GLMessage::glDeleteSyncAPPLE;
const GLMessage_Function GLMessage::glClientWaitSyncAPPLE;
const GLMessage_Function GLMessage::glWaitSyncAPPLE;
const GLMessage_Function GLMessage::glGetInteger64vAPPLE;
const GLMessage_Function GLMessage::glGetSyncivAPPLE;
const GLMessage_Function GLMessage::glCopyBufferSubDataNV;
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::glCopyTextureLevelsAPPLE;
const GLMessage_Function GLMessage::glDebugMessageControlKHR;
const GLMessage_Function GLMessage::glDebugMessageInsertKHR;
const GLMessage_Function GLMessage::glDebugMessageCallbackKHR;
const GLMessage_Function GLMessage::glGetDebugMessageLogKHR;
const GLMessage_Function GLMessage::glPushDebugGroupKHR;
const GLMessage_Function GLMessage::glPopDebugGroupKHR;
const GLMessage_Function GLMessage::glObjectLabelKHR;
const GLMessage_Function GLMessage::glGetObjectLabelKHR;
const GLMessage_Function GLMessage::glObjectPtrLabelKHR;
const GLMessage_Function GLMessage::glGetObjectPtrLabelKHR;
const GLMessage_Function GLMessage::glGetPointervKHR;
const GLMessage_Function GLMessage::glDrawArraysInstancedANGLE;
const GLMessage_Function GLMessage::glDrawElementsInstancedANGLE;
const GLMessage_Function GLMessage::glVertexAttribDivisorANGLE;
const GLMessage_Function GLMessage::glDrawArraysInstancedEXT;
const GLMessage_Function GLMessage::glDrawElementsInstancedEXT;
const GLMessage_Function GLMessage::glVertexAttribDivisorEXT;
const GLMessage_Function GLMessage::glDrawArraysInstancedNV;
const GLMessage_Function GLMessage::glDrawElementsInstancedNV;
const GLMessage_Function GLMessage::glVertexAttribDivisorNV;
const GLMessage_Function GLMessage::glDrawBuffersEXT;
const GLMessage_Function GLMessage::glReadBufferIndexedEXT;
const GLMessage_Function GLMessage::glDrawBuffersIndexedEXT;
const GLMessage_Function GLMessage::glGetIntegeri_vEXT;
const GLMessage_Function GLMessage::glMapBufferRangeEXT;
const GLMessage_Function GLMessage::glFlushMappedBufferRangeEXT;
const GLMessage_Function GLMessage::glQueryCounterEXT;
const GLMessage_Function GLMessage::glGetQueryObjecti64vEXT;
const GLMessage_Function GLMessage::glGetQueryObjectivEXT;
const GLMessage_Function GLMessage::glGetQueryObjectui64vEXT;
const GLMessage_Function GLMessage::glGetTranslatedShaderSourceANGLE;
const GLMessage_Function GLMessage::glMinSampleShadingOES;
const GLMessage_Function GLMessage::glMultiTexCoord1bOES;
const GLMessage_Function GLMessage::glMultiTexCoord1bvOES;
const GLMessage_Function GLMessage::glMultiTexCoord2bOES;
const GLMessage_Function GLMessage::glMultiTexCoord2bvOES;
const GLMessage_Function GLMessage::glMultiTexCoord3bOES;
const GLMessage_Function GLMessage::glMultiTexCoord3bvOES;
const GLMessage_Function GLMessage::glMultiTexCoord4bOES;
const GLMessage_Function GLMessage::glMultiTexCoord4bvOES;
const GLMessage_Function GLMessage::glTexCoord1bOES;
const GLMessage_Function GLMessage::glTexCoord1bvOES;
const GLMessage_Function GLMessage::glTexCoord2bOES;
const GLMessage_Function GLMessage::glTexCoord2bvOES;
const GLMessage_Function GLMessage::glTexCoord3bOES;
const GLMessage_Function GLMessage::glTexCoord3bvOES;
const GLMessage_Function GLMessage::glTexCoord4bOES;
const GLMessage_Function GLMessage::glTexCoord4bvOES;
const GLMessage_Function GLMessage::glVertex2bOES;
const GLMessage_Function GLMessage::glVertex2bvOES;
const GLMessage_Function GLMessage::glVertex3bOES;
const GLMessage_Function GLMessage::glVertex3bvOES;
const GLMessage_Function GLMessage::glVertex4bOES;
const GLMessage_Function GLMessage::glVertex4bvOES;
const GLMessage_Function GLMessage::glProgramUniform1uiEXT;
const GLMessage_Function GLMessage::glProgramUniform2uiEXT;
const GLMessage_Function GLMessage::glProgramUniform3uiEXT;
const GLMessage_Function GLMessage::glProgramUniform4uiEXT;
const GLMessage_Function GLMessage::glProgramUniform1uivEXT;
const GLMessage_Function GLMessage::glProgramUniform2uivEXT;
const GLMessage_Function GLMessage::glProgramUniform3uivEXT;
const GLMessage_Function GLMessage::glProgramUniform4uivEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix2x3fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix3x2fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix2x4fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix4x2fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix3x4fvEXT;
const GLMessage_Function GLMessage::glProgramUniformMatrix4x3fvEXT;
const GLMessage_Function GLMessage::glRenderbufferStorageMultisampleNV;
const GLMessage_Function GLMessage::glSampleCoverageOES;
const GLMessage_Function GLMessage::glTexStorage3DMultisampleOES;
const GLMessage_Function GLMessage::glUniformMatrix2x3fvNV;
const GLMessage_Function GLMessage::glUniformMatrix3x2fvNV;
const GLMessage_Function GLMessage::glUniformMatrix2x4fvNV;
const GLMessage_Function GLMessage::glUniformMatrix4x2fvNV;
const GLMessage_Function GLMessage::glUniformMatrix3x4fvNV;
const GLMessage_Function GLMessage::glUniformMatrix4x3fvNV;
const GLMessage_Function GLMessage::glActiveShaderProgram;
const GLMessage_Function GLMessage::glBindImageTexture;
const GLMessage_Function GLMessage::glBindProgramPipeline;
const GLMessage_Function GLMessage::glBindVertexBuffer;
const GLMessage_Function GLMessage::glCreateShaderProgramv;
const GLMessage_Function GLMessage::glDeleteProgramPipelines;
const GLMessage_Function GLMessage::glDispatchCompute;
const GLMessage_Function GLMessage::glDispatchComputeIndirect;
const GLMessage_Function GLMessage::glDrawArraysIndirect;
const GLMessage_Function GLMessage::glDrawElementsIndirect;
const GLMessage_Function GLMessage::glFramebufferParameteri;
const GLMessage_Function GLMessage::glGenProgramPipelines;
const GLMessage_Function GLMessage::glGetBooleani_v;
const GLMessage_Function GLMessage::glGetFramebufferParameteriv;
const GLMessage_Function GLMessage::glGetMultisamplefv;
const GLMessage_Function GLMessage::glGetProgramInterfaceiv;
const GLMessage_Function GLMessage::glGetProgramPipelineInfoLog;
const GLMessage_Function GLMessage::glGetProgramPipelineiv;
const GLMessage_Function GLMessage::glGetProgramResourceIndex;
const GLMessage_Function GLMessage::glGetProgramResourceLocation;
const GLMessage_Function GLMessage::glGetProgramResourceName;
const GLMessage_Function GLMessage::glGetProgramResourceiv;
const GLMessage_Function GLMessage::glGetTexLevelParameterfv;
const GLMessage_Function GLMessage::glGetTexLevelParameteriv;
const GLMessage_Function GLMessage::glIsProgramPipeline;
const GLMessage_Function GLMessage::glMemoryBarrier;
const GLMessage_Function GLMessage::glMemoryBarrierByRegion;
const GLMessage_Function GLMessage::glProgramUniform1f;
const GLMessage_Function GLMessage::glProgramUniform1fv;
const GLMessage_Function GLMessage::glProgramUniform1i;
const GLMessage_Function GLMessage::glProgramUniform1iv;
const GLMessage_Function GLMessage::glProgramUniform1ui;
const GLMessage_Function GLMessage::glProgramUniform1uiv;
const GLMessage_Function GLMessage::glProgramUniform2f;
const GLMessage_Function GLMessage::glProgramUniform2fv;
const GLMessage_Function GLMessage::glProgramUniform2i;
const GLMessage_Function GLMessage::glProgramUniform2iv;
const GLMessage_Function GLMessage::glProgramUniform2ui;
const GLMessage_Function GLMessage::glProgramUniform2uiv;
const GLMessage_Function GLMessage::glProgramUniform3f;
const GLMessage_Function GLMessage::glProgramUniform3fv;
const GLMessage_Function GLMessage::glProgramUniform3i;
const GLMessage_Function GLMessage::glProgramUniform3iv;
const GLMessage_Function GLMessage::glProgramUniform3ui;
const GLMessage_Function GLMessage::glProgramUniform3uiv;
const GLMessage_Function GLMessage::glProgramUniform4f;
const GLMessage_Function GLMessage::glProgramUniform4fv;
const GLMessage_Function GLMessage::glProgramUniform4i;
const GLMessage_Function GLMessage::glProgramUniform4iv;
const GLMessage_Function GLMessage::glProgramUniform4ui;
const GLMessage_Function GLMessage::glProgramUniform4uiv;
const GLMessage_Function GLMessage::glProgramUniformMatrix2fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix2x3fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix2x4fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix3fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix3x2fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix3x4fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix4fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix4x2fv;
const GLMessage_Function GLMessage::glProgramUniformMatrix4x3fv;
const GLMessage_Function GLMessage::glSampleMaski;
const GLMessage_Function GLMessage::glTexStorage2DMultisample;
const GLMessage_Function GLMessage::glUseProgramStages;
const GLMessage_Function GLMessage::glValidateProgramPipeline;
const GLMessage_Function GLMessage::glVertexAttribBinding;
const GLMessage_Function GLMessage::glVertexAttribFormat;
const GLMessage_Function GLMessage::glVertexAttribIFormat;
const GLMessage_Function GLMessage::glVertexBindingDivisor;
const GLMessage_Function GLMessage::glBlendEquationSeparateiEXT;
const GLMessage_Function GLMessage::glBlendEquationiEXT;
const GLMessage_Function GLMessage::glBlendFuncSeparateiEXT;
const GLMessage_Function GLMessage::glBlendFunciEXT;
const GLMessage_Function GLMessage::glColorMaskiEXT;
const GLMessage_Function GLMessage::glCopyImageSubDataEXT;
const GLMessage_Function GLMessage::glDisableiEXT;
const GLMessage_Function GLMessage::glEnableiEXT;
const GLMessage_Function GLMessage::glFramebufferTextureEXT;
const GLMessage_Function GLMessage::glGetSamplerParameterIivEXT;
const GLMessage_Function GLMessage::glGetSamplerParameterIuivEXT;
const GLMessage_Function GLMessage::glGetTexParameterIivEXT;
const GLMessage_Function GLMessage::glGetTexParameterIuivEXT;
const GLMessage_Function GLMessage::glIsEnablediEXT;
const GLMessage_Function GLMessage::glPatchParameteriEXT;
const GLMessage_Function GLMessage::glPrimitiveBoundingBoxEXT;
const GLMessage_Function GLMessage::glSamplerParameterIivEXT;
const GLMessage_Function GLMessage::glSamplerParameterIuivEXT;
const GLMessage_Function GLMessage::glTexBufferEXT;
const GLMessage_Function GLMessage::glTexBufferRangeEXT;
const GLMessage_Function GLMessage::glTexParameterIivEXT;
const GLMessage_Function GLMessage::glTexParameterIuivEXT;
const GLMessage_Function GLMessage::glTextureViewEXT;
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)
