| ** | 
 | ** Copyright 2006, 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. | 
 | */ | 
 |  | 
 | // This source file is automatically generated | 
 |  | 
 | #include <android_runtime/AndroidRuntime.h> | 
 | #include <utils/misc.h> | 
 |  | 
 | #include <assert.h> | 
 | #include <GLES/gl.h> | 
 |  | 
 | #include <private/opengles/gl_context.h> | 
 |  | 
 | #define _NUM_COMPRESSED_TEXTURE_FORMATS \ | 
 |         (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS) | 
 |  | 
 | static int initialized = 0; | 
 |  | 
 | static jclass nioAccessClass; | 
 | static jclass bufferClass; | 
 | static jclass OOMEClass; | 
 | static jclass UOEClass; | 
 | static jclass IAEClass; | 
 | static jclass AIOOBEClass; | 
 | static jmethodID getBasePointerID; | 
 | static jmethodID getBaseArrayID; | 
 | static jmethodID getBaseArrayOffsetID; | 
 | static jfieldID positionID; | 
 | static jfieldID limitID; | 
 | static jfieldID elementSizeShiftID; | 
 |  | 
 | /* Cache method IDs each time the class is loaded. */ | 
 |  | 
 | void | 
 | nativeClassInitBuffer(JNIEnv *_env) | 
 | { | 
 |     jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); | 
 |     nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); | 
 |  | 
 |     jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); | 
 |     bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); | 
 |  | 
 |     getBasePointerID = _env->GetStaticMethodID(nioAccessClass, | 
 |             "getBasePointer", "(Ljava/nio/Buffer;)J"); | 
 |     getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, | 
 |             "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); | 
 |     getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, | 
 |             "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); | 
 |  | 
 |     positionID = _env->GetFieldID(bufferClass, "position", "I"); | 
 |     limitID = _env->GetFieldID(bufferClass, "limit", "I"); | 
 |     elementSizeShiftID = | 
 |         _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); | 
 | } | 
 |  | 
 |  | 
 | static void | 
 | nativeClassInit(JNIEnv *_env, jclass glImplClass) | 
 | { | 
 |     nativeClassInitBuffer(_env); | 
 |  | 
 |     jclass IAEClassLocal = | 
 |         _env->FindClass("java/lang/IllegalArgumentException"); | 
 |     jclass OOMEClassLocal = | 
 |          _env->FindClass("java/lang/OutOfMemoryError"); | 
 |     jclass UOEClassLocal = | 
 |          _env->FindClass("java/lang/UnsupportedOperationException"); | 
 |     jclass AIOOBEClassLocal = | 
 |          _env->FindClass("java/lang/ArrayIndexOutOfBoundsException"); | 
 |  | 
 |     IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal); | 
 |     OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal); | 
 |     UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal); | 
 |     AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal); | 
 | } | 
 |  | 
 | static void * | 
 | getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining) | 
 | { | 
 |     jint position; | 
 |     jint limit; | 
 |     jint elementSizeShift; | 
 |     jlong pointer; | 
 |     jint offset; | 
 |     void *data; | 
 |  | 
 |     position = _env->GetIntField(buffer, positionID); | 
 |     limit = _env->GetIntField(buffer, limitID); | 
 |     elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); | 
 |     *remaining = (limit - position) << elementSizeShift; | 
 |     pointer = _env->CallStaticLongMethod(nioAccessClass, | 
 |             getBasePointerID, buffer); | 
 |     if (pointer != 0L) { | 
 |         *array = NULL; | 
 |         return (void *) (jint) pointer; | 
 |     } | 
 |      | 
 |     *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, | 
 |             getBaseArrayID, buffer); | 
 |     offset = _env->CallStaticIntMethod(nioAccessClass, | 
 |             getBaseArrayOffsetID, buffer); | 
 |     data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); | 
 |      | 
 |     return (void *) ((char *) data + offset); | 
 | } | 
 |  | 
 |  | 
 | static void | 
 | releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) | 
 | { | 
 |     _env->ReleasePrimitiveArrayCritical(array, data, | 
 | 					   commit ? 0 : JNI_ABORT); | 
 | } | 
 |  | 
 | // -------------------------------------------------------------------------- | 
 |  |