diff --git a/tools/glesv2debugger/generate_MessageParser_java.py b/tools/glesv2debugger/generate_MessageParser_java.py new file mode 100755 index 000000000..47ab5c9f6 --- /dev/null +++ b/tools/glesv2debugger/generate_MessageParser_java.py @@ -0,0 +1,292 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# +# 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. +# + +import os +import sys + +def RemoveAnnotation(line): + if line.find(":") >= 0: + annotation = line[line.find(":"): line.find(" ", line.find(":"))] + return line.replace(annotation, "*") + else: + return line + +if __name__ == "__main__": + externs = [] + lines = open("../../../frameworks/base/opengl/libs/GLES2_dbg/gl2_api_annotated.in").readlines() + output = open("src/com/android/glesv2debugger/MessageParser.java", "w") + + i = 0 + output.write("""\ +/* + ** 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() + { + assert args.charAt(0) == '['; + String arg = args; + args = args.substring(args.indexOf(']') + 1); + int comma = args.indexOf(','); + if (comma >= 0) + args = args.substring(comma + 1).trim(); + else + args = null; + arg = arg.substring(1, arg.indexOf(']')).trim(); + return arg.split(","); + } + + ByteString ParseFloats(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putFloat(Float.parseFloat(arg[i].trim())); + return ByteString.copyFrom(buffer); + } + + ByteString ParseInts(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putInt(Integer.parseInt(arg[i].trim())); + return ByteString.copyFrom(buffer); + } + + ByteString ParseUInts(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putInt((int)(Long.parseLong(arg[i].trim()) & 0xffffffff)); + return ByteString.copyFrom(buffer); + } + + ByteString ParseMatrix(int columns, int count) { + return ParseFloats(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() + { + int comma = args.indexOf(","); + String arg = null; + if (comma >= 0) + { + arg = args.substring(0, comma).trim(); + args = args.substring(comma + 1).trim(); + } + else + { + arg = args; + args = null; + } + if (arg.indexOf("=") >= 0) + arg = arg.substring(arg.indexOf("=") + 1); + return arg; + } + + 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) { +""") + + abstractParsers = "" + + for line in lines: + if line.find("API_ENTRY(") >= 0: # a function prototype + returnType = line[0: line.find(" API_ENTRY(")].replace("const ", "") + functionName = line[line.find("(") + 1: line.find(")")] #extract GL function name + parameterList = line[line.find(")(") + 2: line.find(") {")] + + parameters = parameterList.split(',') + paramIndex = 0 + + #if returnType != "void": + #else: + + if parameterList == "void": + parameters = [] + inout = "" + + paramNames = [] + abstract = False + argumentSetters = "" + output.write("\ + case %s:\n" % (functionName)) + + for parameter in parameters: + parameter = parameter.replace("const","") + parameter = parameter.strip() + paramType = parameter.split(' ')[0] + paramName = parameter.split(' ')[1] + annotation = "" + + argumentParser = "" + + if parameter.find(":") >= 0: + dataSetter = "" + assert inout == "" # only one parameter should be annotated + inout = paramType.split(":")[2] + annotation = paramType.split(":")[1] + paramType = paramType.split(":")[0] + count = 1 + countArg = "" + if annotation.find("*") >= 0: # [1,n] * param + count = int(annotation.split("*")[0]) + countArg = annotation.split("*")[1] + assert countArg in paramNames + elif annotation in paramNames: + count = 1 + countArg = annotation + elif annotation == "GLstring": + annotation = annotation + else: + count = int(annotation) + + if paramType == "GLfloat": + argumentParser = "ParseFloats" + elif paramType == "GLint": + argumentParser = "ParseInts" + elif paramType == "GLuint": + argumentParser = "ParseUInts" + elif annotation == "GLstring": + assert paramType == 'GLchar' + elif paramType.find("void") >= 0: + assert 1 + else: + assert 0 + + if functionName.find('Matrix') >= 0: + columns = int(functionName[functionName.find("fv") - 1: functionName.find("fv")]) + assert columns * columns == count + assert countArg != "" + assert paramType == "GLfloat" + dataSetter = "builder.setData(ParseMatrix(%d, %d * builder.getArg%d()));" % ( + columns, count, paramNames.index(countArg)) + elif annotation == "GLstring": + dataSetter = "builder.setData(ParseString());" + elif paramType.find("void") >= 0: + dataSetter = "// TODO" + abstract = True + elif countArg == "": + dataSetter = "builder.setData(%s(%d));" % (argumentParser, count) + else: + dataSetter = "builder.setData(%s(%d * builder.getArg%d()));" % ( + argumentParser, count, paramNames.index(countArg)) + argumentSetters += "\ + %s // %s %s\n" % (dataSetter, paramType, paramName) + else: + if paramType == "GLfloat" or paramType == "GLclampf": + argumentSetters += "\ + builder.setArg%d(ParseFloat()); // %s %s\n" % ( + paramIndex, paramType, paramName) + elif paramType.find("*") >= 0: + argumentSetters += "\ + // TODO: %s %s\n" % (paramType, paramName) + abstract = True + else: + argumentSetters += "\ + builder.setArg%d(ParseArgument()); // %s %s\n" % ( + paramIndex, paramType, paramName) + paramNames.append(paramName) + paramIndex += 1 + + if not abstract: + output.write("%s" % argumentSetters) + else: + output.write("\ + Parse_%s(builder);\n" % functionName) + abstractParsers += "\ + abstract void Parse_%s(Message.Builder builder);\n" % functionName + print """\ + @Override + void Parse_%s(Message.Builder builder) { +%s } +""" % (functionName, argumentSetters) # print skeleton code for MessageParserE + + output.write("\ + break;\n") + output.write("""\ + default: + assert false; + } + } +""") + output.write(abstractParsers) + output.write("\ +}""") diff --git a/tools/glesv2debugger/src/com/android/glesv2debugger/BreakpointOption.java b/tools/glesv2debugger/src/com/android/glesv2debugger/BreakpointOption.java index 2573d63a2..bf5c40de2 100644 --- a/tools/glesv2debugger/src/com/android/glesv2debugger/BreakpointOption.java +++ b/tools/glesv2debugger/src/com/android/glesv2debugger/BreakpointOption.java @@ -20,8 +20,9 @@ import com.android.glesv2debugger.DebuggerMessage.Message; import com.android.glesv2debugger.DebuggerMessage.Message.Function; import com.android.glesv2debugger.DebuggerMessage.Message.Prop; import com.android.glesv2debugger.DebuggerMessage.Message.Type; - +import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionEvent; @@ -40,7 +41,8 @@ import java.util.HashMap; public class BreakpointOption extends ScrolledComposite implements SelectionListener { SampleView sampleView; - HashMap buttons = new HashMap(); + HashMap buttonsBreak = new HashMap(); + MessageParserEx messageParserEx = new MessageParserEx(); BreakpointOption(SampleView sampleView, Composite parent) { super(parent, SWT.NO_BACKGROUND | SWT.V_SCROLL | SWT.H_SCROLL); @@ -60,7 +62,7 @@ public class BreakpointOption extends ScrolledComposite implements SelectionList btn.addSelectionListener(this); btn.setText("Break"); btn.setSelection(false); - buttons.put(Function.values()[i], btn); + buttonsBreak.put(Function.values()[i], btn); } Point size = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT); @@ -101,34 +103,46 @@ public class BreakpointOption extends ScrolledComposite implements SelectionList shell.getDisplay().syncExec(new Runnable() { @Override public void run() { - String[] btns = { - "&Continue", "&Skip", "&Remove" - }; - int defaultBtn = 0; - if (msg.getType() == Type.AfterCall) - defaultBtn = 1; - String message = msg.getFunction().toString(); - if (msg.hasTime()) - message += String.format("\n%.3fms", msg.getTime()); - message += "\n" + MessageFormatter.Format(msg); - MessageDialog dialog = new MessageDialog(shell, "Breakpoint " + msg.getType(), - null, message, MessageDialog.QUESTION, btns, defaultBtn); - int rc = dialog.open(); - if (rc == SWT.DEFAULT || rc == 0) - builder.setFunction(Function.CONTINUE); - else if (rc == 1) - builder.setFunction(Function.SKIP); - else if (rc == 2) + String call = MessageFormatter.Format(msg); + call = call.substring(0, call.indexOf("(")) + msg.getFunction().toString() + + call.substring(call.indexOf("(")); + if (msg.hasData() && msg.getFunction() == Function.glShaderSource) { - Button btn = buttons.get(msg.getFunction()); - btn.setSelection(false); - SetBreakpoint(msg.getFunction(), false); + int index = call.indexOf("string=") + 7; + String ptr = call.substring(index, call.indexOf(',', index)); + call = call.replace(ptr, '"' + msg.getData().toStringUtf8() + '"'); + } + if (msg.getType() == Type.AfterCall) + { + call = "s"; + builder.setFunction(Function.SKIP); + } + else if (msg.getType() == Type.BeforeCall) + { + call = "continue " + call; + builder.setFunction(Function.CONTINUE); + } + InputDialog inputDialog = new InputDialog(shell, + msg.getFunction().toString() + " " + msg.getType().toString(), + "(s)kip, (c)continue, (r)emove bp or glFunction(...)", + call, null); + if (Window.OK == inputDialog.open()) + { + String s = inputDialog.getValue().substring(0, 1).toLowerCase(); + if (s.startsWith("s")) + builder.setFunction(Function.SKIP); + else if (s.startsWith("c")) + builder.setFunction(Function.CONTINUE); + else if (s.startsWith("r")) + { + Button btn = buttonsBreak.get(msg.getFunction()); + btn.setSelection(false); + SetBreakpoint(msg.getFunction(), false); + } + else + messageParserEx.Parse(builder, inputDialog.getValue()); } - else - assert false; - } }); - } } diff --git a/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParser.java b/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParser.java new file mode 100644 index 000000000..af3567e88 --- /dev/null +++ b/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParser.java @@ -0,0 +1,735 @@ +/* + ** 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() + { + assert args.charAt(0) == '['; + String arg = args; + args = args.substring(args.indexOf(']') + 1); + int comma = args.indexOf(','); + if (comma >= 0) + args = args.substring(comma + 1).trim(); + else + args = null; + arg = arg.substring(1, arg.indexOf(']')).trim(); + return arg.split(","); + } + + ByteString ParseFloats(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putFloat(Float.parseFloat(arg[i].trim())); + return ByteString.copyFrom(buffer); + } + + ByteString ParseInts(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putInt(Integer.parseInt(arg[i].trim())); + return ByteString.copyFrom(buffer); + } + + ByteString ParseUInts(int count) { + ByteBuffer buffer = ByteBuffer.allocate(count * 4); + String [] arg = GetList(); + for (int i = 0; i < count; i++) + buffer.putInt((int)(Long.parseLong(arg[i].trim()) & 0xffffffff)); + return ByteString.copyFrom(buffer); + } + + ByteString ParseMatrix(int columns, int count) { + return ParseFloats(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() + { + int comma = args.indexOf(","); + String arg = null; + if (comma >= 0) + { + arg = args.substring(0, comma).trim(); + args = args.substring(comma + 1).trim(); + } + else + { + arg = args; + args = null; + } + if (arg.indexOf("=") >= 0) + arg = arg.substring(arg.indexOf("=") + 1); + return arg; + } + + 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, 4 * 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, 9 * 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, 16 * 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); +} \ No newline at end of file diff --git a/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParserEx.java b/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParserEx.java new file mode 100644 index 000000000..93b9e1bb1 --- /dev/null +++ b/tools/glesv2debugger/src/com/android/glesv2debugger/MessageParserEx.java @@ -0,0 +1,304 @@ +/* + ** 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. + */ + +// skeleton from stdout of generate_MessageParser_java.py + +package com.android.glesv2debugger; + +import com.android.glesv2debugger.DebuggerMessage.Message; + +public class MessageParserEx extends MessageParser { + + @Override + void Parse_glBufferData(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLsizeiptr size + // TODO // GLvoid data + builder.setArg3(ParseArgument()); // GLenum usage + } + + @Override + void Parse_glBufferSubData(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLintptr offset + builder.setArg2(ParseArgument()); // GLsizeiptr size + // TODO // GLvoid data + } + + @Override + void Parse_glCompressedTexImage2D(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLint level + builder.setArg2(ParseArgument()); // GLenum internalformat + builder.setArg3(ParseArgument()); // GLsizei width + builder.setArg4(ParseArgument()); // GLsizei height + builder.setArg5(ParseArgument()); // GLint border + builder.setArg6(ParseArgument()); // GLsizei imageSize + // TODO: GLvoid* data + } + + @Override + void Parse_glCompressedTexSubImage2D(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLint level + builder.setArg2(ParseArgument()); // GLint xoffset + builder.setArg3(ParseArgument()); // GLint yoffset + builder.setArg4(ParseArgument()); // GLsizei width + builder.setArg5(ParseArgument()); // GLsizei height + builder.setArg6(ParseArgument()); // GLenum format + builder.setArg7(ParseArgument()); // GLsizei imageSize + // TODO: GLvoid* data + } + + @Override + void Parse_glDrawElements(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum mode + builder.setArg1(ParseArgument()); // GLsizei count + builder.setArg2(ParseArgument()); // GLenum type + // TODO: GLvoid* indices + } + + @Override + void Parse_glGetActiveAttrib(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLuint index + builder.setArg2(ParseArgument()); // GLsizei bufsize + // TODO: GLsizei* length + // TODO: GLint* size + // TODO: GLenum* type + builder.setData(ParseString()); // GLchar name + } + + @Override + void Parse_glGetActiveUniform(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLuint index + builder.setArg2(ParseArgument()); // GLsizei bufsize + // TODO: GLsizei* length + // TODO: GLint* size + // TODO: GLenum* type + builder.setData(ParseString()); // GLchar name + } + + @Override + void Parse_glGetAttachedShaders(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLsizei maxcount + // TODO: GLsizei* count + // TODO: GLuint* shaders + } + + @Override + void Parse_glGetBooleanv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum pname + // TODO: GLboolean* params + } + + @Override + void Parse_glGetBufferParameteriv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetFloatv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum pname + // TODO: GLfloat* params + } + + @Override + void Parse_glGetFramebufferAttachmentParameteriv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum attachment + builder.setArg2(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetIntegerv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetProgramInfoLog(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLsizei bufsize + // TODO: GLsizei* length + builder.setData(ParseString()); // GLchar infolog + } + + @Override + void Parse_glGetRenderbufferParameteriv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetShaderInfoLog(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint shader + builder.setArg1(ParseArgument()); // GLsizei bufsize + // TODO: GLsizei* length + builder.setData(ParseString()); // GLchar infolog + } + + @Override + void Parse_glGetShaderPrecisionFormat(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum shadertype + builder.setArg1(ParseArgument()); // GLenum precisiontype + // TODO: GLint* range + // TODO: GLint* precision + } + + @Override + void Parse_glGetShaderSource(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint shader + builder.setArg1(ParseArgument()); // GLsizei bufsize + // TODO: GLsizei* length + builder.setData(ParseString()); // GLchar source + } + + @Override + void Parse_glGetTexParameterfv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLfloat* params + } + + @Override + void Parse_glGetTexParameteriv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetUniformfv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLint location + // TODO: GLfloat* params + } + + @Override + void Parse_glGetUniformiv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint program + builder.setArg1(ParseArgument()); // GLint location + // TODO: GLint* params + } + + @Override + void Parse_glGetVertexAttribfv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint index + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLfloat* params + } + + @Override + void Parse_glGetVertexAttribiv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint index + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glGetVertexAttribPointerv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint index + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLvoid** pointer + } + + @Override + void Parse_glReadPixels(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLint x + builder.setArg1(ParseArgument()); // GLint y + builder.setArg2(ParseArgument()); // GLsizei width + builder.setArg3(ParseArgument()); // GLsizei height + builder.setArg4(ParseArgument()); // GLenum format + builder.setArg5(ParseArgument()); // GLenum type + // TODO: GLvoid* pixels + } + + @Override + void Parse_glShaderBinary(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLsizei n + // TODO: GLuint* shaders + builder.setArg2(ParseArgument()); // GLenum binaryformat + // TODO: GLvoid* binary + builder.setArg4(ParseArgument()); // GLsizei length + } + + @Override + void Parse_glShaderSource(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint shader + builder.setArg1(ParseArgument()); // GLsizei count + assert 1 == builder.getArg1(); + builder.setData(ParseString()); // GLchar** string + builder.setArg3(ParseArgument());// not used, always 1 null terminated string; GLint* length + } + + @Override + void Parse_glTexImage2D(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLint level + builder.setArg2(ParseArgument()); // GLint internalformat + builder.setArg3(ParseArgument()); // GLsizei width + builder.setArg4(ParseArgument()); // GLsizei height + builder.setArg5(ParseArgument()); // GLint border + builder.setArg6(ParseArgument()); // GLenum format + builder.setArg7(ParseArgument()); // GLenum type + // TODO: GLvoid* pixels + } + + @Override + void Parse_glTexParameterfv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLfloat* params + } + + @Override + void Parse_glTexParameteriv(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLenum pname + // TODO: GLint* params + } + + @Override + void Parse_glTexSubImage2D(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLenum target + builder.setArg1(ParseArgument()); // GLint level + builder.setArg2(ParseArgument()); // GLint xoffset + builder.setArg3(ParseArgument()); // GLint yoffset + builder.setArg4(ParseArgument()); // GLsizei width + builder.setArg5(ParseArgument()); // GLsizei height + builder.setArg6(ParseArgument()); // GLenum format + builder.setArg7(ParseArgument()); // GLenum type + // TODO: GLvoid* pixels + } + + @Override + void Parse_glVertexAttribPointer(Message.Builder builder) { + builder.setArg0(ParseArgument()); // GLuint indx + builder.setArg1(ParseArgument()); // GLint size + builder.setArg2(ParseArgument()); // GLenum type + builder.setArg3(ParseArgument()); // GLboolean normalized + builder.setArg4(ParseArgument()); // GLsizei stride + // TODO: GLvoid* ptr + } + +} diff --git a/tools/glesv2debugger/src/com/android/glesv2debugger/SampleView.java b/tools/glesv2debugger/src/com/android/glesv2debugger/SampleView.java index 9d6e03060..6efc8f61d 100644 --- a/tools/glesv2debugger/src/com/android/glesv2debugger/SampleView.java +++ b/tools/glesv2debugger/src/com/android/glesv2debugger/SampleView.java @@ -98,6 +98,7 @@ public class SampleView extends ViewPart implements Runnable { */ public static final String ID = "glesv2debuggerclient.views.SampleView"; + LayoutComposite layoutComposite; ListViewer viewer; BreakpointOption breakpointOption; org.eclipse.swt.widgets.Canvas canvas; @@ -203,6 +204,11 @@ public class SampleView extends ViewPart implements Runnable { */ public SampleView() { messageQueue = new MessageQueue(this); + + MessageParserEx messageParserEx = new MessageParserEx(); + Message.Builder builder = Message.newBuilder(); + messageParserEx.Parse(builder, "glUniform4fv(1,2,[0,1,2,3,4,5,6,7])"); + messageParserEx.Parse(builder, "void glShaderSource(shader=4, count=1, string=\"dksjafhskjahourehghskjg\", length=0x0)"); } public void CreateView(Composite parent) { @@ -235,25 +241,7 @@ public class SampleView extends ViewPart implements Runnable { hookSelectionChanged(); contributeToActionBars(); - class LayoutComposite extends Composite { - public LayoutComposite(Composite parent, int style) { - super(parent, style); - } - - @Override - public Control[] getChildren() { - Control[] children = super.getChildren(); - ArrayList controls = new ArrayList(); - for (int i = 0; i < children.length; i++) - if (children[i].isVisible()) - controls.add(children[i]); - children = new Control[controls.size()]; - return controls.toArray(children); - } - - } - - LayoutComposite layoutComposite = new LayoutComposite(parent, 0); + layoutComposite = new LayoutComposite(parent, 0); layoutComposite.setLayout(new FillLayout()); text = new Text(layoutComposite, SWT.NO_BACKGROUND | SWT.READ_ONLY @@ -472,6 +460,7 @@ public class SampleView extends ViewPart implements Runnable { public void run() { breakpointOption.setVisible(!breakpointOption.isVisible()); + layoutComposite.layout(true); manager.update(true); } }; @@ -657,3 +646,20 @@ public class SampleView extends ViewPart implements Runnable { } } } + +class LayoutComposite extends Composite { + public LayoutComposite(Composite parent, int style) { + super(parent, style); + } + + @Override + public Control[] getChildren() { + Control[] children = super.getChildren(); + ArrayList controls = new ArrayList(); + for (int i = 0; i < children.length; i++) + if (children[i].isVisible()) + controls.add(children[i]); + children = new Control[controls.size()]; + return controls.toArray(children); + } +}