aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java110
1 files changed, 110 insertions, 0 deletions
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 000000000..9e82768d5
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/GLUtils.java
@@ -0,0 +1,110 @@
+/*
+ * 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 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();
+ }
+}