Fix bug 1856713 gl Pointer functions should use Buffer position

JSR239 and android.opengl gl Pointer functions (glColorPointer, etc.)
now respect the current setting of the Buffer position.

This fixes a regression introduced when we started requiring the
Buffers passed to the Pointer functions to be direct Buffers.
diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp
index 482d8eb..2685d75 100644
--- a/core/jni/android_opengl_GLES10.cpp
+++ b/core/jni/android_opengl_GLES10.cpp
@@ -133,6 +133,19 @@
 					   commit ? 0 : JNI_ABORT);
 }
 
+static void *
+getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
+    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
+    if (buf) {
+        jint position = _env->GetIntField(buffer, positionID);
+        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+        buf += position << elementSizeShift;
+    } else {
+        _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
+    }
+    return (void*) buf;
+}
+
 static int
 getNumCompressedTextureFormats() {
     int numCompressedTextureFormats = 0;
@@ -305,9 +318,8 @@
     GLvoid *pointer = (GLvoid *) 0;
 
     if (pointer_buf) {
-        pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf);
+        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
         if ( ! pointer ) {
-            _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
             return;
         }
     }
@@ -2779,9 +2791,8 @@
     GLvoid *pointer = (GLvoid *) 0;
 
     if (pointer_buf) {
-        pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf);
+        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
         if ( ! pointer ) {
-            _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
             return;
         }
     }
@@ -3034,9 +3045,8 @@
     GLvoid *pointer = (GLvoid *) 0;
 
     if (pointer_buf) {
-        pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf);
+        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
         if ( ! pointer ) {
-            _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
             return;
         }
     }
@@ -3392,9 +3402,8 @@
     GLvoid *pointer = (GLvoid *) 0;
 
     if (pointer_buf) {
-        pointer = (GLvoid *) _env->GetDirectBufferAddress(pointer_buf);
+        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
         if ( ! pointer ) {
-            _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
             return;
         }
     }