• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  ** Copyright 2011, The Android Open Source Project
3  **
4  ** Licensed under the Apache License, Version 2.0 (the "License");
5  ** you may not use this file except in compliance with the License.
6  ** You may obtain a copy of the License at
7  **
8  **     http://www.apache.org/licenses/LICENSE-2.0
9  **
10  ** Unless required by applicable law or agreed to in writing, software
11  ** distributed under the License is distributed on an "AS IS" BASIS,
12  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  ** See the License for the specific language governing permissions and
14  ** limitations under the License.
15  */
16 
17 // auto generated by generate_MessageParser_java.py,
18 //  which also prints skeleton code for MessageParserEx.java
19 
20 package com.android.ide.eclipse.gldebugger;
21 
22 import com.android.ide.eclipse.gldebugger.DebuggerMessage.Message;
23 import com.android.ide.eclipse.gldebugger.DebuggerMessage.Message.Function;
24 import com.google.protobuf.ByteString;
25 
26 import java.nio.ByteBuffer;
27 
28 public abstract class MessageParser {
29 
30     String args;
31 
getList()32     String[] getList()
33     {
34         String arg = args;
35         args = args.substring(args.lastIndexOf('}') + 1);
36         final int comma = args.indexOf(',');
37         if (comma >= 0)
38             args = args.substring(comma + 1).trim();
39         else
40             args = null;
41 
42         final int comment = arg.indexOf('=');
43         if (comment >= 0)
44             arg = arg.substring(comment + 1);
45         arg = arg.trim();
46         assert arg.charAt(0) == '{';
47         arg = arg.substring(1, arg.lastIndexOf('}')).trim();
48         return arg.split("\\s*,\\s*");
49     }
50 
parseFloats(int count)51     ByteString parseFloats(int count) {
52         ByteBuffer buffer = ByteBuffer.allocate(count * 4);
53         buffer.order(GLFramesView.TARGET_BYTE_ORDER);
54         String [] arg = getList();
55         for (int i = 0; i < count; i++)
56             buffer.putFloat(Float.parseFloat(arg[i].trim()));
57         buffer.rewind();
58         return ByteString.copyFrom(buffer);
59     }
60 
parseInts(int count)61     ByteString parseInts(int count) {
62         ByteBuffer buffer = ByteBuffer.allocate(count * 4);
63         buffer.order(GLFramesView.TARGET_BYTE_ORDER);
64         String [] arg = getList();
65         for (int i = 0; i < count; i++)
66             buffer.putInt(Integer.parseInt(arg[i].trim()));
67         buffer.rewind();
68         return ByteString.copyFrom(buffer);
69     }
70 
parseUInts(int count)71     ByteString parseUInts(int count) {
72         ByteBuffer buffer = ByteBuffer.allocate(count * 4);
73         buffer.order(GLFramesView.TARGET_BYTE_ORDER);
74         String [] arg = getList();
75         for (int i = 0; i < count; i++)
76             buffer.putInt((int)(Long.parseLong(arg[i].trim()) & 0xffffffff));
77         buffer.rewind();
78         return ByteString.copyFrom(buffer);
79     }
80 
parseMatrix(int columns, int count)81     ByteString parseMatrix(int columns, int count) {
82         return parseFloats(columns * columns * count);
83     }
84 
parseString()85     ByteString parseString() {
86         // TODO: escape sequence and proper string literal
87         String arg = args.substring(args.indexOf('"') + 1, args.lastIndexOf('"'));
88         args = args.substring(args.lastIndexOf('"'));
89         int comma = args.indexOf(',');
90         if (comma >= 0)
91             args = args.substring(comma + 1).trim();
92         else
93             args = null;
94         return ByteString.copyFromUtf8(arg);
95     }
96 
getArgument()97     String getArgument()
98     {
99         final int comma = args.indexOf(',');
100         String arg = null;
101         if (comma >= 0)
102         {
103             arg = args.substring(0, comma);
104             args = args.substring(comma + 1);
105         }
106         else
107         {
108             arg = args;
109             args = null;
110         }
111         final int comment = arg.indexOf('=');
112         if (comment >= 0)
113             arg = arg.substring(comment + 1);
114         return arg.trim();
115     }
116 
parseArgument()117     int parseArgument()
118     {
119         String arg = getArgument();
120         if (arg.startsWith("GL_"))
121             return GLEnum.valueOf(arg).value;
122         else if (arg.toLowerCase().startsWith("0x"))
123             return Integer.parseInt(arg.substring(2), 16);
124         else
125             return Integer.parseInt(arg);
126     }
127 
parseFloat()128     int parseFloat()
129     {
130         String arg = getArgument();
131         return Float.floatToRawIntBits(Float.parseFloat(arg));
132     }
133 
parse(final Message.Builder builder, String string)134     public void parse(final Message.Builder builder, String string) {
135         int lparen = string.indexOf("("), rparen = string.lastIndexOf(")");
136         String s = string.substring(0, lparen).trim();
137         args = string.substring(lparen + 1, rparen);
138         String[] t = s.split(" ");
139         Function function = Function.valueOf(t[t.length - 1]);
140         builder.setFunction(function);
141         switch (function) {
142             case glActiveTexture:
143                 builder.setArg0(parseArgument()); // GLenum texture
144                 break;
145             case glAttachShader:
146                 builder.setArg0(parseArgument()); // GLuint program
147                 builder.setArg1(parseArgument()); // GLuint shader
148                 break;
149             case glBindAttribLocation:
150                 builder.setArg0(parseArgument()); // GLuint program
151                 builder.setArg1(parseArgument()); // GLuint index
152                 builder.setData(parseString()); // GLchar name
153                 break;
154             case glBindBuffer:
155                 builder.setArg0(parseArgument()); // GLenum target
156                 builder.setArg1(parseArgument()); // GLuint buffer
157                 break;
158             case glBindFramebuffer:
159                 builder.setArg0(parseArgument()); // GLenum target
160                 builder.setArg1(parseArgument()); // GLuint framebuffer
161                 break;
162             case glBindRenderbuffer:
163                 builder.setArg0(parseArgument()); // GLenum target
164                 builder.setArg1(parseArgument()); // GLuint renderbuffer
165                 break;
166             case glBindTexture:
167                 builder.setArg0(parseArgument()); // GLenum target
168                 builder.setArg1(parseArgument()); // GLuint texture
169                 break;
170             case glBlendColor:
171                 builder.setArg0(parseFloat()); // GLclampf red
172                 builder.setArg1(parseFloat()); // GLclampf green
173                 builder.setArg2(parseFloat()); // GLclampf blue
174                 builder.setArg3(parseFloat()); // GLclampf alpha
175                 break;
176             case glBlendEquation:
177                 builder.setArg0(parseArgument()); // GLenum mode
178                 break;
179             case glBlendEquationSeparate:
180                 builder.setArg0(parseArgument()); // GLenum modeRGB
181                 builder.setArg1(parseArgument()); // GLenum modeAlpha
182                 break;
183             case glBlendFunc:
184                 builder.setArg0(parseArgument()); // GLenum sfactor
185                 builder.setArg1(parseArgument()); // GLenum dfactor
186                 break;
187             case glBlendFuncSeparate:
188                 builder.setArg0(parseArgument()); // GLenum srcRGB
189                 builder.setArg1(parseArgument()); // GLenum dstRGB
190                 builder.setArg2(parseArgument()); // GLenum srcAlpha
191                 builder.setArg3(parseArgument()); // GLenum dstAlpha
192                 break;
193             case glBufferData:
194                 parse_glBufferData(builder);
195                 break;
196             case glBufferSubData:
197                 parse_glBufferSubData(builder);
198                 break;
199             case glCheckFramebufferStatus:
200                 builder.setArg0(parseArgument()); // GLenum target
201                 break;
202             case glClear:
203                 builder.setArg0(parseArgument()); // GLbitfield mask
204                 break;
205             case glClearColor:
206                 builder.setArg0(parseFloat()); // GLclampf red
207                 builder.setArg1(parseFloat()); // GLclampf green
208                 builder.setArg2(parseFloat()); // GLclampf blue
209                 builder.setArg3(parseFloat()); // GLclampf alpha
210                 break;
211             case glClearDepthf:
212                 builder.setArg0(parseFloat()); // GLclampf depth
213                 break;
214             case glClearStencil:
215                 builder.setArg0(parseArgument()); // GLint s
216                 break;
217             case glColorMask:
218                 builder.setArg0(parseArgument()); // GLboolean red
219                 builder.setArg1(parseArgument()); // GLboolean green
220                 builder.setArg2(parseArgument()); // GLboolean blue
221                 builder.setArg3(parseArgument()); // GLboolean alpha
222                 break;
223             case glCompileShader:
224                 builder.setArg0(parseArgument()); // GLuint shader
225                 break;
226             case glCompressedTexImage2D:
227                 parse_glCompressedTexImage2D(builder);
228                 break;
229             case glCompressedTexSubImage2D:
230                 parse_glCompressedTexSubImage2D(builder);
231                 break;
232             case glCopyTexImage2D:
233                 builder.setArg0(parseArgument()); // GLenum target
234                 builder.setArg1(parseArgument()); // GLint level
235                 builder.setArg2(parseArgument()); // GLenum internalformat
236                 builder.setArg3(parseArgument()); // GLint x
237                 builder.setArg4(parseArgument()); // GLint y
238                 builder.setArg5(parseArgument()); // GLsizei width
239                 builder.setArg6(parseArgument()); // GLsizei height
240                 builder.setArg7(parseArgument()); // GLint border
241                 break;
242             case glCopyTexSubImage2D:
243                 builder.setArg0(parseArgument()); // GLenum target
244                 builder.setArg1(parseArgument()); // GLint level
245                 builder.setArg2(parseArgument()); // GLint xoffset
246                 builder.setArg3(parseArgument()); // GLint yoffset
247                 builder.setArg4(parseArgument()); // GLint x
248                 builder.setArg5(parseArgument()); // GLint y
249                 builder.setArg6(parseArgument()); // GLsizei width
250                 builder.setArg7(parseArgument()); // GLsizei height
251                 break;
252             case glCreateProgram:
253                 break;
254             case glCreateShader:
255                 builder.setArg0(parseArgument()); // GLenum type
256                 break;
257             case glCullFace:
258                 builder.setArg0(parseArgument()); // GLenum mode
259                 break;
260             case glDeleteBuffers:
261                 builder.setArg0(parseArgument()); // GLsizei n
262                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint buffers
263                 break;
264             case glDeleteFramebuffers:
265                 builder.setArg0(parseArgument()); // GLsizei n
266                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint framebuffers
267                 break;
268             case glDeleteProgram:
269                 builder.setArg0(parseArgument()); // GLuint program
270                 break;
271             case glDeleteRenderbuffers:
272                 builder.setArg0(parseArgument()); // GLsizei n
273                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint renderbuffers
274                 break;
275             case glDeleteShader:
276                 builder.setArg0(parseArgument()); // GLuint shader
277                 break;
278             case glDeleteTextures:
279                 builder.setArg0(parseArgument()); // GLsizei n
280                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint textures
281                 break;
282             case glDepthFunc:
283                 builder.setArg0(parseArgument()); // GLenum func
284                 break;
285             case glDepthMask:
286                 builder.setArg0(parseArgument()); // GLboolean flag
287                 break;
288             case glDepthRangef:
289                 builder.setArg0(parseFloat()); // GLclampf zNear
290                 builder.setArg1(parseFloat()); // GLclampf zFar
291                 break;
292             case glDetachShader:
293                 builder.setArg0(parseArgument()); // GLuint program
294                 builder.setArg1(parseArgument()); // GLuint shader
295                 break;
296             case glDisable:
297                 builder.setArg0(parseArgument()); // GLenum cap
298                 break;
299             case glDisableVertexAttribArray:
300                 builder.setArg0(parseArgument()); // GLuint index
301                 break;
302             case glDrawArrays:
303                 builder.setArg0(parseArgument()); // GLenum mode
304                 builder.setArg1(parseArgument()); // GLint first
305                 builder.setArg2(parseArgument()); // GLsizei count
306                 break;
307             case glDrawElements:
308                 parse_glDrawElements(builder);
309                 break;
310             case glEnable:
311                 builder.setArg0(parseArgument()); // GLenum cap
312                 break;
313             case glEnableVertexAttribArray:
314                 builder.setArg0(parseArgument()); // GLuint index
315                 break;
316             case glFinish:
317                 break;
318             case glFlush:
319                 break;
320             case glFramebufferRenderbuffer:
321                 builder.setArg0(parseArgument()); // GLenum target
322                 builder.setArg1(parseArgument()); // GLenum attachment
323                 builder.setArg2(parseArgument()); // GLenum renderbuffertarget
324                 builder.setArg3(parseArgument()); // GLuint renderbuffer
325                 break;
326             case glFramebufferTexture2D:
327                 builder.setArg0(parseArgument()); // GLenum target
328                 builder.setArg1(parseArgument()); // GLenum attachment
329                 builder.setArg2(parseArgument()); // GLenum textarget
330                 builder.setArg3(parseArgument()); // GLuint texture
331                 builder.setArg4(parseArgument()); // GLint level
332                 break;
333             case glFrontFace:
334                 builder.setArg0(parseArgument()); // GLenum mode
335                 break;
336             case glGenBuffers:
337                 builder.setArg0(parseArgument()); // GLsizei n
338                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint buffers
339                 break;
340             case glGenerateMipmap:
341                 builder.setArg0(parseArgument()); // GLenum target
342                 break;
343             case glGenFramebuffers:
344                 builder.setArg0(parseArgument()); // GLsizei n
345                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint framebuffers
346                 break;
347             case glGenRenderbuffers:
348                 builder.setArg0(parseArgument()); // GLsizei n
349                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint renderbuffers
350                 break;
351             case glGenTextures:
352                 builder.setArg0(parseArgument()); // GLsizei n
353                 builder.setData(parseUInts(1 * builder.getArg0())); // GLuint textures
354                 break;
355             case glGetActiveAttrib:
356                 parse_glGetActiveAttrib(builder);
357                 break;
358             case glGetActiveUniform:
359                 parse_glGetActiveUniform(builder);
360                 break;
361             case glGetAttachedShaders:
362                 parse_glGetAttachedShaders(builder);
363                 break;
364             case glGetAttribLocation:
365                 builder.setArg0(parseArgument()); // GLuint program
366                 builder.setData(parseString()); // GLchar name
367                 break;
368             case glGetBooleanv:
369                 parse_glGetBooleanv(builder);
370                 break;
371             case glGetBufferParameteriv:
372                 parse_glGetBufferParameteriv(builder);
373                 break;
374             case glGetError:
375                 break;
376             case glGetFloatv:
377                 parse_glGetFloatv(builder);
378                 break;
379             case glGetFramebufferAttachmentParameteriv:
380                 parse_glGetFramebufferAttachmentParameteriv(builder);
381                 break;
382             case glGetIntegerv:
383                 parse_glGetIntegerv(builder);
384                 break;
385             case glGetProgramiv:
386                 builder.setArg0(parseArgument()); // GLuint program
387                 builder.setArg1(parseArgument()); // GLenum pname
388                 builder.setData(parseInts(1)); // GLint params
389                 break;
390             case glGetProgramInfoLog:
391                 parse_glGetProgramInfoLog(builder);
392                 break;
393             case glGetRenderbufferParameteriv:
394                 parse_glGetRenderbufferParameteriv(builder);
395                 break;
396             case glGetShaderiv:
397                 builder.setArg0(parseArgument()); // GLuint shader
398                 builder.setArg1(parseArgument()); // GLenum pname
399                 builder.setData(parseInts(1)); // GLint params
400                 break;
401             case glGetShaderInfoLog:
402                 parse_glGetShaderInfoLog(builder);
403                 break;
404             case glGetShaderPrecisionFormat:
405                 parse_glGetShaderPrecisionFormat(builder);
406                 break;
407             case glGetShaderSource:
408                 parse_glGetShaderSource(builder);
409                 break;
410             case glGetString:
411                 builder.setArg0(parseArgument()); // GLenum name
412                 break;
413             case glGetTexParameterfv:
414                 parse_glGetTexParameterfv(builder);
415                 break;
416             case glGetTexParameteriv:
417                 parse_glGetTexParameteriv(builder);
418                 break;
419             case glGetUniformfv:
420                 parse_glGetUniformfv(builder);
421                 break;
422             case glGetUniformiv:
423                 parse_glGetUniformiv(builder);
424                 break;
425             case glGetUniformLocation:
426                 builder.setArg0(parseArgument()); // GLuint program
427                 builder.setData(parseString()); // GLchar name
428                 break;
429             case glGetVertexAttribfv:
430                 parse_glGetVertexAttribfv(builder);
431                 break;
432             case glGetVertexAttribiv:
433                 parse_glGetVertexAttribiv(builder);
434                 break;
435             case glGetVertexAttribPointerv:
436                 parse_glGetVertexAttribPointerv(builder);
437                 break;
438             case glHint:
439                 builder.setArg0(parseArgument()); // GLenum target
440                 builder.setArg1(parseArgument()); // GLenum mode
441                 break;
442             case glIsBuffer:
443                 builder.setArg0(parseArgument()); // GLuint buffer
444                 break;
445             case glIsEnabled:
446                 builder.setArg0(parseArgument()); // GLenum cap
447                 break;
448             case glIsFramebuffer:
449                 builder.setArg0(parseArgument()); // GLuint framebuffer
450                 break;
451             case glIsProgram:
452                 builder.setArg0(parseArgument()); // GLuint program
453                 break;
454             case glIsRenderbuffer:
455                 builder.setArg0(parseArgument()); // GLuint renderbuffer
456                 break;
457             case glIsShader:
458                 builder.setArg0(parseArgument()); // GLuint shader
459                 break;
460             case glIsTexture:
461                 builder.setArg0(parseArgument()); // GLuint texture
462                 break;
463             case glLineWidth:
464                 builder.setArg0(parseFloat()); // GLfloat width
465                 break;
466             case glLinkProgram:
467                 builder.setArg0(parseArgument()); // GLuint program
468                 break;
469             case glPixelStorei:
470                 builder.setArg0(parseArgument()); // GLenum pname
471                 builder.setArg1(parseArgument()); // GLint param
472                 break;
473             case glPolygonOffset:
474                 builder.setArg0(parseFloat()); // GLfloat factor
475                 builder.setArg1(parseFloat()); // GLfloat units
476                 break;
477             case glReadPixels:
478                 parse_glReadPixels(builder);
479                 break;
480             case glReleaseShaderCompiler:
481                 break;
482             case glRenderbufferStorage:
483                 builder.setArg0(parseArgument()); // GLenum target
484                 builder.setArg1(parseArgument()); // GLenum internalformat
485                 builder.setArg2(parseArgument()); // GLsizei width
486                 builder.setArg3(parseArgument()); // GLsizei height
487                 break;
488             case glSampleCoverage:
489                 builder.setArg0(parseFloat()); // GLclampf value
490                 builder.setArg1(parseArgument()); // GLboolean invert
491                 break;
492             case glScissor:
493                 builder.setArg0(parseArgument()); // GLint x
494                 builder.setArg1(parseArgument()); // GLint y
495                 builder.setArg2(parseArgument()); // GLsizei width
496                 builder.setArg3(parseArgument()); // GLsizei height
497                 break;
498             case glShaderBinary:
499                 parse_glShaderBinary(builder);
500                 break;
501             case glShaderSource:
502                 parse_glShaderSource(builder);
503                 break;
504             case glStencilFunc:
505                 builder.setArg0(parseArgument()); // GLenum func
506                 builder.setArg1(parseArgument()); // GLint ref
507                 builder.setArg2(parseArgument()); // GLuint mask
508                 break;
509             case glStencilFuncSeparate:
510                 builder.setArg0(parseArgument()); // GLenum face
511                 builder.setArg1(parseArgument()); // GLenum func
512                 builder.setArg2(parseArgument()); // GLint ref
513                 builder.setArg3(parseArgument()); // GLuint mask
514                 break;
515             case glStencilMask:
516                 builder.setArg0(parseArgument()); // GLuint mask
517                 break;
518             case glStencilMaskSeparate:
519                 builder.setArg0(parseArgument()); // GLenum face
520                 builder.setArg1(parseArgument()); // GLuint mask
521                 break;
522             case glStencilOp:
523                 builder.setArg0(parseArgument()); // GLenum fail
524                 builder.setArg1(parseArgument()); // GLenum zfail
525                 builder.setArg2(parseArgument()); // GLenum zpass
526                 break;
527             case glStencilOpSeparate:
528                 builder.setArg0(parseArgument()); // GLenum face
529                 builder.setArg1(parseArgument()); // GLenum fail
530                 builder.setArg2(parseArgument()); // GLenum zfail
531                 builder.setArg3(parseArgument()); // GLenum zpass
532                 break;
533             case glTexImage2D:
534                 parse_glTexImage2D(builder);
535                 break;
536             case glTexParameterf:
537                 builder.setArg0(parseArgument()); // GLenum target
538                 builder.setArg1(parseArgument()); // GLenum pname
539                 builder.setArg2(parseFloat()); // GLfloat param
540                 break;
541             case glTexParameterfv:
542                 parse_glTexParameterfv(builder);
543                 break;
544             case glTexParameteri:
545                 builder.setArg0(parseArgument()); // GLenum target
546                 builder.setArg1(parseArgument()); // GLenum pname
547                 builder.setArg2(parseArgument()); // GLint param
548                 break;
549             case glTexParameteriv:
550                 parse_glTexParameteriv(builder);
551                 break;
552             case glTexSubImage2D:
553                 parse_glTexSubImage2D(builder);
554                 break;
555             case glUniform1f:
556                 builder.setArg0(parseArgument()); // GLint location
557                 builder.setArg1(parseFloat()); // GLfloat x
558                 break;
559             case glUniform1fv:
560                 builder.setArg0(parseArgument()); // GLint location
561                 builder.setArg1(parseArgument()); // GLsizei count
562                 builder.setData(parseFloats(1 * builder.getArg1())); // GLfloat v
563                 break;
564             case glUniform1i:
565                 builder.setArg0(parseArgument()); // GLint location
566                 builder.setArg1(parseArgument()); // GLint x
567                 break;
568             case glUniform1iv:
569                 builder.setArg0(parseArgument()); // GLint location
570                 builder.setArg1(parseArgument()); // GLsizei count
571                 builder.setData(parseInts(1 * builder.getArg1())); // GLint v
572                 break;
573             case glUniform2f:
574                 builder.setArg0(parseArgument()); // GLint location
575                 builder.setArg1(parseFloat()); // GLfloat x
576                 builder.setArg2(parseFloat()); // GLfloat y
577                 break;
578             case glUniform2fv:
579                 builder.setArg0(parseArgument()); // GLint location
580                 builder.setArg1(parseArgument()); // GLsizei count
581                 builder.setData(parseFloats(2 * builder.getArg1())); // GLfloat v
582                 break;
583             case glUniform2i:
584                 builder.setArg0(parseArgument()); // GLint location
585                 builder.setArg1(parseArgument()); // GLint x
586                 builder.setArg2(parseArgument()); // GLint y
587                 break;
588             case glUniform2iv:
589                 builder.setArg0(parseArgument()); // GLint location
590                 builder.setArg1(parseArgument()); // GLsizei count
591                 builder.setData(parseInts(2 * builder.getArg1())); // GLint v
592                 break;
593             case glUniform3f:
594                 builder.setArg0(parseArgument()); // GLint location
595                 builder.setArg1(parseFloat()); // GLfloat x
596                 builder.setArg2(parseFloat()); // GLfloat y
597                 builder.setArg3(parseFloat()); // GLfloat z
598                 break;
599             case glUniform3fv:
600                 builder.setArg0(parseArgument()); // GLint location
601                 builder.setArg1(parseArgument()); // GLsizei count
602                 builder.setData(parseFloats(3 * builder.getArg1())); // GLfloat v
603                 break;
604             case glUniform3i:
605                 builder.setArg0(parseArgument()); // GLint location
606                 builder.setArg1(parseArgument()); // GLint x
607                 builder.setArg2(parseArgument()); // GLint y
608                 builder.setArg3(parseArgument()); // GLint z
609                 break;
610             case glUniform3iv:
611                 builder.setArg0(parseArgument()); // GLint location
612                 builder.setArg1(parseArgument()); // GLsizei count
613                 builder.setData(parseInts(3 * builder.getArg1())); // GLint v
614                 break;
615             case glUniform4f:
616                 builder.setArg0(parseArgument()); // GLint location
617                 builder.setArg1(parseFloat()); // GLfloat x
618                 builder.setArg2(parseFloat()); // GLfloat y
619                 builder.setArg3(parseFloat()); // GLfloat z
620                 builder.setArg4(parseFloat()); // GLfloat w
621                 break;
622             case glUniform4fv:
623                 builder.setArg0(parseArgument()); // GLint location
624                 builder.setArg1(parseArgument()); // GLsizei count
625                 builder.setData(parseFloats(4 * builder.getArg1())); // GLfloat v
626                 break;
627             case glUniform4i:
628                 builder.setArg0(parseArgument()); // GLint location
629                 builder.setArg1(parseArgument()); // GLint x
630                 builder.setArg2(parseArgument()); // GLint y
631                 builder.setArg3(parseArgument()); // GLint z
632                 builder.setArg4(parseArgument()); // GLint w
633                 break;
634             case glUniform4iv:
635                 builder.setArg0(parseArgument()); // GLint location
636                 builder.setArg1(parseArgument()); // GLsizei count
637                 builder.setData(parseInts(4 * builder.getArg1())); // GLint v
638                 break;
639             case glUniformMatrix2fv:
640                 builder.setArg0(parseArgument()); // GLint location
641                 builder.setArg1(parseArgument()); // GLsizei count
642                 builder.setArg2(parseArgument()); // GLboolean transpose
643                 builder.setData(parseMatrix(2, builder.getArg1())); // GLfloat value
644                 break;
645             case glUniformMatrix3fv:
646                 builder.setArg0(parseArgument()); // GLint location
647                 builder.setArg1(parseArgument()); // GLsizei count
648                 builder.setArg2(parseArgument()); // GLboolean transpose
649                 builder.setData(parseMatrix(3, builder.getArg1())); // GLfloat value
650                 break;
651             case glUniformMatrix4fv:
652                 builder.setArg0(parseArgument()); // GLint location
653                 builder.setArg1(parseArgument()); // GLsizei count
654                 builder.setArg2(parseArgument()); // GLboolean transpose
655                 builder.setData(parseMatrix(4, builder.getArg1())); // GLfloat value
656                 break;
657             case glUseProgram:
658                 builder.setArg0(parseArgument()); // GLuint program
659                 break;
660             case glValidateProgram:
661                 builder.setArg0(parseArgument()); // GLuint program
662                 break;
663             case glVertexAttrib1f:
664                 builder.setArg0(parseArgument()); // GLuint indx
665                 builder.setArg1(parseFloat()); // GLfloat x
666                 break;
667             case glVertexAttrib1fv:
668                 builder.setArg0(parseArgument()); // GLuint indx
669                 builder.setData(parseFloats(1)); // GLfloat values
670                 break;
671             case glVertexAttrib2f:
672                 builder.setArg0(parseArgument()); // GLuint indx
673                 builder.setArg1(parseFloat()); // GLfloat x
674                 builder.setArg2(parseFloat()); // GLfloat y
675                 break;
676             case glVertexAttrib2fv:
677                 builder.setArg0(parseArgument()); // GLuint indx
678                 builder.setData(parseFloats(2)); // GLfloat values
679                 break;
680             case glVertexAttrib3f:
681                 builder.setArg0(parseArgument()); // GLuint indx
682                 builder.setArg1(parseFloat()); // GLfloat x
683                 builder.setArg2(parseFloat()); // GLfloat y
684                 builder.setArg3(parseFloat()); // GLfloat z
685                 break;
686             case glVertexAttrib3fv:
687                 builder.setArg0(parseArgument()); // GLuint indx
688                 builder.setData(parseFloats(3)); // GLfloat values
689                 break;
690             case glVertexAttrib4f:
691                 builder.setArg0(parseArgument()); // GLuint indx
692                 builder.setArg1(parseFloat()); // GLfloat x
693                 builder.setArg2(parseFloat()); // GLfloat y
694                 builder.setArg3(parseFloat()); // GLfloat z
695                 builder.setArg4(parseFloat()); // GLfloat w
696                 break;
697             case glVertexAttrib4fv:
698                 builder.setArg0(parseArgument()); // GLuint indx
699                 builder.setData(parseFloats(4)); // GLfloat values
700                 break;
701             case glVertexAttribPointer:
702                 parse_glVertexAttribPointer(builder);
703                 break;
704             case glViewport:
705                 builder.setArg0(parseArgument()); // GLint x
706                 builder.setArg1(parseArgument()); // GLint y
707                 builder.setArg2(parseArgument()); // GLsizei width
708                 builder.setArg3(parseArgument()); // GLsizei height
709                 break;
710             default:
711                 assert false;
712         }
713     }
parse_glBufferData(Message.Builder builder)714     abstract void parse_glBufferData(Message.Builder builder);
parse_glBufferSubData(Message.Builder builder)715     abstract void parse_glBufferSubData(Message.Builder builder);
parse_glCompressedTexImage2D(Message.Builder builder)716     abstract void parse_glCompressedTexImage2D(Message.Builder builder);
parse_glCompressedTexSubImage2D(Message.Builder builder)717     abstract void parse_glCompressedTexSubImage2D(Message.Builder builder);
parse_glDrawElements(Message.Builder builder)718     abstract void parse_glDrawElements(Message.Builder builder);
parse_glGetActiveAttrib(Message.Builder builder)719     abstract void parse_glGetActiveAttrib(Message.Builder builder);
parse_glGetActiveUniform(Message.Builder builder)720     abstract void parse_glGetActiveUniform(Message.Builder builder);
parse_glGetAttachedShaders(Message.Builder builder)721     abstract void parse_glGetAttachedShaders(Message.Builder builder);
parse_glGetBooleanv(Message.Builder builder)722     abstract void parse_glGetBooleanv(Message.Builder builder);
parse_glGetBufferParameteriv(Message.Builder builder)723     abstract void parse_glGetBufferParameteriv(Message.Builder builder);
parse_glGetFloatv(Message.Builder builder)724     abstract void parse_glGetFloatv(Message.Builder builder);
parse_glGetFramebufferAttachmentParameteriv(Message.Builder builder)725     abstract void parse_glGetFramebufferAttachmentParameteriv(Message.Builder builder);
parse_glGetIntegerv(Message.Builder builder)726     abstract void parse_glGetIntegerv(Message.Builder builder);
parse_glGetProgramInfoLog(Message.Builder builder)727     abstract void parse_glGetProgramInfoLog(Message.Builder builder);
parse_glGetRenderbufferParameteriv(Message.Builder builder)728     abstract void parse_glGetRenderbufferParameteriv(Message.Builder builder);
parse_glGetShaderInfoLog(Message.Builder builder)729     abstract void parse_glGetShaderInfoLog(Message.Builder builder);
parse_glGetShaderPrecisionFormat(Message.Builder builder)730     abstract void parse_glGetShaderPrecisionFormat(Message.Builder builder);
parse_glGetShaderSource(Message.Builder builder)731     abstract void parse_glGetShaderSource(Message.Builder builder);
parse_glGetTexParameterfv(Message.Builder builder)732     abstract void parse_glGetTexParameterfv(Message.Builder builder);
parse_glGetTexParameteriv(Message.Builder builder)733     abstract void parse_glGetTexParameteriv(Message.Builder builder);
parse_glGetUniformfv(Message.Builder builder)734     abstract void parse_glGetUniformfv(Message.Builder builder);
parse_glGetUniformiv(Message.Builder builder)735     abstract void parse_glGetUniformiv(Message.Builder builder);
parse_glGetVertexAttribfv(Message.Builder builder)736     abstract void parse_glGetVertexAttribfv(Message.Builder builder);
parse_glGetVertexAttribiv(Message.Builder builder)737     abstract void parse_glGetVertexAttribiv(Message.Builder builder);
parse_glGetVertexAttribPointerv(Message.Builder builder)738     abstract void parse_glGetVertexAttribPointerv(Message.Builder builder);
parse_glReadPixels(Message.Builder builder)739     abstract void parse_glReadPixels(Message.Builder builder);
parse_glShaderBinary(Message.Builder builder)740     abstract void parse_glShaderBinary(Message.Builder builder);
parse_glShaderSource(Message.Builder builder)741     abstract void parse_glShaderSource(Message.Builder builder);
parse_glTexImage2D(Message.Builder builder)742     abstract void parse_glTexImage2D(Message.Builder builder);
parse_glTexParameterfv(Message.Builder builder)743     abstract void parse_glTexParameterfv(Message.Builder builder);
parse_glTexParameteriv(Message.Builder builder)744     abstract void parse_glTexParameteriv(Message.Builder builder);
parse_glTexSubImage2D(Message.Builder builder)745     abstract void parse_glTexSubImage2D(Message.Builder builder);
parse_glVertexAttribPointer(Message.Builder builder)746     abstract void parse_glVertexAttribPointer(Message.Builder builder);
747 }
748