diff --git a/tools/glesv2debugger/.classpath b/tools/glesv2debugger/.classpath
index b9ab6219b..799a9cd32 100755
--- a/tools/glesv2debugger/.classpath
+++ b/tools/glesv2debugger/.classpath
@@ -1,9 +1,10 @@
+
+
-
diff --git a/tools/glesv2debugger/META-INF/MANIFEST.MF b/tools/glesv2debugger/META-INF/MANIFEST.MF
index 8848a93bd..53e5e4538 100644
--- a/tools/glesv2debugger/META-INF/MANIFEST.MF
+++ b/tools/glesv2debugger/META-INF/MANIFEST.MF
@@ -10,4 +10,5 @@ Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: lib/host-libprotobuf-java-2.3.0-lite.jar,
lib/liblzf.jar,
+ lib/sdklib.jar,
.
diff --git a/tools/glesv2debugger/build.properties b/tools/glesv2debugger/build.properties
index 8d519093e..5b94aea25 100644
--- a/tools/glesv2debugger/build.properties
+++ b/tools/glesv2debugger/build.properties
@@ -3,7 +3,8 @@ output.. = bin/
bin.includes = plugin.xml,\
META-INF/,\
.,\
- icons/,\
- contexts.xml,\
+ icons/,\
+ contexts.xml,\
lib/host-libprotobuf-java-2.3.0-lite.jar,\
- lib/liblzf.jar
+ lib/liblzf.jar,\
+ lib/sdklib.jar
diff --git a/tools/glesv2debugger/src/com/android/glesv2debugger/Context.java b/tools/glesv2debugger/src/com/android/glesv2debugger/Context.java
index 54ddc9a10..ff096d782 100644
--- a/tools/glesv2debugger/src/com/android/glesv2debugger/Context.java
+++ b/tools/glesv2debugger/src/com/android/glesv2debugger/Context.java
@@ -17,81 +17,205 @@
package com.android.glesv2debugger;
import com.android.glesv2debugger.DebuggerMessage.Message;
+import com.android.glesv2debugger.DebuggerMessage.Message.Function;
+import com.android.sdklib.util.SparseArray;
+import com.android.sdklib.util.SparseIntArray;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+
+import java.lang.reflect.Field;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
-public class Context {
+public class Context implements Cloneable {
public final int contextId;
- ArrayList shares = new ArrayList(); // includes self
+ public ArrayList shares = new ArrayList(); // self too
public GLServerVertex serverVertex = new GLServerVertex();
public GLServerShader serverShader = new GLServerShader(this);
- public byte[] readPixelRef = new byte[0];
+ public GLServerState serverState = new GLServerState(this);
+
+ byte[] readPixelRef = new byte[0];
+
+ Message processed = null; // return; processed Message
public Context(int contextId) {
this.contextId = contextId;
shares.add(this);
}
- public Message ProcessMessage(Message msg) {
- switch (msg.getFunction()) {
- case glBindBuffer:
- serverVertex.glBindBuffer(msg);
- break;
- case glBufferData:
- serverVertex.glBufferData(msg);
- break;
- case glBufferSubData:
- serverVertex.glBufferSubData(msg);
- break;
- case glDeleteBuffers:
- serverVertex.glDeleteBuffers(msg);
- break;
- case glDrawArrays:
- if (msg.hasArg7())
- msg = serverVertex.glDrawArrays(msg);
- break;
- case glDrawElements:
- if (msg.hasArg7())
- msg = serverVertex.glDrawElements(msg);
- break;
- case glDisableVertexAttribArray:
- serverVertex.glDisableVertexAttribArray(msg);
- break;
- case glEnableVertexAttribArray:
- serverVertex.glEnableVertexAttribArray(msg);
- break;
- case glGenBuffers:
- serverVertex.glGenBuffers(msg);
- break;
- case glVertexAttribPointer:
- serverVertex.glVertexAttribPointer(msg);
- break;
- case glVertexAttrib1f:
- serverVertex.glVertexAttrib1f(msg);
- break;
- case glVertexAttrib1fv:
- serverVertex.glVertexAttrib1fv(msg);
- break;
- case glVertexAttrib2f:
- serverVertex.glVertexAttrib2f(msg);
- break;
- case glVertexAttrib2fv:
- serverVertex.glVertexAttrib2fv(msg);
- break;
- case glVertexAttrib3f:
- serverVertex.glVertexAttrib3f(msg);
- break;
- case glVertexAttrib3fv:
- serverVertex.glVertexAttrib3fv(msg);
- break;
- case glVertexAttrib4f:
- serverVertex.glVertexAttrib4f(msg);
- break;
- case glVertexAttrib4fv:
- serverVertex.glVertexAttrib4fv(msg);
- break;
+ // returns instance TODO: return new instance if changed
+ public Context ProcessMessage(Message msg) {
+ GLServerVertex newVertex = serverVertex.Process(msg);
+ if (newVertex != null) {
+ processed = newVertex.processed;
+ assert newVertex == serverVertex;
+ return this;
}
- serverShader.ProcessMessage(msg);
- return msg;
+
+ GLServerShader newShader = serverShader.ProcessMessage(msg);
+ if (newShader != null) {
+ assert newShader == serverShader;
+ return this;
+ }
+
+ GLServerState newState = serverState.ProcessMessage(msg);
+ if (newState != null) {
+ if (newState == serverState)
+ return this;
+ Context newContext = null;
+ try {
+ newContext = (Context) clone();
+ } catch (CloneNotSupportedException e) {
+ assert false;
+ }
+ newContext.serverState = newState;
+ newContext.serverShader.context = newContext;
+ return newContext;
+ }
+
+ return this;
+ }
+}
+
+class ContextViewProvider extends LabelProvider implements ITreeContentProvider {
+ Context context;
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public String getText(Object obj) {
+ if (obj == null)
+ return "null";
+ if (obj instanceof Entry) {
+ Entry entry = (Entry) obj;
+ if (entry != null)
+ return entry.name + " = " + entry.obj;
+ }
+ return obj.toString();
+ }
+
+ @Override
+ public Image getImage(Object obj) {
+ return null;
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ context = (Context) newInput;
+ }
+
+ class Entry {
+ String name;
+ Object obj;
+
+ Entry(String name, Object obj) {
+ this.name = name;
+ this.obj = obj;
+ }
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ if (inputElement != context)
+ return null;
+ return getChildren(new Entry("Context", inputElement));
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if (!(parentElement instanceof Entry))
+ return null;
+ Entry entry = (Entry) parentElement;
+ ArrayList