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:
292
tools/glesv2debugger/generate_MessageParser_java.py
Executable file
292
tools/glesv2debugger/generate_MessageParser_java.py
Executable 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("\
|
||||||
|
}""")
|
||||||
@@ -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;
|
||||||
|
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);
|
btn.setSelection(false);
|
||||||
SetBreakpoint(msg.getFunction(), false);
|
SetBreakpoint(msg.getFunction(), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
assert false;
|
messageParserEx.Parse(builder, inputDialog.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user