/* ** Copyright 2011, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ // auto generated by generate_MessageParser_java.py, // which also prints skeleton code for MessageParserEx.java package com.android.glesv2debugger; import com.android.glesv2debugger.DebuggerMessage.Message; import com.android.glesv2debugger.DebuggerMessage.Message.Function; import com.google.protobuf.ByteString; import java.nio.ByteBuffer; public abstract class MessageParser { String args; String[] getList() { String arg = args; args = args.substring(args.lastIndexOf('}') + 1); final int comma = args.indexOf(','); if (comma >= 0) args = args.substring(comma + 1).trim(); else args = null; final int comment = arg.indexOf('='); if (comment >= 0) arg = arg.substring(comment + 1); arg = arg.trim(); assert arg.charAt(0) == '{'; arg = arg.substring(1, arg.lastIndexOf('}')).trim(); return arg.split("\\s*,\\s*"); } ByteString parseFloats(int count) { ByteBuffer buffer = ByteBuffer.allocate(count * 4); buffer.order(SampleView.targetByteOrder); String [] arg = getList(); for (int i = 0; i < count; i++) buffer.putFloat(Float.parseFloat(arg[i].trim())); buffer.rewind(); return ByteString.copyFrom(buffer); } ByteString parseInts(int count) { ByteBuffer buffer = ByteBuffer.allocate(count * 4); buffer.order(SampleView.targetByteOrder); String [] arg = getList(); for (int i = 0; i < count; i++) buffer.putInt(Integer.parseInt(arg[i].trim())); buffer.rewind(); return ByteString.copyFrom(buffer); } ByteString parseUInts(int count) { ByteBuffer buffer = ByteBuffer.allocate(count * 4); buffer.order(SampleView.targetByteOrder); String [] arg = getList(); for (int i = 0; i < count; i++) buffer.putInt((int)(Long.parseLong(arg[i].trim()) & 0xffffffff)); buffer.rewind(); return ByteString.copyFrom(buffer); } ByteString parseMatrix(int columns, int count) { return parseFloats(columns * columns * count); } ByteString parseString() { // TODO: escape sequence and proper string literal String arg = args.substring(args.indexOf('"') + 1, args.lastIndexOf('"')); args = args.substring(args.lastIndexOf('"')); int comma = args.indexOf(','); if (comma >= 0) args = args.substring(comma + 1).trim(); else args = null; return ByteString.copyFromUtf8(arg); } String getArgument() { final int comma = args.indexOf(','); String arg = null; if (comma >= 0) { arg = args.substring(0, comma); args = args.substring(comma + 1); } else { arg = args; args = null; } final int comment = arg.indexOf('='); if (comment >= 0) arg = arg.substring(comment + 1); return arg.trim(); } int parseArgument() { String arg = getArgument(); if (arg.startsWith("GL_")) return GLEnum.valueOf(arg).value; else if (arg.toLowerCase().startsWith("0x")) return Integer.parseInt(arg.substring(2), 16); else return Integer.parseInt(arg); } int parseFloat() { String arg = getArgument(); return Float.floatToRawIntBits(Float.parseFloat(arg)); } public void parse(final Message.Builder builder, String string) { int lparen = string.indexOf("("), rparen = string.lastIndexOf(")"); String s = string.substring(0, lparen).trim(); args = string.substring(lparen + 1, rparen); String[] t = s.split(" "); Function function = Function.valueOf(t[t.length - 1]); builder.setFunction(function); switch (function) { case glActiveTexture: builder.setArg0(parseArgument()); // GLenum texture break; case glAttachShader: builder.setArg0(parseArgument()); // GLuint program builder.setArg1(parseArgument()); // GLuint shader break; case glBindAttribLocation: builder.setArg0(parseArgument()); // GLuint program builder.setArg1(parseArgument()); // GLuint index builder.setData(parseString()); // GLchar name break; case glBindBuffer: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLuint buffer break; case glBindFramebuffer: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLuint framebuffer break; case glBindRenderbuffer: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLuint renderbuffer break; case glBindTexture: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLuint texture break; case glBlendColor: builder.setArg0(parseFloat()); // GLclampf red builder.setArg1(parseFloat()); // GLclampf green builder.setArg2(parseFloat()); // GLclampf blue builder.setArg3(parseFloat()); // GLclampf alpha break; case glBlendEquation: builder.setArg0(parseArgument()); // GLenum mode break; case glBlendEquationSeparate: builder.setArg0(parseArgument()); // GLenum modeRGB builder.setArg1(parseArgument()); // GLenum modeAlpha break; case glBlendFunc: builder.setArg0(parseArgument()); // GLenum sfactor builder.setArg1(parseArgument()); // GLenum dfactor break; case glBlendFuncSeparate: builder.setArg0(parseArgument()); // GLenum srcRGB builder.setArg1(parseArgument()); // GLenum dstRGB builder.setArg2(parseArgument()); // GLenum srcAlpha builder.setArg3(parseArgument()); // GLenum dstAlpha break; case glBufferData: parse_glBufferData(builder); break; case glBufferSubData: parse_glBufferSubData(builder); break; case glCheckFramebufferStatus: builder.setArg0(parseArgument()); // GLenum target break; case glClear: builder.setArg0(parseArgument()); // GLbitfield mask break; case glClearColor: builder.setArg0(parseFloat()); // GLclampf red builder.setArg1(parseFloat()); // GLclampf green builder.setArg2(parseFloat()); // GLclampf blue builder.setArg3(parseFloat()); // GLclampf alpha break; case glClearDepthf: builder.setArg0(parseFloat()); // GLclampf depth break; case glClearStencil: builder.setArg0(parseArgument()); // GLint s break; case glColorMask: builder.setArg0(parseArgument()); // GLboolean red builder.setArg1(parseArgument()); // GLboolean green builder.setArg2(parseArgument()); // GLboolean blue builder.setArg3(parseArgument()); // GLboolean alpha break; case glCompileShader: builder.setArg0(parseArgument()); // GLuint shader break; case glCompressedTexImage2D: parse_glCompressedTexImage2D(builder); break; case glCompressedTexSubImage2D: parse_glCompressedTexSubImage2D(builder); break; case glCopyTexImage2D: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLint level builder.setArg2(parseArgument()); // GLenum internalformat builder.setArg3(parseArgument()); // GLint x builder.setArg4(parseArgument()); // GLint y builder.setArg5(parseArgument()); // GLsizei width builder.setArg6(parseArgument()); // GLsizei height builder.setArg7(parseArgument()); // GLint border break; case glCopyTexSubImage2D: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLint level builder.setArg2(parseArgument()); // GLint xoffset builder.setArg3(parseArgument()); // GLint yoffset builder.setArg4(parseArgument()); // GLint x builder.setArg5(parseArgument()); // GLint y builder.setArg6(parseArgument()); // GLsizei width builder.setArg7(parseArgument()); // GLsizei height break; case glCreateProgram: break; case glCreateShader: builder.setArg0(parseArgument()); // GLenum type break; case glCullFace: builder.setArg0(parseArgument()); // GLenum mode break; case glDeleteBuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint buffers break; case glDeleteFramebuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint framebuffers break; case glDeleteProgram: builder.setArg0(parseArgument()); // GLuint program break; case glDeleteRenderbuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint renderbuffers break; case glDeleteShader: builder.setArg0(parseArgument()); // GLuint shader break; case glDeleteTextures: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint textures break; case glDepthFunc: builder.setArg0(parseArgument()); // GLenum func break; case glDepthMask: builder.setArg0(parseArgument()); // GLboolean flag break; case glDepthRangef: builder.setArg0(parseFloat()); // GLclampf zNear builder.setArg1(parseFloat()); // GLclampf zFar break; case glDetachShader: builder.setArg0(parseArgument()); // GLuint program builder.setArg1(parseArgument()); // GLuint shader break; case glDisable: builder.setArg0(parseArgument()); // GLenum cap break; case glDisableVertexAttribArray: builder.setArg0(parseArgument()); // GLuint index break; case glDrawArrays: builder.setArg0(parseArgument()); // GLenum mode builder.setArg1(parseArgument()); // GLint first builder.setArg2(parseArgument()); // GLsizei count break; case glDrawElements: parse_glDrawElements(builder); break; case glEnable: builder.setArg0(parseArgument()); // GLenum cap break; case glEnableVertexAttribArray: builder.setArg0(parseArgument()); // GLuint index break; case glFinish: break; case glFlush: break; case glFramebufferRenderbuffer: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum attachment builder.setArg2(parseArgument()); // GLenum renderbuffertarget builder.setArg3(parseArgument()); // GLuint renderbuffer break; case glFramebufferTexture2D: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum attachment builder.setArg2(parseArgument()); // GLenum textarget builder.setArg3(parseArgument()); // GLuint texture builder.setArg4(parseArgument()); // GLint level break; case glFrontFace: builder.setArg0(parseArgument()); // GLenum mode break; case glGenBuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint buffers break; case glGenerateMipmap: builder.setArg0(parseArgument()); // GLenum target break; case glGenFramebuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint framebuffers break; case glGenRenderbuffers: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint renderbuffers break; case glGenTextures: builder.setArg0(parseArgument()); // GLsizei n builder.setData(parseUInts(1 * builder.getArg0())); // GLuint textures break; case glGetActiveAttrib: parse_glGetActiveAttrib(builder); break; case glGetActiveUniform: parse_glGetActiveUniform(builder); break; case glGetAttachedShaders: parse_glGetAttachedShaders(builder); break; case glGetAttribLocation: builder.setArg0(parseArgument()); // GLuint program builder.setData(parseString()); // GLchar name break; case glGetBooleanv: parse_glGetBooleanv(builder); break; case glGetBufferParameteriv: parse_glGetBufferParameteriv(builder); break; case glGetError: break; case glGetFloatv: parse_glGetFloatv(builder); break; case glGetFramebufferAttachmentParameteriv: parse_glGetFramebufferAttachmentParameteriv(builder); break; case glGetIntegerv: parse_glGetIntegerv(builder); break; case glGetProgramiv: builder.setArg0(parseArgument()); // GLuint program builder.setArg1(parseArgument()); // GLenum pname builder.setData(parseInts(1)); // GLint params break; case glGetProgramInfoLog: parse_glGetProgramInfoLog(builder); break; case glGetRenderbufferParameteriv: parse_glGetRenderbufferParameteriv(builder); break; case glGetShaderiv: builder.setArg0(parseArgument()); // GLuint shader builder.setArg1(parseArgument()); // GLenum pname builder.setData(parseInts(1)); // GLint params break; case glGetShaderInfoLog: parse_glGetShaderInfoLog(builder); break; case glGetShaderPrecisionFormat: parse_glGetShaderPrecisionFormat(builder); break; case glGetShaderSource: parse_glGetShaderSource(builder); break; case glGetString: builder.setArg0(parseArgument()); // GLenum name break; case glGetTexParameterfv: parse_glGetTexParameterfv(builder); break; case glGetTexParameteriv: parse_glGetTexParameteriv(builder); break; case glGetUniformfv: parse_glGetUniformfv(builder); break; case glGetUniformiv: parse_glGetUniformiv(builder); break; case glGetUniformLocation: builder.setArg0(parseArgument()); // GLuint program builder.setData(parseString()); // GLchar name break; case glGetVertexAttribfv: parse_glGetVertexAttribfv(builder); break; case glGetVertexAttribiv: parse_glGetVertexAttribiv(builder); break; case glGetVertexAttribPointerv: parse_glGetVertexAttribPointerv(builder); break; case glHint: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum mode break; case glIsBuffer: builder.setArg0(parseArgument()); // GLuint buffer break; case glIsEnabled: builder.setArg0(parseArgument()); // GLenum cap break; case glIsFramebuffer: builder.setArg0(parseArgument()); // GLuint framebuffer break; case glIsProgram: builder.setArg0(parseArgument()); // GLuint program break; case glIsRenderbuffer: builder.setArg0(parseArgument()); // GLuint renderbuffer break; case glIsShader: builder.setArg0(parseArgument()); // GLuint shader break; case glIsTexture: builder.setArg0(parseArgument()); // GLuint texture break; case glLineWidth: builder.setArg0(parseFloat()); // GLfloat width break; case glLinkProgram: builder.setArg0(parseArgument()); // GLuint program break; case glPixelStorei: builder.setArg0(parseArgument()); // GLenum pname builder.setArg1(parseArgument()); // GLint param break; case glPolygonOffset: builder.setArg0(parseFloat()); // GLfloat factor builder.setArg1(parseFloat()); // GLfloat units break; case glReadPixels: parse_glReadPixels(builder); break; case glReleaseShaderCompiler: break; case glRenderbufferStorage: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum internalformat builder.setArg2(parseArgument()); // GLsizei width builder.setArg3(parseArgument()); // GLsizei height break; case glSampleCoverage: builder.setArg0(parseFloat()); // GLclampf value builder.setArg1(parseArgument()); // GLboolean invert break; case glScissor: builder.setArg0(parseArgument()); // GLint x builder.setArg1(parseArgument()); // GLint y builder.setArg2(parseArgument()); // GLsizei width builder.setArg3(parseArgument()); // GLsizei height break; case glShaderBinary: parse_glShaderBinary(builder); break; case glShaderSource: parse_glShaderSource(builder); break; case glStencilFunc: builder.setArg0(parseArgument()); // GLenum func builder.setArg1(parseArgument()); // GLint ref builder.setArg2(parseArgument()); // GLuint mask break; case glStencilFuncSeparate: builder.setArg0(parseArgument()); // GLenum face builder.setArg1(parseArgument()); // GLenum func builder.setArg2(parseArgument()); // GLint ref builder.setArg3(parseArgument()); // GLuint mask break; case glStencilMask: builder.setArg0(parseArgument()); // GLuint mask break; case glStencilMaskSeparate: builder.setArg0(parseArgument()); // GLenum face builder.setArg1(parseArgument()); // GLuint mask break; case glStencilOp: builder.setArg0(parseArgument()); // GLenum fail builder.setArg1(parseArgument()); // GLenum zfail builder.setArg2(parseArgument()); // GLenum zpass break; case glStencilOpSeparate: builder.setArg0(parseArgument()); // GLenum face builder.setArg1(parseArgument()); // GLenum fail builder.setArg2(parseArgument()); // GLenum zfail builder.setArg3(parseArgument()); // GLenum zpass break; case glTexImage2D: parse_glTexImage2D(builder); break; case glTexParameterf: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum pname builder.setArg2(parseFloat()); // GLfloat param break; case glTexParameterfv: parse_glTexParameterfv(builder); break; case glTexParameteri: builder.setArg0(parseArgument()); // GLenum target builder.setArg1(parseArgument()); // GLenum pname builder.setArg2(parseArgument()); // GLint param break; case glTexParameteriv: parse_glTexParameteriv(builder); break; case glTexSubImage2D: parse_glTexSubImage2D(builder); break; case glUniform1f: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseFloat()); // GLfloat x break; case glUniform1fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseFloats(1 * builder.getArg1())); // GLfloat v break; case glUniform1i: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLint x break; case glUniform1iv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseInts(1 * builder.getArg1())); // GLint v break; case glUniform2f: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y break; case glUniform2fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseFloats(2 * builder.getArg1())); // GLfloat v break; case glUniform2i: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLint x builder.setArg2(parseArgument()); // GLint y break; case glUniform2iv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseInts(2 * builder.getArg1())); // GLint v break; case glUniform3f: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y builder.setArg3(parseFloat()); // GLfloat z break; case glUniform3fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseFloats(3 * builder.getArg1())); // GLfloat v break; case glUniform3i: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLint x builder.setArg2(parseArgument()); // GLint y builder.setArg3(parseArgument()); // GLint z break; case glUniform3iv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseInts(3 * builder.getArg1())); // GLint v break; case glUniform4f: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y builder.setArg3(parseFloat()); // GLfloat z builder.setArg4(parseFloat()); // GLfloat w break; case glUniform4fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseFloats(4 * builder.getArg1())); // GLfloat v break; case glUniform4i: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLint x builder.setArg2(parseArgument()); // GLint y builder.setArg3(parseArgument()); // GLint z builder.setArg4(parseArgument()); // GLint w break; case glUniform4iv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setData(parseInts(4 * builder.getArg1())); // GLint v break; case glUniformMatrix2fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setArg2(parseArgument()); // GLboolean transpose builder.setData(parseMatrix(2, builder.getArg1())); // GLfloat value break; case glUniformMatrix3fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setArg2(parseArgument()); // GLboolean transpose builder.setData(parseMatrix(3, builder.getArg1())); // GLfloat value break; case glUniformMatrix4fv: builder.setArg0(parseArgument()); // GLint location builder.setArg1(parseArgument()); // GLsizei count builder.setArg2(parseArgument()); // GLboolean transpose builder.setData(parseMatrix(4, builder.getArg1())); // GLfloat value break; case glUseProgram: builder.setArg0(parseArgument()); // GLuint program break; case glValidateProgram: builder.setArg0(parseArgument()); // GLuint program break; case glVertexAttrib1f: builder.setArg0(parseArgument()); // GLuint indx builder.setArg1(parseFloat()); // GLfloat x break; case glVertexAttrib1fv: builder.setArg0(parseArgument()); // GLuint indx builder.setData(parseFloats(1)); // GLfloat values break; case glVertexAttrib2f: builder.setArg0(parseArgument()); // GLuint indx builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y break; case glVertexAttrib2fv: builder.setArg0(parseArgument()); // GLuint indx builder.setData(parseFloats(2)); // GLfloat values break; case glVertexAttrib3f: builder.setArg0(parseArgument()); // GLuint indx builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y builder.setArg3(parseFloat()); // GLfloat z break; case glVertexAttrib3fv: builder.setArg0(parseArgument()); // GLuint indx builder.setData(parseFloats(3)); // GLfloat values break; case glVertexAttrib4f: builder.setArg0(parseArgument()); // GLuint indx builder.setArg1(parseFloat()); // GLfloat x builder.setArg2(parseFloat()); // GLfloat y builder.setArg3(parseFloat()); // GLfloat z builder.setArg4(parseFloat()); // GLfloat w break; case glVertexAttrib4fv: builder.setArg0(parseArgument()); // GLuint indx builder.setData(parseFloats(4)); // GLfloat values break; case glVertexAttribPointer: parse_glVertexAttribPointer(builder); break; case glViewport: builder.setArg0(parseArgument()); // GLint x builder.setArg1(parseArgument()); // GLint y builder.setArg2(parseArgument()); // GLsizei width builder.setArg3(parseArgument()); // GLsizei height break; default: assert false; } } abstract void parse_glBufferData(Message.Builder builder); abstract void parse_glBufferSubData(Message.Builder builder); abstract void parse_glCompressedTexImage2D(Message.Builder builder); abstract void parse_glCompressedTexSubImage2D(Message.Builder builder); abstract void parse_glDrawElements(Message.Builder builder); abstract void parse_glGetActiveAttrib(Message.Builder builder); abstract void parse_glGetActiveUniform(Message.Builder builder); abstract void parse_glGetAttachedShaders(Message.Builder builder); abstract void parse_glGetBooleanv(Message.Builder builder); abstract void parse_glGetBufferParameteriv(Message.Builder builder); abstract void parse_glGetFloatv(Message.Builder builder); abstract void parse_glGetFramebufferAttachmentParameteriv(Message.Builder builder); abstract void parse_glGetIntegerv(Message.Builder builder); abstract void parse_glGetProgramInfoLog(Message.Builder builder); abstract void parse_glGetRenderbufferParameteriv(Message.Builder builder); abstract void parse_glGetShaderInfoLog(Message.Builder builder); abstract void parse_glGetShaderPrecisionFormat(Message.Builder builder); abstract void parse_glGetShaderSource(Message.Builder builder); abstract void parse_glGetTexParameterfv(Message.Builder builder); abstract void parse_glGetTexParameteriv(Message.Builder builder); abstract void parse_glGetUniformfv(Message.Builder builder); abstract void parse_glGetUniformiv(Message.Builder builder); abstract void parse_glGetVertexAttribfv(Message.Builder builder); abstract void parse_glGetVertexAttribiv(Message.Builder builder); abstract void parse_glGetVertexAttribPointerv(Message.Builder builder); abstract void parse_glReadPixels(Message.Builder builder); abstract void parse_glShaderBinary(Message.Builder builder); abstract void parse_glShaderSource(Message.Builder builder); abstract void parse_glTexImage2D(Message.Builder builder); abstract void parse_glTexParameterfv(Message.Builder builder); abstract void parse_glTexParameteriv(Message.Builder builder); abstract void parse_glTexSubImage2D(Message.Builder builder); abstract void parse_glVertexAttribPointer(Message.Builder builder); }