aboutsummaryrefslogtreecommitdiffstats
path: root/eclipse
diff options
context:
space:
mode:
authorSiva Velusamy <vsiva@google.com>2012-02-29 10:45:58 -0800
committerSiva Velusamy <vsiva@google.com>2012-02-29 14:42:54 -0800
commit52ecd2f08ee936df425e4c53f9bd8310061f3f57 (patch)
treec39d24120ad2f04fe0a4342e0d2d2fd5e8b6126f /eclipse
parentdd3f3c4fa0dc0bd5033f891ab005925343c146b7 (diff)
downloadsdk-52ecd2f08ee936df425e4c53f9bd8310061f3f57.zip
sdk-52ecd2f08ee936df425e4c53f9bd8310061f3f57.tar.gz
sdk-52ecd2f08ee936df425e4c53f9bd8310061f3f57.tar.bz2
gltrace: Add support for glVertexAttribPointerData() calls.
This patch adds initial support for glVertexAttribPointerData() calls. A detail provider for this call displays the vertex attributes that were actually sent at the time of glVertexAttribPointer() call. Change-Id: I79fe961ce1dcc15c4601ec213d09625986775ae5
Diffstat (limited to 'eclipse')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/entries.in1
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLProtoBuf.java4
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java111
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/TraceFileParserTask.java12
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java9
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/DetailsPage.java3
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java95
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VertexAttribPointerDataDetailProvider.java72
8 files changed, 213 insertions, 94 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/entries.in b/eclipse/plugins/com.android.ide.eclipse.gldebugger/entries.in
index ffa1ab7..763254d 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/entries.in
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/entries.in
@@ -439,6 +439,7 @@ void, glVertexAttrib3fv, GLuint indx, const GLfloat* values
void, glVertexAttrib4f, GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w
void, glVertexAttrib4fv, GLuint indx, const GLfloat* values
void, glVertexAttribPointer, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr
+void, glVertexAttribPointerData, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr, GLuint minIndex, GLuint maxIndex
void, glVertexPointer, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer
void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height
void, glWeightPointerOES, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLProtoBuf.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLProtoBuf.java
index 10ce07e..86018f8 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLProtoBuf.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLProtoBuf.java
@@ -511,7 +511,7 @@ public final class GLProtoBuf {
eglGetSystemTimeFrequencyNV(481, 2044),
eglGetSystemTimeNV(482, 2045),
invalid(483, 3000),
- frameBufferContents(484, 3001),
+ glVertexAttribPointerData(484, 3001),
;
public static final Function glGetnUniformivEXT = glGetnUniformfvEXT;
@@ -1004,7 +1004,7 @@ public final class GLProtoBuf {
case 2044: return eglGetSystemTimeFrequencyNV;
case 2045: return eglGetSystemTimeNV;
case 3000: return invalid;
- case 3001: return frameBufferContents;
+ case 3001: return glVertexAttribPointerData;
default: return null;
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java
new file mode 100644
index 0000000..ae6f3a0
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.ide.eclipse.gltrace;
+
+import com.android.ide.eclipse.gldebugger.GLEnum;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.ShortBuffer;
+
+public class GLUtils {
+ public static String formatData(byte[] data, GLEnum format) {
+ switch (format) {
+ case GL_BYTE:
+ return formatBytes(data, false);
+ case GL_UNSIGNED_BYTE:
+ return formatBytes(data, true);
+ case GL_SHORT:
+ return formatShorts(data, false);
+ case GL_UNSIGNED_SHORT:
+ return formatShorts(data, true);
+ case GL_FIXED:
+ return formatInts(data);
+ case GL_FLOAT:
+ return formatFloats(data);
+ default:
+ return ""; //$NON-NLS-1$
+ }
+ }
+
+ private static String formatFloats(byte[] data) {
+ FloatBuffer bb = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer();
+
+ StringBuilder sb = new StringBuilder(bb.capacity() * 3);
+
+ while (bb.remaining() > 0) {
+ sb.append(String.format("%.4f", bb.get()));
+ sb.append(',');
+ sb.append('\n');
+ }
+
+ return sb.toString();
+ }
+
+ private static String formatInts(byte[] data) {
+ IntBuffer bb = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer();
+
+ StringBuilder sb = new StringBuilder(bb.capacity() * 3);
+
+ while (bb.remaining() > 0) {
+ sb.append(bb.get());
+ sb.append(',');
+ sb.append('\n');
+ }
+
+ return sb.toString();
+ }
+
+ private static String formatShorts(byte[] data, boolean unsigned) {
+ ShortBuffer bb = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
+
+ StringBuilder sb = new StringBuilder(bb.capacity() * 3);
+
+ while (bb.remaining() > 0) {
+ if (unsigned) {
+ sb.append(bb.get() & 0xffff);
+ } else {
+ sb.append(bb.get());
+ }
+ sb.append(',');
+ sb.append('\n');
+ }
+
+ return sb.toString();
+ }
+
+ private static String formatBytes(byte[] data, boolean unsigned) {
+ ByteBuffer bb = ByteBuffer.wrap(data);
+
+ StringBuilder sb = new StringBuilder(bb.capacity() * 3);
+
+ while (bb.remaining() > 0) {
+ if (unsigned) {
+ sb.append(bb.get() & 0xff);
+ } else {
+ sb.append(bb.get());
+ }
+
+ sb.append(',');
+ sb.append('\n');
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/TraceFileParserTask.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/TraceFileParserTask.java
index af0501b..083cba5 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/TraceFileParserTask.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/TraceFileParserTask.java
@@ -16,6 +16,7 @@
package com.android.ide.eclipse.gltrace;
+import com.android.ide.eclipse.gldebugger.GLEnum;
import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage;
import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Function;
import com.android.ide.eclipse.gltrace.format.GLAPISpec;
@@ -124,6 +125,17 @@ public class TraceFileParserTask implements IRunnableWithProgress {
c.addProperty(GLCall.PROPERTY_MARKERNAME,
msg.getArgs(1).getCharValue(0).toStringUtf8());
break;
+ case glVertexAttribPointerData:
+ // void glVertexAttribPointerData(GLuint indx, GLint size, GLenum type,
+ // GLboolean normalized, GLsizei stride, const GLvoid* ptr,
+ // int minIndex, int maxIndex)
+ c.addProperty(GLCall.PROPERTY_VERTEX_ATTRIB_POINTER_SIZE,
+ Integer.valueOf(msg.getArgs(1).getIntValue(0)));
+ c.addProperty(GLCall.PROPERTY_VERTEX_ATTRIB_POINTER_TYPE,
+ GLEnum.valueOf(msg.getArgs(2).getIntValue(0)));
+ c.addProperty(GLCall.PROPERTY_VERTEX_ATTRIB_POINTER_DATA,
+ msg.getArgs(5).getRawBytes(0).toByteArray());
+ break;
default:
break;
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
index 5d11a84..d049c9e 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/model/GLCall.java
@@ -38,6 +38,15 @@ public class GLCall {
/** Marker name provided by a {@link Function#glPushGroupMarkerEXT} call. */
public static final int PROPERTY_MARKERNAME = 0;
+ /** Size argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_SIZE = 1;
+
+ /** Type argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_TYPE = 2;
+
+ /** Data argument in a {@link Function#glVertexAttribPointerData} call. */
+ public static final int PROPERTY_VERTEX_ATTRIB_POINTER_DATA = 3;
+
/** Index of this call in the trace. */
private int mIndex;
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/DetailsPage.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/DetailsPage.java
index 8141feb..10e2c40 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/DetailsPage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/DetailsPage.java
@@ -54,7 +54,8 @@ public class DetailsPage extends Page implements ISelectionListener {
new ShaderUniformDetailsProvider(),
new TextureImageDetailsProvider(),
new VboDetailProvider(),
- new GlDrawCallDetailProvider());
+ new GlDrawCallDetailProvider(),
+ new VertexAttribPointerDataDetailProvider());
public DetailsPage(GLTrace trace) {
mTrace = trace;
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
index 273ea20..d8a6bc9 100644
--- a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VboDetailProvider.java
@@ -16,6 +16,8 @@
package com.android.ide.eclipse.gltrace.views.detail;
+import com.android.ide.eclipse.gldebugger.GLEnum;
+import com.android.ide.eclipse.gltrace.GLUtils;
import com.android.ide.eclipse.gltrace.state.GLCompositeProperty;
import com.android.ide.eclipse.gltrace.state.GLStateType;
import com.android.ide.eclipse.gltrace.state.IGLProperty;
@@ -32,10 +34,6 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import java.nio.ByteBuffer;
-import java.nio.FloatBuffer;
-import java.nio.IntBuffer;
-import java.nio.ShortBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -156,7 +154,8 @@ public class VboDetailProvider implements IStateDetailProvider {
private void updateContents() {
if (mBufferData != null) {
- mTextControl.setText(formatData(mBufferData));
+ mTextControl.setText(GLUtils.formatData(mBufferData,
+ GLEnum.valueOf(mDisplayFormatCombo.getText())));
mTextControl.setEnabled(true);
mDisplayFormatCombo.setEnabled(true);
} else {
@@ -166,92 +165,6 @@ public class VboDetailProvider implements IStateDetailProvider {
}
}
- private String formatData(byte[] data) {
- DisplayFormat format = DisplayFormat.valueOf(mDisplayFormatCombo.getText());
-
- switch (format) {
- case GL_BYTE:
- return formatBytes(data, false);
- case GL_UNSIGNED_BYTE:
- return formatBytes(data, true);
- case GL_SHORT:
- return formatShorts(data, false);
- case GL_UNSIGNED_SHORT:
- return formatShorts(data, true);
- case GL_FIXED:
- return formatInts(data);
- case GL_FLOAT:
- return formatFloats(data);
- default:
- return ""; //$NON-NLS-1$
- }
- }
-
- private String formatFloats(byte[] data) {
- FloatBuffer bb = ByteBuffer.wrap(data).asFloatBuffer();
-
- StringBuilder sb = new StringBuilder(bb.capacity() * 3);
-
- while (bb.remaining() > 0) {
- sb.append(String.format("%.4f", bb.get()));
- sb.append(',');
- sb.append('\n');
- }
-
- return sb.toString();
- }
-
- private String formatInts(byte[] data) {
- IntBuffer bb = ByteBuffer.wrap(data).asIntBuffer();
-
- StringBuilder sb = new StringBuilder(bb.capacity() * 3);
-
- while (bb.remaining() > 0) {
- sb.append(bb.get());
- sb.append(',');
- sb.append('\n');
- }
-
- return sb.toString();
- }
-
- private String formatShorts(byte[] data, boolean unsigned) {
- ShortBuffer bb = ByteBuffer.wrap(data).asShortBuffer();
-
- StringBuilder sb = new StringBuilder(bb.capacity() * 3);
-
- while (bb.remaining() > 0) {
- if (unsigned) {
- sb.append(bb.get() & 0xffff);
- } else {
- sb.append(bb.get());
- }
- sb.append(',');
- sb.append('\n');
- }
-
- return sb.toString();
- }
-
- private String formatBytes(byte[] data, boolean unsigned) {
- ByteBuffer bb = ByteBuffer.wrap(data);
-
- StringBuilder sb = new StringBuilder(bb.capacity() * 3);
-
- while (bb.remaining() > 0) {
- if (unsigned) {
- sb.append(bb.get() & 0xff);
- } else {
- sb.append(bb.get());
- }
-
- sb.append(',');
- sb.append('\n');
- }
-
- return sb.toString();
- }
-
@Override
public List<IContributionItem> getToolBarItems() {
return Collections.emptyList();
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VertexAttribPointerDataDetailProvider.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VertexAttribPointerDataDetailProvider.java
new file mode 100644
index 0000000..83f412b
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/views/detail/VertexAttribPointerDataDetailProvider.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+package com.android.ide.eclipse.gltrace.views.detail;
+
+import com.android.ide.eclipse.gldebugger.GLEnum;
+import com.android.ide.eclipse.gltrace.GLUtils;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Function;
+import com.android.ide.eclipse.gltrace.model.GLCall;
+import com.android.ide.eclipse.gltrace.model.GLTrace;
+import com.google.protobuf.ByteString;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Text;
+
+import java.util.Collections;
+import java.util.List;
+
+public class VertexAttribPointerDataDetailProvider implements ICallDetailProvider {
+ private Text mText;
+
+ @Override
+ public boolean isApplicable(GLCall call) {
+ return call.getFunction() == Function.glVertexAttribPointerData;
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ mText = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.MULTI
+ | SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
+ }
+
+ @Override
+ public void disposeControl() {
+ }
+
+ @Override
+ public Control getControl() {
+ return mText;
+ }
+
+ @Override
+ public void updateControl(GLTrace trace, GLCall call) {
+ // void glVertexAttribPointerData(GLuint indx, GLint size, GLenum type, GLboolean norm,
+ // GLsizei stride, const GLvoid* ptr, int minIndex, int maxIndex)
+ GLEnum type = (GLEnum) call.getProperty(GLCall.PROPERTY_VERTEX_ATTRIB_POINTER_TYPE);
+ byte[] data = (byte[]) call.getProperty(GLCall.PROPERTY_VERTEX_ATTRIB_POINTER_DATA);
+
+ mText.setText(GLUtils.formatData(data, type));
+ }
+
+ @Override
+ public List<IContributionItem> getToolBarItems() {
+ return Collections.emptyList();
+ }
+}