Use direct, native order Buffers for OpenGL data.
diff --git a/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java b/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
index 81863a0..3b9ebe9 100644
--- a/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
+++ b/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
@@ -16,6 +16,8 @@
 
 package com.example.android.apis.graphics.spritetext;
 
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
 import java.nio.CharBuffer;
 import java.nio.FloatBuffer;
 
@@ -27,115 +29,112 @@
  */
 class Grid {
 
-	public Grid(int w, int h) {
-		if (w < 0 || w >= 65536) {
-			throw new IllegalArgumentException("w");
-		}
-		if (h < 0 || h >= 65536) {
-			throw new IllegalArgumentException("h");
-		}
-		if (w * h >= 65536) {
-			throw new IllegalArgumentException("w * h >= 65536");
-		}
+    public Grid(int w, int h) {
+        if (w < 0 || w >= 65536) {
+            throw new IllegalArgumentException("w");
+        }
+        if (h < 0 || h >= 65536) {
+            throw new IllegalArgumentException("h");
+        }
+        if (w * h >= 65536) {
+            throw new IllegalArgumentException("w * h >= 65536");
+        }
 
-		mW = w;
-		mH = h;
-		int size = w * h;
-		mVertexArray = new float[size * 3];
-		mVertexBuffer = FloatBuffer.wrap(mVertexArray);
+        mW = w;
+        mH = h;
+        int size = w * h;
+        final int FLOAT_SIZE = 4;
+        final int CHAR_SIZE = 2;
+        mVertexBuffer = ByteBuffer.allocateDirect(FLOAT_SIZE * size * 3)
+            .order(ByteOrder.nativeOrder()).asFloatBuffer();
+        mTexCoordBuffer = ByteBuffer.allocateDirect(FLOAT_SIZE * size * 2)
+            .order(ByteOrder.nativeOrder()).asFloatBuffer();
 
-		mTexCoordArray = new float[size * 2];
-		mTexCoordBuffer = FloatBuffer.wrap(mTexCoordArray);
+        int quadW = mW - 1;
+        int quadH = mH - 1;
+        int quadCount = quadW * quadH;
+        int indexCount = quadCount * 6;
+        mIndexCount = indexCount;
+        mIndexBuffer = ByteBuffer.allocateDirect(CHAR_SIZE * indexCount)
+            .order(ByteOrder.nativeOrder()).asCharBuffer();
 
-		int quadW = mW - 1;
-		int quadH = mH - 1;
-		int quadCount = quadW * quadH;
-		int indexCount = quadCount * 6;
-		mIndexCount = indexCount;
-		char[] indexArray = new char[indexCount];
+        /*
+         * Initialize triangle list mesh.
+         *
+         *     [0]-----[  1] ...
+         *      |    /   |
+         *      |   /    |
+         *      |  /     |
+         *     [w]-----[w+1] ...
+         *      |       |
+         *
+         */
 
-		/*
-		 * Initialize triangle list mesh.
-		 *
-		 *     [0]-----[  1] ...
-		 *      |    /   |
-		 *      |   /    |
-		 *      |  /     |
-		 *     [w]-----[w+1] ...
-		 *      |       |
-		 *
-		 */
+        {
+            int i = 0;
+            for (int y = 0; y < quadH; y++) {
+                for (int x = 0; x < quadW; x++) {
+                    char a = (char) (y * mW + x);
+                    char b = (char) (y * mW + x + 1);
+                    char c = (char) ((y + 1) * mW + x);
+                    char d = (char) ((y + 1) * mW + x + 1);
 
-		{
-			int i = 0;
-			for (int y = 0; y < quadH; y++) {
-				for (int x = 0; x < quadW; x++) {
-					char a = (char) (y * mW + x);
-					char b = (char) (y * mW + x + 1);
-					char c = (char) ((y + 1) * mW + x);
-					char d = (char) ((y + 1) * mW + x + 1);
+                    mIndexBuffer.put(i++, a);
+                    mIndexBuffer.put(i++, b);
+                    mIndexBuffer.put(i++, c);
 
-					indexArray[i++] = a;
-					indexArray[i++] = b;
-					indexArray[i++] = c;
+                    mIndexBuffer.put(i++, b);
+                    mIndexBuffer.put(i++, c);
+                    mIndexBuffer.put(i++, d);
+                }
+            }
+        }
 
-					indexArray[i++] = b;
-					indexArray[i++] = c;
-					indexArray[i++] = d;
-				}
-			}
-		}
+    }
 
-		mIndexBuffer = CharBuffer.wrap(indexArray);
-	}
+    void set(int i, int j, float x, float y, float z, float u, float v) {
+        if (i < 0 || i >= mW) {
+            throw new IllegalArgumentException("i");
+        }
+        if (j < 0 || j >= mH) {
+            throw new IllegalArgumentException("j");
+        }
 
-	void set(int i, int j, float x, float y, float z, float u, float v) {
-		if (i < 0 || i >= mW) {
-			throw new IllegalArgumentException("i");
-		}
-		if (j < 0 || j >= mH) {
-			throw new IllegalArgumentException("j");
-		}
+        int index = mW * j + i;
 
-		int index = mW * j + i;
+        int posIndex = index * 3;
+        mVertexBuffer.put(posIndex, x);
+        mVertexBuffer.put(posIndex + 1, y);
+        mVertexBuffer.put(posIndex + 2, z);
 
-		int posIndex = index * 3;
-		mVertexArray[posIndex] = x;
-		mVertexArray[posIndex + 1] = y;
-		mVertexArray[posIndex + 2] = z;
+        int texIndex = index * 2;
+        mTexCoordBuffer.put(texIndex, u);
+        mTexCoordBuffer.put(texIndex + 1, v);
+    }
 
-		int texIndex = index * 2;
-		mTexCoordArray[texIndex] = u;
-		mTexCoordArray[texIndex + 1] = v;
-	}
+    public void draw(GL10 gl, boolean useTexture) {
+        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
+        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
 
-	public void draw(GL10 gl, boolean useTexture) {
-		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
-		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
+        if (useTexture) {
+            gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
+            gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexCoordBuffer);
+            gl.glEnable(GL10.GL_TEXTURE_2D);
+        } else {
+            gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
+            gl.glDisable(GL10.GL_TEXTURE_2D);
+        }
 
-		if (useTexture) {
-			gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
-			gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexCoordBuffer);
-			gl.glEnable(GL10.GL_TEXTURE_2D);
-		} else {
-			gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
-			gl.glDisable(GL10.GL_TEXTURE_2D);
-		}
-
-		gl.glDrawElements(GL10.GL_TRIANGLES, mIndexCount,
-				GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
+        gl.glDrawElements(GL10.GL_TRIANGLES, mIndexCount,
+                GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
         gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
-	}
+    }
 
-	private FloatBuffer mVertexBuffer;
-	private float[] mVertexArray;
+    private FloatBuffer mVertexBuffer;
+    private FloatBuffer mTexCoordBuffer;
+    private CharBuffer mIndexBuffer;
 
-	private FloatBuffer mTexCoordBuffer;
-	private float[] mTexCoordArray;
-
-	private CharBuffer mIndexBuffer;
-
-	private int mW;
-	private int mH;
-	private int mIndexCount;
+    private int mW;
+    private int mH;
+    private int mIndexCount;
 }