GLES2Dbg: implemented MessageParser

To allow user to input GL function call

Change-Id: I5e19c11d74ed7a6bf6c5cafcbd58a0da952b0b46
Signed-off-by: David Li <davidxli@google.com>
This commit is contained in:
David Li
2011-03-22 10:06:00 -07:00
parent 5089368bc7
commit 067eefee5a
5 changed files with 1398 additions and 47 deletions

View File

@@ -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("\
}""")

View File

@@ -20,8 +20,9 @@ import com.android.glesv2debugger.DebuggerMessage.Message;
import com.android.glesv2debugger.DebuggerMessage.Message.Function; import com.android.glesv2debugger.DebuggerMessage.Message.Function;
import com.android.glesv2debugger.DebuggerMessage.Message.Prop; import com.android.glesv2debugger.DebuggerMessage.Message.Prop;
import com.android.glesv2debugger.DebuggerMessage.Message.Type; import com.android.glesv2debugger.DebuggerMessage.Message.Type;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionEvent;
@@ -40,7 +41,8 @@ import java.util.HashMap;
public class BreakpointOption extends ScrolledComposite implements SelectionListener { public class BreakpointOption extends ScrolledComposite implements SelectionListener {
SampleView sampleView; SampleView sampleView;
HashMap<Function, Button> buttons = new HashMap<Function, Button>(); HashMap<Function, Button> buttonsBreak = new HashMap<Function, Button>();
MessageParserEx messageParserEx = new MessageParserEx();
BreakpointOption(SampleView sampleView, Composite parent) { BreakpointOption(SampleView sampleView, Composite parent) {
super(parent, SWT.NO_BACKGROUND | SWT.V_SCROLL | SWT.H_SCROLL); 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.addSelectionListener(this);
btn.setText("Break"); btn.setText("Break");
btn.setSelection(false); btn.setSelection(false);
buttons.put(Function.values()[i], btn); buttonsBreak.put(Function.values()[i], btn);
} }
Point size = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT); Point size = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
@@ -101,34 +103,46 @@ public class BreakpointOption extends ScrolledComposite implements SelectionList
shell.getDisplay().syncExec(new Runnable() { shell.getDisplay().syncExec(new Runnable() {
@Override @Override
public void run() { public void run() {
String[] btns = { String call = MessageFormatter.Format(msg);
"&Continue", "&Skip", "&Remove" call = call.substring(0, call.indexOf("(")) + msg.getFunction().toString()
}; + call.substring(call.indexOf("("));
int defaultBtn = 0; if (msg.hasData() && msg.getFunction() == Function.glShaderSource)
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)
{ {
Button btn = buttons.get(msg.getFunction()); int index = call.indexOf("string=") + 7;
btn.setSelection(false); String ptr = call.substring(index, call.indexOf(',', index));
SetBreakpoint(msg.getFunction(), false); 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;
} }
}); });
} }
} }

View File

@@ -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);
}

View File

@@ -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
}
}

View File

@@ -98,6 +98,7 @@ public class SampleView extends ViewPart implements Runnable {
*/ */
public static final String ID = "glesv2debuggerclient.views.SampleView"; public static final String ID = "glesv2debuggerclient.views.SampleView";
LayoutComposite layoutComposite;
ListViewer viewer; ListViewer viewer;
BreakpointOption breakpointOption; BreakpointOption breakpointOption;
org.eclipse.swt.widgets.Canvas canvas; org.eclipse.swt.widgets.Canvas canvas;
@@ -203,6 +204,11 @@ public class SampleView extends ViewPart implements Runnable {
*/ */
public SampleView() { public SampleView() {
messageQueue = new MessageQueue(this); 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) { public void CreateView(Composite parent) {
@@ -235,25 +241,7 @@ public class SampleView extends ViewPart implements Runnable {
hookSelectionChanged(); hookSelectionChanged();
contributeToActionBars(); contributeToActionBars();
class LayoutComposite extends Composite { layoutComposite = new LayoutComposite(parent, 0);
public LayoutComposite(Composite parent, int style) {
super(parent, style);
}
@Override
public Control[] getChildren() {
Control[] children = super.getChildren();
ArrayList<Control> controls = new ArrayList<Control>();
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.setLayout(new FillLayout()); layoutComposite.setLayout(new FillLayout());
text = new Text(layoutComposite, SWT.NO_BACKGROUND | SWT.READ_ONLY text = new Text(layoutComposite, SWT.NO_BACKGROUND | SWT.READ_ONLY
@@ -472,6 +460,7 @@ public class SampleView extends ViewPart implements Runnable {
public void run() public void run()
{ {
breakpointOption.setVisible(!breakpointOption.isVisible()); breakpointOption.setVisible(!breakpointOption.isVisible());
layoutComposite.layout(true);
manager.update(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<Control> controls = new ArrayList<Control>();
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);
}
}